diff options
| author | Duncan Sands <baldrick@free.fr> | 2012-02-29 11:12:03 +0000 |
|---|---|---|
| committer | Duncan Sands <baldrick@free.fr> | 2012-02-29 11:12:03 +0000 |
| commit | bb2fe65542145b0745be556a0630001bca840f62 (patch) | |
| tree | 6cff1f6cb0f974c73fd0801db1722f2e0a21fe60 /llvm/test | |
| parent | 6f8780bed1549ce1a292d7c204172d869a4f3f32 (diff) | |
| download | bcm5719-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.ll | 57 |
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 +} |

