[llvm-dev] How to get started with instruction scheduling? Advice needed.
Phil Tomson via llvm-dev
llvm-dev at lists.llvm.org
Wed Apr 20 10:51:17 PDT 2016
I need to add instruction scheduling for a new target which is a fairly
simple in-order execution machine.
I've been watching this presentation from a 2014 LLVM dev meeting as it
"SchedMachineModel: Adding and Optimizing a Subtarget"
In this presentation the author says that there have been several ways to
approach scheduling in LLVM over the years:
- Pre 2008: SelectionDAGISel pass creates the ScheduleDAG from the
SelectionDAG at the end of instruction selection
- ScheduleDAG works on SelectionDAG Nodes (SDNodes)
- Circa 2008: Post Register
Allocation pass added for
instruction selection ( SchedulePostRATDList
works on MachineInstrs)
- Circa 2012: MIScheduler
(ScheduleDAGMI) added as
separate pass for pre-RA
- Circa 2014: MIScheduler
adapted to optionally replace
In the presentation he goes with defining a subclass of SchedMachineModel
in the schedule .td file. And apparently with this approach there are no
So I'm wondering: what's the current recommended way to approach this and
does it depend on the type or target? (in-order, superscalar, out of order,
Someone earlier started to define instruction itineraries for our target.
Should I continue down this road or move over to the SchedMachineModel
approach? Are there other recommended presentations/documents that I should
be looking at?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the llvm-dev