From bfbfb3c464e2e89653bc0a76c67cf807ecd0fd6a Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 11 Jul 2007 19:03:09 +0000 Subject: [PATCH] Clean up a few things based on Chris' feedback. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39747 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/FastDSE.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/Transforms/Scalar/FastDSE.cpp b/lib/Transforms/Scalar/FastDSE.cpp index 10873cd8ed5..e344f55e823 100644 --- a/lib/Transforms/Scalar/FastDSE.cpp +++ b/lib/Transforms/Scalar/FastDSE.cpp @@ -2,7 +2,7 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under +// This file was developed by Owen Anderson and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// @@ -64,7 +64,9 @@ FunctionPass *llvm::createFastDeadStoreEliminationPass() { return new FDSE(); } bool FDSE::runOnBasicBlock(BasicBlock &BB) { MemoryDependenceAnalysis& MD = getAnalysis(); + // Record the last-seen store to this pointer DenseMap lastStore; + // Record instructions possibly made dead by deleting a store SetVector possiblyDead; bool MadeChange = false; @@ -73,10 +75,10 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) { for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); BBI != BBE; ++BBI) { // If we find a store... if (StoreInst* S = dyn_cast(BBI)) { + StoreInst*& last = lastStore[S->getPointerOperand()]; // ... to a pointer that has been stored to before... - if (lastStore.count(S->getPointerOperand())) { - StoreInst* last = lastStore[S->getPointerOperand()]; + if (last) { // ... and no other memory dependencies are between them.... if (MD.getDependency(S) == last) { @@ -94,7 +96,7 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) { } // Update our most-recent-store map - lastStore.insert(std::make_pair(S->getPointerOperand(), S)); + last = S; } } @@ -120,8 +122,10 @@ void FDSE::DeleteDeadInstructionChains(Instruction *I, // instruction uses the same operand twice. We don't want to delete a // value then reference it. for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) { - if (Instruction *Op = dyn_cast(I->getOperand(i))) - DeadInsts.insert(Op); // Attempt to nuke it later. + if (I->getOperand(i)->hasOneUse()) + if (Instruction* Op = dyn_cast(I->getOperand(i))) + DeadInsts.insert(Op); // Attempt to nuke it later. + I->setOperand(i, 0); // Drop from the operand list. } -- 2.34.1