aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp39
1 files changed, 5 insertions, 34 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
index db5ee24e3e..92dbb7cfd0 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
@@ -1071,26 +1071,6 @@ static unsigned closestSucc(const SUnit *SU) {
return MaxCycle;
}
-/// calcMaxScratches - Returns an cost estimate of the worse case requirement
-/// for scratch registers. Live-in operands and live-out results don't count
-/// since they are "fixed".
-static unsigned calcMaxScratches(const SUnit *SU) {
- unsigned Scratches = 0;
- for (SUnit::const_pred_iterator I = SU->Preds.begin(), E = SU->Preds.end();
- I != E; ++I) {
- if (I->isCtrl) continue; // ignore chain preds
- if (!I->Dep->Node || I->Dep->Node->getOpcode() != ISD::CopyFromReg)
- Scratches++;
- }
- for (SUnit::const_succ_iterator I = SU->Succs.begin(), E = SU->Succs.end();
- I != E; ++I) {
- if (I->isCtrl) continue; // ignore chain succs
- if (!I->Dep->Node || I->Dep->Node->getOpcode() != ISD::CopyToReg)
- Scratches += 10;
- }
- return Scratches;
-}
-
// Bottom up
bool bu_ls_rr_sort::operator()(const SUnit *left, const SUnit *right) const {
// There used to be a special tie breaker here that looked for
@@ -1133,23 +1113,14 @@ bool bu_ls_rr_sort::operator()(const SUnit *left, const SUnit *right) const {
if (LDist < RDist)
return true;
else if (LDist == RDist) {
- // Intuitively, it's good to push down instructions whose results are
- // liveout so their long live ranges won't conflict with other values
- // which are needed inside the BB. Further prioritize liveout instructions
- // by the number of operands which are calculated within the BB.
- unsigned LScratch = calcMaxScratches(left);
- unsigned RScratch = calcMaxScratches(right);
- if (LScratch > RScratch)
+ if (left->Height > right->Height)
return true;
- else if (LScratch == RScratch)
- if (left->Height > right->Height)
+ else if (left->Height == right->Height)
+ if (left->Depth < right->Depth)
return true;
- else if (left->Height == right->Height)
- if (left->Depth < right->Depth)
+ else if (left->Depth == right->Depth)
+ if (left->CycleBound > right->CycleBound)
return true;
- else if (left->Depth == right->Depth)
- if (left->CycleBound > right->CycleBound)
- return true;
}
}
return false;