diff options
author | Andrew Trick <atrick@apple.com> | 2013-08-29 18:04:49 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2013-08-29 18:04:49 +0000 |
commit | 483f4199f34ce37c30f5229a52937144245a3b21 (patch) | |
tree | 0da8bc0fd75a5802d4e5961dec4137f982b5b06c /llvm/lib/CodeGen/ScheduleDAGInstrs.cpp | |
parent | f8a1baab9d54e93b7ea310f1cece3ca8223aa5b3 (diff) | |
download | bcm5719-llvm-483f4199f34ce37c30f5229a52937144245a3b21.tar.gz bcm5719-llvm-483f4199f34ce37c30f5229a52937144245a3b21.zip |
Comment and revise the cyclic critical path code.
This should be much more clear now. It's still disabled pending testing.
llvm-svn: 189597
Diffstat (limited to 'llvm/lib/CodeGen/ScheduleDAGInstrs.cpp')
-rw-r--r-- | llvm/lib/CodeGen/ScheduleDAGInstrs.cpp | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp index f6496e61877..17d31f48b1d 100644 --- a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp +++ b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp @@ -987,65 +987,6 @@ void ScheduleDAGInstrs::buildSchedGraph(AliasAnalysis *AA, PendingLoads.clear(); } -/// Compute the max cyclic critical path through the DAG. For loops that span -/// basic blocks, MachineTraceMetrics should be used for this instead. -unsigned ScheduleDAGInstrs::computeCyclicCriticalPath() { - // This only applies to single block loop. - if (!BB->isSuccessor(BB)) - return 0; - - unsigned MaxCyclicLatency = 0; - // Visit each live out vreg def to find def/use pairs that cross iterations. - for (SUnit::const_pred_iterator - PI = ExitSU.Preds.begin(), PE = ExitSU.Preds.end(); PI != PE; ++PI) { - MachineInstr *MI = PI->getSUnit()->getInstr(); - for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { - const MachineOperand &MO = MI->getOperand(i); - if (!MO.isReg() || !MO.isDef()) - break; - unsigned Reg = MO.getReg(); - if (!Reg || TRI->isPhysicalRegister(Reg)) - continue; - - const LiveInterval &LI = LIS->getInterval(Reg); - unsigned LiveOutHeight = PI->getSUnit()->getHeight(); - unsigned LiveOutDepth = PI->getSUnit()->getDepth() + PI->getLatency(); - // Visit all local users of the vreg def. - for (VReg2UseMap::iterator - UI = VRegUses.find(Reg); UI != VRegUses.end(); ++UI) { - if (UI->SU == &ExitSU) - continue; - - // Only consider uses of the phi. - LiveRangeQuery LRQ(LI, LIS->getInstructionIndex(UI->SU->getInstr())); - if (!LRQ.valueIn()->isPHIDef()) - continue; - - // Cheat a bit and assume that a path spanning two iterations is a - // cycle, which could overestimate in strange cases. This allows cyclic - // latency to be estimated as the minimum height or depth slack. - unsigned CyclicLatency = 0; - if (LiveOutDepth > UI->SU->getDepth()) - CyclicLatency = LiveOutDepth - UI->SU->getDepth(); - unsigned LiveInHeight = UI->SU->getHeight() + PI->getLatency(); - if (LiveInHeight > LiveOutHeight) { - if (LiveInHeight - LiveOutHeight < CyclicLatency) - CyclicLatency = LiveInHeight - LiveOutHeight; - } - else - CyclicLatency = 0; - DEBUG(dbgs() << "Cyclic Path: SU(" << PI->getSUnit()->NodeNum - << ") -> SU(" << UI->SU->NodeNum << ") = " - << CyclicLatency << "\n"); - if (CyclicLatency > MaxCyclicLatency) - MaxCyclicLatency = CyclicLatency; - } - } - } - DEBUG(dbgs() << "Cyclic Critical Path: " << MaxCyclicLatency << "\n"); - return MaxCyclicLatency; -} - void ScheduleDAGInstrs::dumpNode(const SUnit *SU) const { #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) SU->getInstr()->dump(); |