From 42b7a71dc7381d1f38bf7b7201fc26dd80453364 Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Tue, 17 Jan 2012 06:55:03 +0000 Subject: [PATCH] Renamed MachineScheduler to ScheduleTopDownLive. Responding to code review. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148290 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/Passes.h | 2 +- include/llvm/InitializePasses.h | 2 +- lib/CodeGen/CodeGen.cpp | 2 +- lib/CodeGen/MachineScheduler.cpp | 106 +++++++++++++++++-------------- lib/CodeGen/RegAllocBasic.cpp | 2 +- lib/CodeGen/RegAllocGreedy.cpp | 4 +- 6 files changed, 65 insertions(+), 53 deletions(-) diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index 3655faf553a..e7bbf850d92 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -85,7 +85,7 @@ namespace llvm { extern char &RegisterCoalescerPassID; /// MachineScheduler pass - This pass schedules machine instructions. - extern char &MachineSchedulerPassID; + extern char &MachineSchedulerID; /// SpillPlacement analysis. Suggest optimal placement of spill code between /// basic blocks. diff --git a/include/llvm/InitializePasses.h b/include/llvm/InitializePasses.h index 8b7f73857b9..d972eb99013 100644 --- a/include/llvm/InitializePasses.h +++ b/include/llvm/InitializePasses.h @@ -156,7 +156,7 @@ void initializeMachineLICMPass(PassRegistry&); void initializeMachineLoopInfoPass(PassRegistry&); void initializeMachineLoopRangesPass(PassRegistry&); void initializeMachineModuleInfoPass(PassRegistry&); -void initializeMachineSchedulerPassPass(PassRegistry&); +void initializeMachineSchedulerPass(PassRegistry&); void initializeMachineSinkingPass(PassRegistry&); void initializeMachineVerifierPassPass(PassRegistry&); void initializeMemCpyOptPass(PassRegistry&); diff --git a/lib/CodeGen/CodeGen.cpp b/lib/CodeGen/CodeGen.cpp index de716e0dbc7..cbbf7f50580 100644 --- a/lib/CodeGen/CodeGen.cpp +++ b/lib/CodeGen/CodeGen.cpp @@ -43,7 +43,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeProcessImplicitDefsPass(Registry); initializePEIPass(Registry); initializeRegisterCoalescerPass(Registry); - initializeMachineSchedulerPassPass(Registry); + initializeMachineSchedulerPass(Registry); initializeRenderMachineFunctionPass(Registry); initializeSlotIndexesPass(Registry); initializeStackProtectorPass(Registry); diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index df706cbec6d..53cb672dc45 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -34,15 +34,15 @@ using namespace llvm; //===----------------------------------------------------------------------===// namespace { -/// MachineSchedulerPass runs after coalescing and before register allocation. -class MachineSchedulerPass : public MachineFunctionPass { +/// MachineScheduler runs after coalescing and before register allocation. +class MachineScheduler : public MachineFunctionPass { public: MachineFunction *MF; const TargetInstrInfo *TII; const MachineLoopInfo *MLI; const MachineDominatorTree *MDT; - MachineSchedulerPass(); + MachineScheduler(); virtual void getAnalysisUsage(AnalysisUsage &AU) const; @@ -56,11 +56,11 @@ public: }; } // namespace -char MachineSchedulerPass::ID = 0; +char MachineScheduler::ID = 0; -char &llvm::MachineSchedulerPassID = MachineSchedulerPass::ID; +char &llvm::MachineSchedulerID = MachineScheduler::ID; -INITIALIZE_PASS_BEGIN(MachineSchedulerPass, "misched", +INITIALIZE_PASS_BEGIN(MachineScheduler, "misched", "Machine Instruction Scheduler", false, false) INITIALIZE_AG_DEPENDENCY(AliasAnalysis) INITIALIZE_PASS_DEPENDENCY(SlotIndexes) @@ -68,15 +68,15 @@ INITIALIZE_PASS_DEPENDENCY(LiveIntervals) INITIALIZE_PASS_DEPENDENCY(LiveDebugVariables) INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination) INITIALIZE_PASS_DEPENDENCY(RegisterCoalescer) -INITIALIZE_PASS_END(MachineSchedulerPass, "misched", +INITIALIZE_PASS_END(MachineScheduler, "misched", "Machine Instruction Scheduler", false, false) -MachineSchedulerPass::MachineSchedulerPass() +MachineScheduler::MachineScheduler() : MachineFunctionPass(ID), MF(0), MLI(0), MDT(0) { - initializeMachineSchedulerPassPass(*PassRegistry::getPassRegistry()); + initializeMachineSchedulerPass(*PassRegistry::getPassRegistry()); } -void MachineSchedulerPass::getAnalysisUsage(AnalysisUsage &AU) const { +void MachineScheduler::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesCFG(); AU.addRequiredID(MachineDominatorsID); AU.addRequired(); @@ -102,7 +102,7 @@ namespace { /// schedulers. class MachineSchedRegistry : public MachinePassRegistryNode { public: - typedef ScheduleDAGInstrs *(*ScheduleDAGCtor)(MachineSchedulerPass *); + typedef ScheduleDAGInstrs *(*ScheduleDAGCtor)(MachineScheduler *); // RegisterPassParser requires a (misnamed) FunctionPassCtor type. typedef ScheduleDAGCtor FunctionPassCtor; @@ -137,7 +137,7 @@ public: MachinePassRegistry MachineSchedRegistry::Registry; -static ScheduleDAGInstrs *createDefaultMachineSched(MachineSchedulerPass *P); +static ScheduleDAGInstrs *createDefaultMachineSched(MachineScheduler *P); /// MachineSchedOpt allows command line selection of the scheduler. static cl::optMF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} - - /// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's - /// time to do some work. - virtual void Schedule(); }; } // namespace -static ScheduleDAGInstrs *createDefaultMachineSched(MachineSchedulerPass *P) { - return new MachineScheduler(P); -} -static MachineSchedRegistry -SchedDefaultRegistry("default", "Activate the scheduler pass, " - "but don't reorder instructions", - createDefaultMachineSched); - -/// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's -/// time to do some work. -void MachineScheduler::Schedule() { - BuildSchedGraph(&Pass->getAnalysis()); - - DEBUG(dbgs() << "********** MI Scheduling **********\n"); - DEBUG(for (unsigned su = 0, e = SUnits.size(); su != e; ++su) - SUnits[su].dumpAll(this)); - - // TODO: Put interesting things here. -} - -bool MachineSchedulerPass::runOnMachineFunction(MachineFunction &mf) { +bool MachineScheduler::runOnMachineFunction(MachineFunction &mf) { // Initialize the context of the pass. MF = &mf; MLI = &getAnalysis(); @@ -241,10 +218,45 @@ bool MachineSchedulerPass::runOnMachineFunction(MachineFunction &mf) { return true; } -void MachineSchedulerPass::print(raw_ostream &O, const Module* m) const { +void MachineScheduler::print(raw_ostream &O, const Module* m) const { // unimplemented } +//===----------------------------------------------------------------------===// +// Placeholder for extending the machine instruction scheduler. +//===----------------------------------------------------------------------===// + +namespace { +class DefaultMachineScheduler : public ScheduleTopDownLive { +public: + DefaultMachineScheduler(MachineScheduler *P): + ScheduleTopDownLive(P) {} + + void Schedule(); +}; +} // namespace + +static ScheduleDAGInstrs *createDefaultMachineSched(MachineScheduler *P) { + return new DefaultMachineScheduler(P); +} +static MachineSchedRegistry +SchedDefaultRegistry("default", "Activate the scheduler pass, " + "but don't reorder instructions", + createDefaultMachineSched); + + +/// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's +/// time to do some work. +void DefaultMachineScheduler::Schedule() { + BuildSchedGraph(&Pass->getAnalysis()); + + DEBUG(dbgs() << "********** MI Scheduling **********\n"); + DEBUG(for (unsigned su = 0, e = SUnits.size(); su != e; ++su) + SUnits[su].dumpAll(this)); + + // TODO: Put interesting things here. +} + //===----------------------------------------------------------------------===// // Machine Instruction Shuffler for Correctness Testing //===----------------------------------------------------------------------===// @@ -252,11 +264,11 @@ void MachineSchedulerPass::print(raw_ostream &O, const Module* m) const { #ifndef NDEBUG namespace { /// Reorder instructions as much as possible. -class InstructionShuffler : public ScheduleDAGInstrs { - MachineSchedulerPass *Pass; +class InstructionShuffler : public ScheduleTopDownLive { + MachineScheduler *Pass; public: - InstructionShuffler(MachineSchedulerPass *P): - ScheduleDAGInstrs(*P->MF, *P->MLI, *P->MDT, /*IsPostRA=*/false), Pass(P) {} + InstructionShuffler(MachineScheduler *P): + ScheduleTopDownLive(P) {} /// Schedule - This is called back from ScheduleDAGInstrs::Run() when it's /// time to do some work. @@ -266,7 +278,7 @@ public: }; } // namespace -static ScheduleDAGInstrs *createInstructionShuffler(MachineSchedulerPass *P) { +static ScheduleDAGInstrs *createInstructionShuffler(MachineScheduler *P) { return new InstructionShuffler(P); } static MachineSchedRegistry ShufflerRegistry("shuffle", diff --git a/lib/CodeGen/RegAllocBasic.cpp b/lib/CodeGen/RegAllocBasic.cpp index dbddf722d16..570a56e2715 100644 --- a/lib/CodeGen/RegAllocBasic.cpp +++ b/lib/CodeGen/RegAllocBasic.cpp @@ -129,7 +129,7 @@ RABasic::RABasic(): MachineFunctionPass(ID) { initializeSlotIndexesPass(*PassRegistry::getPassRegistry()); initializeStrongPHIEliminationPass(*PassRegistry::getPassRegistry()); initializeRegisterCoalescerPass(*PassRegistry::getPassRegistry()); - initializeMachineSchedulerPassPass(*PassRegistry::getPassRegistry()); + initializeMachineSchedulerPass(*PassRegistry::getPassRegistry()); initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry()); initializeLiveStacksPass(*PassRegistry::getPassRegistry()); initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); diff --git a/lib/CodeGen/RegAllocGreedy.cpp b/lib/CodeGen/RegAllocGreedy.cpp index 16832ceaf3d..9fd444fbe38 100644 --- a/lib/CodeGen/RegAllocGreedy.cpp +++ b/lib/CodeGen/RegAllocGreedy.cpp @@ -316,7 +316,7 @@ RAGreedy::RAGreedy(): MachineFunctionPass(ID) { initializeSlotIndexesPass(*PassRegistry::getPassRegistry()); initializeStrongPHIEliminationPass(*PassRegistry::getPassRegistry()); initializeRegisterCoalescerPass(*PassRegistry::getPassRegistry()); - initializeMachineSchedulerPassPass(*PassRegistry::getPassRegistry()); + initializeMachineSchedulerPass(*PassRegistry::getPassRegistry()); initializeCalculateSpillWeightsPass(*PassRegistry::getPassRegistry()); initializeLiveStacksPass(*PassRegistry::getPassRegistry()); initializeMachineDominatorTreePass(*PassRegistry::getPassRegistry()); @@ -339,7 +339,7 @@ void RAGreedy::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequiredID(StrongPHIEliminationID); AU.addRequiredTransitiveID(RegisterCoalescerPassID); if (EnableMachineSched) - AU.addRequiredID(MachineSchedulerPassID); + AU.addRequiredID(MachineSchedulerID); AU.addRequired(); AU.addRequired(); AU.addPreserved(); -- 2.34.1