mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Revert "[Constant Hoisting] Lazily compute the idom and cache the result."
This code is no longer usefull, because we only compute and use the IDom once. There is no benefit in caching it anymore. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205498 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d68b03bcd2
commit
7fce127f62
@ -87,10 +87,9 @@ struct ConstantCandidate {
|
|||||||
struct RebasedConstantInfo {
|
struct RebasedConstantInfo {
|
||||||
ConstantUseListType Uses;
|
ConstantUseListType Uses;
|
||||||
Constant *Offset;
|
Constant *Offset;
|
||||||
mutable BasicBlock *IDom;
|
|
||||||
|
|
||||||
RebasedConstantInfo(ConstantUseListType &&Uses, Constant *Offset)
|
RebasedConstantInfo(ConstantUseListType &&Uses, Constant *Offset)
|
||||||
: Uses(Uses), Offset(Offset), IDom(nullptr) { }
|
: Uses(Uses), Offset(Offset) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief A base constant and all its rebased constants.
|
/// \brief A base constant and all its rebased constants.
|
||||||
@ -151,17 +150,6 @@ private:
|
|||||||
Entry = nullptr;
|
Entry = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Find the common dominator of all uses and cache the result for
|
|
||||||
/// future lookup.
|
|
||||||
BasicBlock *getIDom(const RebasedConstantInfo &RCI) const {
|
|
||||||
if (RCI.IDom)
|
|
||||||
return RCI.IDom;
|
|
||||||
RCI.IDom = findIDomOfAllUses(RCI.Uses);
|
|
||||||
assert(RCI.IDom && "Invalid IDom.");
|
|
||||||
return RCI.IDom;
|
|
||||||
}
|
|
||||||
|
|
||||||
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(ConstCandMapType &ConstCandMap,
|
void collectConstantCandidates(ConstCandMapType &ConstCandMap,
|
||||||
@ -214,32 +202,6 @@ bool ConstantHoisting::runOnFunction(Function &Fn) {
|
|||||||
return MadeChange;
|
return MadeChange;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Find nearest common dominator of all uses.
|
|
||||||
/// FIXME: Replace this with NearestCommonDominator once it is in common code.
|
|
||||||
BasicBlock *
|
|
||||||
ConstantHoisting::findIDomOfAllUses(const ConstantUseListType &Uses) const {
|
|
||||||
// Collect all basic blocks.
|
|
||||||
SmallPtrSet<BasicBlock *, 8> BBs;
|
|
||||||
for (auto const &U : Uses)
|
|
||||||
BBs.insert(findMatInsertPt(U.Inst, U.OpndIdx)->getParent());
|
|
||||||
|
|
||||||
if (BBs.count(Entry))
|
|
||||||
return Entry;
|
|
||||||
|
|
||||||
while (BBs.size() >= 2) {
|
|
||||||
BasicBlock *BB, *BB1, *BB2;
|
|
||||||
BB1 = *BBs.begin();
|
|
||||||
BB2 = *std::next(BBs.begin());
|
|
||||||
BB = DT->findNearestCommonDominator(BB1, BB2);
|
|
||||||
if (BB == Entry)
|
|
||||||
return Entry;
|
|
||||||
BBs.erase(BB1);
|
|
||||||
BBs.erase(BB2);
|
|
||||||
BBs.insert(BB);
|
|
||||||
}
|
|
||||||
assert((BBs.size() == 1) && "Expected only one element.");
|
|
||||||
return *BBs.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// \brief Find the constant materialization insertion point.
|
/// \brief Find the constant materialization insertion point.
|
||||||
Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst,
|
Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst,
|
||||||
@ -262,12 +224,11 @@ Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst,
|
|||||||
Instruction *ConstantHoisting::
|
Instruction *ConstantHoisting::
|
||||||
findConstantInsertionPoint(const ConstantInfo &ConstInfo) const {
|
findConstantInsertionPoint(const ConstantInfo &ConstInfo) const {
|
||||||
assert(!ConstInfo.RebasedConstants.empty() && "Invalid constant info entry.");
|
assert(!ConstInfo.RebasedConstants.empty() && "Invalid constant info entry.");
|
||||||
// Collect all IDoms.
|
// Collect all basic blocks.
|
||||||
SmallPtrSet<BasicBlock *, 8> BBs;
|
SmallPtrSet<BasicBlock *, 8> BBs;
|
||||||
for (auto const &RCI : ConstInfo.RebasedConstants)
|
for (auto const &RCI : ConstInfo.RebasedConstants)
|
||||||
BBs.insert(getIDom(RCI));
|
for (auto const &U : RCI.Uses)
|
||||||
|
BBs.insert(U.Inst->getParent());
|
||||||
assert(!BBs.empty() && "No dominators!?");
|
|
||||||
|
|
||||||
if (BBs.count(Entry))
|
if (BBs.count(Entry))
|
||||||
return &Entry->front();
|
return &Entry->front();
|
||||||
|
Loading…
Reference in New Issue
Block a user