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
14namespace BPF {
15
16enum {
17 ALU32 = 0,
18 DummyFeature = 1,
19 DwarfRIS = 2,
20 MisalignedMemAccess = 3,
21 NumSubtargetFeatures = 4
22};
23
24} // namespace BPF
25
26} // namespace llvm
27
28#endif // GET_SUBTARGETINFO_ENUM
29
30#ifdef GET_SUBTARGETINFO_MACRO
31
32GET_SUBTARGETINFO_MACRO(AllowsMisalignedMemAccess, false, allowsMisalignedMemAccess)
33GET_SUBTARGETINFO_MACRO(HasAlu32, false, hasAlu32)
34GET_SUBTARGETINFO_MACRO(UseDwarfRIS, false, useDwarfRIS)
35GET_SUBTARGETINFO_MACRO(isDummyMode, false, isDummyMode)
36
37#undef GET_SUBTARGETINFO_MACRO
38#endif // GET_SUBTARGETINFO_MACRO
39
40#ifdef GET_SUBTARGETINFO_MC_DESC
41#undef GET_SUBTARGETINFO_MC_DESC
42
43namespace llvm {
44
45// Sorted (by key) array of values for CPU features.
46extern const llvm::SubtargetFeatureKVStorage< 4, 178> BPFFeatureKVStorage = {
47 {
48 { sizeof(SubtargetFeatureKV) * 4 + 1, sizeof(SubtargetFeatureKV) * 4 + 30, BPF::MisalignedMemAccess, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
49 { sizeof(SubtargetFeatureKV) * 3 + 62, sizeof(SubtargetFeatureKV) * 3 + 68, BPF::ALU32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
50 { sizeof(SubtargetFeatureKV) * 2 + 94, sizeof(SubtargetFeatureKV) * 2 + 100, BPF::DummyFeature, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
51 { sizeof(SubtargetFeatureKV) * 1 + 115, sizeof(SubtargetFeatureKV) * 1 + 124, BPF::DwarfRIS, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
52 },
53 "\000allows-misaligned-mem-access\000Allows misaligned memory access\000"
54 "alu32\000Enable ALU32 instructions\000dummy\000unused feature\000dwarfr"
55 "is\000Disable MCAsmInfo DwarfUsesRelocationsAcrossSections\000"};
56
57#ifdef DBGFIELD
58#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
59#endif
60#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
61#define DBGFIELD(x) x,
62#define DBGVAL_OR_NULLPTR(x) x
63#else
64#define DBGFIELD(x)
65#define DBGVAL_OR_NULLPTR(x) nullptr
66#endif
67
68// ===============================================================
69// Data tables for the new per-operand machine model.
70
71static_assert(0 <= UINT8_MAX, "NumWriteProcResEntries does not fit in uint8_t");
72static_assert(0 <= UINT8_MAX, "NumWriteLatencyEntries does not fit in uint8_t");
73
74// {ProcResourceIdx, ReleaseAtCycle, AcquireAtCycle}
75extern const llvm::MCWriteProcResEntry BPFWriteProcResTable[] = {
76 { 0, 0, 0 }, // Invalid
77}; // BPFWriteProcResTable
78
79// {Cycles, WriteResourceID}
80extern const llvm::MCWriteLatencyEntry BPFWriteLatencyTable[] = {
81 { 0, 0}, // Invalid
82}; // BPFWriteLatencyTable
83
84// {UseIdx, WriteResourceID, Cycles}
85extern const llvm::MCReadAdvanceEntry BPFReadAdvanceTable[] = {
86 {0, 0, 0}, // Invalid
87}; // BPFReadAdvanceTable
88
89#ifdef __GNUC__
90#pragma GCC diagnostic push
91#pragma GCC diagnostic ignored "-Woverlength-strings"
92#endif
93static constexpr char BPFSchedClassNamesStorage[] =
94 "\0"
95 "InvalidSchedClass\0"
96 ;
97#ifdef __GNUC__
98#pragma GCC diagnostic pop
99#endif
100
101static constexpr llvm::StringTable
102BPFSchedClassNames = BPFSchedClassNamesStorage;
103
104extern const llvm::MCSchedModel BPFSchedModels[] = {
105{ // NoSchedModel
106 MCSchedModel::DefaultIssueWidth,
107 MCSchedModel::DefaultMicroOpBufferSize,
108 MCSchedModel::DefaultLoopMicroOpBufferSize,
109 MCSchedModel::DefaultLoadLatency,
110 MCSchedModel::DefaultHighLatency,
111 MCSchedModel::DefaultMispredictPenalty,
112 false, // PostRAScheduler
113 false, // CompleteModel
114 false, // EnableIntervals
115 0, // Processor ID
116 nullptr, nullptr, 0, 0, // No instruction-level machine model.
117 DBGVAL_OR_NULLPTR(&BPFSchedClassNames), // SchedClassNames
118 nullptr, // No Itinerary
119 nullptr // No extra processor descriptor
120 },
121};
122
123#undef DBGFIELD
124
125#undef DBGVAL_OR_NULLPTR
126
127static constexpr size_t BPFCPUAliasArraySize = sizeof(std::array<SubtargetSubTypeAliasKV, 0>);
128// Sorted (by key) array of values for CPU subtype.
129extern const llvm::SubtargetSubTypeKVStorage< 6, 0, 28> BPFSubTypeKVStorage = {
130 {
131 { sizeof(SubtargetSubTypeKV) * 6 + BPFCPUAliasArraySize + 1, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
132 { sizeof(SubtargetSubTypeKV) * 5 + BPFCPUAliasArraySize + 9, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
133 { sizeof(SubtargetSubTypeKV) * 4 + BPFCPUAliasArraySize + 15, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
134 { sizeof(SubtargetSubTypeKV) * 3 + BPFCPUAliasArraySize + 18, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
135 { sizeof(SubtargetSubTypeKV) * 2 + BPFCPUAliasArraySize + 21, { { { 0x1ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
136 { sizeof(SubtargetSubTypeKV) * 1 + BPFCPUAliasArraySize + 24, { { { 0x1ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, 0 },
137 },
138 { {
139 } },
140 "\000generic\000probe\000v1\000v2\000v3\000v4\000"};
141
142namespace BPF_MC {
143
144unsigned resolveVariantSchedClassImpl(unsigned SchedClass,
145 const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID) {
146 // Don't know how to resolve this scheduling class.
147 return 0;
148}
149
150} // namespace BPF_MC
151struct BPFGenMCSubtargetInfo : public MCSubtargetInfo {
152 BPFGenMCSubtargetInfo(const Triple &TT,
153 StringRef CPU, StringRef TuneCPU, StringRef FS,
154 StringTable PN,
155 ArrayRef<SubtargetFeatureKV> PF,
156 ArrayRef<SubtargetSubTypeKV> PD,
157 ArrayRef<SubtargetSubTypeAliasKV> PA,
158 const MCSchedModel *PSM,
159 const MCWriteProcResEntry *WPR,
160 const MCWriteLatencyEntry *WL,
161 const MCReadAdvanceEntry *RA, const InstrStage *IS,
162 const unsigned *OC, const unsigned *FP) :
163 MCSubtargetInfo(TT, CPU, TuneCPU, FS, PN, PF, PD, PA, PSM,
164 WPR, WL, RA, IS, OC, FP) { }
165
166 unsigned resolveVariantSchedClass(unsigned SchedClass,
167 const MCInst *MI, const MCInstrInfo *MCII,
168 unsigned CPUID) const final {
169 return BPF_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
170 }
171};
172
173static inline MCSubtargetInfo *createBPFMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS) {
174 return new BPFGenMCSubtargetInfo(TT, CPU, TuneCPU, FS, StringTable(BPFSubTypeKVStorage.Strings), BPFFeatureKVStorage.Features, BPFSubTypeKVStorage.SubTypes, ArrayRef(BPFSubTypeKVStorage.Aliases).take_front(0), BPFSchedModels,
175 BPFWriteProcResTable, BPFWriteLatencyTable, BPFReadAdvanceTable,
176 nullptr, nullptr, nullptr);
177}
178
179
180} // namespace llvm
181
182#endif // GET_SUBTARGETINFO_MC_DESC
183
184#ifdef GET_SUBTARGETINFO_TARGET_DESC
185#undef GET_SUBTARGETINFO_TARGET_DESC
186
187#include "llvm/ADT/BitmaskEnum.h"
188#include "llvm/Support/Debug.h"
189#include "llvm/Support/raw_ostream.h"
190
191// ParseSubtargetFeatures - Parses features string setting specified
192// subtarget options.
193void llvm::BPFSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS) {
194 LLVM_DEBUG(dbgs() << "\nFeatures:" << FS);
195 LLVM_DEBUG(dbgs() << "\nCPU:" << CPU);
196 LLVM_DEBUG(dbgs() << "\nTuneCPU:" << TuneCPU << "\n\n");
197 InitMCProcessorInfo(CPU, TuneCPU, FS);
198 const FeatureBitset &Bits = getFeatureBits();
199 if (Bits[BPF::ALU32]) HasAlu32 = true;
200 if (Bits[BPF::DummyFeature]) isDummyMode = true;
201 if (Bits[BPF::DwarfRIS]) UseDwarfRIS = true;
202 if (Bits[BPF::MisalignedMemAccess]) AllowsMisalignedMemAccess = true;
203}
204
205#endif // GET_SUBTARGETINFO_TARGET_DESC
206
207#ifdef GET_SUBTARGETINFO_HEADER
208#undef GET_SUBTARGETINFO_HEADER
209
210namespace llvm {
211
212class DFAPacketizer;
213namespace BPF_MC {
214
215unsigned resolveVariantSchedClassImpl(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID);
216
217} // namespace BPF_MC
218struct BPFGenSubtargetInfo : public TargetSubtargetInfo {
219 explicit BPFGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS);
220public:
221 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const final;
222 unsigned resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const final;
223 DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
224 const FeatureBitset &getInlineIgnoreFeatures() const override;
225 const FeatureBitset &getInlineInverseFeatures() const override;
226 const FeatureBitset &getInlineMustMatchFeatures() const override;
227};
228
229} // namespace llvm
230
231#endif // GET_SUBTARGETINFO_HEADER
232
233#ifdef GET_SUBTARGETINFO_CTOR
234#undef GET_SUBTARGETINFO_CTOR
235
236#include "llvm/CodeGen/TargetSchedule.h"
237
238namespace llvm {
239
240extern const llvm::StringRef BPFNames[];
241extern const llvm::SubtargetFeatureKVStorage<4, 178> BPFFeatureKVStorage;
242extern const llvm::SubtargetSubTypeKVStorage<6, 0, 28> BPFSubTypeKVStorage;
243extern const llvm::MCSchedModel BPFSchedModels[];
244extern const llvm::MCWriteProcResEntry BPFWriteProcResTable[];
245extern const llvm::MCWriteLatencyEntry BPFWriteLatencyTable[];
246extern const llvm::MCReadAdvanceEntry BPFReadAdvanceTable[];
247BPFGenSubtargetInfo::BPFGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS)
248 : TargetSubtargetInfo(TT, CPU, TuneCPU, FS, StringTable(BPFSubTypeKVStorage.Strings), ArrayRef(BPFFeatureKVStorage.Features), ArrayRef(BPFSubTypeKVStorage.SubTypes), ArrayRef(BPFSubTypeKVStorage.Aliases).take_front(0), BPFSchedModels,
249 BPFWriteProcResTable, BPFWriteLatencyTable, BPFReadAdvanceTable,
250 nullptr, nullptr, nullptr) {}
251
252unsigned BPFGenSubtargetInfo
253::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
254 report_fatal_error("Expected a variant SchedClass");
255} // BPFGenSubtargetInfo::resolveSchedClass
256
257unsigned BPFGenSubtargetInfo
258::resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const {
259 return BPF_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
260} // BPFGenSubtargetInfo::resolveVariantSchedClass
261
262const FeatureBitset &BPFGenSubtargetInfo::getInlineIgnoreFeatures() const {
263 static constexpr FeatureBitset Features = {
264 };
265 return Features;
266}
267
268const FeatureBitset &BPFGenSubtargetInfo::getInlineInverseFeatures() const {
269 static constexpr FeatureBitset Features = {
270 };
271 return Features;
272}
273
274const FeatureBitset &BPFGenSubtargetInfo::getInlineMustMatchFeatures() const {
275 static constexpr FeatureBitset Features = {
276 };
277 return Features;
278}
279
280
281} // namespace llvm
282
283#endif // GET_SUBTARGETINFO_CTOR
284
285#ifdef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
286#undef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
287
288
289#endif // GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
290
291#ifdef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
292#undef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
293
294
295#endif // GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
296
297