mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-27 13:30:05 +00:00
Enable MI scheduling (and CodeGen AA) by default for embedded PPC cores
For embedded PPC cores (especially the A2 core), using the MI scheduler with AA is far superior to the other scheduling options. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190558 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6c32111544
commit
b7fbc5baad
@ -556,7 +556,10 @@ PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM)
|
||||
|
||||
setInsertFencesForAtomic(true);
|
||||
|
||||
setSchedulingPreference(Sched::Hybrid);
|
||||
if (Subtarget->enableMachineScheduler())
|
||||
setSchedulingPreference(Sched::Source);
|
||||
else
|
||||
setSchedulingPreference(Sched::Hybrid);
|
||||
|
||||
computeRegisterProperties();
|
||||
|
||||
@ -7853,7 +7856,7 @@ bool PPCTargetLowering::isFMAFasterThanFMulAndFAdd(EVT VT) const {
|
||||
}
|
||||
|
||||
Sched::Preference PPCTargetLowering::getSchedulingPreference(SDNode *N) const {
|
||||
if (DisableILPPref)
|
||||
if (DisableILPPref || PPCSubTarget.enableMachineScheduler())
|
||||
return TargetLowering::getSchedulingPreference(N);
|
||||
|
||||
return Sched::ILP;
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "PPC.h"
|
||||
#include "PPCRegisterInfo.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
#include "llvm/CodeGen/MachineScheduler.h"
|
||||
#include "llvm/IR/Attributes.h"
|
||||
#include "llvm/IR/GlobalValue.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
@ -186,3 +187,41 @@ bool PPCSubtarget::enablePostRAScheduler(
|
||||
return OptLevel >= CodeGenOpt::Default;
|
||||
}
|
||||
|
||||
// Embedded cores need aggressive scheduling.
|
||||
static bool needsAggressiveScheduling(unsigned Directive) {
|
||||
switch (Directive) {
|
||||
default: return false;
|
||||
case PPC::DIR_440:
|
||||
case PPC::DIR_A2:
|
||||
case PPC::DIR_E500mc:
|
||||
case PPC::DIR_E5500:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool PPCSubtarget::enableMachineScheduler() const {
|
||||
// Enable MI scheduling for the embedded cores.
|
||||
// FIXME: Enable this for all cores (some additional modeling
|
||||
// may be necessary).
|
||||
return needsAggressiveScheduling(DarwinDirective);
|
||||
}
|
||||
|
||||
void PPCSubtarget::overrideSchedPolicy(MachineSchedPolicy &Policy,
|
||||
MachineInstr *begin,
|
||||
MachineInstr *end,
|
||||
unsigned NumRegionInstrs) const {
|
||||
if (needsAggressiveScheduling(DarwinDirective)) {
|
||||
Policy.OnlyTopDown = false;
|
||||
Policy.OnlyBottomUp = false;
|
||||
}
|
||||
|
||||
// Spilling is generally expensive on all PPC cores, so always enable
|
||||
// register-pressure tracking.
|
||||
Policy.ShouldTrackPressure = true;
|
||||
}
|
||||
|
||||
bool PPCSubtarget::useAA() const {
|
||||
// Use AA during code generation for the embedded cores.
|
||||
return needsAggressiveScheduling(DarwinDirective);
|
||||
}
|
||||
|
||||
|
@ -207,6 +207,14 @@ public:
|
||||
bool enablePostRAScheduler(CodeGenOpt::Level OptLevel,
|
||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||
RegClassVector& CriticalPathRCs) const;
|
||||
|
||||
// Scheduling customization.
|
||||
bool enableMachineScheduler() const;
|
||||
void overrideSchedPolicy(MachineSchedPolicy &Policy,
|
||||
MachineInstr *begin,
|
||||
MachineInstr *end,
|
||||
unsigned NumRegionInstrs) const;
|
||||
bool useAA() const;
|
||||
};
|
||||
} // End llvm namespace
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user