diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-11-07 08:54:19 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-11-07 08:54:19 +0000 |
commit | 2098b86f641eca28c800be7a2521b87d059caf48 (patch) | |
tree | 262102bb3cd19077376e0310a45e24beb563ca8e /llvm/test/Transforms/SCCP/ipsccp-basic.ll | |
parent | 80ef110ccaab14f8bdadd01de989dea7139b956c (diff) | |
download | bcm5719-llvm-2098b86f641eca28c800be7a2521b87d059caf48.tar.gz bcm5719-llvm-2098b86f641eca28c800be7a2521b87d059caf48.zip |
SCCP: overdefined calls cannot become constant
We would attempt to fold away a call instruction which had been marked
overdefined. However, it's not valid to transition to constant from
overdefined.
This fixes PR21512.
llvm-svn: 221513
Diffstat (limited to 'llvm/test/Transforms/SCCP/ipsccp-basic.ll')
-rw-r--r-- | llvm/test/Transforms/SCCP/ipsccp-basic.ll | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SCCP/ipsccp-basic.ll b/llvm/test/Transforms/SCCP/ipsccp-basic.ll index c1c6c926fd9..107b7af2c1d 100644 --- a/llvm/test/Transforms/SCCP/ipsccp-basic.ll +++ b/llvm/test/Transforms/SCCP/ipsccp-basic.ll @@ -227,3 +227,23 @@ entry: ; CHECK-LABEL: define internal i32 @test10b( ; CHECK: ret i32 undef } + +;;======================== test11 + +define i64 @test11a() { + %xor = xor i64 undef, undef + ret i64 %xor +; CHECK-LABEL: define i64 @test11a +; CHECK: ret i64 0 +} + +define void @test11b() { + %call1 = call i64 @test11a() + %call2 = call i64 @llvm.ctpop.i64(i64 %call1) + ret void +; CHECK-LABEL: define void @test11b +; CHECK: %[[call1:.*]] = call i64 @test11a() +; CHECK: %[[call2:.*]] = call i64 @llvm.ctpop.i64(i64 0) +} + +declare i64 @llvm.ctpop.i64(i64) |