mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +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 {
|
||||
ConstantUseListType Uses;
|
||||
Constant *Offset;
|
||||
mutable BasicBlock *IDom;
|
||||
|
||||
RebasedConstantInfo(ConstantUseListType &&Uses, Constant *Offset)
|
||||
: Uses(Uses), Offset(Offset), IDom(nullptr) { }
|
||||
: Uses(Uses), Offset(Offset) { }
|
||||
};
|
||||
|
||||
/// \brief A base constant and all its rebased constants.
|
||||
@ -151,17 +150,6 @@ private:
|
||||
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 *findConstantInsertionPoint(const ConstantInfo &ConstInfo) const;
|
||||
void collectConstantCandidates(ConstCandMapType &ConstCandMap,
|
||||
@ -214,32 +202,6 @@ bool ConstantHoisting::runOnFunction(Function &Fn) {
|
||||
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.
|
||||
Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst,
|
||||
@ -262,12 +224,11 @@ Instruction *ConstantHoisting::findMatInsertPt(Instruction *Inst,
|
||||
Instruction *ConstantHoisting::
|
||||
findConstantInsertionPoint(const ConstantInfo &ConstInfo) const {
|
||||
assert(!ConstInfo.RebasedConstants.empty() && "Invalid constant info entry.");
|
||||
// Collect all IDoms.
|
||||
// Collect all basic blocks.
|
||||
SmallPtrSet<BasicBlock *, 8> BBs;
|
||||
for (auto const &RCI : ConstInfo.RebasedConstants)
|
||||
BBs.insert(getIDom(RCI));
|
||||
|
||||
assert(!BBs.empty() && "No dominators!?");
|
||||
for (auto const &U : RCI.Uses)
|
||||
BBs.insert(U.Inst->getParent());
|
||||
|
||||
if (BBs.count(Entry))
|
||||
return &Entry->front();
|
||||
|
Loading…
Reference in New Issue
Block a user