mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-24 10:07:48 +00:00
Add a subtarget hook: enablePostMachineScheduler.
As requested by AArch64 subtargets. Note that this will have no effect until the AArch64 target actually enables the pass like this: substitutePass(&PostRASchedulerID, &PostMachineSchedulerID); As soon as armv7 switches over, PostMachineScheduler will become the default postRA scheduler, so this won't be necessary any more. Targets using the old postRA schedule would then do: substitutePass(&PostMachineSchedulerID, &PostRASchedulerID); llvm-svn: 210167
This commit is contained in:
parent
3ccf71d4d6
commit
8d2ee37f31
@ -66,6 +66,13 @@ public:
|
||||
/// scheduler. It does not yet disable the postRA scheduler.
|
||||
virtual bool enableMachineScheduler() const;
|
||||
|
||||
/// \brief True if the subtarget should run PostMachineScheduler.
|
||||
///
|
||||
/// This only takes effect if the target has configured the
|
||||
/// PostMachineScheduler pass to run, or if the global cl::opt flag,
|
||||
/// MISchedPostRA, is set.
|
||||
virtual bool enablePostMachineScheduler() const;
|
||||
|
||||
/// \brief Override generic scheduling policy within a region.
|
||||
///
|
||||
/// This is a convenient way for targets that don't provide any custom
|
||||
|
@ -333,6 +333,12 @@ bool PostMachineScheduler::runOnMachineFunction(MachineFunction &mf) {
|
||||
if (skipOptnoneFunction(*mf.getFunction()))
|
||||
return false;
|
||||
|
||||
const TargetSubtargetInfo &ST =
|
||||
mf.getTarget().getSubtarget<TargetSubtargetInfo>();
|
||||
if (!ST.enablePostMachineScheduler()) {
|
||||
DEBUG(dbgs() << "Subtarget disables post-MI-sched.\n");
|
||||
return false;
|
||||
}
|
||||
DEBUG(dbgs() << "Before post-MI-sched:\n"; mf.print(dbgs()));
|
||||
|
||||
// Initialize the context of the pass.
|
||||
|
@ -92,9 +92,9 @@ PrintMachineInstrs("print-machineinstrs", cl::ValueOptional,
|
||||
|
||||
// Temporary option to allow experimenting with MachineScheduler as a post-RA
|
||||
// scheduler. Targets can "properly" enable this with
|
||||
// substitutePass(&PostRASchedulerID, &MachineSchedulerID); Ideally it wouldn't
|
||||
// be part of the standard pass pipeline, and the target would just add a PostRA
|
||||
// scheduling pass wherever it wants.
|
||||
// substitutePass(&PostRASchedulerID, &PostMachineSchedulerID); Ideally it
|
||||
// wouldn't be part of the standard pass pipeline, and the target would just add
|
||||
// a PostRA scheduling pass wherever it wants.
|
||||
static cl::opt<bool> MISchedPostRA("misched-postra", cl::Hidden,
|
||||
cl::desc("Run MachineScheduler post regalloc (independent of preRA sched)"));
|
||||
|
||||
|
@ -352,6 +352,13 @@ bool ARMSubtarget::hasSinCos() const {
|
||||
!getTargetTriple().isOSVersionLT(7, 0);
|
||||
}
|
||||
|
||||
// Enable the PostMachineScheduler if the target selects it instead of
|
||||
// PostRAScheduler. Currently only available on the command line via
|
||||
// -misched-postra.
|
||||
bool ARMSubtarget::enablePostMachineScheduler() const {
|
||||
return PostRAScheduler;
|
||||
}
|
||||
|
||||
bool ARMSubtarget::enablePostRAScheduler(
|
||||
CodeGenOpt::Level OptLevel,
|
||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||
|
@ -396,6 +396,9 @@ public:
|
||||
/// compiler runtime or math libraries.
|
||||
bool hasSinCos() const;
|
||||
|
||||
/// True for some subtargets at > -O0.
|
||||
bool enablePostMachineScheduler() const;
|
||||
|
||||
/// enablePostRAScheduler - True at 'More' optimization.
|
||||
bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
|
||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||
|
@ -43,6 +43,10 @@ bool TargetSubtargetInfo::enableMachineScheduler() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TargetSubtargetInfo::enablePostMachineScheduler() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TargetSubtargetInfo::enablePostRAScheduler(
|
||||
CodeGenOpt::Level OptLevel,
|
||||
AntiDepBreakMode& Mode,
|
||||
|
Loading…
x
Reference in New Issue
Block a user