[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