[llvm] r189988 - mi-sched: bypass heuristic checks when regpressure tracking is disabled.

Andrew Trick atrick at apple.com
Wed Sep 4 14:00:02 PDT 2013


Author: atrick
Date: Wed Sep  4 16:00:02 2013
New Revision: 189988

URL: http://llvm.org/viewvc/llvm-project?rev=189988&view=rev
Log:
mi-sched: bypass heuristic checks when regpressure tracking is disabled.

Modified:
    llvm/trunk/include/llvm/CodeGen/MachineScheduler.h
    llvm/trunk/lib/CodeGen/MachineScheduler.cpp
    llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp

Modified: llvm/trunk/include/llvm/CodeGen/MachineScheduler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineScheduler.h?rev=189988&r1=189987&r2=189988&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineScheduler.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineScheduler.h Wed Sep  4 16:00:02 2013
@@ -271,6 +271,9 @@ public:
 
   virtual ~ScheduleDAGMI();
 
+  /// Return true if register pressure tracking is enabled.
+  bool shouldTrackPressure() const { return ShouldTrackPressure; }
+
   /// Add a postprocessing step to the DAG builder.
   /// Mutations are applied in the order that they are added after normal DAG
   /// building and before MachineSchedStrategy initialization.

Modified: llvm/trunk/lib/CodeGen/MachineScheduler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineScheduler.cpp?rev=189988&r1=189987&r2=189988&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineScheduler.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineScheduler.cpp Wed Sep  4 16:00:02 2013
@@ -2363,30 +2363,32 @@ void ConvergingScheduler::tryCandidate(S
                                        const RegPressureTracker &RPTracker,
                                        RegPressureTracker &TempTracker) {
 
-  // Always initialize TryCand's RPDelta.
-  if (Zone.isTop()) {
-    TempTracker.getMaxDownwardPressureDelta(
-      TryCand.SU->getInstr(),
-      TryCand.RPDelta,
-      DAG->getRegionCriticalPSets(),
-      DAG->getRegPressure().MaxSetPressure);
-  }
-  else {
-    if (VerifyScheduling) {
-      TempTracker.getMaxUpwardPressureDelta(
+  if (DAG->shouldTrackPressure()) {
+    // Always initialize TryCand's RPDelta.
+    if (Zone.isTop()) {
+      TempTracker.getMaxDownwardPressureDelta(
         TryCand.SU->getInstr(),
-        &DAG->getPressureDiff(TryCand.SU),
         TryCand.RPDelta,
         DAG->getRegionCriticalPSets(),
         DAG->getRegPressure().MaxSetPressure);
     }
     else {
-      RPTracker.getUpwardPressureDelta(
-        TryCand.SU->getInstr(),
-        DAG->getPressureDiff(TryCand.SU),
-        TryCand.RPDelta,
-        DAG->getRegionCriticalPSets(),
-        DAG->getRegPressure().MaxSetPressure);
+      if (VerifyScheduling) {
+        TempTracker.getMaxUpwardPressureDelta(
+          TryCand.SU->getInstr(),
+          &DAG->getPressureDiff(TryCand.SU),
+          TryCand.RPDelta,
+          DAG->getRegionCriticalPSets(),
+          DAG->getRegPressure().MaxSetPressure);
+      }
+      else {
+        RPTracker.getUpwardPressureDelta(
+          TryCand.SU->getInstr(),
+          DAG->getPressureDiff(TryCand.SU),
+          TryCand.RPDelta,
+          DAG->getRegionCriticalPSets(),
+          DAG->getRegPressure().MaxSetPressure);
+      }
     }
   }
 
@@ -2403,8 +2405,9 @@ void ConvergingScheduler::tryCandidate(S
 
   // Avoid exceeding the target's limit. If signed PSetID is negative, it is
   // invalid; convert it to INT_MAX to give it lowest priority.
-  if (tryPressure(TryCand.RPDelta.Excess, Cand.RPDelta.Excess, TryCand, Cand,
-                  RegExcess))
+  if (DAG->shouldTrackPressure() && tryPressure(TryCand.RPDelta.Excess,
+                                                Cand.RPDelta.Excess,
+                                                TryCand, Cand, RegExcess))
     return;
 
   // For loops that are acyclic path limited, aggressively schedule for latency.
@@ -2412,8 +2415,9 @@ void ConvergingScheduler::tryCandidate(S
     return;
 
   // Avoid increasing the max critical pressure in the scheduled region.
-  if (tryPressure(TryCand.RPDelta.CriticalMax, Cand.RPDelta.CriticalMax,
-                  TryCand, Cand, RegCritical))
+  if (DAG->shouldTrackPressure() && tryPressure(TryCand.RPDelta.CriticalMax,
+                                                Cand.RPDelta.CriticalMax,
+                                                TryCand, Cand, RegCritical))
     return;
 
   // Keep clustered nodes together to encourage downstream peephole
@@ -2435,8 +2439,9 @@ void ConvergingScheduler::tryCandidate(S
     return;
   }
   // Avoid increasing the max pressure of the entire region.
-  if (tryPressure(TryCand.RPDelta.CurrentMax, Cand.RPDelta.CurrentMax,
-                  TryCand, Cand, RegMax))
+  if (DAG->shouldTrackPressure() && tryPressure(TryCand.RPDelta.CurrentMax,
+                                                Cand.RPDelta.CurrentMax,
+                                                TryCand, Cand, RegMax))
     return;
 
   // Avoid critical resource consumption and balance the schedule.

Modified: llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp?rev=189988&r1=189987&r2=189988&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp (original)
+++ llvm/trunk/lib/CodeGen/ScheduleDAGInstrs.cpp Wed Sep  4 16:00:02 2013
@@ -185,9 +185,6 @@ void ScheduleDAGInstrs::enterRegion(Mach
   RegionBegin = begin;
   RegionEnd = end;
   NumRegionInstrs = regioninstrs;
-  MISUnitMap.clear();
-
-  ScheduleDAG::clearDAG();
 }
 
 /// Close the current scheduling region. Don't clear any state in case the
@@ -703,6 +700,9 @@ void ScheduleDAGInstrs::buildSchedGraph(
                                                        : ST.useAA();
   AliasAnalysis *AAForDep = UseAA ? AA : 0;
 
+  MISUnitMap.clear();
+  ScheduleDAG::clearDAG();
+
   // Create an SUnit for each real instruction.
   initSUnits();
 





More information about the llvm-commits mailing list