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/TargetSchedule.h | |
parent | e076bb1e938aa9f97609c926590b1e176b0efbd2 (diff) | |
download | llvm-34301ceca8913f3126339f332d3dc6f2d7ac0d78.tar.gz llvm-34301ceca8913f3126339f332d3dc6f2d7ac0d78.tar.bz2 llvm-34301ceca8913f3126339f332d3dc6f2d7ac0d78.tar.xz |
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/TargetSchedule.h')
-rw-r--r-- | include/llvm/CodeGen/TargetSchedule.h | 28 |
1 files changed, 22 insertions, 6 deletions
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 |