mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 22:28:18 +00:00
[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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user