[LoopVectorize] Teach Loop Vectorizor about interleaved memory accesses.
[oota-llvm.git] / test / Transforms / DeadStoreElimination / PartialStore.ll
index 7ac1e0844ed4260121baf22091f27364f29862d2..d85b4de0ab983d0bf2c77acd68a435092705d79c 100644 (file)
@@ -8,13 +8,13 @@ define void @test1(i32 *%V) {
         store i8 0, i8* %V2
         store i32 1234567, i32* %V
         ret void
-; CHECK: @test1
+; CHECK-LABEL: @test1(
 ; CHECK-NEXT: store i32 1234567
 }
 
 ; Note that we could do better by merging the two stores into one.
 define void @test2(i32* %P) {
-; CHECK: @test2
+; CHECK-LABEL: @test2(
   store i32 0, i32* %P
 ; CHECK: store i32
   %Q = bitcast i32* %P to i16*
@@ -25,13 +25,13 @@ define void @test2(i32* %P) {
 
 
 define i32 @test3(double %__x) {
-; CHECK: @test3
+; CHECK-LABEL: @test3(
 ; CHECK: store double
   %__u = alloca { [3 x i32] }
   %tmp.1 = bitcast { [3 x i32] }* %__u to double*
   store double %__x, double* %tmp.1
-  %tmp.4 = getelementptr { [3 x i32] }* %__u, i32 0, i32 0, i32 1
-  %tmp.5 = load i32* %tmp.4
+  %tmp.4 = getelementptr { [3 x i32] }, { [3 x i32] }* %__u, i32 0, i32 0, i32 1
+  %tmp.5 = load i32, i32* %tmp.4
   %tmp.6 = icmp slt i32 %tmp.5, 0
   %tmp.7 = zext i1 %tmp.6 to i32
   ret i32 %tmp.7
@@ -39,15 +39,15 @@ define i32 @test3(double %__x) {
 
 ; PR6043
 define void @test4(i8* %P) {
-; CHECK: @test4
+; CHECK-LABEL: @test4(
 ; CHECK-NEXT: bitcast
 ; CHECK-NEXT: store double
 
   store i8 19, i8* %P  ;; dead
-  %A = getelementptr i8* %P, i32 3
-  
+  %A = getelementptr i8, i8* %P, i32 3
+
   store i8 42, i8* %A  ;; dead
-  
+
   %Q = bitcast i8* %P to double*
   store double 0.0, double* %Q
   ret void
@@ -58,13 +58,29 @@ declare void @test5a(i32*)
 define void @test5(i32 %i) nounwind ssp {
   %A = alloca i32
   %B = bitcast i32* %A to i8*
-  %C = getelementptr i8* %B, i32 %i
+  %C = getelementptr i8, i8* %B, i32 %i
   store i8 10, i8* %C        ;; Dead store to variable index.
   store i32 20, i32* %A
-  
+
+  call void @test5a(i32* %A)
+  ret void
+; CHECK-LABEL: @test5(
+; CHECK-NEXT: alloca
+; CHECK-NEXT: store i32 20
+; CHECK-NEXT: call void @test5a
+}
+
+declare void @test5a_as1(i32*)
+define void @test5_addrspacecast(i32 %i) nounwind ssp {
+  %A = alloca i32
+  %B = addrspacecast i32* %A to i8 addrspace(1)*
+  %C = getelementptr i8, i8 addrspace(1)* %B, i32 %i
+  store i8 10, i8 addrspace(1)* %C        ;; Dead store to variable index.
+  store i32 20, i32* %A
+
   call void @test5a(i32* %A)
   ret void
-; CHECK: @test5(
+; CHECK-LABEL: @test5_addrspacecast(
 ; CHECK-NEXT: alloca
 ; CHECK-NEXT: store i32 20
 ; CHECK-NEXT: call void @test5a