diff options
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetMachine.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp index 58057d37b55..444a3a587a4 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -13,6 +13,7 @@ #include "PPCTargetMachine.h" #include "MCTargetDesc/PPCMCTargetDesc.h" #include "PPC.h" +#include "PPCMachineScheduler.h" #include "PPCSubtarget.h" #include "PPCTargetObjectFile.h" #include "PPCTargetTransformInfo.h" @@ -237,6 +238,23 @@ static CodeModel::Model getEffectivePPCCodeModel(const Triple &TT, return CodeModel::Small; } + +static ScheduleDAGInstrs *createPPCMachineScheduler(MachineSchedContext *C) { + ScheduleDAGMILive *DAG = + new ScheduleDAGMILive(C, llvm::make_unique<PPCPreRASchedStrategy>(C)); + // add DAG Mutations here. + DAG->addMutation(createCopyConstrainDAGMutation(DAG->TII, DAG->TRI)); + return DAG; +} + +static ScheduleDAGInstrs *createPPCPostMachineScheduler( + MachineSchedContext *C) { + ScheduleDAGMI *DAG = + new ScheduleDAGMI(C, llvm::make_unique<PPCPostRASchedStrategy>(C), true); + // add DAG Mutations here. + return DAG; +} + // The FeatureString here is a little subtle. We are modifying the feature // string with what are (currently) non-function specific overrides as it goes // into the LLVMTargetMachine constructor and then using the stored value in the @@ -330,6 +348,20 @@ public: void addPreRegAlloc() override; void addPreSched2() override; void addPreEmitPass() override; + ScheduleDAGInstrs * + createMachineScheduler(MachineSchedContext *C) const override { + const PPCSubtarget &ST = C->MF->getSubtarget<PPCSubtarget>(); + if (ST.usePPCPreRASchedStrategy()) + return createPPCMachineScheduler(C); + return nullptr; + } + ScheduleDAGInstrs * + createPostMachineScheduler(MachineSchedContext *C) const override { + const PPCSubtarget &ST = C->MF->getSubtarget<PPCSubtarget>(); + if (ST.usePPCPostRASchedStrategy()) + return createPPCPostMachineScheduler(C); + return nullptr; + } }; } // end anonymous namespace @@ -468,3 +500,13 @@ TargetTransformInfo PPCTargetMachine::getTargetTransformInfo(const Function &F) { return TargetTransformInfo(PPCTTIImpl(this, F)); } + +static MachineSchedRegistry +PPCPreRASchedRegistry("ppc-prera", + "Run PowerPC PreRA specific scheduler", + createPPCMachineScheduler); + +static MachineSchedRegistry +PPCPostRASchedRegistry("ppc-postra", + "Run PowerPC PostRA specific scheduler", + createPPCPostMachineScheduler); |