diff options
| author | David L Kreitzer <david.l.kreitzer@intel.com> | 2016-01-21 21:32:35 +0000 | 
|---|---|---|
| committer | David L Kreitzer <david.l.kreitzer@intel.com> | 2016-01-21 21:32:35 +0000 | 
| commit | 4d7257dfa111d14cc6e6091898f6564a4f01f23c (patch) | |
| tree | b4b17cdae5867e767c3decdbb9d2b2d7d4f22789 /llvm/test/Transforms | |
| parent | 1f472eace5207f41e55953d62cc9c5b0dab31eba (diff) | |
| download | bcm5719-llvm-4d7257dfa111d14cc6e6091898f6564a4f01f23c.tar.gz bcm5719-llvm-4d7257dfa111d14cc6e6091898f6564a4f01f23c.zip | |
Fix for two constant propagation problems in GVN with the assume intrinsic
instruction.
Patch by Yuanrui Zhang.
Differential Revision: http://reviews.llvm.org/D16100
llvm-svn: 258435
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/GVN/assume-equal.ll | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/llvm/test/Transforms/GVN/assume-equal.ll b/llvm/test/Transforms/GVN/assume-equal.ll index f9304a8fc7c..d423c1685e1 100644 --- a/llvm/test/Transforms/GVN/assume-equal.ll +++ b/llvm/test/Transforms/GVN/assume-equal.ll @@ -226,6 +226,46 @@ bb3:    ret i32 17  } +; This test checks if GVN can do the constant propagation correctly +; when there are multiple uses of the same assume value in the  +; basic block that has a loop back-edge pointing to itself. +; +; CHECK-LABEL: define i32 @_Z1il(i32 %val, i1 %k) +define i32 @_Z1il(i32 %val, i1 %k) { +  br label %next + +next: +; CHECK: tail call void @llvm.assume(i1 %k) +; CHECK-NEXT: %cmp = icmp eq i32 %val, 50 +  tail call void @llvm.assume(i1 %k) +  tail call void @llvm.assume(i1 %k) +  %cmp = icmp eq i32 %val, 50 +  br i1 %cmp, label %next, label %meh + +meh: +  ret i32 0  +} + +; This test checks if GVN can prevent the constant propagation correctly +; in the successor blocks that are not dominated by the basic block +; with the assume instruction. +; +; CHECK-LABEL: define i1 @_z1im(i32 %val, i1 %k, i1 %j) +define i1 @_z1im(i32 %val, i1 %k, i1 %j) { +  br i1 %j, label %next, label %meh + +next: +; CHECK: tail call void @llvm.assume(i1 %k) +; CHECK-NEXT: br label %meh +  tail call void @llvm.assume(i1 %k) +  tail call void @llvm.assume(i1 %k) +  br label %meh + +meh: +; CHECK: ret i1 %k +  ret i1 %k +} +  declare noalias i8* @_Znwm(i64)  declare void @_ZN1AC1Ev(%struct.A*)  declare void @llvm.assume(i1) | 

