From 28ebc89c413c042bf693d9ad6971f0fb5cca2f0f Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Thu, 10 May 2012 21:06:19 +0000 Subject: [PATCH] misched: tracing register pressure heuristics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156575 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineScheduler.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index b362708fce2..650fa5da88e 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -724,11 +724,28 @@ public: BotQueue.push(SU); } protected: +#ifndef NDEBUG + void traceCandidate(const char *Label, unsigned QID, SUnit *SU, + int RPDiff, unsigned PSetID); +#endif bool pickNodeFromQueue(ReadyQ &Q, const RegPressureTracker &RPTracker, SchedCandidate &Candidate); }; } // namespace +#ifndef NDEBUG +void ConvergingScheduler:: +traceCandidate(const char *Label, unsigned QID, SUnit *SU, + int RPDiff, unsigned PSetID) { + dbgs() << Label << getQName(QID) << " "; + if (RPDiff) + dbgs() << TRI->getRegPressureSetName(PSetID) << ":" << RPDiff << " "; + else + dbgs() << " "; + SU->dump(DAG); +} +#endif + /// Pick the best candidate from the top queue. /// /// TODO: getMaxPressureDelta results can be mostly cached for each SUnit during @@ -749,6 +766,8 @@ bool ConvergingScheduler::pickNodeFromQueue(ReadyQ &Q, // Avoid exceeding the target's limit. if (!Candidate.SU || RPDelta.ExcessUnits < Candidate.RPDelta.ExcessUnits) { + DEBUG(traceCandidate(Candidate.SU ? "PCAND" : "ACAND", Q.ID, *I, + RPDelta.ExcessUnits, RPDelta.ExcessSetID)); Candidate.SU = *I; Candidate.RPDelta = RPDelta; FoundCandidate = true; @@ -759,15 +778,11 @@ bool ConvergingScheduler::pickNodeFromQueue(ReadyQ &Q, // Avoid increasing the max pressure. if (RPDelta.MaxUnitIncrease < Candidate.RPDelta.MaxUnitIncrease) { + DEBUG(traceCandidate("MCAND", Q.ID, *I, + RPDelta.ExcessUnits, RPDelta.ExcessSetID)); Candidate.SU = *I; Candidate.RPDelta = RPDelta; FoundCandidate = true; - - DEBUG(dbgs() << "CAND " << getQName(Q.ID) << " "; - if (RPDelta.MaxUnitIncrease) - dbgs() << TRI->getRegPressureSetName(RPDelta.MaxSetID) << ":" - << RPDelta.MaxUnitIncrease << " "; - (*I)->dump(DAG); dbgs() << "\n"); continue; } if (RPDelta.MaxUnitIncrease > Candidate.RPDelta.MaxUnitIncrease) @@ -780,6 +795,7 @@ bool ConvergingScheduler::pickNodeFromQueue(ReadyQ &Q, if ((Q.ID == TopQID && (*I)->NodeNum < Candidate.SU->NodeNum) || (Q.ID == BotQID && (*I)->NodeNum > Candidate.SU->NodeNum)) { + DEBUG(traceCandidate("NCAND", Q.ID, *I, 0, 0)); Candidate.SU = *I; Candidate.RPDelta = RPDelta; FoundCandidate = true; -- 2.34.1