diff options
author | Lucas Ramirez <11032120+lucas-rami@users.noreply.github.com> | 2025-03-04 17:46:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-04 17:46:44 +0100 |
commit | 03677f63a7d3f8bfd50407b5fa2a86f8fbcc162f (patch) | |
tree | 4395d2c3543c9870f5c5b0d50d77664933643d3f /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 43a1a337284703c9460d35a931f1b8c362c72a83 (diff) | |
download | llvm-03677f63a7d3f8bfd50407b5fa2a86f8fbcc162f.zip llvm-03677f63a7d3f8bfd50407b5fa2a86f8fbcc162f.tar.gz llvm-03677f63a7d3f8bfd50407b5fa2a86f8fbcc162f.tar.bz2 |
[MachineScheduler] Optional scheduling of single-MI regions (#129704)
Following 15e295d the machine scheduler no longer filters-out single-MI
regions when emitting regions to schedule. While this has no functional
impact at the moment, it generally has a negative compile-time impact
(see #128739).
Since all targets but AMDGPU do not care for this behavior, this
introduces an off-by-default flag to `ScheduleDAGInstrs` to control
whether such regions are going to be scheduled, effectively reverting
15e295d for all targets but AMDGPU (currently the only target enabling
this flag).
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineScheduler.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index 0c0c616..2a790a2 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/lib/CodeGen/MachineScheduler.cpp @@ -769,6 +769,7 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler, MBBRegionsVector MBBRegions; getSchedRegions(&*MBB, MBBRegions, Scheduler.doMBBSchedRegionsTopDown()); + bool ScheduleSingleMI = Scheduler.shouldScheduleSingleMIRegions(); for (const SchedRegion &R : MBBRegions) { MachineBasicBlock::iterator I = R.RegionBegin; MachineBasicBlock::iterator RegionEnd = R.RegionEnd; @@ -778,11 +779,9 @@ void MachineSchedulerBase::scheduleRegions(ScheduleDAGInstrs &Scheduler, // it. Perhaps it still needs to be bundled. Scheduler.enterRegion(&*MBB, I, RegionEnd, NumRegionInstrs); - // Skip empty scheduling regions but include single-MI regions; we want - // those to be scheduled so that backends which move MIs across regions - // during scheduling can reason about and schedule those regions - // correctly. - if (I == RegionEnd) { + // Skip empty scheduling regions and, conditionally, regions with a single + // MI. + if (I == RegionEnd || (!ScheduleSingleMI && I == std::prev(RegionEnd))) { // Close the current region. Bundle the terminator if needed. // This invalidates 'RegionEnd' and 'I'. Scheduler.exitRegion(); |