summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDavid L Kreitzer <david.l.kreitzer@intel.com>2016-01-21 21:32:35 +0000
committerDavid L Kreitzer <david.l.kreitzer@intel.com>2016-01-21 21:32:35 +0000
commit4d7257dfa111d14cc6e6091898f6564a4f01f23c (patch)
treeb4b17cdae5867e767c3decdbb9d2b2d7d4f22789 /llvm/test
parent1f472eace5207f41e55953d62cc9c5b0dab31eba (diff)
downloadbcm5719-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')
-rw-r--r--llvm/test/Transforms/GVN/assume-equal.ll40
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)
OpenPOWER on IntegriCloud