diff options
author | Owen Anderson <resistor@mac.com> | 2006-06-06 04:28:30 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2006-06-06 04:28:30 +0000 |
commit | 9e81c1bb0396c76d5b10b8a7b3380ff5ed7fbe69 (patch) | |
tree | 14a0c1ac397ef2fd4e7019a46de42610d213479b /llvm/lib/Transforms/Utils/LCSSA.cpp | |
parent | c3065b7d3f992d9ccb6cc788c2f5bc68c093e66a (diff) | |
download | bcm5719-llvm-9e81c1bb0396c76d5b10b8a7b3380ff5ed7fbe69.tar.gz bcm5719-llvm-9e81c1bb0396c76d5b10b8a7b3380ff5ed7fbe69.zip |
Stop a memory leak, and update some comments.
llvm-svn: 28693
Diffstat (limited to 'llvm/lib/Transforms/Utils/LCSSA.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/LCSSA.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/LCSSA.cpp b/llvm/lib/Transforms/Utils/LCSSA.cpp index a5411d4eb8d..8d1497939da 100644 --- a/llvm/lib/Transforms/Utils/LCSSA.cpp +++ b/llvm/lib/Transforms/Utils/LCSSA.cpp @@ -52,7 +52,7 @@ namespace { LoopInfo *LI; // Loop information DominatorTree *DT; // Dominator Tree for the current Function... DominanceFrontier *DF; // Current Dominance Frontier - std::vector<BasicBlock*> *LoopBlocks; + std::vector<BasicBlock*> LoopBlocks; virtual bool runOnFunction(Function &F); bool visitSubloop(Loop* L); @@ -76,8 +76,9 @@ namespace { Instruction *getValueDominatingBlock(BasicBlock *BB, std::map<BasicBlock*, Instruction*>& PotDoms); - bool inLoopBlocks(BasicBlock* B) { return std::binary_search( - LoopBlocks->begin(), LoopBlocks->end(), B); } + /// inLoop - returns true if the given block is within the current loop + const bool inLoop(BasicBlock* B) { + return std::binary_search(LoopBlocks.begin(), LoopBlocks.end(), B); } }; RegisterOpt<LCSSA> X("lcssa", "Loop-Closed SSA Form Pass"); @@ -90,7 +91,6 @@ bool LCSSA::runOnFunction(Function &F) { LI = &getAnalysis<LoopInfo>(); DF = &getAnalysis<DominanceFrontier>(); DT = &getAnalysis<DominatorTree>(); - LoopBlocks = new std::vector<BasicBlock*>; for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I) { changed |= visitSubloop(*I); @@ -104,9 +104,9 @@ bool LCSSA::visitSubloop(Loop* L) { visitSubloop(*I); // Speed up queries by creating a sorted list of blocks - LoopBlocks->clear(); - LoopBlocks->insert(LoopBlocks->end(), L->block_begin(), L->block_end()); - std::sort(LoopBlocks->begin(), LoopBlocks->end()); + LoopBlocks.clear(); + LoopBlocks.insert(LoopBlocks.end(), L->block_begin(), L->block_end()); + std::sort(LoopBlocks.begin(), LoopBlocks.end()); SetVector<Instruction*> AffectedValues = getLoopValuesUsedOutsideLoop(L); @@ -127,7 +127,7 @@ bool LCSSA::visitSubloop(Loop* L) { processInstruction(*I, exitBlocks); } - return true; // FIXME: Should be more intelligent in our return value. + return true; } /// processInstruction - @@ -205,7 +205,7 @@ void LCSSA::processInstruction(Instruction* Instr, UI != UE; ++UI) { Instruction* use = cast<Instruction>(*UI); // Don't need to update uses within the loop body. - if (!inLoopBlocks(use->getParent())) + if (!inLoop(use->getParent())) Uses.push_back(use); } @@ -242,7 +242,7 @@ SetVector<Instruction*> LCSSA::getLoopValuesUsedOutsideLoop(Loop *L) { for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; ++UI) { BasicBlock *UserBB = cast<Instruction>(*UI)->getParent(); - if (!std::binary_search(LoopBlocks->begin(), LoopBlocks->end(), UserBB)) + if (!std::binary_search(LoopBlocks.begin(), LoopBlocks.end(), UserBB)) { AffectedValues.insert(I); break; |