diff options
| author | Owen Anderson <resistor@mac.com> | 2007-07-12 17:52:20 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2007-07-12 17:52:20 +0000 |
| commit | 5e06995b3d12a585d98e48489e7aa9484c7c5d8e (patch) | |
| tree | eff8c0a33bda6508506cdd204577297d29c950b3 /llvm/lib | |
| parent | cf9be2d31581c876dc8ab27d35e76073ca0c5075 (diff) | |
| download | bcm5719-llvm-5e06995b3d12a585d98e48489e7aa9484c7c5d8e.tar.gz bcm5719-llvm-5e06995b3d12a585d98e48489e7aa9484c7c5d8e.zip | |
Remove the end-block handling code. It was unsafe, and making it safe would have resulted in falling back to the slow DSE case. I need to think some more about the right way to handle this.
llvm-svn: 39788
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/FastDSE.cpp | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/llvm/lib/Transforms/Scalar/FastDSE.cpp b/llvm/lib/Transforms/Scalar/FastDSE.cpp index f5c5c547a0c..dd47a190582 100644 --- a/llvm/lib/Transforms/Scalar/FastDSE.cpp +++ b/llvm/lib/Transforms/Scalar/FastDSE.cpp @@ -122,11 +122,6 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) { } } - // If this block ends in a return, unwind, unreachable, and eventually - // tailcall, then all allocas are dead at its end. - if (BB.getTerminator()->getNumSuccessors() == 0) - MadeChange |= handleEndBlock(BB, possiblyDead); - // Do a trivial DCE while (!possiblyDead.empty()) { Instruction *I = possiblyDead.back(); @@ -168,56 +163,6 @@ bool FDSE::handleFreeWithNonTrivialDependency(FreeInst* F, StoreInst* dependency return false; } -/// handleEndBlock - Remove dead stores to stack-allocated locations in the function -/// end block -bool FDSE::handleEndBlock(BasicBlock& BB, SetVector<Instruction*>& possiblyDead) { - MemoryDependenceAnalysis &MD = getAnalysis<MemoryDependenceAnalysis>(); - - bool MadeChange = false; - - // Pointers alloca'd in this function are dead in the end block - SmallPtrSet<AllocaInst*, 4> deadPointers; - - // Find all of the alloca'd pointers in the entry block - BasicBlock *Entry = BB.getParent()->begin(); - for (BasicBlock::iterator I = Entry->begin(), E = Entry->end(); I != E; ++I) - if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) - deadPointers.insert(AI); - - // Scan the basic block backwards - for (BasicBlock::iterator BBI = BB.end(); BBI != BB.begin(); ){ - --BBI; - - if (deadPointers.empty()) - break; - - // If we find a store whose pointer is dead... - if (StoreInst* S = dyn_cast<StoreInst>(BBI)) { - if (deadPointers.count(S->getPointerOperand())){ - // Remove it! - MD.removeInstruction(S); - - // DCE instructions only used to calculate that store - if (Instruction* D = dyn_cast<Instruction>(S->getOperand(0))) - possiblyDead.insert(D); - - BBI++; - S->eraseFromParent(); - NumFastStores++; - MadeChange = true; - } - - // If we encounter a use of the pointer, it is no longer considered dead - } else if (LoadInst* L = dyn_cast<LoadInst>(BBI)) { - deadPointers.erase(L->getPointerOperand()); - } else if (VAArgInst* V = dyn_cast<VAArgInst>(BBI)) { - deadPointers.erase(V->getOperand(0)); - } - } - - return MadeChange; -} - void FDSE::DeleteDeadInstructionChains(Instruction *I, SetVector<Instruction*> &DeadInsts) { // Instruction must be dead. |

