[opaque pointer type] Add textual IR support for explicit type parameter to getelemen...
[oota-llvm.git] / test / Transforms / InstCombine / memcmp-1.ll
index 862fd3a85abc8ea18f474c2563c66985964062e3..5fcd603fb792c138039801f53fc5b3b9d49b97c6 100644 (file)
@@ -13,7 +13,7 @@ declare i32 @memcmp(i8*, i8*, i32)
 ; Check memcmp(mem, mem, size) -> 0.
 
 define i32 @test_simplify1(i8* %mem, i32 %size) {
-; CHECK: @test_simplify1
+; CHECK-LABEL: @test_simplify1(
   %ret = call i32 @memcmp(i8* %mem, i8* %mem, i32 %size)
   ret i32 %ret
 ; CHECK: ret i32 0
@@ -22,7 +22,7 @@ define i32 @test_simplify1(i8* %mem, i32 %size) {
 ; Check memcmp(mem1, mem2, 0) -> 0.
 
 define i32 @test_simplify2(i8* %mem1, i8* %mem2) {
-; CHECK: @test_simplify2
+; CHECK-LABEL: @test_simplify2(
   %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 0)
   ret i32 %ret
 ; CHECK: ret i32 0
@@ -31,13 +31,13 @@ define i32 @test_simplify2(i8* %mem1, i8* %mem2) {
 ;; Check memcmp(mem1, mem2, 1) -> *(unsigned char*)mem1 - *(unsigned char*)mem2.
 
 define i32 @test_simplify3(i8* %mem1, i8* %mem2) {
-; CHECK: @test_simplify3
+; CHECK-LABEL: @test_simplify3(
   %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 1)
 ; CHECK: [[LOAD1:%[a-z]+]] = load i8* %mem1, align 1
 ; CHECK: [[ZEXT1:%[a-z]+]] = zext i8 [[LOAD1]] to i32
 ; CHECK: [[LOAD2:%[a-z]+]] = load i8* %mem2, align 1
 ; CHECK: [[ZEXT2:%[a-z]+]] = zext i8 [[LOAD2]] to i32
-; CHECK: [[RET:%[a-z]+]] = sub i32 [[ZEXT1]], [[ZEXT2]]
+; CHECK: [[RET:%[a-z]+]] = sub nsw i32 [[ZEXT1]], [[ZEXT2]]
   ret i32 %ret
 ; CHECK: ret i32 [[RET]]
 }
@@ -45,19 +45,28 @@ define i32 @test_simplify3(i8* %mem1, i8* %mem2) {
 ; Check memcmp(mem1, mem2, size) -> cnst, where all arguments are constants.
 
 define i32 @test_simplify4() {
-; CHECK: @test_simplify4
-  %mem1 = getelementptr [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [8 x i8]* @hello_u, i32 0, i32 0
+; CHECK-LABEL: @test_simplify4(
+  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
+  %mem2 = getelementptr [8 x i8], [8 x i8]* @hello_u, i32 0, i32 0
   %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
   ret i32 %ret
 ; CHECK: ret i32 0
 }
 
 define i32 @test_simplify5() {
-; CHECK: @test_simplify5
-  %mem1 = getelementptr [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [4 x i8]* @foo, i32 0, i32 0
+; CHECK-LABEL: @test_simplify5(
+  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
+  %mem2 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
   %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
   ret i32 %ret
-; CHECK: ret i32 2
+; CHECK: ret i32 1
+}
+
+define i32 @test_simplify6() {
+; CHECK-LABEL: @test_simplify6(
+  %mem1 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
+  %mem2 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
+  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
+  ret i32 %ret
+; CHECK: ret i32 -1
 }