diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineScheduler.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index 757f492..d65db91 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/lib/CodeGen/MachineScheduler.cpp @@ -3897,15 +3897,28 @@ void PostGenericScheduler::initialize(ScheduleDAGMI *Dag) { void PostGenericScheduler::initPolicy(MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned NumRegionInstrs) { - if (PostRADirection == MISchedPostRASched::TopDown) { - RegionPolicy.OnlyTopDown = true; - RegionPolicy.OnlyBottomUp = false; - } else if (PostRADirection == MISchedPostRASched::BottomUp) { - RegionPolicy.OnlyTopDown = false; - RegionPolicy.OnlyBottomUp = true; - } else if (PostRADirection == MISchedPostRASched::Bidirectional) { - RegionPolicy.OnlyBottomUp = false; - RegionPolicy.OnlyTopDown = false; + const MachineFunction &MF = *Begin->getMF(); + + // Default to top-down because it was implemented first and existing targets + // expect that behavior by default. + RegionPolicy.OnlyTopDown = true; + RegionPolicy.OnlyBottomUp = false; + + // Allow the subtarget to override default policy. + MF.getSubtarget().overridePostRASchedPolicy(RegionPolicy, NumRegionInstrs); + + // After subtarget overrides, apply command line options. + if (PostRADirection.getNumOccurrences() > 0) { + if (PostRADirection == MISchedPostRASched::TopDown) { + RegionPolicy.OnlyTopDown = true; + RegionPolicy.OnlyBottomUp = false; + } else if (PostRADirection == MISchedPostRASched::BottomUp) { + RegionPolicy.OnlyTopDown = false; + RegionPolicy.OnlyBottomUp = true; + } else if (PostRADirection == MISchedPostRASched::Bidirectional) { + RegionPolicy.OnlyBottomUp = false; + RegionPolicy.OnlyTopDown = false; + } } } |