diff options
Diffstat (limited to 'llvm/test/Transforms/InstCombine')
| -rw-r--r-- | llvm/test/Transforms/InstCombine/store.ll | 34 | 
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/store.ll b/llvm/test/Transforms/InstCombine/store.ll index 64460d7a6d6..164ba763268 100644 --- a/llvm/test/Transforms/InstCombine/store.ll +++ b/llvm/test/Transforms/InstCombine/store.ll @@ -83,3 +83,37 @@ Cont:  ; CHECK-NEXT:  ret void  } + +; PR14753 - merging two stores should preserve the TBAA tag. +define void @test6(i32 %n, float* %a, i32* %gi) nounwind uwtable ssp { +entry: +  store i32 42, i32* %gi, align 4, !tbaa !0 +  br label %for.cond + +for.cond:                                         ; preds = %for.body, %entry +  %storemerge = phi i32 [ 0, %entry ], [ %inc, %for.body ] +  %0 = load i32* %gi, align 4, !tbaa !0 +  %cmp = icmp slt i32 %0, %n +  br i1 %cmp, label %for.body, label %for.end + +for.body:                                         ; preds = %for.cond +  %idxprom = sext i32 %0 to i64 +  %arrayidx = getelementptr inbounds float* %a, i64 %idxprom +  store float 0.000000e+00, float* %arrayidx, align 4, !tbaa !3 +  %1 = load i32* %gi, align 4, !tbaa !0 +  %inc = add nsw i32 %1, 1 +  store i32 %inc, i32* %gi, align 4, !tbaa !0 +  br label %for.cond + +for.end:                                          ; preds = %for.cond +  ret void +; CHECK: @test6 +; CHECK: for.cond: +; CHECK-NEXT: phi i32 [ 42 +; CHECK-NEXT: store i32 %storemerge, i32* %gi, align 4, !tbaa !0 +} + +!0 = metadata !{metadata !"int", metadata !1} +!1 = metadata !{metadata !"omnipotent char", metadata !2} +!2 = metadata !{metadata !"Simple C/C++ TBAA"} +!3 = metadata !{metadata !"float", metadata !1}  | 

