diff options
author | Chris Lattner <sabre@nondot.org> | 2007-08-04 20:01:43 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-08-04 20:01:43 +0000 |
commit | 532b10c9d3fbea553d28d10e842b18ede18c74c0 (patch) | |
tree | 0cb30d9e65cb70b654800ce881eef2befdcda0c0 /lib/Transforms/Utils/PromoteMemoryToRegister.cpp | |
parent | 96384a80215ca7c81d8bfe70560ee68b28e15d20 (diff) | |
download | external_llvm-532b10c9d3fbea553d28d10e842b18ede18c74c0.zip external_llvm-532b10c9d3fbea553d28d10e842b18ede18c74c0.tar.gz external_llvm-532b10c9d3fbea553d28d10e842b18ede18c74c0.tar.bz2 |
When PromoteLocallyUsedAllocas promoted allocas, it didn't remember
to increment NumLocalPromoted, and didn't actually delete the
dead alloca, leading to an extra iteration of mem2reg.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40817 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r-- | lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index ad09e68..c586183 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -686,10 +686,10 @@ bool PromoteMem2Reg::PromoteLocallyUsedAlloca(BasicBlock *BB, AllocaInst *AI) { } // After traversing the basic block, there should be no more uses of the - // alloca, remove it now. + // alloca: remove it now. assert(AI->use_empty() && "Uses of alloca from more than one BB??"); if (AST) AST->deleteValue(AI); - AI->getParent()->getInstList().erase(AI); + AI->eraseFromParent(); ++NumLocalPromoted; return false; @@ -739,6 +739,17 @@ PromoteLocallyUsedAllocas(BasicBlock *BB, const std::vector<AllocaInst*> &AIs) { } } } + + // At the end of the block scan, all allocas in CurValues are dead. + for (DenseMap<AllocaInst*, Value*>::iterator I = CurValues.begin(), + E = CurValues.end(); I != E; ++I) { + AllocaInst *AI = I->first; + assert(AI->use_empty() && "Uses of alloca from more than one BB??"); + if (AST) AST->deleteValue(AI); + AI->eraseFromParent(); + } + + NumLocalPromoted += CurValues.size(); } |