diff options
| author | Andrew Trick <atrick@apple.com> | 2012-09-18 04:03:34 +0000 |
|---|---|---|
| committer | Andrew Trick <atrick@apple.com> | 2012-09-18 04:03:34 +0000 |
| commit | 34301ceca8913f3126339f332d3dc6f2d7ac0d78 (patch) | |
| tree | b05aefa8030d0d861e4367b15da9754b8e960afe /include/llvm/CodeGen | |
| parent | e076bb1e938aa9f97609c926590b1e176b0efbd2 (diff) | |
TargetSchedModel API. Implement latency lookup, disabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen')
| -rw-r--r-- | include/llvm/CodeGen/ScheduleDAGInstrs.h | 4 | ||||
| -rw-r--r-- | include/llvm/CodeGen/TargetSchedule.h | 28 |
2 files changed, 26 insertions, 6 deletions
diff --git a/include/llvm/CodeGen/ScheduleDAGInstrs.h b/include/llvm/CodeGen/ScheduleDAGInstrs.h index 8b52b5a9c7..d13ee84257 100644 --- a/include/llvm/CodeGen/ScheduleDAGInstrs.h +++ b/include/llvm/CodeGen/ScheduleDAGInstrs.h @@ -18,6 +18,7 @@ #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineLoopInfo.h" #include "llvm/CodeGen/ScheduleDAG.h" +#include "llvm/CodeGen/TargetSchedule.h" #include "llvm/Support/Compiler.h" #include "llvm/Target/TargetRegisterInfo.h" #include "llvm/ADT/SmallSet.h" @@ -181,6 +182,9 @@ namespace llvm { /// Live Intervals provides reaching defs in preRA scheduling. LiveIntervals *LIS; + /// TargetSchedModel provides an interface to the machine model. + TargetSchedModel SchedModel; + /// isPostRA flag indicates vregs cannot be present. bool IsPostRA; diff --git a/include/llvm/CodeGen/TargetSchedule.h b/include/llvm/CodeGen/TargetSchedule.h index 5023f4906e..d2a26afe99 100644 --- a/include/llvm/CodeGen/TargetSchedule.h +++ b/include/llvm/CodeGen/TargetSchedule.h @@ -45,17 +45,33 @@ public: /// Return true if this machine model includes an instruction-level scheduling /// model. This is more detailed than the course grain IssueWidth and default /// latency properties, but separate from the per-cycle itinerary data. - bool hasInstrSchedModel() const { - return SchedModel.hasInstrSchedModel(); - } + bool hasInstrSchedModel() const { return SchedModel.hasInstrSchedModel(); } /// Return true if this machine model includes cycle-to-cycle itinerary /// data. This models scheduling at each stage in the processor pipeline. - bool hasInstrItineraries() const { - return SchedModel.hasInstrItineraries(); - } + bool hasInstrItineraries() const { return !InstrItins.isEmpty(); } + + /// computeOperandLatency - Compute and return the latency of the given data + /// dependent def and use when the operand indices are already known. UseMI + /// may be NULL for an unknown user. + /// + /// FindMin may be set to get the minimum vs. expected latency. Minimum + /// latency is used for scheduling groups, while expected latency is for + /// instruction cost and critical path. + unsigned computeOperandLatency(const MachineInstr *DefMI, unsigned DefOperIdx, + const MachineInstr *UseMI, unsigned UseOperIdx, + bool FindMin) const; unsigned getProcessorID() const { return SchedModel.getProcessorID(); } + +private: + /// getDefLatency is a helper for computeOperandLatency. Return the + /// instruction's latency if operand lookup is not required. + /// Otherwise return -1. + int getDefLatency(const MachineInstr *DefMI, bool FindMin) const; + + /// Return the MCSchedClassDesc for this instruction. + const MCSchedClassDesc *resolveSchedClass(const MachineInstr *MI) const; }; } // namespace llvm |
