avoid copying sets and vectors around.
authorChris Lattner <sabre@nondot.org>
Sat, 14 Apr 2007 22:10:17 +0000 (22:10 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 14 Apr 2007 22:10:17 +0000 (22:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36017 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/LCSSA.cpp

index b0a8caeef963c38bceac657b5cf11b3656123fa5..0c223c53024bb247ef6dcef78d0c85126e423d90 100644 (file)
@@ -69,7 +69,8 @@ namespace {
       AU.addRequired<DominatorTree>();
     }
   private:
-    SetVector<Instruction*> getLoopValuesUsedOutsideLoop(Loop *L);
+    void getLoopValuesUsedOutsideLoop(Loop *L,
+                                      SetVector<Instruction*> &AffectedValues);
 
     Value *GetValueForBlock(DominatorTree::Node *BB, Instruction *OrigInst,
                             std::map<DominatorTree::Node*, Value*> &Phis);
@@ -110,7 +111,8 @@ bool LCSSA::visitSubloop(Loop* L) {
   LoopBlocks.insert(LoopBlocks.end(), L->block_begin(), L->block_end());
   std::sort(LoopBlocks.begin(), LoopBlocks.end());
   
-  SetVector<Instruction*> AffectedValues = getLoopValuesUsedOutsideLoop(L);
+  SetVector<Instruction*> AffectedValues;
+  getLoopValuesUsedOutsideLoop(L, AffectedValues);
   
   // If no values are affected, we can save a lot of work, since we know that
   // nothing will be changed.
@@ -196,14 +198,12 @@ void LCSSA::ProcessInstruction(Instruction *Instr,
 
 /// getLoopValuesUsedOutsideLoop - Return any values defined in the loop that
 /// are used by instructions outside of it.
-SetVector<Instruction*> LCSSA::getLoopValuesUsedOutsideLoop(Loop *L) {
-  
+void LCSSA::getLoopValuesUsedOutsideLoop(Loop *L,
+                                      SetVector<Instruction*> &AffectedValues) {
   // FIXME: For large loops, we may be able to avoid a lot of use-scanning
   // by using dominance information.  In particular, if a block does not
   // dominate any of the loop exits, then none of the values defined in the
   // block could be used outside the loop.
-  
-  SetVector<Instruction*> AffectedValues;  
   for (Loop::block_iterator BB = L->block_begin(), E = L->block_end();
        BB != E; ++BB) {
     for (BasicBlock::iterator I = (*BB)->begin(), E = (*BB)->end(); I != E; ++I)
@@ -221,7 +221,6 @@ SetVector<Instruction*> LCSSA::getLoopValuesUsedOutsideLoop(Loop *L) {
         }
       }
   }
-  return AffectedValues;
 }
 
 /// GetValueForBlock - Get the value to use within the specified basic block.