[llvm] r204758 - [Constant Hoisting] Make the constant candidate map local to the collectConstantCandidates method.

Juergen Ributzka juergen at apple.com
Tue Mar 25 14:21:10 PDT 2014


Author: ributzka
Date: Tue Mar 25 16:21:10 2014
New Revision: 204758

URL: http://llvm.org/viewvc/llvm-project?rev=204758&view=rev
Log:
[Constant Hoisting] Make the constant candidate map local to the collectConstantCandidates method.

Modified:
    llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp?rev=204758&r1=204757&r2=204758&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp Tue Mar 25 16:21:10 2014
@@ -109,7 +109,6 @@ class ConstantHoisting : public Function
   BasicBlock *Entry;
 
   /// Keeps track of constant candidates found in the function.
-  ConstCandMapType ConstCandMap;
   ConstCandVecType ConstCandVec;
 
   /// Keep track of cast instructions we already cloned.
@@ -146,7 +145,6 @@ private:
     ConstantVec.clear();
     ClonedCastMap.clear();
     ConstCandVec.clear();
-    ConstCandMap.clear();
 
     TTI = nullptr;
     DT = nullptr;
@@ -166,9 +164,11 @@ private:
   BasicBlock *findIDomOfAllUses(const ConstantUseListType &Uses) const;
   Instruction *findMatInsertPt(Instruction *Inst, unsigned Idx = ~0U) const;
   Instruction *findConstantInsertionPoint(const ConstantInfo &ConstInfo) const;
-  void collectConstantCandidates(Instruction *Inst, unsigned Idx,
+  void collectConstantCandidates(ConstCandMapType &ConstCandMap,
+                                 Instruction *Inst, unsigned Idx,
                                  ConstantInt *ConstInt);
-  void collectConstantCandidates(Instruction *Inst);
+  void collectConstantCandidates(ConstCandMapType &ConstCandMap,
+                                 Instruction *Inst);
   void collectConstantCandidates(Function &Fn);
   void findAndMakeBaseConstant(ConstCandVecType::iterator S,
                                ConstCandVecType::iterator E);
@@ -295,7 +295,8 @@ findConstantInsertionPoint(const Constan
 /// The operand at index Idx is not necessarily the constant integer itself. It
 /// could also be a cast instruction or a constant expression that uses the
 // constant integer.
-void ConstantHoisting::collectConstantCandidates(Instruction *Inst,
+void ConstantHoisting::collectConstantCandidates(ConstCandMapType &ConstCandMap,
+                                                 Instruction *Inst,
                                                  unsigned Idx,
                                                  ConstantInt *ConstInt) {
   unsigned Cost;
@@ -331,7 +332,8 @@ void ConstantHoisting::collectConstantCa
 
 /// \brief Scan the instruction for expensive integer constants and record them
 /// in the constant candidate vector.
-void ConstantHoisting::collectConstantCandidates(Instruction *Inst) {
+void ConstantHoisting::collectConstantCandidates(ConstCandMapType &ConstCandMap,
+                                                 Instruction *Inst) {
   // Skip all cast instructions. They are visited indirectly later on.
   if (Inst->isCast())
     return;
@@ -345,9 +347,9 @@ void ConstantHoisting::collectConstantCa
   for (unsigned Idx = 0, E = Inst->getNumOperands(); Idx != E; ++Idx) {
     Value *Opnd = Inst->getOperand(Idx);
 
-    // Vist constant integers.
+    // Visit constant integers.
     if (auto ConstInt = dyn_cast<ConstantInt>(Opnd)) {
-      collectConstantCandidates(Inst, Idx, ConstInt);
+      collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
       continue;
     }
 
@@ -361,7 +363,7 @@ void ConstantHoisting::collectConstantCa
       if (auto *ConstInt = dyn_cast<ConstantInt>(CastInst->getOperand(0))) {
         // Pretend the constant is directly used by the instruction and ignore
         // the cast instruction.
-        collectConstantCandidates(Inst, Idx, ConstInt);
+        collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
         continue;
       }
     }
@@ -375,7 +377,7 @@ void ConstantHoisting::collectConstantCa
       if (auto ConstInt = dyn_cast<ConstantInt>(ConstExpr->getOperand(0))) {
         // Pretend the constant is directly used by the instruction and ignore
         // the constant expression.
-        collectConstantCandidates(Inst, Idx, ConstInt);
+        collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
         continue;
       }
     }
@@ -385,9 +387,10 @@ void ConstantHoisting::collectConstantCa
 /// \brief Collect all integer constants in the function that cannot be folded
 /// into an instruction itself.
 void ConstantHoisting::collectConstantCandidates(Function &Fn) {
+  ConstCandMapType ConstCandMap;
   for (Function::iterator BB : Fn)
     for (BasicBlock::iterator Inst : *BB)
-      collectConstantCandidates(Inst);
+      collectConstantCandidates(ConstCandMap, Inst);
 }
 
 /// \brief Find the base constant within the given range and rebase all other





More information about the llvm-commits mailing list