diff options
| author | Duncan Sands <baldrick@free.fr> | 2012-03-04 13:25:19 +0000 |
|---|---|---|
| committer | Duncan Sands <baldrick@free.fr> | 2012-03-04 13:25:19 +0000 |
| commit | 4d928e7dffb79938438de7b1264c338ae1a8d697 (patch) | |
| tree | 1f2a93ffb7206e8ee643b1d2cd1da35497895175 /llvm/test/Transforms/GVN/condprop.ll | |
| parent | 52b6ac2a781a938d85e366d7eb2c029240b08bb6 (diff) | |
| download | bcm5719-llvm-4d928e7dffb79938438de7b1264c338ae1a8d697.tar.gz bcm5719-llvm-4d928e7dffb79938438de7b1264c338ae1a8d697.zip | |
Nick pointed out on IRC that GVN's propagateEquality wasn't propagating
equalities into phi node operands for which the equality is known to
hold in the incoming basic block. That's because replaceAllDominatedUsesWith
wasn't handling phi nodes correctly in general (that this didn't give wrong
results was just luck: the specific way GVN uses replaceAllDominatedUsesWith
precluded wrong changes to phi nodes).
llvm-svn: 152006
Diffstat (limited to 'llvm/test/Transforms/GVN/condprop.ll')
| -rw-r--r-- | llvm/test/Transforms/GVN/condprop.ll | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/Transforms/GVN/condprop.ll b/llvm/test/Transforms/GVN/condprop.ll index b22675b47cc..9c28955801f 100644 --- a/llvm/test/Transforms/GVN/condprop.ll +++ b/llvm/test/Transforms/GVN/condprop.ll @@ -232,3 +232,20 @@ cond_true2: next2: ret i32 0 } + +; CHECK: @test12 +define i32 @test12(i32 %x) { + %cmp = icmp eq i32 %x, 0 + br i1 %cmp, label %cond_true, label %cond_false + +cond_true: + br label %ret + +cond_false: + br label %ret + +ret: + %res = phi i32 [ %x, %cond_true ], [ %x, %cond_false ] +; CHECK: %res = phi i32 [ 0, %cond_true ], [ %x, %cond_false ] + ret i32 %res +} |

