aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm
diff options
context:
space:
mode:
authorJim Laskey <jlaskey@mac.com>2005-11-01 20:06:59 +0000
committerJim Laskey <jlaskey@mac.com>2005-11-01 20:06:59 +0000
commit6cee630070b1a7183ed56a8404e812629f5ca538 (patch)
treed5e1227dd79a99caa34d1d68b6170b9b15ddbaf8 /include/llvm
parentcb366d980a389e5b9c3fc2b9aae373c0ba2903c6 (diff)
downloadexternal_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/llvm')
-rw-r--r--include/llvm/Target/TargetInstrInfo.h1
-rw-r--r--include/llvm/Target/TargetInstrItineraries.h52
-rw-r--r--include/llvm/Target/TargetMachine.h8
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; }