mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +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;
|
||||
|
||||
// Get dependencies from PHIs in the trace successor.
|
||||
if (TBI.Succ) {
|
||||
for (MachineBasicBlock::const_iterator
|
||||
I = TBI.Succ->begin(), E = TBI.Succ->end();
|
||||
const MachineBasicBlock *Succ = TBI.Succ;
|
||||
// If MBB is the last block in the trace, and it has a back-edge to the
|
||||
// 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) {
|
||||
const MachineInstr *PHI = I;
|
||||
Deps.clear();
|
||||
getPHIDeps(PHI, Deps, MBB, MTM.MRI);
|
||||
if (!Deps.empty())
|
||||
if (pushDepHeight(Deps.front(), PHI, Cycles.lookup(PHI).Height,
|
||||
Heights, MTM.ItinData, MTM.TII))
|
||||
if (!Deps.empty()) {
|
||||
// Loop header PHI heights are all 0.
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user