summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SCCP
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-09-20 23:28:51 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-09-20 23:28:51 +0000
commit1815b688cc04f8390ed63e9e9405a503a256851b (patch)
tree2752f41ec5ef25d850c86a36b09dbe0d0eb20dcf /llvm/test/Transforms/SCCP
parentb573542e1011e29fb5147631c8e2cc9b045e62c2 (diff)
downloadbcm5719-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.ll18
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
+}
OpenPOWER on IntegriCloud