summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-08-24 18:10:21 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-08-24 18:10:21 +0000
commitff855b60209f3d4bd875abf23b60b12f87fa7280 (patch)
tree4a76461b96d956ab4b03cff5617e35e09380d654 /llvm/test/Transforms
parent941bd6bbae6ba1fbf3d46cfb365d1015703ef448 (diff)
downloadbcm5719-llvm-ff855b60209f3d4bd875abf23b60b12f87fa7280.tar.gz
bcm5719-llvm-ff855b60209f3d4bd875abf23b60b12f87fa7280.zip
[SCCP] Don't delete side-effecting instructions
I'm not sure if the `!isa<CallInst>(Inst) && !isa<TerminatorInst>(Inst))` bit is correct either, but this fixes the case we know is broken. llvm-svn: 279647
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/SCCP/calltest.ll20
1 files changed, 15 insertions, 5 deletions
diff --git a/llvm/test/Transforms/SCCP/calltest.ll b/llvm/test/Transforms/SCCP/calltest.ll
index 9dec22f4d1c..a6c2606cb19 100644
--- a/llvm/test/Transforms/SCCP/calltest.ll
+++ b/llvm/test/Transforms/SCCP/calltest.ll
@@ -1,12 +1,16 @@
-; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | not grep br
+; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | FileCheck %s
+declare double @sqrt(double) readnone nounwind
+%empty = type {}
+declare %empty @has_side_effects()
+
+define double @test_0(i32 %param) {
+; CHECK-LABEL: @test_0(
+; CHECK-NOT: br
+entry:
; No matter how hard you try, sqrt(1.0) is always 1.0. This allows the
; optimizer to delete this loop.
-declare double @sqrt(double)
-
-define double @test(i32 %param) {
-entry:
br label %Loop
Loop: ; preds = %Loop, %entry
%I2 = phi i32 [ 0, %entry ], [ %I3, %Loop ] ; <i32> [#uses=1]
@@ -19,3 +23,9 @@ Exit: ; preds = %Loop
ret double %V
}
+define i32 @test_1() {
+; CHECK-LABEL: @test_1(
+; CHECK: call %empty @has_side_effects()
+ %1 = call %empty @has_side_effects()
+ ret i32 0
+}
OpenPOWER on IntegriCloud