File tree Expand file tree Collapse file tree 1 file changed +14
-6
lines changed Expand file tree Collapse file tree 1 file changed +14
-6
lines changed Original file line number Diff line number Diff line change @@ -1469,13 +1469,16 @@ class ConvergingScheduler : public MachineSchedStrategy {
1469
1469
1470
1470
void reset () {
1471
1471
// A new HazardRec is created for each DAG and owned by SchedBoundary.
1472
- delete HazardRec;
1473
-
1472
+ // Detroying and reconstructing it is very expensive though. So keep
1473
+ // invalid, placeholder HazardRecs.
1474
+ if (HazardRec && HazardRec->isEnabled ()) {
1475
+ delete HazardRec;
1476
+ HazardRec = 0 ;
1477
+ }
1474
1478
Available.clear ();
1475
1479
Pending.clear ();
1476
1480
CheckPending = false ;
1477
1481
NextSUs.clear ();
1478
- HazardRec = 0 ;
1479
1482
CurrCycle = 0 ;
1480
1483
CurrMOps = 0 ;
1481
1484
MinReadyCycle = UINT_MAX;
@@ -1681,9 +1684,14 @@ void ConvergingScheduler::initialize(ScheduleDAGMI *dag) {
1681
1684
// are disabled, then these HazardRecs will be disabled.
1682
1685
const InstrItineraryData *Itin = SchedModel->getInstrItineraries ();
1683
1686
const TargetMachine &TM = DAG->MF .getTarget ();
1684
- Top.HazardRec = TM.getInstrInfo ()->CreateTargetMIHazardRecognizer (Itin, DAG);
1685
- Bot.HazardRec = TM.getInstrInfo ()->CreateTargetMIHazardRecognizer (Itin, DAG);
1686
-
1687
+ if (!Top.HazardRec ) {
1688
+ Top.HazardRec =
1689
+ TM.getInstrInfo ()->CreateTargetMIHazardRecognizer (Itin, DAG);
1690
+ }
1691
+ if (!Bot.HazardRec ) {
1692
+ Bot.HazardRec =
1693
+ TM.getInstrInfo ()->CreateTargetMIHazardRecognizer (Itin, DAG);
1694
+ }
1687
1695
assert ((!ForceTopDown || !ForceBottomUp) &&
1688
1696
" -misched-topdown incompatible with -misched-bottomup" );
1689
1697
}
You can’t perform that action at this time.
0 commit comments