From 4bb7c02eba2e83288d0ab4bc9d3febbfcb131804 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 6 Oct 2003 17:11:01 +0000 Subject: [PATCH] Minor speedups for the instcombine pass git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8894 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Scalar/InstructionCombining.cpp | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 465954aa134..b2b63af05d1 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -1939,17 +1939,16 @@ bool InstCombiner::runOnFunction(Function &F) { // Check to see if we can DIE the instruction... if (isInstructionTriviallyDead(I)) { // Add operands to the worklist... - for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) - if (Instruction *Op = dyn_cast(I->getOperand(i))) - WorkList.push_back(Op); - + if (I->getNumOperands() < 4) + for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) + if (Instruction *Op = dyn_cast(I->getOperand(i))) + WorkList.push_back(Op); ++NumDeadInst; - BasicBlock::iterator BBI = I; - if (dceInstruction(BBI)) { - removeFromWorkList(I); - continue; - } - } + + I->getParent()->getInstList().erase(I); + removeFromWorkList(I); + continue; + } // Instruction isn't dead, see if we can constant propagate it... if (Constant *C = ConstantFoldInstruction(I)) { @@ -1960,13 +1959,10 @@ bool InstCombiner::runOnFunction(Function &F) { ReplaceInstUsesWith(*I, C); ++NumConstProp; - BasicBlock::iterator BBI = I; - if (dceInstruction(BBI)) { - removeFromWorkList(I); - continue; - } + I->getParent()->getInstList().erase(I); + continue; } - + // Now that we have an instruction, try combining it to simplify it... if (Instruction *Result = visit(*I)) { ++NumCombined; @@ -1975,7 +1971,20 @@ bool InstCombiner::runOnFunction(Function &F) { // Instructions can end up on the worklist more than once. Make sure // we do not process an instruction that has been deleted. removeFromWorkList(I); - ReplaceInstWithInst(I, Result); + + // Move the name to the new instruction first... + std::string OldName = I->getName(); I->setName(""); + Result->setName(I->getName()); + + // Insert the new instruction into the basic block... + BasicBlock *InstParent = I->getParent(); + InstParent->getInstList().insert(I, Result); + + // Everything uses the new instruction now... + I->replaceAllUsesWith(Result); + + // Erase the old instruction. + InstParent->getInstList().erase(I); } else { BasicBlock::iterator II = I;