1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Subtarget Enumeration Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9#ifdef GET_SUBTARGETINFO_ENUM
10#undef GET_SUBTARGETINFO_ENUM
11
12namespace llvm {
13
14
15} // namespace llvm
16
17#endif // GET_SUBTARGETINFO_ENUM
18
19#ifdef GET_SUBTARGETINFO_MACRO
20
21
22#undef GET_SUBTARGETINFO_MACRO
23#endif // GET_SUBTARGETINFO_MACRO
24
25#ifdef GET_SUBTARGETINFO_MC_DESC
26#undef GET_SUBTARGETINFO_MC_DESC
27
28namespace llvm {
29
30
31#ifdef DBGFIELD
32#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
33#endif
34#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
35#define DBGFIELD(x) x,
36#define DBGVAL_OR_NULLPTR(x) x
37#else
38#define DBGFIELD(x)
39#define DBGVAL_OR_NULLPTR(x) nullptr
40#endif
41
42// Functional units for "LanaiItinerary"
43namespace LanaiItineraryFU {
44
45 const InstrStage::FuncUnits ALU_FU = 1ULL << 0;
46 const InstrStage::FuncUnits LDST_FU = 1ULL << 1;
47
48} // namespace LanaiItineraryFU
49
50extern const llvm::InstrStage LanaiStages[] = {
51 { 0, 0, 0, llvm::InstrStage::Required }, // No itinerary
52 { 1, LanaiItineraryFU::ALU_FU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 1
53 { 1, LanaiItineraryFU::LDST_FU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 2
54 { 2, LanaiItineraryFU::LDST_FU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 3
55 { 0, 0, 0, llvm::InstrStage::Required } // End stages
56};
57extern const unsigned LanaiOperandCycles[] = {
58 0, // No itinerary
59 0 // End operand cycles
60};
61extern const unsigned LanaiForwardingPaths[] = {
62 0, // No itinerary
63 0 // End bypass tables
64};
65
66static constexpr llvm::InstrItinerary LanaiItinerary[] = {
67 { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
68 { 1, 1, 2, 0, 0 }, // 1 IIC_ALU_WriteALU
69 { 1, 1, 2, 0, 0 }, // 2 IIC_ALU
70 { 1, 2, 3, 0, 0 }, // 3 IIC_LD_WriteLD
71 { 1, 3, 4, 0, 0 }, // 4 IIC_LDSW_WriteLDSW
72 { 0, 0, 0, 0, 0 }, // 5 WriteLD
73 { 1, 2, 3, 0, 0 }, // 6 IIC_ST_WriteST
74 { 1, 3, 4, 0, 0 }, // 7 IIC_STSW_WriteSTSW
75 { 0, uint16_t(~0U), uint16_t(~0U), uint16_t(~0U), uint16_t(~0U) }// end marker
76};
77
78// ===============================================================
79// Data tables for the new per-operand machine model.
80
81static_assert(1 <= UINT8_MAX, "NumWriteProcResEntries does not fit in uint8_t");
82static_assert(1 <= UINT8_MAX, "NumWriteLatencyEntries does not fit in uint8_t");
83
84// {ProcResourceIdx, ReleaseAtCycle, AcquireAtCycle}
85extern const llvm::MCWriteProcResEntry LanaiWriteProcResTable[] = {
86 { 0, 0, 0 }, // Invalid
87 { 1, 1, 0}, // #1
88 { 2, 1, 0} // #2
89}; // LanaiWriteProcResTable
90
91// {Cycles, WriteResourceID}
92extern const llvm::MCWriteLatencyEntry LanaiWriteLatencyTable[] = {
93 { 0, 0}, // Invalid
94 { 1, 0}, // #1 WriteALU
95 { 2, 0}, // #2 WriteLD_WriteLDSW_WriteST
96 { 4, 0} // #3 WriteSTSW
97}; // LanaiWriteLatencyTable
98
99// {UseIdx, WriteResourceID, Cycles}
100extern const llvm::MCReadAdvanceEntry LanaiReadAdvanceTable[] = {
101 {0, 0, 0}, // Invalid
102}; // LanaiReadAdvanceTable
103
104// {Name, NumMicroOps, BeginGroup, EndGroup, RetireOOO, ReadAdvanceIdx, WriteProcResIdx, WriteLatencyIdx, NumReadAdvanceEntries, NumWriteProcResEntries, NumWriteLatencyEntries}
105static const llvm::MCSchedClassDesc LanaiSchedModelSchedClasses[] = {
106 {DBGFIELD(1) 8191, false, false, false, 0, 0, 0, 0, 0, 0},
107 {DBGFIELD(/*IIC_ALU_WriteALU*/ 19) 1, false, false, false, 0, 1, 1, 0, 1, 1}, // #1
108 {DBGFIELD(/*IIC_ALU*/ 36) 8191, false, false, false, 0, 0, 0, 0, 0, 0}, // #2
109 {DBGFIELD(/*IIC_LD_WriteLD*/ 44) 1, false, false, false, 0, 2, 2, 0, 1, 1}, // #3
110 {DBGFIELD(/*IIC_LDSW_WriteLDSW*/ 59) 1, false, false, false, 0, 2, 2, 0, 1, 1}, // #4
111 {DBGFIELD(/*WriteLD*/ 78) 1, false, false, false, 0, 2, 2, 0, 1, 1}, // #5
112 {DBGFIELD(/*IIC_ST_WriteST*/ 86) 1, false, false, false, 0, 2, 2, 0, 1, 1}, // #6
113 {DBGFIELD(/*IIC_STSW_WriteSTSW*/ 101) 1, false, false, false, 0, 2, 3, 0, 1, 1}, // #7
114}; // LanaiSchedModelSchedClasses
115
116#ifdef __GNUC__
117#pragma GCC diagnostic push
118#pragma GCC diagnostic ignored "-Woverlength-strings"
119#endif
120static constexpr char LanaiSchedClassNamesStorage[] =
121 "\0"
122 "InvalidSchedClass\0"
123 "IIC_ALU_WriteALU\0"
124 "IIC_ALU\0"
125 "IIC_LD_WriteLD\0"
126 "IIC_LDSW_WriteLDSW\0"
127 "WriteLD\0"
128 "IIC_ST_WriteST\0"
129 "IIC_STSW_WriteSTSW\0"
130 ;
131#ifdef __GNUC__
132#pragma GCC diagnostic pop
133#endif
134
135static constexpr llvm::StringTable
136LanaiSchedClassNames = LanaiSchedClassNamesStorage;
137
138static const unsigned LanaiSchedModelProcResourceSubUnits[] = {
139 0, // Invalid
140};
141
142// {Name, NumUnits, SuperIdx, BufferSize, SubUnitsIdxBegin}
143static const llvm::MCProcResourceDesc LanaiSchedModelProcResources[] = {
144 {"InvalidUnit", 0, 0, 0, 0},
145 {"ALU", 1, 0, 0, nullptr}, // #1
146 {"LdSt", 1, 0, 0, nullptr}, // #2
147};
148
149extern const llvm::MCSchedModel LanaiSchedModels[] = {
150{ // NoSchedModel
151 MCSchedModel::DefaultIssueWidth,
152 MCSchedModel::DefaultMicroOpBufferSize,
153 MCSchedModel::DefaultLoopMicroOpBufferSize,
154 MCSchedModel::DefaultLoadLatency,
155 MCSchedModel::DefaultHighLatency,
156 MCSchedModel::DefaultMispredictPenalty,
157 false, // PostRAScheduler
158 false, // CompleteModel
159 false, // EnableIntervals
160 0, // Processor ID
161 nullptr, nullptr, 0, 0, // No instruction-level machine model.
162 DBGVAL_OR_NULLPTR(&LanaiSchedClassNames), // SchedClassNames
163 nullptr, // No Itinerary
164 nullptr // No extra processor descriptor
165 },
166{ // LanaiSchedModel
167 1, // IssueWidth
168 0, // MicroOpBufferSize
169 0, // LoopMicroOpBufferSize
170 2, // LoadLatency
171 MCSchedModel::DefaultHighLatency,
172 10, // MispredictPenalty
173 false, // PostRAScheduler
174 false, // CompleteModel
175 false, // EnableIntervals
176 1, // Processor ID
177 LanaiSchedModelProcResources,
178 LanaiSchedModelSchedClasses,
179 3,
180 8,
181 DBGVAL_OR_NULLPTR(&LanaiSchedClassNames), // SchedClassNames
182 LanaiItinerary,
183 nullptr // No extra processor descriptor
184 },
185};
186
187#undef DBGFIELD
188
189#undef DBGVAL_OR_NULLPTR
190
191static constexpr size_t LanaiCPUAliasArraySize = sizeof(std::array<SubtargetSubTypeAliasKV, 0>);
192// Sorted (by key) array of values for CPU subtype.
193extern const llvm::SubtargetSubTypeKVStorage< 2, 0, 14> LanaiSubTypeKVStorage = {
194 {
195 { sizeof(SubtargetSubTypeKV) * 2 + LanaiCPUAliasArraySize + 1, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 1 },
196 { sizeof(SubtargetSubTypeKV) * 1 + LanaiCPUAliasArraySize + 9, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 1 },
197 },
198 { {
199 } },
200 "\000generic\000v11\000"};
201
202namespace Lanai_MC {
203
204unsigned resolveVariantSchedClassImpl(unsigned SchedClass,
205 const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID) {
206 // Don't know how to resolve this scheduling class.
207 return 0;
208}
209
210} // namespace Lanai_MC
211struct LanaiGenMCSubtargetInfo : public MCSubtargetInfo {
212 LanaiGenMCSubtargetInfo(const Triple &TT,
213 StringRef CPU, StringRef TuneCPU, StringRef FS,
214 StringTable PN,
215 ArrayRef<SubtargetFeatureKV> PF,
216 ArrayRef<SubtargetSubTypeKV> PD,
217 ArrayRef<SubtargetSubTypeAliasKV> PA,
218 const MCSchedModel *PSM,
219 const MCWriteProcResEntry *WPR,
220 const MCWriteLatencyEntry *WL,
221 const MCReadAdvanceEntry *RA, const InstrStage *IS,
222 const unsigned *OC, const unsigned *FP) :
223 MCSubtargetInfo(TT, CPU, TuneCPU, FS, PN, PF, PD, PA, PSM,
224 WPR, WL, RA, IS, OC, FP) { }
225
226 unsigned resolveVariantSchedClass(unsigned SchedClass,
227 const MCInst *MI, const MCInstrInfo *MCII,
228 unsigned CPUID) const final {
229 return Lanai_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
230 }
231};
232
233static inline MCSubtargetInfo *createLanaiMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS) {
234 return new LanaiGenMCSubtargetInfo(TT, CPU, TuneCPU, FS, StringTable(LanaiSubTypeKVStorage.Strings), {}, LanaiSubTypeKVStorage.SubTypes, ArrayRef(LanaiSubTypeKVStorage.Aliases).take_front(0), LanaiSchedModels,
235 LanaiWriteProcResTable, LanaiWriteLatencyTable, LanaiReadAdvanceTable,
236 LanaiStages, LanaiOperandCycles, LanaiForwardingPaths);
237}
238
239
240} // namespace llvm
241
242#endif // GET_SUBTARGETINFO_MC_DESC
243
244#ifdef GET_SUBTARGETINFO_TARGET_DESC
245#undef GET_SUBTARGETINFO_TARGET_DESC
246
247#include "llvm/ADT/BitmaskEnum.h"
248#include "llvm/Support/Debug.h"
249#include "llvm/Support/raw_ostream.h"
250
251// ParseSubtargetFeatures - Parses features string setting specified
252// subtarget options.
253void llvm::LanaiSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS) {
254 LLVM_DEBUG(dbgs() << "\nFeatures:" << FS);
255 LLVM_DEBUG(dbgs() << "\nCPU:" << CPU);
256 LLVM_DEBUG(dbgs() << "\nTuneCPU:" << TuneCPU << "\n\n");
257}
258
259#endif // GET_SUBTARGETINFO_TARGET_DESC
260
261#ifdef GET_SUBTARGETINFO_HEADER
262#undef GET_SUBTARGETINFO_HEADER
263
264namespace llvm {
265
266class DFAPacketizer;
267namespace Lanai_MC {
268
269unsigned resolveVariantSchedClassImpl(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID);
270
271} // namespace Lanai_MC
272struct LanaiGenSubtargetInfo : public TargetSubtargetInfo {
273 explicit LanaiGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS);
274public:
275 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const final;
276 unsigned resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const final;
277 DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
278 const FeatureBitset &getInlineIgnoreFeatures() const override;
279 const FeatureBitset &getInlineInverseFeatures() const override;
280 const FeatureBitset &getInlineMustMatchFeatures() const override;
281};
282
283} // namespace llvm
284
285#endif // GET_SUBTARGETINFO_HEADER
286
287#ifdef GET_SUBTARGETINFO_CTOR
288#undef GET_SUBTARGETINFO_CTOR
289
290#include "llvm/CodeGen/TargetSchedule.h"
291
292namespace llvm {
293
294extern const llvm::StringRef LanaiNames[];
295extern const llvm::SubtargetSubTypeKVStorage<2, 0, 14> LanaiSubTypeKVStorage;
296extern const llvm::MCSchedModel LanaiSchedModels[];
297extern const llvm::MCWriteProcResEntry LanaiWriteProcResTable[];
298extern const llvm::MCWriteLatencyEntry LanaiWriteLatencyTable[];
299extern const llvm::MCReadAdvanceEntry LanaiReadAdvanceTable[];
300extern const llvm::InstrStage LanaiStages[];
301extern const unsigned LanaiOperandCycles[];
302extern const unsigned LanaiForwardingPaths[];
303LanaiGenSubtargetInfo::LanaiGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS)
304 : TargetSubtargetInfo(TT, CPU, TuneCPU, FS, StringTable(LanaiSubTypeKVStorage.Strings), {}, ArrayRef(LanaiSubTypeKVStorage.SubTypes), ArrayRef(LanaiSubTypeKVStorage.Aliases).take_front(0), LanaiSchedModels,
305 LanaiWriteProcResTable, LanaiWriteLatencyTable, LanaiReadAdvanceTable,
306 LanaiStages, LanaiOperandCycles, LanaiForwardingPaths) {}
307
308unsigned LanaiGenSubtargetInfo
309::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
310 report_fatal_error("Expected a variant SchedClass");
311} // LanaiGenSubtargetInfo::resolveSchedClass
312
313unsigned LanaiGenSubtargetInfo
314::resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const {
315 return Lanai_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
316} // LanaiGenSubtargetInfo::resolveVariantSchedClass
317
318const FeatureBitset &LanaiGenSubtargetInfo::getInlineIgnoreFeatures() const {
319 static constexpr FeatureBitset Features = {
320 };
321 return Features;
322}
323
324const FeatureBitset &LanaiGenSubtargetInfo::getInlineInverseFeatures() const {
325 static constexpr FeatureBitset Features = {
326 };
327 return Features;
328}
329
330const FeatureBitset &LanaiGenSubtargetInfo::getInlineMustMatchFeatures() const {
331 static constexpr FeatureBitset Features = {
332 };
333 return Features;
334}
335
336
337} // namespace llvm
338
339#endif // GET_SUBTARGETINFO_CTOR
340
341#ifdef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
342#undef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
343
344
345#endif // GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
346
347#ifdef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
348#undef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
349
350
351#endif // GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
352
353