summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SCCP/ipsccp-basic.ll
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-11-07 08:54:19 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-11-07 08:54:19 +0000
commit2098b86f641eca28c800be7a2521b87d059caf48 (patch)
tree262102bb3cd19077376e0310a45e24beb563ca8e /llvm/test/Transforms/SCCP/ipsccp-basic.ll
parent80ef110ccaab14f8bdadd01de989dea7139b956c (diff)
downloadbcm5719-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.ll20
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)
OpenPOWER on IntegriCloud