[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
This commit is contained in:
Juergen Ributzka
2014-03-25 21:21:10 +00:00
parent 7e77dabbd0
commit 63dfd62bf8

View File

@@ -109,7 +109,6 @@ class ConstantHoisting : public FunctionPass {
BasicBlock *Entry; BasicBlock *Entry;
/// Keeps track of constant candidates found in the function. /// Keeps track of constant candidates found in the function.
ConstCandMapType ConstCandMap;
ConstCandVecType ConstCandVec; ConstCandVecType ConstCandVec;
/// Keep track of cast instructions we already cloned. /// Keep track of cast instructions we already cloned.
@@ -146,7 +145,6 @@ private:
ConstantVec.clear(); ConstantVec.clear();
ClonedCastMap.clear(); ClonedCastMap.clear();
ConstCandVec.clear(); ConstCandVec.clear();
ConstCandMap.clear();
TTI = nullptr; TTI = nullptr;
DT = nullptr; DT = nullptr;
@@ -166,9 +164,11 @@ private:
BasicBlock *findIDomOfAllUses(const ConstantUseListType &Uses) const; BasicBlock *findIDomOfAllUses(const ConstantUseListType &Uses) const;
Instruction *findMatInsertPt(Instruction *Inst, unsigned Idx = ~0U) const; Instruction *findMatInsertPt(Instruction *Inst, unsigned Idx = ~0U) const;
Instruction *findConstantInsertionPoint(const ConstantInfo &ConstInfo) const; Instruction *findConstantInsertionPoint(const ConstantInfo &ConstInfo) const;
void collectConstantCandidates(Instruction *Inst, unsigned Idx, void collectConstantCandidates(ConstCandMapType &ConstCandMap,
Instruction *Inst, unsigned Idx,
ConstantInt *ConstInt); ConstantInt *ConstInt);
void collectConstantCandidates(Instruction *Inst); void collectConstantCandidates(ConstCandMapType &ConstCandMap,
Instruction *Inst);
void collectConstantCandidates(Function &Fn); void collectConstantCandidates(Function &Fn);
void findAndMakeBaseConstant(ConstCandVecType::iterator S, void findAndMakeBaseConstant(ConstCandVecType::iterator S,
ConstCandVecType::iterator E); 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 /// 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 /// could also be a cast instruction or a constant expression that uses the
// constant integer. // constant integer.
void ConstantHoisting::collectConstantCandidates(Instruction *Inst, void ConstantHoisting::collectConstantCandidates(ConstCandMapType &ConstCandMap,
Instruction *Inst,
unsigned Idx, unsigned Idx,
ConstantInt *ConstInt) { ConstantInt *ConstInt) {
unsigned Cost; unsigned Cost;
@@ -331,7 +332,8 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst,
/// \brief Scan the instruction for expensive integer constants and record them /// \brief Scan the instruction for expensive integer constants and record them
/// in the constant candidate vector. /// 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. // Skip all cast instructions. They are visited indirectly later on.
if (Inst->isCast()) if (Inst->isCast())
return; return;
@@ -345,9 +347,9 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst) {
for (unsigned Idx = 0, E = Inst->getNumOperands(); Idx != E; ++Idx) { for (unsigned Idx = 0, E = Inst->getNumOperands(); Idx != E; ++Idx) {
Value *Opnd = Inst->getOperand(Idx); Value *Opnd = Inst->getOperand(Idx);
// Vist constant integers. // Visit constant integers.
if (auto ConstInt = dyn_cast<ConstantInt>(Opnd)) { if (auto ConstInt = dyn_cast<ConstantInt>(Opnd)) {
collectConstantCandidates(Inst, Idx, ConstInt); collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
continue; continue;
} }
@@ -361,7 +363,7 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst) {
if (auto *ConstInt = dyn_cast<ConstantInt>(CastInst->getOperand(0))) { if (auto *ConstInt = dyn_cast<ConstantInt>(CastInst->getOperand(0))) {
// Pretend the constant is directly used by the instruction and ignore // Pretend the constant is directly used by the instruction and ignore
// the cast instruction. // the cast instruction.
collectConstantCandidates(Inst, Idx, ConstInt); collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
continue; continue;
} }
} }
@@ -375,7 +377,7 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst) {
if (auto ConstInt = dyn_cast<ConstantInt>(ConstExpr->getOperand(0))) { if (auto ConstInt = dyn_cast<ConstantInt>(ConstExpr->getOperand(0))) {
// Pretend the constant is directly used by the instruction and ignore // Pretend the constant is directly used by the instruction and ignore
// the constant expression. // the constant expression.
collectConstantCandidates(Inst, Idx, ConstInt); collectConstantCandidates(ConstCandMap, Inst, Idx, ConstInt);
continue; continue;
} }
} }
@@ -385,9 +387,10 @@ void ConstantHoisting::collectConstantCandidates(Instruction *Inst) {
/// \brief Collect all integer constants in the function that cannot be folded /// \brief Collect all integer constants in the function that cannot be folded
/// into an instruction itself. /// into an instruction itself.
void ConstantHoisting::collectConstantCandidates(Function &Fn) { void ConstantHoisting::collectConstantCandidates(Function &Fn) {
ConstCandMapType ConstCandMap;
for (Function::iterator BB : Fn) for (Function::iterator BB : Fn)
for (BasicBlock::iterator Inst : *BB) for (BasicBlock::iterator Inst : *BB)
collectConstantCandidates(Inst); collectConstantCandidates(ConstCandMap, Inst);
} }
/// \brief Find the base constant within the given range and rebase all other /// \brief Find the base constant within the given range and rebase all other