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 NVPTX {
15
16enum {
17 PTX32 = 0,
18 PTX40 = 1,
19 PTX41 = 2,
20 PTX42 = 3,
21 PTX43 = 4,
22 PTX50 = 5,
23 PTX60 = 6,
24 PTX61 = 7,
25 PTX62 = 8,
26 PTX63 = 9,
27 PTX64 = 10,
28 PTX65 = 11,
29 PTX70 = 12,
30 PTX71 = 13,
31 PTX72 = 14,
32 PTX73 = 15,
33 PTX74 = 16,
34 PTX75 = 17,
35 PTX76 = 18,
36 PTX77 = 19,
37 PTX78 = 20,
38 PTX80 = 21,
39 PTX81 = 22,
40 PTX82 = 23,
41 PTX83 = 24,
42 PTX84 = 25,
43 PTX85 = 26,
44 PTX86 = 27,
45 PTX87 = 28,
46 PTX88 = 29,
47 PTX90 = 30,
48 PTX91 = 31,
49 PTX92 = 32,
50 SM20 = 33,
51 SM21 = 34,
52 SM30 = 35,
53 SM32 = 36,
54 SM35 = 37,
55 SM37 = 38,
56 SM50 = 39,
57 SM52 = 40,
58 SM53 = 41,
59 SM60 = 42,
60 SM61 = 43,
61 SM62 = 44,
62 SM70 = 45,
63 SM72 = 46,
64 SM75 = 47,
65 SM80 = 48,
66 SM86 = 49,
67 SM87 = 50,
68 SM88 = 51,
69 SM89 = 52,
70 SM90 = 53,
71 SM90a = 54,
72 SM100 = 55,
73 SM100a = 56,
74 SM100f = 57,
75 SM101 = 58,
76 SM101a = 59,
77 SM101f = 60,
78 SM103 = 61,
79 SM103a = 62,
80 SM103f = 63,
81 SM110 = 64,
82 SM110a = 65,
83 SM110f = 66,
84 SM120 = 67,
85 SM120a = 68,
86 SM120f = 69,
87 SM121 = 70,
88 SM121a = 71,
89 SM121f = 72,
90 NumSubtargetFeatures = 73
91};
92
93} // namespace NVPTX
94
95} // namespace llvm
96
97#endif // GET_SUBTARGETINFO_ENUM
98
99#ifdef GET_SUBTARGETINFO_MACRO
100
101
102#undef GET_SUBTARGETINFO_MACRO
103#endif // GET_SUBTARGETINFO_MACRO
104
105#ifdef GET_SUBTARGETINFO_MC_DESC
106#undef GET_SUBTARGETINFO_MC_DESC
107
108namespace llvm {
109
110// Sorted (by key) array of values for CPU features.
111extern const llvm::SubtargetFeatureKV NVPTXFeatureKV[] = {
112 { "ptx32", "Use PTX version 32", NVPTX::PTX32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
113 { "ptx40", "Use PTX version 40", NVPTX::PTX40, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
114 { "ptx41", "Use PTX version 41", NVPTX::PTX41, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
115 { "ptx42", "Use PTX version 42", NVPTX::PTX42, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
116 { "ptx43", "Use PTX version 43", NVPTX::PTX43, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
117 { "ptx50", "Use PTX version 50", NVPTX::PTX50, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
118 { "ptx60", "Use PTX version 60", NVPTX::PTX60, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
119 { "ptx61", "Use PTX version 61", NVPTX::PTX61, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
120 { "ptx62", "Use PTX version 62", NVPTX::PTX62, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
121 { "ptx63", "Use PTX version 63", NVPTX::PTX63, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
122 { "ptx64", "Use PTX version 64", NVPTX::PTX64, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
123 { "ptx65", "Use PTX version 65", NVPTX::PTX65, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
124 { "ptx70", "Use PTX version 70", NVPTX::PTX70, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
125 { "ptx71", "Use PTX version 71", NVPTX::PTX71, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
126 { "ptx72", "Use PTX version 72", NVPTX::PTX72, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
127 { "ptx73", "Use PTX version 73", NVPTX::PTX73, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
128 { "ptx74", "Use PTX version 74", NVPTX::PTX74, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
129 { "ptx75", "Use PTX version 75", NVPTX::PTX75, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
130 { "ptx76", "Use PTX version 76", NVPTX::PTX76, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
131 { "ptx77", "Use PTX version 77", NVPTX::PTX77, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
132 { "ptx78", "Use PTX version 78", NVPTX::PTX78, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
133 { "ptx80", "Use PTX version 80", NVPTX::PTX80, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
134 { "ptx81", "Use PTX version 81", NVPTX::PTX81, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
135 { "ptx82", "Use PTX version 82", NVPTX::PTX82, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
136 { "ptx83", "Use PTX version 83", NVPTX::PTX83, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
137 { "ptx84", "Use PTX version 84", NVPTX::PTX84, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
138 { "ptx85", "Use PTX version 85", NVPTX::PTX85, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
139 { "ptx86", "Use PTX version 86", NVPTX::PTX86, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
140 { "ptx87", "Use PTX version 87", NVPTX::PTX87, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
141 { "ptx88", "Use PTX version 88", NVPTX::PTX88, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
142 { "ptx90", "Use PTX version 90", NVPTX::PTX90, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
143 { "ptx91", "Use PTX version 91", NVPTX::PTX91, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
144 { "ptx92", "Use PTX version 92", NVPTX::PTX92, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
145 { "sm_100", "Target SM 100", NVPTX::SM100, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
146 { "sm_100a", "Target SM 100a", NVPTX::SM100a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
147 { "sm_100f", "Target SM 100f", NVPTX::SM100f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
148 { "sm_101", "Target SM 101", NVPTX::SM101, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
149 { "sm_101a", "Target SM 101a", NVPTX::SM101a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
150 { "sm_101f", "Target SM 101f", NVPTX::SM101f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
151 { "sm_103", "Target SM 103", NVPTX::SM103, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
152 { "sm_103a", "Target SM 103a", NVPTX::SM103a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
153 { "sm_103f", "Target SM 103f", NVPTX::SM103f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
154 { "sm_110", "Target SM 110", NVPTX::SM110, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
155 { "sm_110a", "Target SM 110a", NVPTX::SM110a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
156 { "sm_110f", "Target SM 110f", NVPTX::SM110f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
157 { "sm_120", "Target SM 120", NVPTX::SM120, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
158 { "sm_120a", "Target SM 120a", NVPTX::SM120a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
159 { "sm_120f", "Target SM 120f", NVPTX::SM120f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
160 { "sm_121", "Target SM 121", NVPTX::SM121, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
161 { "sm_121a", "Target SM 121a", NVPTX::SM121a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
162 { "sm_121f", "Target SM 121f", NVPTX::SM121f, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
163 { "sm_20", "Target SM 20", NVPTX::SM20, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
164 { "sm_21", "Target SM 21", NVPTX::SM21, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
165 { "sm_30", "Target SM 30", NVPTX::SM30, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
166 { "sm_32", "Target SM 32", NVPTX::SM32, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
167 { "sm_35", "Target SM 35", NVPTX::SM35, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
168 { "sm_37", "Target SM 37", NVPTX::SM37, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
169 { "sm_50", "Target SM 50", NVPTX::SM50, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
170 { "sm_52", "Target SM 52", NVPTX::SM52, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
171 { "sm_53", "Target SM 53", NVPTX::SM53, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
172 { "sm_60", "Target SM 60", NVPTX::SM60, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
173 { "sm_61", "Target SM 61", NVPTX::SM61, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
174 { "sm_62", "Target SM 62", NVPTX::SM62, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
175 { "sm_70", "Target SM 70", NVPTX::SM70, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
176 { "sm_72", "Target SM 72", NVPTX::SM72, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
177 { "sm_75", "Target SM 75", NVPTX::SM75, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
178 { "sm_80", "Target SM 80", NVPTX::SM80, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
179 { "sm_86", "Target SM 86", NVPTX::SM86, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
180 { "sm_87", "Target SM 87", NVPTX::SM87, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
181 { "sm_88", "Target SM 88", NVPTX::SM88, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
182 { "sm_89", "Target SM 89", NVPTX::SM89, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
183 { "sm_90", "Target SM 90", NVPTX::SM90, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
184 { "sm_90a", "Target SM 90a", NVPTX::SM90a, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } } },
185};
186
187#ifdef DBGFIELD
188#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
189#endif
190#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
191#define DBGFIELD(x) x,
192#define DBGVAL_OR_NULLPTR(x) x
193#else
194#define DBGFIELD(x)
195#define DBGVAL_OR_NULLPTR(x) nullptr
196#endif
197
198// ===============================================================
199// Data tables for the new per-operand machine model.
200
201// {ProcResourceIdx, ReleaseAtCycle, AcquireAtCycle}
202extern const llvm::MCWriteProcResEntry NVPTXWriteProcResTable[] = {
203 { 0, 0, 0 }, // Invalid
204}; // NVPTXWriteProcResTable
205
206// {Cycles, WriteResourceID}
207extern const llvm::MCWriteLatencyEntry NVPTXWriteLatencyTable[] = {
208 { 0, 0}, // Invalid
209}; // NVPTXWriteLatencyTable
210
211// {UseIdx, WriteResourceID, Cycles}
212extern const llvm::MCReadAdvanceEntry NVPTXReadAdvanceTable[] = {
213 {0, 0, 0}, // Invalid
214}; // NVPTXReadAdvanceTable
215
216#ifdef __GNUC__
217#pragma GCC diagnostic push
218#pragma GCC diagnostic ignored "-Woverlength-strings"
219#endif
220static constexpr char NVPTXSchedClassNamesStorage[] =
221 "\0"
222 "InvalidSchedClass\0"
223 ;
224#ifdef __GNUC__
225#pragma GCC diagnostic pop
226#endif
227
228static constexpr llvm::StringTable
229NVPTXSchedClassNames = NVPTXSchedClassNamesStorage;
230
231static const llvm::MCSchedModel NoSchedModel = {
232 MCSchedModel::DefaultIssueWidth,
233 MCSchedModel::DefaultMicroOpBufferSize,
234 MCSchedModel::DefaultLoopMicroOpBufferSize,
235 MCSchedModel::DefaultLoadLatency,
236 MCSchedModel::DefaultHighLatency,
237 MCSchedModel::DefaultMispredictPenalty,
238 false, // PostRAScheduler
239 false, // CompleteModel
240 false, // EnableIntervals
241 0, // Processor ID
242 nullptr, nullptr, 0, 0, // No instruction-level machine model.
243 DBGVAL_OR_NULLPTR(&NVPTXSchedClassNames), // SchedClassNames
244 nullptr, // No Itinerary
245 nullptr // No extra processor descriptor
246};
247
248#undef DBGFIELD
249
250#undef DBGVAL_OR_NULLPTR
251
252// Sorted (by key) array of values for CPU subtype.
253extern const llvm::SubtargetSubTypeKV NVPTXSubTypeKV[] = {
254 { "sm_100", { { { 0x80000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
255 { "sm_100a", { { { 0x100000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
256 { "sm_100f", { { { 0x200000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
257 { "sm_101", { { { 0x400000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
258 { "sm_101a", { { { 0x800000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
259 { "sm_101f", { { { 0x1000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
260 { "sm_103", { { { 0x2000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
261 { "sm_103a", { { { 0x4000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
262 { "sm_103f", { { { 0x8000000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
263 { "sm_110", { { { 0x0ULL, 0x1ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
264 { "sm_110a", { { { 0x0ULL, 0x2ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
265 { "sm_110f", { { { 0x0ULL, 0x4ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
266 { "sm_120", { { { 0x0ULL, 0x8ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
267 { "sm_120a", { { { 0x0ULL, 0x10ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
268 { "sm_120f", { { { 0x0ULL, 0x20ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
269 { "sm_121", { { { 0x0ULL, 0x40ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
270 { "sm_121a", { { { 0x0ULL, 0x80ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
271 { "sm_121f", { { { 0x0ULL, 0x100ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
272 { "sm_20", { { { 0x200000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
273 { "sm_21", { { { 0x400000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
274 { "sm_30", { { { 0x800000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
275 { "sm_32", { { { 0x1000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
276 { "sm_35", { { { 0x2000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
277 { "sm_37", { { { 0x4000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
278 { "sm_50", { { { 0x8000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
279 { "sm_52", { { { 0x10000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
280 { "sm_53", { { { 0x20000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
281 { "sm_60", { { { 0x40000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
282 { "sm_61", { { { 0x80000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
283 { "sm_62", { { { 0x100000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
284 { "sm_70", { { { 0x200000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
285 { "sm_72", { { { 0x400000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
286 { "sm_75", { { { 0x800000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
287 { "sm_80", { { { 0x1000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
288 { "sm_86", { { { 0x2000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
289 { "sm_87", { { { 0x4000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
290 { "sm_88", { { { 0x8000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
291 { "sm_89", { { { 0x10000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
292 { "sm_90", { { { 0x20000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
293 { "sm_90a", { { { 0x40000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, { { { 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, } } }, &NoSchedModel },
294};
295
296// Sorted array of names of CPU subtypes, including aliases.
297extern const llvm::StringRef NVPTXNames[] = {
298"sm_100",
299"sm_100a",
300"sm_100f",
301"sm_101",
302"sm_101a",
303"sm_101f",
304"sm_103",
305"sm_103a",
306"sm_103f",
307"sm_110",
308"sm_110a",
309"sm_110f",
310"sm_120",
311"sm_120a",
312"sm_120f",
313"sm_121",
314"sm_121a",
315"sm_121f",
316"sm_20",
317"sm_21",
318"sm_30",
319"sm_32",
320"sm_35",
321"sm_37",
322"sm_50",
323"sm_52",
324"sm_53",
325"sm_60",
326"sm_61",
327"sm_62",
328"sm_70",
329"sm_72",
330"sm_75",
331"sm_80",
332"sm_86",
333"sm_87",
334"sm_88",
335"sm_89",
336"sm_90",
337"sm_90a"};
338
339namespace NVPTX_MC {
340
341unsigned resolveVariantSchedClassImpl(unsigned SchedClass,
342 const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID) {
343 // Don't know how to resolve this scheduling class.
344 return 0;
345}
346
347} // namespace NVPTX_MC
348struct NVPTXGenMCSubtargetInfo : public MCSubtargetInfo {
349 NVPTXGenMCSubtargetInfo(const Triple &TT,
350 StringRef CPU, StringRef TuneCPU, StringRef FS,
351 ArrayRef<StringRef> PN,
352 ArrayRef<SubtargetFeatureKV> PF,
353 ArrayRef<SubtargetSubTypeKV> PD,
354 const MCWriteProcResEntry *WPR,
355 const MCWriteLatencyEntry *WL,
356 const MCReadAdvanceEntry *RA, const InstrStage *IS,
357 const unsigned *OC, const unsigned *FP) :
358 MCSubtargetInfo(TT, CPU, TuneCPU, FS, PN, PF, PD,
359 WPR, WL, RA, IS, OC, FP) { }
360
361 unsigned resolveVariantSchedClass(unsigned SchedClass,
362 const MCInst *MI, const MCInstrInfo *MCII,
363 unsigned CPUID) const final {
364 return NVPTX_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
365 }
366 unsigned getHwModeSet() const final;
367 unsigned getHwMode(enum HwModeType type = HwMode_Default) const final;
368};
369unsigned NVPTXGenMCSubtargetInfo::getHwModeSet() const {
370 [[maybe_unused]] const FeatureBitset &FB = getFeatureBits();
371 // Collect HwModes and store them as a bit set.
372 unsigned Modes = 0;
373 if (false) Modes |= (1 << 0);
374 return Modes;
375}
376unsigned NVPTXGenMCSubtargetInfo::getHwMode(enum HwModeType type) const {
377 unsigned Modes = getHwModeSet();
378
379 if (!Modes)
380 return Modes;
381
382 switch (type) {
383 case HwMode_Default:
384 return llvm::countr_zero(Modes) + 1;
385 case HwMode_ValueType:
386 // No HwMode for ValueType.
387 return 0;
388 case HwMode_RegInfo:
389 Modes &= 1;
390 if (!Modes)
391 return Modes;
392 if (!llvm::has_single_bit<unsigned>(Modes))
393 llvm_unreachable("Two or more HwModes for RegInfo were found!");
394 return llvm::countr_zero(Modes) + 1;
395 case HwMode_EncodingInfo:
396 // No HwMode for EncodingInfo.
397 return 0;
398 }
399 llvm_unreachable("unexpected HwModeType");
400 return 0; // should not get here
401}
402
403static inline MCSubtargetInfo *createNVPTXMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS) {
404 return new NVPTXGenMCSubtargetInfo(TT, CPU, TuneCPU, FS, NVPTXNames, NVPTXFeatureKV, NVPTXSubTypeKV,
405 NVPTXWriteProcResTable, NVPTXWriteLatencyTable, NVPTXReadAdvanceTable,
406 nullptr, nullptr, nullptr);
407}
408
409
410} // namespace llvm
411
412#endif // GET_SUBTARGETINFO_MC_DESC
413
414#ifdef GET_SUBTARGETINFO_TARGET_DESC
415#undef GET_SUBTARGETINFO_TARGET_DESC
416
417#include "llvm/ADT/BitmaskEnum.h"
418#include "llvm/Support/Debug.h"
419#include "llvm/Support/raw_ostream.h"
420
421// ParseSubtargetFeatures - Parses features string setting specified
422// subtarget options.
423void llvm::NVPTXSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS) {
424 LLVM_DEBUG(dbgs() << "\nFeatures:" << FS);
425 LLVM_DEBUG(dbgs() << "\nCPU:" << CPU);
426 LLVM_DEBUG(dbgs() << "\nTuneCPU:" << TuneCPU << "\n\n");
427 InitMCProcessorInfo(CPU, TuneCPU, FS);
428 const FeatureBitset &Bits = getFeatureBits();
429 if (Bits[NVPTX::PTX32] && PTXVersion < 32) PTXVersion = 32;
430 if (Bits[NVPTX::PTX40] && PTXVersion < 40) PTXVersion = 40;
431 if (Bits[NVPTX::PTX41] && PTXVersion < 41) PTXVersion = 41;
432 if (Bits[NVPTX::PTX42] && PTXVersion < 42) PTXVersion = 42;
433 if (Bits[NVPTX::PTX43] && PTXVersion < 43) PTXVersion = 43;
434 if (Bits[NVPTX::PTX50] && PTXVersion < 50) PTXVersion = 50;
435 if (Bits[NVPTX::PTX60] && PTXVersion < 60) PTXVersion = 60;
436 if (Bits[NVPTX::PTX61] && PTXVersion < 61) PTXVersion = 61;
437 if (Bits[NVPTX::PTX62] && PTXVersion < 62) PTXVersion = 62;
438 if (Bits[NVPTX::PTX63] && PTXVersion < 63) PTXVersion = 63;
439 if (Bits[NVPTX::PTX64] && PTXVersion < 64) PTXVersion = 64;
440 if (Bits[NVPTX::PTX65] && PTXVersion < 65) PTXVersion = 65;
441 if (Bits[NVPTX::PTX70] && PTXVersion < 70) PTXVersion = 70;
442 if (Bits[NVPTX::PTX71] && PTXVersion < 71) PTXVersion = 71;
443 if (Bits[NVPTX::PTX72] && PTXVersion < 72) PTXVersion = 72;
444 if (Bits[NVPTX::PTX73] && PTXVersion < 73) PTXVersion = 73;
445 if (Bits[NVPTX::PTX74] && PTXVersion < 74) PTXVersion = 74;
446 if (Bits[NVPTX::PTX75] && PTXVersion < 75) PTXVersion = 75;
447 if (Bits[NVPTX::PTX76] && PTXVersion < 76) PTXVersion = 76;
448 if (Bits[NVPTX::PTX77] && PTXVersion < 77) PTXVersion = 77;
449 if (Bits[NVPTX::PTX78] && PTXVersion < 78) PTXVersion = 78;
450 if (Bits[NVPTX::PTX80] && PTXVersion < 80) PTXVersion = 80;
451 if (Bits[NVPTX::PTX81] && PTXVersion < 81) PTXVersion = 81;
452 if (Bits[NVPTX::PTX82] && PTXVersion < 82) PTXVersion = 82;
453 if (Bits[NVPTX::PTX83] && PTXVersion < 83) PTXVersion = 83;
454 if (Bits[NVPTX::PTX84] && PTXVersion < 84) PTXVersion = 84;
455 if (Bits[NVPTX::PTX85] && PTXVersion < 85) PTXVersion = 85;
456 if (Bits[NVPTX::PTX86] && PTXVersion < 86) PTXVersion = 86;
457 if (Bits[NVPTX::PTX87] && PTXVersion < 87) PTXVersion = 87;
458 if (Bits[NVPTX::PTX88] && PTXVersion < 88) PTXVersion = 88;
459 if (Bits[NVPTX::PTX90] && PTXVersion < 90) PTXVersion = 90;
460 if (Bits[NVPTX::PTX91] && PTXVersion < 91) PTXVersion = 91;
461 if (Bits[NVPTX::PTX92] && PTXVersion < 92) PTXVersion = 92;
462 if (Bits[NVPTX::SM20] && FullSmVersion < 200) FullSmVersion = 200;
463 if (Bits[NVPTX::SM21] && FullSmVersion < 210) FullSmVersion = 210;
464 if (Bits[NVPTX::SM30] && FullSmVersion < 300) FullSmVersion = 300;
465 if (Bits[NVPTX::SM32] && FullSmVersion < 320) FullSmVersion = 320;
466 if (Bits[NVPTX::SM35] && FullSmVersion < 350) FullSmVersion = 350;
467 if (Bits[NVPTX::SM37] && FullSmVersion < 370) FullSmVersion = 370;
468 if (Bits[NVPTX::SM50] && FullSmVersion < 500) FullSmVersion = 500;
469 if (Bits[NVPTX::SM52] && FullSmVersion < 520) FullSmVersion = 520;
470 if (Bits[NVPTX::SM53] && FullSmVersion < 530) FullSmVersion = 530;
471 if (Bits[NVPTX::SM60] && FullSmVersion < 600) FullSmVersion = 600;
472 if (Bits[NVPTX::SM61] && FullSmVersion < 610) FullSmVersion = 610;
473 if (Bits[NVPTX::SM62] && FullSmVersion < 620) FullSmVersion = 620;
474 if (Bits[NVPTX::SM70] && FullSmVersion < 700) FullSmVersion = 700;
475 if (Bits[NVPTX::SM72] && FullSmVersion < 720) FullSmVersion = 720;
476 if (Bits[NVPTX::SM75] && FullSmVersion < 750) FullSmVersion = 750;
477 if (Bits[NVPTX::SM80] && FullSmVersion < 800) FullSmVersion = 800;
478 if (Bits[NVPTX::SM86] && FullSmVersion < 860) FullSmVersion = 860;
479 if (Bits[NVPTX::SM87] && FullSmVersion < 870) FullSmVersion = 870;
480 if (Bits[NVPTX::SM88] && FullSmVersion < 880) FullSmVersion = 880;
481 if (Bits[NVPTX::SM89] && FullSmVersion < 890) FullSmVersion = 890;
482 if (Bits[NVPTX::SM90] && FullSmVersion < 900) FullSmVersion = 900;
483 if (Bits[NVPTX::SM90a] && FullSmVersion < 903) FullSmVersion = 903;
484 if (Bits[NVPTX::SM100] && FullSmVersion < 1000) FullSmVersion = 1000;
485 if (Bits[NVPTX::SM100a] && FullSmVersion < 1003) FullSmVersion = 1003;
486 if (Bits[NVPTX::SM100f] && FullSmVersion < 1002) FullSmVersion = 1002;
487 if (Bits[NVPTX::SM101] && FullSmVersion < 1010) FullSmVersion = 1010;
488 if (Bits[NVPTX::SM101a] && FullSmVersion < 1013) FullSmVersion = 1013;
489 if (Bits[NVPTX::SM101f] && FullSmVersion < 1012) FullSmVersion = 1012;
490 if (Bits[NVPTX::SM103] && FullSmVersion < 1030) FullSmVersion = 1030;
491 if (Bits[NVPTX::SM103a] && FullSmVersion < 1033) FullSmVersion = 1033;
492 if (Bits[NVPTX::SM103f] && FullSmVersion < 1032) FullSmVersion = 1032;
493 if (Bits[NVPTX::SM110] && FullSmVersion < 1100) FullSmVersion = 1100;
494 if (Bits[NVPTX::SM110a] && FullSmVersion < 1103) FullSmVersion = 1103;
495 if (Bits[NVPTX::SM110f] && FullSmVersion < 1102) FullSmVersion = 1102;
496 if (Bits[NVPTX::SM120] && FullSmVersion < 1200) FullSmVersion = 1200;
497 if (Bits[NVPTX::SM120a] && FullSmVersion < 1203) FullSmVersion = 1203;
498 if (Bits[NVPTX::SM120f] && FullSmVersion < 1202) FullSmVersion = 1202;
499 if (Bits[NVPTX::SM121] && FullSmVersion < 1210) FullSmVersion = 1210;
500 if (Bits[NVPTX::SM121a] && FullSmVersion < 1213) FullSmVersion = 1213;
501 if (Bits[NVPTX::SM121f] && FullSmVersion < 1212) FullSmVersion = 1212;
502}
503
504#endif // GET_SUBTARGETINFO_TARGET_DESC
505
506#ifdef GET_SUBTARGETINFO_HEADER
507#undef GET_SUBTARGETINFO_HEADER
508
509namespace llvm {
510
511class DFAPacketizer;
512namespace NVPTX_MC {
513
514unsigned resolveVariantSchedClassImpl(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, const MCSubtargetInfo &STI, unsigned CPUID);
515
516} // namespace NVPTX_MC
517struct NVPTXGenSubtargetInfo : public TargetSubtargetInfo {
518 explicit NVPTXGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS);
519public:
520 unsigned resolveSchedClass(unsigned SchedClass, const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const final;
521 unsigned resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const final;
522 DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
523 enum class NVPTXHwModeBits : unsigned {
524 DefaultMode = 0,
525 NVPTX64 = (1 << 0),
526
527 LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue=*/NVPTX64),
528 };
529 unsigned getHwModeSet() const final;
530 unsigned getHwMode(enum HwModeType type = HwMode_Default) const final;
531 const FeatureBitset &getInlineIgnoreFeatures() const override;
532 const FeatureBitset &getInlineInverseFeatures() const override;
533};
534
535} // namespace llvm
536
537#endif // GET_SUBTARGETINFO_HEADER
538
539#ifdef GET_SUBTARGETINFO_CTOR
540#undef GET_SUBTARGETINFO_CTOR
541
542#include "llvm/CodeGen/TargetSchedule.h"
543
544namespace llvm {
545
546extern const llvm::StringRef NVPTXNames[];
547extern const llvm::SubtargetFeatureKV NVPTXFeatureKV[];
548extern const llvm::SubtargetSubTypeKV NVPTXSubTypeKV[];
549extern const llvm::MCWriteProcResEntry NVPTXWriteProcResTable[];
550extern const llvm::MCWriteLatencyEntry NVPTXWriteLatencyTable[];
551extern const llvm::MCReadAdvanceEntry NVPTXReadAdvanceTable[];
552NVPTXGenSubtargetInfo::NVPTXGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef TuneCPU, StringRef FS)
553 : TargetSubtargetInfo(TT, CPU, TuneCPU, FS, ArrayRef(NVPTXNames, 40), ArrayRef(NVPTXFeatureKV, 73), ArrayRef(NVPTXSubTypeKV, 40),
554 NVPTXWriteProcResTable, NVPTXWriteLatencyTable, NVPTXReadAdvanceTable,
555 nullptr, nullptr, nullptr) {}
556
557unsigned NVPTXGenSubtargetInfo
558::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
559 report_fatal_error("Expected a variant SchedClass");
560} // NVPTXGenSubtargetInfo::resolveSchedClass
561
562unsigned NVPTXGenSubtargetInfo
563::resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI, const MCInstrInfo *MCII, unsigned CPUID) const {
564 return NVPTX_MC::resolveVariantSchedClassImpl(SchedClass, MI, MCII, *this, CPUID);
565} // NVPTXGenSubtargetInfo::resolveVariantSchedClass
566
567unsigned NVPTXGenSubtargetInfo::getHwModeSet() const {
568 [[maybe_unused]] const auto *Subtarget =
569 static_cast<const NVPTXSubtarget *>(this);
570 // Collect HwModes and store them as a bit set.
571 unsigned Modes = 0;
572 if ((Subtarget->getTargetTriple().getArch() == Triple::nvptx64)) Modes |= (1 << 0);
573 return Modes;
574}
575unsigned NVPTXGenSubtargetInfo::getHwMode(enum HwModeType type) const {
576 unsigned Modes = getHwModeSet();
577
578 if (!Modes)
579 return Modes;
580
581 switch (type) {
582 case HwMode_Default:
583 return llvm::countr_zero(Modes) + 1;
584 case HwMode_ValueType:
585 // No HwMode for ValueType.
586 return 0;
587 case HwMode_RegInfo:
588 Modes &= 1;
589 if (!Modes)
590 return Modes;
591 if (!llvm::has_single_bit<unsigned>(Modes))
592 llvm_unreachable("Two or more HwModes for RegInfo were found!");
593 return llvm::countr_zero(Modes) + 1;
594 case HwMode_EncodingInfo:
595 // No HwMode for EncodingInfo.
596 return 0;
597 }
598 llvm_unreachable("unexpected HwModeType");
599 return 0; // should not get here
600}
601const FeatureBitset &NVPTXGenSubtargetInfo::getInlineIgnoreFeatures() const {
602 static constexpr FeatureBitset Features = {
603 };
604 return Features;
605}
606
607const FeatureBitset &NVPTXGenSubtargetInfo::getInlineInverseFeatures() const {
608 static constexpr FeatureBitset Features = {
609 };
610 return Features;
611}
612
613
614} // namespace llvm
615
616#endif // GET_SUBTARGETINFO_CTOR
617
618#ifdef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
619#undef GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
620
621
622#endif // GET_STIPREDICATE_DECLS_FOR_MC_ANALYSIS
623
624#ifdef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
625#undef GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
626
627
628#endif // GET_STIPREDICATE_DEFS_FOR_MC_ANALYSIS
629
630