diff options
author | Jim Laskey <jlaskey@mac.com> | 2005-11-01 20:06:59 +0000 |
---|---|---|
committer | Jim Laskey <jlaskey@mac.com> | 2005-11-01 20:06:59 +0000 |
commit | 6cee630070b1a7183ed56a8404e812629f5ca538 (patch) | |
tree | d5e1227dd79a99caa34d1d68b6170b9b15ddbaf8 /include | |
parent | cb366d980a389e5b9c3fc2b9aae373c0ba2903c6 (diff) | |
download | external_llvm-6cee630070b1a7183ed56a8404e812629f5ca538.zip external_llvm-6cee630070b1a7183ed56a8404e812629f5ca538.tar.gz external_llvm-6cee630070b1a7183ed56a8404e812629f5ca538.tar.bz2 |
Allow itineraries to be passed through the Target Machine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24139 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Target/TargetInstrInfo.h | 1 | ||||
-rw-r--r-- | include/llvm/Target/TargetInstrItineraries.h | 52 | ||||
-rw-r--r-- | include/llvm/Target/TargetMachine.h | 8 |
3 files changed, 60 insertions, 1 deletions
diff --git a/include/llvm/Target/TargetInstrInfo.h b/include/llvm/Target/TargetInstrInfo.h index 7b9cda2..8659ef9 100644 --- a/include/llvm/Target/TargetInstrInfo.h +++ b/include/llvm/Target/TargetInstrInfo.h @@ -146,7 +146,6 @@ public: return get(Opcode).numOperands; } - InstrSchedClass getSchedClass(MachineOpCode Opcode) const { return get(Opcode).schedClass; } diff --git a/include/llvm/Target/TargetInstrItineraries.h b/include/llvm/Target/TargetInstrItineraries.h index 3a622c7..3be5b95 100644 --- a/include/llvm/Target/TargetInstrItineraries.h +++ b/include/llvm/Target/TargetInstrItineraries.h @@ -16,6 +16,8 @@ #ifndef LLVM_TARGET_TARGETINSTRITINERARIES_H #define LLVM_TARGET_TARGETINSTRITINERARIES_H +#include "llvm/Support/Debug.h" + namespace llvm { //===----------------------------------------------------------------------===// @@ -41,6 +43,56 @@ struct InstrItinerary { }; + +//===----------------------------------------------------------------------===// +// Instruction itinerary Data - Itinerary data supplied by a subtarget to be +// used by a target. +// +class InstrItineraryData { + InstrStage *Stages; // Array of stages selected + unsigned NStages; // Number of stages + InstrItinerary *Itineratries; // Array of itineraries selected + unsigned NItineraries; // Number of itineraries (actually classes) + +public: + + // + // Ctors. + // + InstrItineraryData() + : Stages(NULL), NStages(0), Itineratries(NULL), NItineraries(0) + {} + InstrItineraryData(InstrStage *S, unsigned NS, InstrItinerary *I, unsigned NI) + : Stages(S), NStages(NS), Itineratries(I), NItineraries(NI) + {} + + // + // isEmpty - Returns true if there are no itineraries. + // + inline bool isEmpty() const { return NItineraries == 0; } + + // + // begin - Return the first stage of the itinerary. + // + inline InstrStage *begin(unsigned ItinClassIndx) const { + assert(ItinClassIndx < NItineraries && "Itinerary index out of range"); + unsigned StageIdx = Itineratries[ItinClassIndx].First; + assert(StageIdx < NStages && "Stage index out of range"); + return Stages + StageIdx; + } + + // + // end - Return the last+1 stage of the itinerary. + // + inline InstrStage *end(unsigned ItinClassIndx) const { + assert(ItinClassIndx < NItineraries && "Itinerary index out of range"); + unsigned StageIdx = Itineratries[ItinClassIndx].Last; + assert(StageIdx < NStages && "Stage index out of range"); + return Stages + StageIdx; + } +}; + + } // End llvm namespace #endif diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index 9c026cc4..aae7d90 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -15,6 +15,7 @@ #define LLVM_TARGET_TARGETMACHINE_H #include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetInstrItineraries.h" #include <cassert> namespace llvm { @@ -122,6 +123,13 @@ public: /// otherwise return null. /// virtual TargetJITInfo *getJITInfo() { return 0; } + + /// getInstrItineraryData - Returns instruction itinerary data for the target + /// or specific subtarget. + /// + virtual const InstrItineraryData getInstrItineraryData() const { + return InstrItineraryData(); + } // These are deprecated interfaces. virtual const TargetSchedInfo *getSchedInfo() const { return 0; } |