mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-09 13:33:17 +00:00
Include loop-carried dependencies when computing instr heights.
When a trace ends with a back-edge, include PHIs in the loop header in the height computations. This makes the critical path through a loop more accurate by including the latencies of the last instructions in the loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2a33cec66a
commit
8828c4ccd4
@ -931,17 +931,29 @@ computeInstrHeights(const MachineBasicBlock *MBB) {
|
|||||||
TBI.CriticalPath = 0;
|
TBI.CriticalPath = 0;
|
||||||
|
|
||||||
// Get dependencies from PHIs in the trace successor.
|
// Get dependencies from PHIs in the trace successor.
|
||||||
if (TBI.Succ) {
|
const MachineBasicBlock *Succ = TBI.Succ;
|
||||||
for (MachineBasicBlock::const_iterator
|
// If MBB is the last block in the trace, and it has a back-edge to the
|
||||||
I = TBI.Succ->begin(), E = TBI.Succ->end();
|
// loop header, get loop-carried dependencies from PHIs in the header. For
|
||||||
|
// that purpose, pretend that all the loop header PHIs have height 0.
|
||||||
|
if (!Succ)
|
||||||
|
if (const MachineLoop *Loop = getLoopFor(MBB))
|
||||||
|
if (MBB->isSuccessor(Loop->getHeader()))
|
||||||
|
Succ = Loop->getHeader();
|
||||||
|
|
||||||
|
if (Succ) {
|
||||||
|
for (MachineBasicBlock::const_iterator I = Succ->begin(), E = Succ->end();
|
||||||
I != E && I->isPHI(); ++I) {
|
I != E && I->isPHI(); ++I) {
|
||||||
const MachineInstr *PHI = I;
|
const MachineInstr *PHI = I;
|
||||||
Deps.clear();
|
Deps.clear();
|
||||||
getPHIDeps(PHI, Deps, MBB, MTM.MRI);
|
getPHIDeps(PHI, Deps, MBB, MTM.MRI);
|
||||||
if (!Deps.empty())
|
if (!Deps.empty()) {
|
||||||
if (pushDepHeight(Deps.front(), PHI, Cycles.lookup(PHI).Height,
|
// Loop header PHI heights are all 0.
|
||||||
Heights, MTM.ItinData, MTM.TII))
|
unsigned Height = TBI.Succ ? Cycles.lookup(PHI).Height : 0;
|
||||||
|
DEBUG(dbgs() << "pred\t" << Height << '\t' << *PHI);
|
||||||
|
if (pushDepHeight(Deps.front(), PHI, Height,
|
||||||
|
Heights, MTM.ItinData, MTM.TII))
|
||||||
addLiveIns(Deps.front().DefMI, Stack);
|
addLiveIns(Deps.front().DefMI, Stack);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user