[llvm] r273743 - Revert r273711, it caused PR28298.

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 24 15:52:39 PDT 2016


Author: nico
Date: Fri Jun 24 17:52:39 2016
New Revision: 273743

URL: http://llvm.org/viewvc/llvm-project?rev=273743&view=rev
Log:
Revert r273711, it caused PR28298.

Modified:
    llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp
    llvm/trunk/lib/Transforms/Scalar/GVN.cpp
    llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
    llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
    llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp
    llvm/trunk/lib/Transforms/Utils/Local.cpp
    llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp
    llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
    llvm/trunk/test/Transforms/GVN/volatile.ll

Modified: llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp Fri Jun 24 17:52:39 2016
@@ -582,18 +582,11 @@ bool EarlyCSE::processNode(DomTreeNode *
     // its simpler value.
     if (Value *V = SimplifyInstruction(Inst, DL, &TLI, &DT, &AC)) {
       DEBUG(dbgs() << "EarlyCSE Simplify: " << *Inst << "  to: " << *V << '\n');
-      if (!Inst->use_empty()) {
-        Inst->replaceAllUsesWith(V);
-        Changed = true;
-      }
-      if (isInstructionTriviallyDead(Inst, &TLI)) {
-        Inst->eraseFromParent();
-        Changed = true;
-      }
-      if (Changed) {
-        ++NumSimplify;
-        continue;
-      }
+      Inst->replaceAllUsesWith(V);
+      Inst->eraseFromParent();
+      Changed = true;
+      ++NumSimplify;
+      continue;
     }
 
     // If this is a simple instruction that we can value number, process it.

Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Jun 24 17:52:39 2016
@@ -2056,21 +2056,12 @@ bool GVN::processInstruction(Instruction
   // "%z = and i32 %x, %y" becomes "%z = and i32 %x, %x" which we now simplify.
   const DataLayout &DL = I->getModule()->getDataLayout();
   if (Value *V = SimplifyInstruction(I, DL, TLI, DT, AC)) {
-    bool Changed = false;
-    if (!I->use_empty()) {
-      I->replaceAllUsesWith(V);
-      Changed = true;
-    }
-    if (isInstructionTriviallyDead(I, TLI)) {
-      markInstructionForDeletion(I);
-      Changed = true;
-    }
-    if (Changed) {
-      if (MD && V->getType()->getScalarType()->isPointerTy())
-        MD->invalidateCachedPointerInfo(V);
-      ++NumGVNSimpl;
-      return true;
-    }
+    I->replaceAllUsesWith(V);
+    if (MD && V->getType()->getScalarType()->isPointerTy())
+      MD->invalidateCachedPointerInfo(V);
+    markInstructionForDeletion(I);
+    ++NumGVNSimpl;
+    return true;
   }
 
   if (IntrinsicInst *IntrinsicI = dyn_cast<IntrinsicInst>(I))

Modified: llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp Fri Jun 24 17:52:39 2016
@@ -1746,18 +1746,13 @@ bool JumpThreadingPass::DuplicateCondBra
     // phi translation.
     if (Value *IV =
             SimplifyInstruction(New, BB->getModule()->getDataLayout())) {
+      delete New;
       ValueMapping[&*BI] = IV;
-      if (!New->mayHaveSideEffects()) {
-        delete New;
-        New = nullptr;
-      }
     } else {
-      ValueMapping[&*BI] = New;
-    }
-    if (New) {
       // Otherwise, insert the new instruction into the block.
       New->setName(BI->getName());
       PredBB->getInstList().insert(OldPredBranch->getIterator(), New);
+      ValueMapping[&*BI] = New;
     }
   }
 

Modified: llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp Fri Jun 24 17:52:39 2016
@@ -312,18 +312,13 @@ bool LoopRotate::rotateLoop(Loop *L, boo
     if (V && LI->replacementPreservesLCSSAForm(C, V)) {
       // If so, then delete the temporary instruction and stick the folded value
       // in the map.
+      delete C;
       ValueMap[Inst] = V;
-      if (!C->mayHaveSideEffects()) {
-        delete C;
-        C = nullptr;
-      }
     } else {
-      ValueMap[Inst] = C;
-    }
-    if (C) {
       // Otherwise, stick the new instruction into the new block!
       C->setName(Inst->getName());
       C->insertBefore(LoopEntryBranch);
+      ValueMap[Inst] = C;
     }
   }
 

Modified: llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp Fri Jun 24 17:52:39 2016
@@ -279,7 +279,6 @@ void PruningFunctionCloner::CloneBlock(c
        II != IE; ++II) {
 
     Instruction *NewInst = II->clone();
-    VMap[&*II] = NewInst; // Add instruction map to value.
 
     // Eagerly remap operands to the newly cloned instruction, except for PHI
     // nodes for which we defer processing until we update the CFG.
@@ -298,15 +297,14 @@ void PruningFunctionCloner::CloneBlock(c
           V = MappedV;
 
         VMap[&*II] = V;
-        if (!NewInst->mayHaveSideEffects()) {
-          delete NewInst;
-          continue;
-        }
+        delete NewInst;
+        continue;
       }
     }
 
     if (II->hasName())
       NewInst->setName(II->getName()+NameSuffix);
+    VMap[&*II] = NewInst; // Add instruction map to value.
     NewBB->getInstList().push_back(NewInst);
     hasCalls |= (isa<CallInst>(II) && !isa<DbgInfoIntrinsic>(II));
 

Modified: llvm/trunk/lib/Transforms/Utils/Local.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/Local.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/Local.cpp Fri Jun 24 17:52:39 2016
@@ -456,23 +456,14 @@ simplifyAndDCEInstruction(Instruction *I
   if (Value *SimpleV = SimplifyInstruction(I, DL)) {
     // Add the users to the worklist. CAREFUL: an instruction can use itself,
     // in the case of a phi node.
-    for (User *U : I->users()) {
-      if (U != I) {
+    for (User *U : I->users())
+      if (U != I)
         WorkList.insert(cast<Instruction>(U));
-      }
-    }
 
     // Replace the instruction with its simplified value.
-    bool Changed = false;
-    if (!I->use_empty()) {
-      I->replaceAllUsesWith(SimpleV);
-      Changed = true;
-    }
-    if (isInstructionTriviallyDead(I, TLI)) {
-      I->eraseFromParent();
-      Changed = true;
-    }
-    return Changed;
+    I->replaceAllUsesWith(SimpleV);
+    I->eraseFromParent();
+    return true;
   }
   return false;
 }

Modified: llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp Fri Jun 24 17:52:39 2016
@@ -623,17 +623,18 @@ bool llvm::UnrollLoop(Loop *L, unsigned
   // go.
   const DataLayout &DL = Header->getModule()->getDataLayout();
   const std::vector<BasicBlock*> &NewLoopBlocks = L->getBlocks();
-  for (BasicBlock *BB : NewLoopBlocks) {
+  for (BasicBlock *BB : NewLoopBlocks)
     for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ) {
       Instruction *Inst = &*I++;
 
-      if (Value *V = SimplifyInstruction(Inst, DL))
-        if (LI->replacementPreservesLCSSAForm(Inst, V))
-          Inst->replaceAllUsesWith(V);
       if (isInstructionTriviallyDead(Inst))
         BB->getInstList().erase(Inst);
+      else if (Value *V = SimplifyInstruction(Inst, DL))
+        if (LI->replacementPreservesLCSSAForm(Inst, V)) {
+          Inst->replaceAllUsesWith(V);
+          BB->getInstList().erase(Inst);
+        }
     }
-  }
 
   NumCompletelyUnrolled += CompletelyUnroll;
   ++NumUnrolled;

Modified: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp Fri Jun 24 17:52:39 2016
@@ -1885,19 +1885,14 @@ static bool FoldCondBranchOnPHI(BranchIn
 
       // Check for trivial simplification.
       if (Value *V = SimplifyInstruction(N, DL)) {
-        if (!BBI->use_empty())
-          TranslateMap[&*BBI] = V;
-        if (!N->mayHaveSideEffects()) {
-          delete N; // Instruction folded away, don't need actual inst
-          N = nullptr;
-        }
+        TranslateMap[&*BBI] = V;
+        delete N; // Instruction folded away, don't need actual inst
       } else {
+        // Insert the new instruction into its new home.
+        EdgeBB->getInstList().insert(InsertPt, N);
         if (!BBI->use_empty())
           TranslateMap[&*BBI] = N;
       }
-      // Insert the new instruction into its new home.
-      if (N)
-        EdgeBB->getInstList().insert(InsertPt, N);
     }
 
     // Loop over all of the edges from PredBB to BB, changing them to branch

Modified: llvm/trunk/test/Transforms/GVN/volatile.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/volatile.ll?rev=273743&r1=273742&r2=273743&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/GVN/volatile.ll (original)
+++ llvm/trunk/test/Transforms/GVN/volatile.ll Fri Jun 24 17:52:39 2016
@@ -152,16 +152,6 @@ exit:
   ret i32 %add
 }
 
-define i32 @test9(i32* %V) {
-entry:
-  %load = load volatile i32, i32* %V, !range !0
-  ret i32 %load
-}
-; CHECK-LABEL: test9
-; CHECK: load volatile
-; CHECK: ret i32 0
-
 declare void @use(i32) readonly
 declare void @clobber(i32* %p, i32* %q)
 
-!0 = !{ i32 0, i32 1 }




More information about the llvm-commits mailing list