diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-24 18:10:21 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-24 18:10:21 +0000 |
commit | ff855b60209f3d4bd875abf23b60b12f87fa7280 (patch) | |
tree | 4a76461b96d956ab4b03cff5617e35e09380d654 /llvm/test/Transforms | |
parent | 941bd6bbae6ba1fbf3d46cfb365d1015703ef448 (diff) | |
download | bcm5719-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.ll | 20 |
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 +} |