[llvm-commits] [llvm] r123892 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
Bill Wendling
wendling at apple.com
Tue Jan 25 13:48:20 PST 2011
On Jan 19, 2011, at 10:21 PM, Andrew Trick wrote:
> Author: atrick
> Date: Thu Jan 20 00:21:59 2011
> New Revision: 123892
>
> URL: http://llvm.org/viewvc/llvm-project?rev=123892&view=rev
> Log:
> Selection DAG scheduler register pressure heuristic fixes.
>
> Added a check for already live regs before claiming HighRegPressure.
> Fixed a few cases of checking the wrong number of successors.
> Added some tracing until these heuristics are better understood.
>
> Modified:
> llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=123892&r1=123891&r2=123892&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Thu Jan 20 00:21:59 2011
> @@ -1589,6 +1589,8 @@
> CalcNodeSethiUllmanNumber(SU, SethiUllmanNumbers);
> }
>
> +// Lower priority means schedule further down. For bottom-up scheduling, lower
> +// priority SUs are scheduled before higher priority SUs.
> unsigned RegReductionPQBase::getNodePriority(const SUnit *SU) const {
> assert(SU->NodeNum < SethiUllmanNumbers.size());
> unsigned Opc = SU->getNode() ? SU->getNode()->getOpcode() : 0;
> @@ -1641,6 +1643,14 @@
> if (I->isCtrl())
> continue;
> SUnit *PredSU = I->getSUnit();
> + // NumSuccsLeft counts all deps. Don't compare it with NumSuccs which only
> + // counts data deps. To be more precise, we could maintain a
> + // NumDataSuccsLeft count.
> + if (PredSU->NumSuccsLeft != PredSU->Succs.size()) {
> + DEBUG(dbgs() << " SU(" << PredSU->NodeNum << ") live across SU("
> + << SU->NodeNum << ")\n");
> + continue;
> + }
> const SDNode *PN = PredSU->getNode();
> if (!PN->isMachineOpcode()) {
> if (PN->getOpcode() == ISD::CopyFromReg) {
> @@ -1735,7 +1745,9 @@
> if (I->isCtrl())
> continue;
> SUnit *PredSU = I->getSUnit();
> - if (PredSU->NumSuccsLeft != PredSU->NumSuccs)
> + // NumSuccsLeft counts all deps. Don't compare it with NumSuccs which only
> + // counts data deps.
> + if (PredSU->NumSuccsLeft != PredSU->Succs.size())
> continue;
> const SDNode *PN = PredSU->getNode();
> if (!PN->isMachineOpcode()) {
> @@ -1814,7 +1826,9 @@
> if (I->isCtrl())
> continue;
> SUnit *PredSU = I->getSUnit();
> - if (PredSU->NumSuccsLeft != PredSU->NumSuccs)
> + // NumSuccsLeft counts all deps. Don't compare it with NumSuccs which only
> + // counts data deps.
> + if (PredSU->NumSuccsLeft != PredSU->Succs.size())
> continue;
> const SDNode *PN = PredSU->getNode();
> if (!PN->isMachineOpcode()) {
> @@ -2003,12 +2017,11 @@
> int LDepth = (int)left->getDepth();
> int RDepth = (int)right->getDepth();
>
> - DEBUG(dbgs() << " Comparing latency of SU #" << left->NodeNum
> - << " depth " << LDepth << " vs SU #" << right->NodeNum
> - << " depth " << RDepth << "\n");
> -
> if (EnableSchedCycles) {
> if (LDepth != RDepth)
> + DEBUG(dbgs() << " Comparing latency of SU (" << left->NodeNum
> + << ") depth " << LDepth << " vs SU (" << right->NodeNum
> + << ") depth " << RDepth << ")\n");
> return LDepth < RDepth ? 1 : -1;
Hi Andy,
Did you mean to move the return statement out of that if-statement?
-bw
> }
> else {
> @@ -2119,10 +2132,16 @@
> bool RHigh = SPQ->HighRegPressure(right);
> // Avoid causing spills. If register pressure is high, schedule for
> // register pressure reduction.
> - if (LHigh && !RHigh)
> + if (LHigh && !RHigh) {
> + DEBUG(dbgs() << " pressure SU(" << left->NodeNum << ") > SU("
> + << right->NodeNum << ")\n");
> return true;
> - else if (!LHigh && RHigh)
> + }
> + else if (!LHigh && RHigh) {
> + DEBUG(dbgs() << " pressure SU(" << right->NodeNum << ") > SU("
> + << left->NodeNum << ")\n");
> return false;
> + }
> else if (!LHigh && !RHigh) {
> int result = BUCompareLatency(left, right, true /*checkPref*/, SPQ);
> if (result != 0)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list