Lines Matching +full:pressure +full:- +full:min

1 //===- GCNIterativeScheduler.cpp ------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
20 #define DEBUG_TYPE "machine-scheduler"
36 return SU->getInstr(); in getMachineInstr()
50 auto BB = Begin->getParent(); in printRegion()
51 OS << BB->getParent()->getName() << ":" << printMBBReference(*BB) << ' ' in printRegion()
52 << BB->getName() << ":\n"; in printRegion()
55 for (; I != End && MaxInstNum; ++I, --MaxInstNum) { in printRegion()
56 if (!I->isDebugInstr() && LIS) in printRegion()
57 OS << LIS->getInstructionIndex(*I); in printRegion()
63 if (!I->isDebugInstr() && LIS) in printRegion()
64 OS << LIS->getInstructionIndex(*I); in printRegion()
67 if (End != BB->end()) { // print boundary inst if present in printRegion()
68 OS << "----\n"; in printRegion()
69 if (LIS) OS << LIS->getInstructionIndex(*End) << '\t'; in printRegion()
79 const auto BB = Begin->getParent(); in printLivenessInfo()
80 const auto &MRI = BB->getParent()->getRegInfo(); in printLivenessInfo()
85 const auto BottomMI = End == BB->end() ? std::prev(End) : End; in printLivenessInfo()
95 printRegion(OS, R->Begin, R->End, LIS, 1); in printRegions()
96 printLivenessInfo(OS, R->Begin, R->End, LIS); in printRegions()
97 OS << "Max RP: " << print(R->MaxPressure, &ST); in printRegions()
106 printRegion(OS, R->Begin, R->End, LIS); in printSchedResult()
107 printSchedRP(OS, R->MaxPressure, RP); in printSchedResult()
130 auto BB = R.Begin->getParent(); in BuildDAG()
168 auto BB = R.Begin->getParent(); in OverrideLegacyStrategy()
225 // returns max pressure for a region
230 // For the purpose of pressure tracking bottom inst of the region should in getRegionPressure()
233 auto const BBEnd = Begin->getParent()->end(); in getRegionPressure()
246 for (auto I = BottomMI; I != Begin; --I) in getRegionPressure()
257 // returns max pressure for a tentative schedule
261 auto const BBEnd = R.Begin->getParent()->end(); in getSchedulePressure()
273 RPTracker.recede(*getMachineInstr(*--I)); in getSchedulePressure()
294 if (!Regions.empty() && Regions.back()->Begin == RegionBegin) { in schedule()
296 << print(Regions.back()->MaxPressure, in schedule()
325 Res.push_back(SU->getInstr()); in detachSchedule()
327 return P.second == SU->getInstr(); in detachSchedule()
330 Res.push_back(D->first); in detachSchedule()
344 scheduleRegion(R, R.BestSchedule->Schedule, R.BestSchedule->MaxPressure); in scheduleBest()
358 auto BB = R.Begin->getParent(); in scheduleRegion()
363 BB->remove(MI); in scheduleRegion()
364 BB->insert(Top, MI); in scheduleRegion()
365 if (!MI->isDebugInstr()) in scheduleRegion()
366 LIS->handleMove(*MI, true); in scheduleRegion()
368 if (!MI->isDebugInstr()) { in scheduleRegion()
369 // Reset read - undef flags and update them later. in scheduleRegion()
370 for (auto &Op : MI->all_defs()) in scheduleRegion()
376 // Adjust liveness and add missing dead+read-undef flags. in scheduleRegion()
377 auto SlotIdx = LIS->getInstructionIndex(*MI).getRegSlot(); in scheduleRegion()
380 Top = std::next(MI->getIterator()); in scheduleRegion()
410 // Sort recorded regions by pressure - highest at the front
413 return R2->MaxPressure.less(MF, R1->MaxPressure, TargetOcc); in sortRegionsByPressure()
427 // TODO: assert Regions are sorted descending by pressure in tryMaximizeOccupancy()
429 const auto Occ = Regions.front()->MaxPressure.getOccupancy(ST); in tryMaximizeOccupancy()
435 if (R->MaxPressure.getOccupancy(ST) >= NewOcc) in tryMaximizeOccupancy()
438 LLVM_DEBUG(printRegion(dbgs(), R->Begin, R->End, LIS, 3); in tryMaximizeOccupancy()
439 printLivenessInfo(dbgs(), R->Begin, R->End, LIS)); in tryMaximizeOccupancy()
445 printSchedRP(dbgs(), R->MaxPressure, MaxRP)); in tryMaximizeOccupancy()
447 NewOcc = std::min(NewOcc, MaxRP.getOccupancy(ST)); in tryMaximizeOccupancy()
457 MFI->increaseOccupancy(MF, NewOcc); in tryMaximizeOccupancy()
467 auto TgtOcc = MFI->getMinAllowedOccupancy(); in scheduleLegacyMaxOccupancy()
470 auto Occ = Regions.front()->MaxPressure.getOccupancy(ST); in scheduleLegacyMaxOccupancy()
479 TgtOcc = std::min(Occ, TgtOcc); in scheduleLegacyMaxOccupancy()
484 unsigned FinalOccupancy = std::min(Occ, MFI->getOccupancy()); in scheduleLegacyMaxOccupancy()
495 LLVM_DEBUG(printSchedRP(dbgs(), R->MaxPressure, RP)); in scheduleLegacyMaxOccupancy()
499 if (R->BestSchedule.get() && in scheduleLegacyMaxOccupancy()
500 R->BestSchedule->MaxPressure.getOccupancy(ST) >= TgtOcc) { in scheduleLegacyMaxOccupancy()
506 assert(R->MaxPressure.getOccupancy(ST) >= TgtOcc); in scheduleLegacyMaxOccupancy()
509 FinalOccupancy = std::min(FinalOccupancy, RP.getOccupancy(ST)); in scheduleLegacyMaxOccupancy()
512 MFI->limitOccupancy(FinalOccupancy); in scheduleLegacyMaxOccupancy()
520 const auto TgtOcc = MFI->getOccupancy(); in scheduleMinReg()
523 auto MaxPressure = Regions.front()->MaxPressure; in scheduleMinReg()
525 if (!force && R->MaxPressure.less(MF, MaxPressure, TgtOcc)) in scheduleMinReg()
532 LLVM_DEBUG(if (R->MaxPressure.less(MF, RP, TgtOcc)) { in scheduleMinReg()
533 dbgs() << "\nWarning: Pressure becomes worse after minreg!"; in scheduleMinReg()
534 printSchedRP(dbgs(), R->MaxPressure, RP); in scheduleMinReg()
554 auto TgtOcc = MFI->getMinAllowedOccupancy(); in scheduleILP()
557 auto Occ = Regions.front()->MaxPressure.getOccupancy(ST); in scheduleILP()
562 TgtOcc = std::min(Occ, TgtOcc); in scheduleILP()
567 unsigned FinalOccupancy = std::min(Occ, MFI->getOccupancy()); in scheduleILP()
573 LLVM_DEBUG(printSchedRP(dbgs(), R->MaxPressure, RP)); in scheduleILP()
577 if (R->BestSchedule.get() && in scheduleILP()
578 R->BestSchedule->MaxPressure.getOccupancy(ST) >= TgtOcc) { in scheduleILP()
585 FinalOccupancy = std::min(FinalOccupancy, RP.getOccupancy(ST)); in scheduleILP()
588 MFI->limitOccupancy(FinalOccupancy); in scheduleILP()