diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-09-20 23:28:51 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-09-20 23:28:51 +0000 |
| commit | 1815b688cc04f8390ed63e9e9405a503a256851b (patch) | |
| tree | 2752f41ec5ef25d850c86a36b09dbe0d0eb20dcf /llvm/test/Transforms/SCCP | |
| parent | b573542e1011e29fb5147631c8e2cc9b045e62c2 (diff) | |
| download | bcm5719-llvm-1815b688cc04f8390ed63e9e9405a503a256851b.tar.gz bcm5719-llvm-1815b688cc04f8390ed63e9e9405a503a256851b.zip | |
Make sure IPSCCP never marks a tracked call as overdefined in SCCPSolver::ResolvedUndefsIn. If we do, we can end up in a situation where a function is resolved to return a constant, but the caller is marked overdefined, which confuses the code later.
<rdar://problem/9956541> (again).
llvm-svn: 140210
Diffstat (limited to 'llvm/test/Transforms/SCCP')
| -rw-r--r-- | llvm/test/Transforms/SCCP/ipsccp-basic.ll | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SCCP/ipsccp-basic.ll b/llvm/test/Transforms/SCCP/ipsccp-basic.ll index 6ccfd982343..8340f0c1e12 100644 --- a/llvm/test/Transforms/SCCP/ipsccp-basic.ll +++ b/llvm/test/Transforms/SCCP/ipsccp-basic.ll @@ -209,3 +209,21 @@ entry: } declare i32 @__gxx_personality_v0(...) + +;;======================== test10 + +define i32 @test10a() nounwind { +entry: + %call = call i32 @test10b(i32 undef) + ret i32 %call +; CHECK: define i32 @test10a +; CHECK: ret i32 0 +} + +define internal i32 @test10b(i32 %x) nounwind { +entry: + %r = and i32 %x, 1 + ret i32 %r +; CHECK: define internal i32 @test10b +; CHECK: ret i32 undef +} |

