From 63dfd62bf84b5905725070f8b9a0623165654b5f Mon Sep 17 00:00:00 2001 From: Juergen Ributzka Date: Tue, 25 Mar 2014 21:21:10 +0000 Subject: [PATCH] [Constant Hoisting] Make the constant candidate map local to the collectConstantCandidates method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204758 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/ConstantHoisting.cpp | 25 ++++++++++++---------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/Transforms/Scalar/ConstantHoisting.cpp b/lib/Transforms/Scalar/ConstantHoisting.cpp index cd0801d1efa..b8c282a4e56 100644 --- a/lib/Transforms/Scalar/ConstantHoisting.cpp +++ b/lib/Transforms/Scalar/ConstantHoisting.cpp @@ -109,7 +109,6 @@ class ConstantHoisting : public FunctionPass { 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 ConstantInfo &ConstInfo) const { /// 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::collectConstantCandidates(Instruction *Inst, /// \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::collectConstantCandidates(Instruction *Inst) { 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(Opnd)) { - collectConstantCandidates(Inst, Idx, ConstInt); + collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt); continue; } @@ -361,7 +363,7 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst) { if (auto *ConstInt = dyn_cast(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::collectConstantCandidates(Instruction *Inst) { if (auto ConstInt = dyn_cast(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::collectConstantCandidates(Instruction *Inst) { /// \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