summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2012-02-29 11:12:03 +0000
committerDuncan Sands <baldrick@free.fr>2012-02-29 11:12:03 +0000
commitbb2fe65542145b0745be556a0630001bca840f62 (patch)
tree6cff1f6cb0f974c73fd0801db1722f2e0a21fe60 /llvm/test
parent6f8780bed1549ce1a292d7c204172d869a4f3f32 (diff)
downloadbcm5719-llvm-bb2fe65542145b0745be556a0630001bca840f62.tar.gz
bcm5719-llvm-bb2fe65542145b0745be556a0630001bca840f62.zip
Have GVN also do condition propagation when the right-hand side is not
a constant. This fixes PR1768. llvm-svn: 151713
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/GVN/condprop.ll57
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/test/Transforms/GVN/condprop.ll b/llvm/test/Transforms/GVN/condprop.ll
index 97a0d31e5e5..b22675b47cc 100644
--- a/llvm/test/Transforms/GVN/condprop.ll
+++ b/llvm/test/Transforms/GVN/condprop.ll
@@ -175,3 +175,60 @@ different:
; CHECK: ret i1 false
ret i1 %cmp3
}
+
+; PR1768
+; CHECK: @test9
+define i32 @test9(i32 %i, i32 %j) {
+ %cmp = icmp eq i32 %i, %j
+ br i1 %cmp, label %cond_true, label %ret
+
+cond_true:
+ %diff = sub i32 %i, %j
+ ret i32 %diff
+; CHECK: ret i32 0
+
+ret:
+ ret i32 5
+; CHECK: ret i32 5
+}
+
+; PR1768
+; CHECK: @test10
+define i32 @test10(i32 %j, i32 %i) {
+ %cmp = icmp eq i32 %i, %j
+ br i1 %cmp, label %cond_true, label %ret
+
+cond_true:
+ %diff = sub i32 %i, %j
+ ret i32 %diff
+; CHECK: ret i32 0
+
+ret:
+ ret i32 5
+; CHECK: ret i32 5
+}
+
+declare i32 @yogibar()
+
+; CHECK: @test11
+define i32 @test11(i32 %x) {
+ %v0 = call i32 @yogibar()
+ %v1 = call i32 @yogibar()
+ %cmp = icmp eq i32 %v0, %v1
+ br i1 %cmp, label %cond_true, label %next
+
+cond_true:
+ ret i32 %v1
+; CHECK: ret i32 %v0
+
+next:
+ %cmp2 = icmp eq i32 %x, %v0
+ br i1 %cmp2, label %cond_true2, label %next2
+
+cond_true2:
+ ret i32 %v0
+; CHECK: ret i32 %x
+
+next2:
+ ret i32 0
+}
OpenPOWER on IntegriCloud