mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-03 16:03:21 +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.
|
/// scheduler. It does not yet disable the postRA scheduler.
|
||||||
virtual bool enableMachineScheduler() const;
|
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.
|
/// \brief Override generic scheduling policy within a region.
|
||||||
///
|
///
|
||||||
/// This is a convenient way for targets that don't provide any custom
|
/// 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()))
|
if (skipOptnoneFunction(*mf.getFunction()))
|
||||||
return false;
|
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()));
|
DEBUG(dbgs() << "Before post-MI-sched:\n"; mf.print(dbgs()));
|
||||||
|
|
||||||
// Initialize the context of the pass.
|
// 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
|
// Temporary option to allow experimenting with MachineScheduler as a post-RA
|
||||||
// scheduler. Targets can "properly" enable this with
|
// scheduler. Targets can "properly" enable this with
|
||||||
// substitutePass(&PostRASchedulerID, &MachineSchedulerID); Ideally it wouldn't
|
// substitutePass(&PostRASchedulerID, &PostMachineSchedulerID); Ideally it
|
||||||
// be part of the standard pass pipeline, and the target would just add a PostRA
|
// wouldn't be part of the standard pass pipeline, and the target would just add
|
||||||
// scheduling pass wherever it wants.
|
// a PostRA scheduling pass wherever it wants.
|
||||||
static cl::opt<bool> MISchedPostRA("misched-postra", cl::Hidden,
|
static cl::opt<bool> MISchedPostRA("misched-postra", cl::Hidden,
|
||||||
cl::desc("Run MachineScheduler post regalloc (independent of preRA sched)"));
|
cl::desc("Run MachineScheduler post regalloc (independent of preRA sched)"));
|
||||||
|
|
||||||
|
@ -352,6 +352,13 @@ bool ARMSubtarget::hasSinCos() const {
|
|||||||
!getTargetTriple().isOSVersionLT(7, 0);
|
!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(
|
bool ARMSubtarget::enablePostRAScheduler(
|
||||||
CodeGenOpt::Level OptLevel,
|
CodeGenOpt::Level OptLevel,
|
||||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||||
|
@ -396,6 +396,9 @@ public:
|
|||||||
/// compiler runtime or math libraries.
|
/// compiler runtime or math libraries.
|
||||||
bool hasSinCos() const;
|
bool hasSinCos() const;
|
||||||
|
|
||||||
|
/// True for some subtargets at > -O0.
|
||||||
|
bool enablePostMachineScheduler() const;
|
||||||
|
|
||||||
/// enablePostRAScheduler - True at 'More' optimization.
|
/// enablePostRAScheduler - True at 'More' optimization.
|
||||||
bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
|
bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
|
||||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||||
|
@ -43,6 +43,10 @@ bool TargetSubtargetInfo::enableMachineScheduler() const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TargetSubtargetInfo::enablePostMachineScheduler() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool TargetSubtargetInfo::enablePostRAScheduler(
|
bool TargetSubtargetInfo::enablePostRAScheduler(
|
||||||
CodeGenOpt::Level OptLevel,
|
CodeGenOpt::Level OptLevel,
|
||||||
AntiDepBreakMode& Mode,
|
AntiDepBreakMode& Mode,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user