diff options
author | Andrew Trick <atrick@apple.com> | 2012-09-14 17:22:42 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2012-09-14 17:22:42 +0000 |
commit | d039b383e76e6658846dca9eee3fe7f221a2f938 (patch) | |
tree | 26d5588b876f1fee969a1367c9bc85170dcb3b5d /include | |
parent | d15e6576903b3dc33a5418153aa7078a61ae6f04 (diff) | |
download | external_llvm-d039b383e76e6658846dca9eee3fe7f221a2f938.zip external_llvm-d039b383e76e6658846dca9eee3fe7f221a2f938.tar.gz external_llvm-d039b383e76e6658846dca9eee3fe7f221a2f938.tar.bz2 |
misched: add a hook for custom DAG postprocessing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163915 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/MachineScheduler.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/MachineScheduler.h b/include/llvm/CodeGen/MachineScheduler.h index f87c2a5..d88f3fc 100644 --- a/include/llvm/CodeGen/MachineScheduler.h +++ b/include/llvm/CodeGen/MachineScheduler.h @@ -179,6 +179,14 @@ public: #endif }; +/// Mutate the DAG as a postpass after normal DAG building. +class ScheduleDAGMutation { +public: + virtual ~ScheduleDAGMutation() {} + + virtual void apply(ScheduleDAGMI *DAG) = 0; +}; + /// ScheduleDAGMI is an implementation of ScheduleDAGInstrs that schedules /// machine instructions while updating LiveIntervals and tracking regpressure. class ScheduleDAGMI : public ScheduleDAGInstrs { @@ -187,6 +195,9 @@ protected: RegisterClassInfo *RegClassInfo; MachineSchedStrategy *SchedImpl; + /// Ordered list of DAG postprocessing steps. + std::vector<ScheduleDAGMutation*> Mutations; + MachineBasicBlock::iterator LiveRegionEnd; /// Register pressure in this region computed by buildSchedGraph. @@ -229,6 +240,13 @@ public: delete SchedImpl; } + /// Add a postprocessing step to the DAG builder. + /// Mutations are applied in the order that they are added after normal DAG + /// building and before MachineSchedStrategy initialization. + void addMutation(ScheduleDAGMutation *Mutation) { + Mutations.push_back(Mutation); + } + MachineBasicBlock::iterator top() const { return CurrentTop; } MachineBasicBlock::iterator bottom() const { return CurrentBottom; } @@ -282,6 +300,10 @@ protected: /// bottom of the DAG region without covereing any unscheduled instruction. void buildDAGWithRegPressure(); + /// Apply each ScheduleDAGMutation step in order. This allows different + /// instances of ScheduleDAGMI to perform custom DAG postprocessing. + void postprocessDAG(); + /// Identify DAG roots and setup scheduler queues. void initQueues(); |