[llvm-branch-commits] [llvm-branch] r279689 - Merging r279647:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Aug 24 16:46:53 PDT 2016


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
+}




More information about the llvm-branch-commits mailing list