[opaque pointer type] Add textual IR support for explicit type parameter to getelemen...
[oota-llvm.git] / test / Transforms / InstCombine / load-cmp.ll
index 40673a72d5193330119c35a520abcfa50ee5ab4d..8b4c63a4b442f0f84692ebce57543210a969f1b0 100644 (file)
@@ -21,7 +21,7 @@
 
 
 define i1 @test1(i32 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
@@ -35,12 +35,12 @@ define i1 @test1(i32 %X) {
 }
 
 define i1 @test1_noinbounds(i32 %X) {
-  %P = getelementptr [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
 ; NODL-LABEL: @test1_noinbounds(
-; NODL-NEXT: %P = getelementptr [10 x i16]* @G16, i32 0, i32 %X
+; NODL-NEXT: %P = getelementptr [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
 
 ; P32-LABEL: @test1_noinbounds(
 ; P32-NEXT: %R = icmp eq i32 %X, 9
@@ -48,12 +48,12 @@ define i1 @test1_noinbounds(i32 %X) {
 }
 
 define i1 @test1_noinbounds_i64(i64 %X) {
-  %P = getelementptr [10 x i16]* @G16, i64 0, i64 %X
+  %P = getelementptr [10 x i16], [10 x i16]* @G16, i64 0, i64 %X
   %Q = load i16* %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
 ; NODL-LABEL: @test1_noinbounds_i64(
-; NODL-NEXT: %P = getelementptr [10 x i16]* @G16, i64 0, i64 %X
+; NODL-NEXT: %P = getelementptr [10 x i16], [10 x i16]* @G16, i64 0, i64 %X
 
 ; P32-LABEL: @test1_noinbounds_i64(
 ; P32: %R = icmp eq i32 %1, 9
@@ -61,7 +61,7 @@ define i1 @test1_noinbounds_i64(i64 %X) {
 }
 
 define i1 @test1_noinbounds_as1(i32 %x) {
-  %p = getelementptr [10 x i16] addrspace(1)* @G16_as1, i16 0, i32 %x
+  %p = getelementptr [10 x i16], [10 x i16] addrspace(1)* @G16_as1, i16 0, i32 %x
   %q = load i16 addrspace(1)* %p
   %r = icmp eq i16 %q, 0
   ret i1 %r
@@ -73,7 +73,7 @@ define i1 @test1_noinbounds_as1(i32 %x) {
 }
 
 define i1 @test2(i32 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = icmp slt i16 %Q, 85
   ret i1 %R
@@ -83,7 +83,7 @@ define i1 @test2(i32 %X) {
 }
 
 define i1 @test3(i32 %X) {
-  %P = getelementptr inbounds [6 x double]* @GD, i32 0, i32 %X
+  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
   %Q = load double* %P
   %R = fcmp oeq double %Q, 1.0
   ret i1 %R
@@ -98,7 +98,7 @@ define i1 @test3(i32 %X) {
 }
 
 define i1 @test4(i32 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = icmp sle i16 %Q, 73
   ret i1 %R
@@ -116,7 +116,7 @@ define i1 @test4(i32 %X) {
 }
 
 define i1 @test4_i16(i16 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i16 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i16 %X
   %Q = load i16* %P
   %R = icmp sle i16 %Q, 73
   ret i1 %R
@@ -136,7 +136,7 @@ define i1 @test4_i16(i16 %X) {
 }
 
 define i1 @test5(i32 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = icmp eq i16 %Q, 69
   ret i1 %R
@@ -154,7 +154,7 @@ define i1 @test5(i32 %X) {
 }
 
 define i1 @test6(i32 %X) {
-  %P = getelementptr inbounds [6 x double]* @GD, i32 0, i32 %X
+  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
   %Q = load double* %P
   %R = fcmp ogt double %Q, 0.0
   ret i1 %R
@@ -170,7 +170,7 @@ define i1 @test6(i32 %X) {
 }
 
 define i1 @test7(i32 %X) {
-  %P = getelementptr inbounds [6 x double]* @GD, i32 0, i32 %X
+  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
   %Q = load double* %P
   %R = fcmp olt double %Q, 0.0
   ret i1 %R
@@ -186,7 +186,7 @@ define i1 @test7(i32 %X) {
 }
 
 define i1 @test8(i32 %X) {
-  %P = getelementptr inbounds [10 x i16]* @G16, i32 0, i32 %X
+  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
   %Q = load i16* %P
   %R = and i16 %Q, 3
   %S = icmp eq i16 %R, 0
@@ -210,7 +210,7 @@ define i1 @test8(i32 %X) {
 ]
 
 define i1 @test9(i32 %X) {
-  %P = getelementptr inbounds [4 x { i32, i32 } ]* @GA, i32 0, i32 %X, i32 1
+  %P = getelementptr inbounds [4 x { i32, i32 } ], [4 x { i32, i32 } ]* @GA, i32 0, i32 %X, i32 1
   %Q = load i32* %P
   %R = icmp eq i32 %Q, 1
   ret i1 %R
@@ -227,11 +227,11 @@ define i1 @test9(i32 %X) {
 
 define i1 @test10_struct(i32 %x) {
 ; NODL-LABEL: @test10_struct(
-; NODL: getelementptr inbounds %Foo* @GS, i32 %x, i32 0
+; NODL: getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0
 
 ; P32-LABEL: @test10_struct(
 ; P32: ret i1 false
-  %p = getelementptr inbounds %Foo* @GS, i32 %x, i32 0
+  %p = getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -239,11 +239,11 @@ define i1 @test10_struct(i32 %x) {
 
 define i1 @test10_struct_noinbounds(i32 %x) {
 ; NODL-LABEL: @test10_struct_noinbounds(
-; NODL: getelementptr %Foo* @GS, i32 %x, i32 0
+; NODL: getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
 
 ; P32-LABEL: @test10_struct_noinbounds(
-; P32: getelementptr %Foo* @GS, i32 %x, i32 0
-  %p = getelementptr %Foo* @GS, i32 %x, i32 0
+; P32: getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
+  %p = getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -253,11 +253,11 @@ define i1 @test10_struct_noinbounds(i32 %x) {
 ; Index < ptr size
 define i1 @test10_struct_i16(i16 %x){
 ; NODL-LABEL: @test10_struct_i16(
-; NODL: getelementptr inbounds %Foo* @GS, i16 %x, i32 0
+; NODL: getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0
 
 ; P32-LABEL: @test10_struct_i16(
 ; P32: ret i1 false
-  %p = getelementptr inbounds %Foo* @GS, i16 %x, i32 0
+  %p = getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0
   %q = load i32* %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
@@ -267,11 +267,11 @@ define i1 @test10_struct_i16(i16 %x){
 ; Index > ptr size
 define i1 @test10_struct_i64(i64 %x){
 ; NODL-LABEL: @test10_struct_i64(
-; NODL: getelementptr inbounds %Foo* @GS, i64 %x, i32 0
+; NODL: getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0
 
 ; P32-LABEL: @test10_struct_i64(
 ; P32: ret i1 false
-  %p = getelementptr inbounds %Foo* @GS, i64 %x, i32 0
+  %p = getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0
   %q = load i32* %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
@@ -279,12 +279,12 @@ define i1 @test10_struct_i64(i64 %x){
 
 define i1 @test10_struct_noinbounds_i16(i16 %x) {
 ; NODL-LABEL: @test10_struct_noinbounds_i16(
-; NODL: getelementptr %Foo* @GS, i16 %x, i32 0
+; NODL: getelementptr %Foo, %Foo* @GS, i16 %x, i32 0
 
 ; P32-LABEL: @test10_struct_noinbounds_i16(
 ; P32: %1 = sext i16 %x to i32
-; P32: getelementptr %Foo* @GS, i32 %1, i32 0
-  %p = getelementptr %Foo* @GS, i16 %x, i32 0
+; P32: getelementptr %Foo, %Foo* @GS, i32 %1, i32 0
+  %p = getelementptr %Foo, %Foo* @GS, i16 %x, i32 0
   %q = load i32* %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
@@ -298,7 +298,7 @@ define i1 @test10_struct_arr(i32 %x) {
 ; P32-LABEL: @test10_struct_arr(
 ; P32-NEXT: %r = icmp ne i32 %x, 1
 ; P32-NEXT: ret i1 %r
-  %p = getelementptr inbounds [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
+  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -306,11 +306,11 @@ define i1 @test10_struct_arr(i32 %x) {
 
 define i1 @test10_struct_arr_noinbounds(i32 %x) {
 ; NODL-LABEL: @test10_struct_arr_noinbounds(
-; NODL-NEXT  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
+; NODL-NEXT  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
 
 ; P32-LABEL: @test10_struct_arr_noinbounds(
-; P32-NEXT  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
-  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
+; P32-NEXT  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
+  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -324,7 +324,7 @@ define i1 @test10_struct_arr_i16(i16 %x) {
 ; P32-LABEL: @test10_struct_arr_i16(
 ; P32-NEXT: %r = icmp ne i16 %x, 1
 ; P32-NEXT: ret i1 %r
-  %p = getelementptr inbounds [4 x %Foo]* @GStructArr, i16 0, i16 %x, i32 2
+  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i16 0, i16 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -339,7 +339,7 @@ define i1 @test10_struct_arr_i64(i64 %x) {
 ; P32-NEXT: trunc i64 %x to i32
 ; P32-NEXT: %r = icmp ne i32 %1, 1
 ; P32-NEXT: ret i1 %r
-  %p = getelementptr inbounds [4 x %Foo]* @GStructArr, i64 0, i64 %x, i32 2
+  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i64 0, i64 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -347,11 +347,11 @@ define i1 @test10_struct_arr_i64(i64 %x) {
 
 define i1 @test10_struct_arr_noinbounds_i16(i16 %x) {
 ; NODL-LABEL: @test10_struct_arr_noinbounds_i16(
-; NODL-NEXT:  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
+; NODL-NEXT:  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
 
 ; P32-LABEL: @test10_struct_arr_noinbounds_i16(
 ; P32-NEXT: %r = icmp ne i16 %x, 1
-  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
+  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
@@ -360,12 +360,12 @@ define i1 @test10_struct_arr_noinbounds_i16(i16 %x) {
 define i1 @test10_struct_arr_noinbounds_i64(i64 %x) {
 ; FIXME: Should be no trunc?
 ; NODL-LABEL: @test10_struct_arr_noinbounds_i64(
-; NODL-NEXT:  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
+; NODL-NEXT:  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
 
 ; P32-LABEL: @test10_struct_arr_noinbounds_i64(
 ; P32: %r = icmp ne i32 %1, 1
 ; P32-NEXT: ret i1 %r
-  %p = getelementptr [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
+  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
   %q = load i32* %p
   %r = icmp eq i32 %q, 9
   ret i1 %r