@@ -77,30 +77,30 @@ STATISTIC(NumClustered, "Number of load/store pairs clustered");
7777
7878namespace llvm {
7979
80- cl::opt<bool > ForceTopDown (" misched-topdown" , cl::Hidden,
81- cl::desc (" Force top-down list scheduling" ));
82- cl::opt<bool > ForceBottomUp (" misched-bottomup" , cl::Hidden,
83- cl::desc (" Force bottom-up list scheduling" ));
84- namespace MISchedPostRASched {
85- enum Direction {
86- TopDown,
87- BottomUp,
88- Bidirectional,
89- };
90- } // end namespace MISchedPostRASched
91- cl::opt<MISchedPostRASched::Direction> PostRADirection (
80+ cl::opt<MISched::Direction> PreRADirection (
81+ " misched-prera-direction" , cl::Hidden,
82+ cl::desc (" Pre reg-alloc list scheduling direction" ),
83+ cl::init(MISched::Unspecified),
84+ cl::values(
85+ clEnumValN (MISched::TopDown, " topdown" ,
86+ " Force top-down pre reg-alloc list scheduling" ),
87+ clEnumValN(MISched::BottomUp, " bottomup" ,
88+ " Force bottom-up pre reg-alloc list scheduling" ),
89+ clEnumValN(MISched::Bidirectional, " bidirectional" ,
90+ " Force bidirectional pre reg-alloc list scheduling" )));
91+
92+ cl::opt<MISched::Direction> PostRADirection (
9293 " misched-postra-direction" , cl::Hidden,
9394 cl::desc (" Post reg-alloc list scheduling direction" ),
94- // Default to top-down because it was implemented first and existing targets
95- // expect that behavior by default.
96- cl::init(MISchedPostRASched::TopDown),
95+ cl::init(MISched::Unspecified),
9796 cl::values(
98- clEnumValN (MISchedPostRASched ::TopDown, " topdown" ,
97+ clEnumValN (MISched ::TopDown, " topdown" ,
9998 " Force top-down post reg-alloc list scheduling" ),
100- clEnumValN(MISchedPostRASched ::BottomUp, " bottomup" ,
99+ clEnumValN(MISched ::BottomUp, " bottomup" ,
101100 " Force bottom-up post reg-alloc list scheduling" ),
102- clEnumValN(MISchedPostRASched ::Bidirectional, " bidirectional" ,
101+ clEnumValN(MISched ::Bidirectional, " bidirectional" ,
103102 " Force bidirectional post reg-alloc list scheduling" )));
103+
104104cl::opt<bool >
105105DumpCriticalPathLength (" misched-dcpl" , cl::Hidden,
106106 cl::desc (" Print critical path length to stdout" ));
@@ -3307,19 +3307,15 @@ void GenericScheduler::initPolicy(MachineBasicBlock::iterator Begin,
33073307 RegionPolicy.ShouldTrackLaneMasks = false ;
33083308 }
33093309
3310- // Check -misched-topdown/bottomup can force or unforce scheduling direction.
3311- // e.g. -misched-bottomup=false allows scheduling in both directions.
3312- assert ((!ForceTopDown || !ForceBottomUp) &&
3313- " -misched-topdown incompatible with -misched-bottomup" );
3314- if (ForceBottomUp.getNumOccurrences () > 0 ) {
3315- RegionPolicy.OnlyBottomUp = ForceBottomUp;
3316- if (RegionPolicy.OnlyBottomUp )
3317- RegionPolicy.OnlyTopDown = false ;
3318- }
3319- if (ForceTopDown.getNumOccurrences () > 0 ) {
3320- RegionPolicy.OnlyTopDown = ForceTopDown;
3321- if (RegionPolicy.OnlyTopDown )
3322- RegionPolicy.OnlyBottomUp = false ;
3310+ if (PreRADirection == MISched::TopDown) {
3311+ RegionPolicy.OnlyTopDown = true ;
3312+ RegionPolicy.OnlyBottomUp = false ;
3313+ } else if (PreRADirection == MISched::BottomUp) {
3314+ RegionPolicy.OnlyTopDown = false ;
3315+ RegionPolicy.OnlyBottomUp = true ;
3316+ } else if (PreRADirection == MISched::Bidirectional) {
3317+ RegionPolicy.OnlyBottomUp = false ;
3318+ RegionPolicy.OnlyTopDown = false ;
33233319 }
33243320}
33253321
@@ -3911,17 +3907,15 @@ void PostGenericScheduler::initPolicy(MachineBasicBlock::iterator Begin,
39113907 MF.getSubtarget ().overridePostRASchedPolicy (RegionPolicy, NumRegionInstrs);
39123908
39133909 // After subtarget overrides, apply command line options.
3914- if (PostRADirection.getNumOccurrences () > 0 ) {
3915- if (PostRADirection == MISchedPostRASched::TopDown) {
3916- RegionPolicy.OnlyTopDown = true ;
3917- RegionPolicy.OnlyBottomUp = false ;
3918- } else if (PostRADirection == MISchedPostRASched::BottomUp) {
3919- RegionPolicy.OnlyTopDown = false ;
3920- RegionPolicy.OnlyBottomUp = true ;
3921- } else if (PostRADirection == MISchedPostRASched::Bidirectional) {
3922- RegionPolicy.OnlyBottomUp = false ;
3923- RegionPolicy.OnlyTopDown = false ;
3924- }
3910+ if (PostRADirection == MISched::TopDown) {
3911+ RegionPolicy.OnlyTopDown = true ;
3912+ RegionPolicy.OnlyBottomUp = false ;
3913+ } else if (PostRADirection == MISched::BottomUp) {
3914+ RegionPolicy.OnlyTopDown = false ;
3915+ RegionPolicy.OnlyBottomUp = true ;
3916+ } else if (PostRADirection == MISched::Bidirectional) {
3917+ RegionPolicy.OnlyBottomUp = false ;
3918+ RegionPolicy.OnlyTopDown = false ;
39253919 }
39263920}
39273921
@@ -4368,10 +4362,9 @@ class InstructionShuffler : public MachineSchedStrategy {
43684362} // end anonymous namespace
43694363
43704364static ScheduleDAGInstrs *createInstructionShuffler (MachineSchedContext *C) {
4371- bool Alternate = !ForceTopDown && !ForceBottomUp;
4372- bool TopDown = !ForceBottomUp;
4373- assert ((TopDown || !ForceTopDown) &&
4374- " -misched-topdown incompatible with -misched-bottomup" );
4365+ bool Alternate =
4366+ PreRADirection != MISched::TopDown && PreRADirection != MISched::BottomUp;
4367+ bool TopDown = PreRADirection != MISched::BottomUp;
43754368 return new ScheduleDAGMILive (
43764369 C, std::make_unique<InstructionShuffler>(Alternate, TopDown));
43774370}
0 commit comments