Author: hans Date: Wed Aug 24 18:46:52 2016 New Revision: 279689 URL: http://llvm.org/viewvc/llvm-project?rev=279689&view=rev Log: Merging r279647: ------------------------------------------------------------------------ r279647 | sanjoy | 2016-08-24 11:10:21 -0700 (Wed, 24 Aug 2016) | 5 lines
[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. ------------------------------------------------------------------------ Modified: llvm/branches/release_39/ (props changed) llvm/branches/release_39/lib/Transforms/Scalar/SCCP.cpp llvm/branches/release_39/test/Transforms/SCCP/calltest.ll Propchange: llvm/branches/release_39/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Aug 24 18:46:52 2016 @@ -1,3 +1,3 @@ /llvm/branches/Apple/Pertwee:110850,110961 /llvm/branches/type-system-rewrite:133420-134817 -/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,277773,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369 +/llvm/trunk:155241,275868-275870,275879,275898,275928,275935,275946,275978,275981,276015,276051,276077,276109,276119,276181,276209,276236-276237,276358,276364,276368,276389,276435,276438,276479,276510,276648,276676,276712,276740,276823,276956,276980,277093,277114,277135,277371,277399,277500,277504,277625,277691,277693,277773,278002,278086,278133,278157,278343,278370,278413,278558-278559,278562,278569,278571,278573,278575,278584,278841,278900,278938,278999,279125,279268,279369,279647 Modified: llvm/branches/release_39/lib/Transforms/Scalar/SCCP.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/lib/Transforms/Scalar/SCCP.cpp?rev=279689&r1=279688&r2=279689&view=diff ============================================================================== --- llvm/branches/release_39/lib/Transforms/Scalar/SCCP.cpp (original) +++ llvm/branches/release_39/lib/Transforms/Scalar/SCCP.cpp Wed Aug 24 18:46:52 2016 @@ -1538,17 +1538,6 @@ static bool tryToReplaceWithConstant(SCC return true; } -static bool tryToReplaceInstWithConstant(SCCPSolver &Solver, Instruction *Inst, - bool shouldEraseFromParent) { - if (!tryToReplaceWithConstant(Solver, Inst)) - return false; - - // Delete the instruction. - if (shouldEraseFromParent) - Inst->eraseFromParent(); - return true; -} - // runSCCP() - Run the Sparse Conditional Constant Propagation algorithm, // and return true if the function was modified. // @@ -1597,8 +1586,9 @@ static bool runSCCP(Function &F, const D if (Inst->getType()->isVoidTy() || isa<TerminatorInst>(Inst)) continue; - if (tryToReplaceInstWithConstant(Solver, Inst, - true /* shouldEraseFromParent */)) { + if (tryToReplaceWithConstant(Solver, Inst)) { + if (isInstructionTriviallyDead(Inst)) + Inst->eraseFromParent(); // Hey, we just changed something! MadeChanges = true; ++NumInstRemoved; @@ -1789,10 +1779,9 @@ static bool runIPSCCP(Module &M, const D Instruction *Inst = &*BI++; if (Inst->getType()->isVoidTy()) continue; - if (tryToReplaceInstWithConstant( - Solver, Inst, - !isa<CallInst>(Inst) && - !isa<TerminatorInst>(Inst) /* shouldEraseFromParent */)) { + if (tryToReplaceWithConstant(Solver, Inst)) { + if (!isa<CallInst>(Inst) && !isa<TerminatorInst>(Inst)) + Inst->eraseFromParent(); // Hey, we just changed something! MadeChanges = true; ++IPNumInstRemoved; Modified: llvm/branches/release_39/test/Transforms/SCCP/calltest.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_39/test/Transforms/SCCP/calltest.ll?rev=279689&r1=279688&r2=279689&view=diff ============================================================================== --- llvm/branches/release_39/test/Transforms/SCCP/calltest.ll (original) +++ llvm/branches/release_39/test/Transforms/SCCP/calltest.ll Wed Aug 24 18:46:52 2016 @@ -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 +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits