aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/MachineScheduler.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-05-10 21:06:19 +0000
committerAndrew Trick <atrick@apple.com>2012-05-10 21:06:19 +0000
commit28ebc89c413c042bf693d9ad6971f0fb5cca2f0f (patch)
tree89ccb01af3ef81e67a1b729912b256f5c2c34c26 /lib/CodeGen/MachineScheduler.cpp
parent7196a8ff213338b9b09ee48efb9c96b699726d5d (diff)
misched: tracing register pressure heuristics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156575 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineScheduler.cpp')
-rw-r--r--lib/CodeGen/MachineScheduler.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp
index b362708fce..650fa5da88 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;