1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Target Register and Register Classes Information *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9namespace llvm {
10
11extern const MCRegisterClass R600MCRegisterClasses[];
12
13static const MVT::SimpleValueType VTLists[] = {
14 /* 0 */ MVT::f32, MVT::i32, MVT::Other,
15 /* 3 */ MVT::v2f32, MVT::v2i32, MVT::i64, MVT::f64, MVT::Other,
16 /* 8 */ MVT::v2f32, MVT::v2i32, MVT::Other,
17 /* 11 */ MVT::v4f32, MVT::v4i32, MVT::Other,
18};
19
20#ifdef __GNUC__
21#pragma GCC diagnostic push
22#pragma GCC diagnostic ignored "-Woverlength-strings"
23#endif
24static constexpr char R600SubRegIndexStrings[] = {
25 /* 0 */ "sub10\000"
26 /* 6 */ "sub0\000"
27 /* 11 */ "sub11\000"
28 /* 17 */ "sub1\000"
29 /* 22 */ "sub12\000"
30 /* 28 */ "sub2\000"
31 /* 33 */ "sub13\000"
32 /* 39 */ "sub3\000"
33 /* 44 */ "sub14\000"
34 /* 50 */ "sub4\000"
35 /* 55 */ "sub15\000"
36 /* 61 */ "sub5\000"
37 /* 66 */ "sub6\000"
38 /* 71 */ "sub7\000"
39 /* 76 */ "sub8\000"
40 /* 81 */ "sub9\000"
41};
42#ifdef __GNUC__
43#pragma GCC diagnostic pop
44#endif
45
46
47static constexpr uint32_t R600SubRegIndexNameOffsets[] = {
48 6,
49 17,
50 28,
51 39,
52 50,
53 61,
54 66,
55 71,
56 76,
57 81,
58 0,
59 11,
60 22,
61 33,
62 44,
63 55,
64};
65
66static const TargetRegisterInfo::SubRegCoveredBits SubRegIdxRangeTable[] = {
67 { .Offset: 65535, .Size: 65535 },
68 { .Offset: 0, .Size: 32 }, // sub0
69 { .Offset: 32, .Size: 32 }, // sub1
70 { .Offset: 64, .Size: 32 }, // sub2
71 { .Offset: 96, .Size: 32 }, // sub3
72 { .Offset: 128, .Size: 32 }, // sub4
73 { .Offset: 160, .Size: 32 }, // sub5
74 { .Offset: 192, .Size: 32 }, // sub6
75 { .Offset: 224, .Size: 32 }, // sub7
76 { .Offset: 256, .Size: 32 }, // sub8
77 { .Offset: 288, .Size: 32 }, // sub9
78 { .Offset: 320, .Size: 32 }, // sub10
79 { .Offset: 352, .Size: 32 }, // sub11
80 { .Offset: 384, .Size: 32 }, // sub12
81 { .Offset: 416, .Size: 32 }, // sub13
82 { .Offset: 448, .Size: 32 }, // sub14
83 { .Offset: 480, .Size: 32 }, // sub15
84};
85
86
87static const LaneBitmask SubRegIndexLaneMaskTable[] = {
88 LaneBitmask::getAll(),
89 LaneBitmask(0x0000000000000001), // sub0
90 LaneBitmask(0x0000000000000002), // sub1
91 LaneBitmask(0x0000000000000004), // sub2
92 LaneBitmask(0x0000000000000008), // sub3
93 LaneBitmask(0x0000000000000010), // sub4
94 LaneBitmask(0x0000000000000020), // sub5
95 LaneBitmask(0x0000000000000040), // sub6
96 LaneBitmask(0x0000000000000080), // sub7
97 LaneBitmask(0x0000000000000100), // sub8
98 LaneBitmask(0x0000000000000200), // sub9
99 LaneBitmask(0x0000000000000400), // sub10
100 LaneBitmask(0x0000000000000800), // sub11
101 LaneBitmask(0x0000000000001000), // sub12
102 LaneBitmask(0x0000000000002000), // sub13
103 LaneBitmask(0x0000000000004000), // sub14
104 LaneBitmask(0x0000000000008000), // sub15
105 };
106
107
108
109static const TargetRegisterInfo::RegClassInfo RegClassInfos[] = {
110 // Mode = 0 (DefaultMode)
111 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_Reg32
112 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_TReg32
113 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_TReg32_X
114 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Addr
115 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC0
116 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC1
117 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_TReg32_W
118 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_TReg32_Y
119 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_TReg32_Z
120 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_ArrayBase
121 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC0_W
122 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC0_X
123 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC0_Y
124 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC0_Z
125 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC1_W
126 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC1_X
127 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC1_Y
128 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_KC1_Z
129 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_LDS_SRC_REG
130 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Predicate
131 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Addr_W
132 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Addr_Y
133 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Addr_Z
134 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 0 }, // R600_LDS_SRC_REG_and_R600_Reg32
135 { .RegSize: 32, .SpillSize: 32, .SpillAlignment: 32, /*VTLists+*/.VTListOffset: 1 }, // R600_Predicate_Bit
136 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 3 }, // R600_Reg64
137 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 8 }, // R600_Reg64Vertical
138 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 8 }, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
139 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 8 }, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
140 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 8 }, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
141 { .RegSize: 64, .SpillSize: 64, .SpillAlignment: 64, /*VTLists+*/.VTListOffset: 8 }, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
142 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128
143 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128Vertical
144 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
145 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
146 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
147 { .RegSize: 128, .SpillSize: 128, .SpillAlignment: 128, /*VTLists+*/.VTListOffset: 11 }, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
148};
149static const uint32_t R600_Reg32SubClassMask[] = {
150 0x0083ffff, 0x00000000,
151 0xfe000000, 0x0000001f, // sub0
152 0xfe000000, 0x0000001f, // sub1
153 0x80000000, 0x0000001f, // sub2
154 0x80000000, 0x0000001f, // sub3
155};
156
157static const uint32_t R600_TReg32SubClassMask[] = {
158 0x000001c6, 0x00000000,
159 0xfe000000, 0x0000001f, // sub0
160 0xfe000000, 0x0000001f, // sub1
161 0x80000000, 0x0000001f, // sub2
162 0x80000000, 0x0000001f, // sub3
163};
164
165static const uint32_t R600_TReg32_XSubClassMask[] = {
166 0x00000004, 0x00000000,
167 0x92000000, 0x00000004, // sub0
168 0x10000000, 0x00000004, // sub1
169 0x00000000, 0x00000004, // sub2
170 0x00000000, 0x00000004, // sub3
171};
172
173static const uint32_t R600_AddrSubClassMask[] = {
174 0x00000008, 0x00000000,
175};
176
177static const uint32_t R600_KC0SubClassMask[] = {
178 0x00003c10, 0x00000000,
179};
180
181static const uint32_t R600_KC1SubClassMask[] = {
182 0x0003c020, 0x00000000,
183};
184
185static const uint32_t R600_TReg32_WSubClassMask[] = {
186 0x00000040, 0x00000000,
187 0x08000000, 0x00000002, // sub0
188 0x08000000, 0x00000002, // sub1
189 0x00000000, 0x00000002, // sub2
190 0x80000000, 0x00000002, // sub3
191};
192
193static const uint32_t R600_TReg32_YSubClassMask[] = {
194 0x00000080, 0x00000000,
195 0x20000000, 0x00000008, // sub0
196 0xa2000000, 0x00000008, // sub1
197 0x00000000, 0x00000008, // sub2
198 0x00000000, 0x00000008, // sub3
199};
200
201static const uint32_t R600_TReg32_ZSubClassMask[] = {
202 0x00000100, 0x00000000,
203 0x40000000, 0x00000010, // sub0
204 0x40000000, 0x00000010, // sub1
205 0x80000000, 0x00000010, // sub2
206 0x00000000, 0x00000010, // sub3
207};
208
209static const uint32_t R600_ArrayBaseSubClassMask[] = {
210 0x00000200, 0x00000000,
211};
212
213static const uint32_t R600_KC0_WSubClassMask[] = {
214 0x00000400, 0x00000000,
215};
216
217static const uint32_t R600_KC0_XSubClassMask[] = {
218 0x00000800, 0x00000000,
219};
220
221static const uint32_t R600_KC0_YSubClassMask[] = {
222 0x00001000, 0x00000000,
223};
224
225static const uint32_t R600_KC0_ZSubClassMask[] = {
226 0x00002000, 0x00000000,
227};
228
229static const uint32_t R600_KC1_WSubClassMask[] = {
230 0x00004000, 0x00000000,
231};
232
233static const uint32_t R600_KC1_XSubClassMask[] = {
234 0x00008000, 0x00000000,
235};
236
237static const uint32_t R600_KC1_YSubClassMask[] = {
238 0x00010000, 0x00000000,
239};
240
241static const uint32_t R600_KC1_ZSubClassMask[] = {
242 0x00020000, 0x00000000,
243};
244
245static const uint32_t R600_LDS_SRC_REGSubClassMask[] = {
246 0x00840000, 0x00000000,
247};
248
249static const uint32_t R600_PredicateSubClassMask[] = {
250 0x00080000, 0x00000000,
251};
252
253static const uint32_t R600_Addr_WSubClassMask[] = {
254 0x00100000, 0x00000000,
255};
256
257static const uint32_t R600_Addr_YSubClassMask[] = {
258 0x00200000, 0x00000000,
259};
260
261static const uint32_t R600_Addr_ZSubClassMask[] = {
262 0x00400000, 0x00000000,
263};
264
265static const uint32_t R600_LDS_SRC_REG_and_R600_Reg32SubClassMask[] = {
266 0x00800000, 0x00000000,
267};
268
269static const uint32_t R600_Predicate_BitSubClassMask[] = {
270 0x01000000, 0x00000000,
271};
272
273static const uint32_t R600_Reg64SubClassMask[] = {
274 0x02000000, 0x00000000,
275};
276
277static const uint32_t R600_Reg64VerticalSubClassMask[] = {
278 0x7c000000, 0x00000000,
279};
280
281static const uint32_t R600_Reg64Vertical_with_sub0_in_R600_TReg32_WSubClassMask[] = {
282 0x08000000, 0x00000000,
283};
284
285static const uint32_t R600_Reg64Vertical_with_sub0_in_R600_TReg32_XSubClassMask[] = {
286 0x10000000, 0x00000000,
287};
288
289static const uint32_t R600_Reg64Vertical_with_sub0_in_R600_TReg32_YSubClassMask[] = {
290 0x20000000, 0x00000000,
291};
292
293static const uint32_t R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZSubClassMask[] = {
294 0x40000000, 0x00000000,
295};
296
297static const uint32_t R600_Reg128SubClassMask[] = {
298 0x80000000, 0x00000000,
299};
300
301static const uint32_t R600_Reg128VerticalSubClassMask[] = {
302 0x00000000, 0x0000001f,
303};
304
305static const uint32_t R600_Reg128Vertical_with_sub0_in_R600_TReg32_WSubClassMask[] = {
306 0x00000000, 0x00000002,
307};
308
309static const uint32_t R600_Reg128Vertical_with_sub0_in_R600_TReg32_XSubClassMask[] = {
310 0x00000000, 0x00000004,
311};
312
313static const uint32_t R600_Reg128Vertical_with_sub0_in_R600_TReg32_YSubClassMask[] = {
314 0x00000000, 0x00000008,
315};
316
317static const uint32_t R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZSubClassMask[] = {
318 0x00000000, 0x00000010,
319};
320
321static const uint16_t SuperRegIdxSeqs[] = {
322 /* 0 */ 1, 2, 3, 4, 0,
323};
324
325static unsigned const R600_TReg32Superclasses[] = {
326 R600::R600_Reg32RegClassID,
327};
328
329static unsigned const R600_TReg32_XSuperclasses[] = {
330 R600::R600_Reg32RegClassID,
331 R600::R600_TReg32RegClassID,
332};
333
334static unsigned const R600_AddrSuperclasses[] = {
335 R600::R600_Reg32RegClassID,
336};
337
338static unsigned const R600_KC0Superclasses[] = {
339 R600::R600_Reg32RegClassID,
340};
341
342static unsigned const R600_KC1Superclasses[] = {
343 R600::R600_Reg32RegClassID,
344};
345
346static unsigned const R600_TReg32_WSuperclasses[] = {
347 R600::R600_Reg32RegClassID,
348 R600::R600_TReg32RegClassID,
349};
350
351static unsigned const R600_TReg32_YSuperclasses[] = {
352 R600::R600_Reg32RegClassID,
353 R600::R600_TReg32RegClassID,
354};
355
356static unsigned const R600_TReg32_ZSuperclasses[] = {
357 R600::R600_Reg32RegClassID,
358 R600::R600_TReg32RegClassID,
359};
360
361static unsigned const R600_ArrayBaseSuperclasses[] = {
362 R600::R600_Reg32RegClassID,
363};
364
365static unsigned const R600_KC0_WSuperclasses[] = {
366 R600::R600_Reg32RegClassID,
367 R600::R600_KC0RegClassID,
368};
369
370static unsigned const R600_KC0_XSuperclasses[] = {
371 R600::R600_Reg32RegClassID,
372 R600::R600_KC0RegClassID,
373};
374
375static unsigned const R600_KC0_YSuperclasses[] = {
376 R600::R600_Reg32RegClassID,
377 R600::R600_KC0RegClassID,
378};
379
380static unsigned const R600_KC0_ZSuperclasses[] = {
381 R600::R600_Reg32RegClassID,
382 R600::R600_KC0RegClassID,
383};
384
385static unsigned const R600_KC1_WSuperclasses[] = {
386 R600::R600_Reg32RegClassID,
387 R600::R600_KC1RegClassID,
388};
389
390static unsigned const R600_KC1_XSuperclasses[] = {
391 R600::R600_Reg32RegClassID,
392 R600::R600_KC1RegClassID,
393};
394
395static unsigned const R600_KC1_YSuperclasses[] = {
396 R600::R600_Reg32RegClassID,
397 R600::R600_KC1RegClassID,
398};
399
400static unsigned const R600_KC1_ZSuperclasses[] = {
401 R600::R600_Reg32RegClassID,
402 R600::R600_KC1RegClassID,
403};
404
405static unsigned const R600_LDS_SRC_REG_and_R600_Reg32Superclasses[] = {
406 R600::R600_Reg32RegClassID,
407 R600::R600_LDS_SRC_REGRegClassID,
408};
409
410static unsigned const R600_Reg64Vertical_with_sub0_in_R600_TReg32_WSuperclasses[] = {
411 R600::R600_Reg64VerticalRegClassID,
412};
413
414static unsigned const R600_Reg64Vertical_with_sub0_in_R600_TReg32_XSuperclasses[] = {
415 R600::R600_Reg64VerticalRegClassID,
416};
417
418static unsigned const R600_Reg64Vertical_with_sub0_in_R600_TReg32_YSuperclasses[] = {
419 R600::R600_Reg64VerticalRegClassID,
420};
421
422static unsigned const R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZSuperclasses[] = {
423 R600::R600_Reg64VerticalRegClassID,
424};
425
426static unsigned const R600_Reg128Vertical_with_sub0_in_R600_TReg32_WSuperclasses[] = {
427 R600::R600_Reg128VerticalRegClassID,
428};
429
430static unsigned const R600_Reg128Vertical_with_sub0_in_R600_TReg32_XSuperclasses[] = {
431 R600::R600_Reg128VerticalRegClassID,
432};
433
434static unsigned const R600_Reg128Vertical_with_sub0_in_R600_TReg32_YSuperclasses[] = {
435 R600::R600_Reg128VerticalRegClassID,
436};
437
438static unsigned const R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZSuperclasses[] = {
439 R600::R600_Reg128VerticalRegClassID,
440};
441
442namespace R600 {
443
444// Register class instances
445 extern const TargetRegisterClass R600_Reg32RegClass = {
446 .MC: &R600MCRegisterClasses[R600_Reg32RegClassID],
447 .SubClassMask: R600_Reg32SubClassMask,
448 .SuperRegIndices: SuperRegIdxSeqs + 0,
449 .LaneMask: LaneBitmask(0x0000000000000001),
450 .AllocationPriority: 0,
451 .GlobalPriority: false,
452 .TSFlags: 0x00, /* TSFlags */
453 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
454 .CoveredBySubRegs: false, /* CoveredBySubRegs */
455 .SuperClasses: nullptr, .SuperClassesSize: 0,
456 .OrderFunc: nullptr
457 };
458
459 extern const TargetRegisterClass R600_TReg32RegClass = {
460 .MC: &R600MCRegisterClasses[R600_TReg32RegClassID],
461 .SubClassMask: R600_TReg32SubClassMask,
462 .SuperRegIndices: SuperRegIdxSeqs + 0,
463 .LaneMask: LaneBitmask(0x0000000000000001),
464 .AllocationPriority: 0,
465 .GlobalPriority: false,
466 .TSFlags: 0x00, /* TSFlags */
467 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
468 .CoveredBySubRegs: false, /* CoveredBySubRegs */
469 .SuperClasses: R600_TReg32Superclasses, .SuperClassesSize: 1,
470 .OrderFunc: nullptr
471 };
472
473 extern const TargetRegisterClass R600_TReg32_XRegClass = {
474 .MC: &R600MCRegisterClasses[R600_TReg32_XRegClassID],
475 .SubClassMask: R600_TReg32_XSubClassMask,
476 .SuperRegIndices: SuperRegIdxSeqs + 0,
477 .LaneMask: LaneBitmask(0x0000000000000001),
478 .AllocationPriority: 0,
479 .GlobalPriority: false,
480 .TSFlags: 0x00, /* TSFlags */
481 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
482 .CoveredBySubRegs: false, /* CoveredBySubRegs */
483 .SuperClasses: R600_TReg32_XSuperclasses, .SuperClassesSize: 2,
484 .OrderFunc: nullptr
485 };
486
487 extern const TargetRegisterClass R600_AddrRegClass = {
488 .MC: &R600MCRegisterClasses[R600_AddrRegClassID],
489 .SubClassMask: R600_AddrSubClassMask,
490 .SuperRegIndices: SuperRegIdxSeqs + 4,
491 .LaneMask: LaneBitmask(0x0000000000000001),
492 .AllocationPriority: 0,
493 .GlobalPriority: false,
494 .TSFlags: 0x00, /* TSFlags */
495 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
496 .CoveredBySubRegs: false, /* CoveredBySubRegs */
497 .SuperClasses: R600_AddrSuperclasses, .SuperClassesSize: 1,
498 .OrderFunc: nullptr
499 };
500
501 extern const TargetRegisterClass R600_KC0RegClass = {
502 .MC: &R600MCRegisterClasses[R600_KC0RegClassID],
503 .SubClassMask: R600_KC0SubClassMask,
504 .SuperRegIndices: SuperRegIdxSeqs + 4,
505 .LaneMask: LaneBitmask(0x0000000000000001),
506 .AllocationPriority: 0,
507 .GlobalPriority: false,
508 .TSFlags: 0x00, /* TSFlags */
509 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
510 .CoveredBySubRegs: false, /* CoveredBySubRegs */
511 .SuperClasses: R600_KC0Superclasses, .SuperClassesSize: 1,
512 .OrderFunc: nullptr
513 };
514
515 extern const TargetRegisterClass R600_KC1RegClass = {
516 .MC: &R600MCRegisterClasses[R600_KC1RegClassID],
517 .SubClassMask: R600_KC1SubClassMask,
518 .SuperRegIndices: SuperRegIdxSeqs + 4,
519 .LaneMask: LaneBitmask(0x0000000000000001),
520 .AllocationPriority: 0,
521 .GlobalPriority: false,
522 .TSFlags: 0x00, /* TSFlags */
523 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
524 .CoveredBySubRegs: false, /* CoveredBySubRegs */
525 .SuperClasses: R600_KC1Superclasses, .SuperClassesSize: 1,
526 .OrderFunc: nullptr
527 };
528
529 extern const TargetRegisterClass R600_TReg32_WRegClass = {
530 .MC: &R600MCRegisterClasses[R600_TReg32_WRegClassID],
531 .SubClassMask: R600_TReg32_WSubClassMask,
532 .SuperRegIndices: SuperRegIdxSeqs + 0,
533 .LaneMask: LaneBitmask(0x0000000000000001),
534 .AllocationPriority: 0,
535 .GlobalPriority: false,
536 .TSFlags: 0x00, /* TSFlags */
537 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
538 .CoveredBySubRegs: false, /* CoveredBySubRegs */
539 .SuperClasses: R600_TReg32_WSuperclasses, .SuperClassesSize: 2,
540 .OrderFunc: nullptr
541 };
542
543 extern const TargetRegisterClass R600_TReg32_YRegClass = {
544 .MC: &R600MCRegisterClasses[R600_TReg32_YRegClassID],
545 .SubClassMask: R600_TReg32_YSubClassMask,
546 .SuperRegIndices: SuperRegIdxSeqs + 0,
547 .LaneMask: LaneBitmask(0x0000000000000001),
548 .AllocationPriority: 0,
549 .GlobalPriority: false,
550 .TSFlags: 0x00, /* TSFlags */
551 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
552 .CoveredBySubRegs: false, /* CoveredBySubRegs */
553 .SuperClasses: R600_TReg32_YSuperclasses, .SuperClassesSize: 2,
554 .OrderFunc: nullptr
555 };
556
557 extern const TargetRegisterClass R600_TReg32_ZRegClass = {
558 .MC: &R600MCRegisterClasses[R600_TReg32_ZRegClassID],
559 .SubClassMask: R600_TReg32_ZSubClassMask,
560 .SuperRegIndices: SuperRegIdxSeqs + 0,
561 .LaneMask: LaneBitmask(0x0000000000000001),
562 .AllocationPriority: 0,
563 .GlobalPriority: false,
564 .TSFlags: 0x00, /* TSFlags */
565 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
566 .CoveredBySubRegs: false, /* CoveredBySubRegs */
567 .SuperClasses: R600_TReg32_ZSuperclasses, .SuperClassesSize: 2,
568 .OrderFunc: nullptr
569 };
570
571 extern const TargetRegisterClass R600_ArrayBaseRegClass = {
572 .MC: &R600MCRegisterClasses[R600_ArrayBaseRegClassID],
573 .SubClassMask: R600_ArrayBaseSubClassMask,
574 .SuperRegIndices: SuperRegIdxSeqs + 4,
575 .LaneMask: LaneBitmask(0x0000000000000001),
576 .AllocationPriority: 0,
577 .GlobalPriority: false,
578 .TSFlags: 0x00, /* TSFlags */
579 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
580 .CoveredBySubRegs: false, /* CoveredBySubRegs */
581 .SuperClasses: R600_ArrayBaseSuperclasses, .SuperClassesSize: 1,
582 .OrderFunc: nullptr
583 };
584
585 extern const TargetRegisterClass R600_KC0_WRegClass = {
586 .MC: &R600MCRegisterClasses[R600_KC0_WRegClassID],
587 .SubClassMask: R600_KC0_WSubClassMask,
588 .SuperRegIndices: SuperRegIdxSeqs + 4,
589 .LaneMask: LaneBitmask(0x0000000000000001),
590 .AllocationPriority: 0,
591 .GlobalPriority: false,
592 .TSFlags: 0x00, /* TSFlags */
593 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
594 .CoveredBySubRegs: false, /* CoveredBySubRegs */
595 .SuperClasses: R600_KC0_WSuperclasses, .SuperClassesSize: 2,
596 .OrderFunc: nullptr
597 };
598
599 extern const TargetRegisterClass R600_KC0_XRegClass = {
600 .MC: &R600MCRegisterClasses[R600_KC0_XRegClassID],
601 .SubClassMask: R600_KC0_XSubClassMask,
602 .SuperRegIndices: SuperRegIdxSeqs + 4,
603 .LaneMask: LaneBitmask(0x0000000000000001),
604 .AllocationPriority: 0,
605 .GlobalPriority: false,
606 .TSFlags: 0x00, /* TSFlags */
607 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
608 .CoveredBySubRegs: false, /* CoveredBySubRegs */
609 .SuperClasses: R600_KC0_XSuperclasses, .SuperClassesSize: 2,
610 .OrderFunc: nullptr
611 };
612
613 extern const TargetRegisterClass R600_KC0_YRegClass = {
614 .MC: &R600MCRegisterClasses[R600_KC0_YRegClassID],
615 .SubClassMask: R600_KC0_YSubClassMask,
616 .SuperRegIndices: SuperRegIdxSeqs + 4,
617 .LaneMask: LaneBitmask(0x0000000000000001),
618 .AllocationPriority: 0,
619 .GlobalPriority: false,
620 .TSFlags: 0x00, /* TSFlags */
621 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
622 .CoveredBySubRegs: false, /* CoveredBySubRegs */
623 .SuperClasses: R600_KC0_YSuperclasses, .SuperClassesSize: 2,
624 .OrderFunc: nullptr
625 };
626
627 extern const TargetRegisterClass R600_KC0_ZRegClass = {
628 .MC: &R600MCRegisterClasses[R600_KC0_ZRegClassID],
629 .SubClassMask: R600_KC0_ZSubClassMask,
630 .SuperRegIndices: SuperRegIdxSeqs + 4,
631 .LaneMask: LaneBitmask(0x0000000000000001),
632 .AllocationPriority: 0,
633 .GlobalPriority: false,
634 .TSFlags: 0x00, /* TSFlags */
635 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
636 .CoveredBySubRegs: false, /* CoveredBySubRegs */
637 .SuperClasses: R600_KC0_ZSuperclasses, .SuperClassesSize: 2,
638 .OrderFunc: nullptr
639 };
640
641 extern const TargetRegisterClass R600_KC1_WRegClass = {
642 .MC: &R600MCRegisterClasses[R600_KC1_WRegClassID],
643 .SubClassMask: R600_KC1_WSubClassMask,
644 .SuperRegIndices: SuperRegIdxSeqs + 4,
645 .LaneMask: LaneBitmask(0x0000000000000001),
646 .AllocationPriority: 0,
647 .GlobalPriority: false,
648 .TSFlags: 0x00, /* TSFlags */
649 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
650 .CoveredBySubRegs: false, /* CoveredBySubRegs */
651 .SuperClasses: R600_KC1_WSuperclasses, .SuperClassesSize: 2,
652 .OrderFunc: nullptr
653 };
654
655 extern const TargetRegisterClass R600_KC1_XRegClass = {
656 .MC: &R600MCRegisterClasses[R600_KC1_XRegClassID],
657 .SubClassMask: R600_KC1_XSubClassMask,
658 .SuperRegIndices: SuperRegIdxSeqs + 4,
659 .LaneMask: LaneBitmask(0x0000000000000001),
660 .AllocationPriority: 0,
661 .GlobalPriority: false,
662 .TSFlags: 0x00, /* TSFlags */
663 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
664 .CoveredBySubRegs: false, /* CoveredBySubRegs */
665 .SuperClasses: R600_KC1_XSuperclasses, .SuperClassesSize: 2,
666 .OrderFunc: nullptr
667 };
668
669 extern const TargetRegisterClass R600_KC1_YRegClass = {
670 .MC: &R600MCRegisterClasses[R600_KC1_YRegClassID],
671 .SubClassMask: R600_KC1_YSubClassMask,
672 .SuperRegIndices: SuperRegIdxSeqs + 4,
673 .LaneMask: LaneBitmask(0x0000000000000001),
674 .AllocationPriority: 0,
675 .GlobalPriority: false,
676 .TSFlags: 0x00, /* TSFlags */
677 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
678 .CoveredBySubRegs: false, /* CoveredBySubRegs */
679 .SuperClasses: R600_KC1_YSuperclasses, .SuperClassesSize: 2,
680 .OrderFunc: nullptr
681 };
682
683 extern const TargetRegisterClass R600_KC1_ZRegClass = {
684 .MC: &R600MCRegisterClasses[R600_KC1_ZRegClassID],
685 .SubClassMask: R600_KC1_ZSubClassMask,
686 .SuperRegIndices: SuperRegIdxSeqs + 4,
687 .LaneMask: LaneBitmask(0x0000000000000001),
688 .AllocationPriority: 0,
689 .GlobalPriority: false,
690 .TSFlags: 0x00, /* TSFlags */
691 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
692 .CoveredBySubRegs: false, /* CoveredBySubRegs */
693 .SuperClasses: R600_KC1_ZSuperclasses, .SuperClassesSize: 2,
694 .OrderFunc: nullptr
695 };
696
697 extern const TargetRegisterClass R600_LDS_SRC_REGRegClass = {
698 .MC: &R600MCRegisterClasses[R600_LDS_SRC_REGRegClassID],
699 .SubClassMask: R600_LDS_SRC_REGSubClassMask,
700 .SuperRegIndices: SuperRegIdxSeqs + 4,
701 .LaneMask: LaneBitmask(0x0000000000000001),
702 .AllocationPriority: 0,
703 .GlobalPriority: false,
704 .TSFlags: 0x00, /* TSFlags */
705 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
706 .CoveredBySubRegs: false, /* CoveredBySubRegs */
707 .SuperClasses: nullptr, .SuperClassesSize: 0,
708 .OrderFunc: nullptr
709 };
710
711 extern const TargetRegisterClass R600_PredicateRegClass = {
712 .MC: &R600MCRegisterClasses[R600_PredicateRegClassID],
713 .SubClassMask: R600_PredicateSubClassMask,
714 .SuperRegIndices: SuperRegIdxSeqs + 4,
715 .LaneMask: LaneBitmask(0x0000000000000001),
716 .AllocationPriority: 0,
717 .GlobalPriority: false,
718 .TSFlags: 0x00, /* TSFlags */
719 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
720 .CoveredBySubRegs: false, /* CoveredBySubRegs */
721 .SuperClasses: nullptr, .SuperClassesSize: 0,
722 .OrderFunc: nullptr
723 };
724
725 extern const TargetRegisterClass R600_Addr_WRegClass = {
726 .MC: &R600MCRegisterClasses[R600_Addr_WRegClassID],
727 .SubClassMask: R600_Addr_WSubClassMask,
728 .SuperRegIndices: SuperRegIdxSeqs + 4,
729 .LaneMask: LaneBitmask(0x0000000000000001),
730 .AllocationPriority: 0,
731 .GlobalPriority: false,
732 .TSFlags: 0x00, /* TSFlags */
733 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
734 .CoveredBySubRegs: false, /* CoveredBySubRegs */
735 .SuperClasses: nullptr, .SuperClassesSize: 0,
736 .OrderFunc: nullptr
737 };
738
739 extern const TargetRegisterClass R600_Addr_YRegClass = {
740 .MC: &R600MCRegisterClasses[R600_Addr_YRegClassID],
741 .SubClassMask: R600_Addr_YSubClassMask,
742 .SuperRegIndices: SuperRegIdxSeqs + 4,
743 .LaneMask: LaneBitmask(0x0000000000000001),
744 .AllocationPriority: 0,
745 .GlobalPriority: false,
746 .TSFlags: 0x00, /* TSFlags */
747 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
748 .CoveredBySubRegs: false, /* CoveredBySubRegs */
749 .SuperClasses: nullptr, .SuperClassesSize: 0,
750 .OrderFunc: nullptr
751 };
752
753 extern const TargetRegisterClass R600_Addr_ZRegClass = {
754 .MC: &R600MCRegisterClasses[R600_Addr_ZRegClassID],
755 .SubClassMask: R600_Addr_ZSubClassMask,
756 .SuperRegIndices: SuperRegIdxSeqs + 4,
757 .LaneMask: LaneBitmask(0x0000000000000001),
758 .AllocationPriority: 0,
759 .GlobalPriority: false,
760 .TSFlags: 0x00, /* TSFlags */
761 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
762 .CoveredBySubRegs: false, /* CoveredBySubRegs */
763 .SuperClasses: nullptr, .SuperClassesSize: 0,
764 .OrderFunc: nullptr
765 };
766
767 extern const TargetRegisterClass R600_LDS_SRC_REG_and_R600_Reg32RegClass = {
768 .MC: &R600MCRegisterClasses[R600_LDS_SRC_REG_and_R600_Reg32RegClassID],
769 .SubClassMask: R600_LDS_SRC_REG_and_R600_Reg32SubClassMask,
770 .SuperRegIndices: SuperRegIdxSeqs + 4,
771 .LaneMask: LaneBitmask(0x0000000000000001),
772 .AllocationPriority: 0,
773 .GlobalPriority: false,
774 .TSFlags: 0x00, /* TSFlags */
775 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
776 .CoveredBySubRegs: false, /* CoveredBySubRegs */
777 .SuperClasses: R600_LDS_SRC_REG_and_R600_Reg32Superclasses, .SuperClassesSize: 2,
778 .OrderFunc: nullptr
779 };
780
781 extern const TargetRegisterClass R600_Predicate_BitRegClass = {
782 .MC: &R600MCRegisterClasses[R600_Predicate_BitRegClassID],
783 .SubClassMask: R600_Predicate_BitSubClassMask,
784 .SuperRegIndices: SuperRegIdxSeqs + 4,
785 .LaneMask: LaneBitmask(0x0000000000000001),
786 .AllocationPriority: 0,
787 .GlobalPriority: false,
788 .TSFlags: 0x00, /* TSFlags */
789 .HasDisjunctSubRegs: false, /* HasDisjunctSubRegs */
790 .CoveredBySubRegs: false, /* CoveredBySubRegs */
791 .SuperClasses: nullptr, .SuperClassesSize: 0,
792 .OrderFunc: nullptr
793 };
794
795 extern const TargetRegisterClass R600_Reg64RegClass = {
796 .MC: &R600MCRegisterClasses[R600_Reg64RegClassID],
797 .SubClassMask: R600_Reg64SubClassMask,
798 .SuperRegIndices: SuperRegIdxSeqs + 4,
799 .LaneMask: LaneBitmask(0x0000000000000003),
800 .AllocationPriority: 0,
801 .GlobalPriority: false,
802 .TSFlags: 0x00, /* TSFlags */
803 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
804 .CoveredBySubRegs: false, /* CoveredBySubRegs */
805 .SuperClasses: nullptr, .SuperClassesSize: 0,
806 .OrderFunc: nullptr
807 };
808
809 extern const TargetRegisterClass R600_Reg64VerticalRegClass = {
810 .MC: &R600MCRegisterClasses[R600_Reg64VerticalRegClassID],
811 .SubClassMask: R600_Reg64VerticalSubClassMask,
812 .SuperRegIndices: SuperRegIdxSeqs + 4,
813 .LaneMask: LaneBitmask(0x0000000000000003),
814 .AllocationPriority: 0,
815 .GlobalPriority: false,
816 .TSFlags: 0x00, /* TSFlags */
817 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
818 .CoveredBySubRegs: false, /* CoveredBySubRegs */
819 .SuperClasses: nullptr, .SuperClassesSize: 0,
820 .OrderFunc: nullptr
821 };
822
823 extern const TargetRegisterClass R600_Reg64Vertical_with_sub0_in_R600_TReg32_WRegClass = {
824 .MC: &R600MCRegisterClasses[R600_Reg64Vertical_with_sub0_in_R600_TReg32_WRegClassID],
825 .SubClassMask: R600_Reg64Vertical_with_sub0_in_R600_TReg32_WSubClassMask,
826 .SuperRegIndices: SuperRegIdxSeqs + 4,
827 .LaneMask: LaneBitmask(0x0000000000000003),
828 .AllocationPriority: 0,
829 .GlobalPriority: false,
830 .TSFlags: 0x00, /* TSFlags */
831 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
832 .CoveredBySubRegs: false, /* CoveredBySubRegs */
833 .SuperClasses: R600_Reg64Vertical_with_sub0_in_R600_TReg32_WSuperclasses, .SuperClassesSize: 1,
834 .OrderFunc: nullptr
835 };
836
837 extern const TargetRegisterClass R600_Reg64Vertical_with_sub0_in_R600_TReg32_XRegClass = {
838 .MC: &R600MCRegisterClasses[R600_Reg64Vertical_with_sub0_in_R600_TReg32_XRegClassID],
839 .SubClassMask: R600_Reg64Vertical_with_sub0_in_R600_TReg32_XSubClassMask,
840 .SuperRegIndices: SuperRegIdxSeqs + 4,
841 .LaneMask: LaneBitmask(0x0000000000000003),
842 .AllocationPriority: 0,
843 .GlobalPriority: false,
844 .TSFlags: 0x00, /* TSFlags */
845 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
846 .CoveredBySubRegs: false, /* CoveredBySubRegs */
847 .SuperClasses: R600_Reg64Vertical_with_sub0_in_R600_TReg32_XSuperclasses, .SuperClassesSize: 1,
848 .OrderFunc: nullptr
849 };
850
851 extern const TargetRegisterClass R600_Reg64Vertical_with_sub0_in_R600_TReg32_YRegClass = {
852 .MC: &R600MCRegisterClasses[R600_Reg64Vertical_with_sub0_in_R600_TReg32_YRegClassID],
853 .SubClassMask: R600_Reg64Vertical_with_sub0_in_R600_TReg32_YSubClassMask,
854 .SuperRegIndices: SuperRegIdxSeqs + 4,
855 .LaneMask: LaneBitmask(0x0000000000000003),
856 .AllocationPriority: 0,
857 .GlobalPriority: false,
858 .TSFlags: 0x00, /* TSFlags */
859 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
860 .CoveredBySubRegs: false, /* CoveredBySubRegs */
861 .SuperClasses: R600_Reg64Vertical_with_sub0_in_R600_TReg32_YSuperclasses, .SuperClassesSize: 1,
862 .OrderFunc: nullptr
863 };
864
865 extern const TargetRegisterClass R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZRegClass = {
866 .MC: &R600MCRegisterClasses[R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZRegClassID],
867 .SubClassMask: R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZSubClassMask,
868 .SuperRegIndices: SuperRegIdxSeqs + 4,
869 .LaneMask: LaneBitmask(0x0000000000000003),
870 .AllocationPriority: 0,
871 .GlobalPriority: false,
872 .TSFlags: 0x00, /* TSFlags */
873 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
874 .CoveredBySubRegs: false, /* CoveredBySubRegs */
875 .SuperClasses: R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZSuperclasses, .SuperClassesSize: 1,
876 .OrderFunc: nullptr
877 };
878
879 extern const TargetRegisterClass R600_Reg128RegClass = {
880 .MC: &R600MCRegisterClasses[R600_Reg128RegClassID],
881 .SubClassMask: R600_Reg128SubClassMask,
882 .SuperRegIndices: SuperRegIdxSeqs + 4,
883 .LaneMask: LaneBitmask(0x000000000000000F),
884 .AllocationPriority: 0,
885 .GlobalPriority: false,
886 .TSFlags: 0x00, /* TSFlags */
887 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
888 .CoveredBySubRegs: false, /* CoveredBySubRegs */
889 .SuperClasses: nullptr, .SuperClassesSize: 0,
890 .OrderFunc: nullptr
891 };
892
893 extern const TargetRegisterClass R600_Reg128VerticalRegClass = {
894 .MC: &R600MCRegisterClasses[R600_Reg128VerticalRegClassID],
895 .SubClassMask: R600_Reg128VerticalSubClassMask,
896 .SuperRegIndices: SuperRegIdxSeqs + 4,
897 .LaneMask: LaneBitmask(0x000000000000000F),
898 .AllocationPriority: 0,
899 .GlobalPriority: false,
900 .TSFlags: 0x00, /* TSFlags */
901 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
902 .CoveredBySubRegs: false, /* CoveredBySubRegs */
903 .SuperClasses: nullptr, .SuperClassesSize: 0,
904 .OrderFunc: nullptr
905 };
906
907 extern const TargetRegisterClass R600_Reg128Vertical_with_sub0_in_R600_TReg32_WRegClass = {
908 .MC: &R600MCRegisterClasses[R600_Reg128Vertical_with_sub0_in_R600_TReg32_WRegClassID],
909 .SubClassMask: R600_Reg128Vertical_with_sub0_in_R600_TReg32_WSubClassMask,
910 .SuperRegIndices: SuperRegIdxSeqs + 4,
911 .LaneMask: LaneBitmask(0x000000000000000F),
912 .AllocationPriority: 0,
913 .GlobalPriority: false,
914 .TSFlags: 0x00, /* TSFlags */
915 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
916 .CoveredBySubRegs: false, /* CoveredBySubRegs */
917 .SuperClasses: R600_Reg128Vertical_with_sub0_in_R600_TReg32_WSuperclasses, .SuperClassesSize: 1,
918 .OrderFunc: nullptr
919 };
920
921 extern const TargetRegisterClass R600_Reg128Vertical_with_sub0_in_R600_TReg32_XRegClass = {
922 .MC: &R600MCRegisterClasses[R600_Reg128Vertical_with_sub0_in_R600_TReg32_XRegClassID],
923 .SubClassMask: R600_Reg128Vertical_with_sub0_in_R600_TReg32_XSubClassMask,
924 .SuperRegIndices: SuperRegIdxSeqs + 4,
925 .LaneMask: LaneBitmask(0x000000000000000F),
926 .AllocationPriority: 0,
927 .GlobalPriority: false,
928 .TSFlags: 0x00, /* TSFlags */
929 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
930 .CoveredBySubRegs: false, /* CoveredBySubRegs */
931 .SuperClasses: R600_Reg128Vertical_with_sub0_in_R600_TReg32_XSuperclasses, .SuperClassesSize: 1,
932 .OrderFunc: nullptr
933 };
934
935 extern const TargetRegisterClass R600_Reg128Vertical_with_sub0_in_R600_TReg32_YRegClass = {
936 .MC: &R600MCRegisterClasses[R600_Reg128Vertical_with_sub0_in_R600_TReg32_YRegClassID],
937 .SubClassMask: R600_Reg128Vertical_with_sub0_in_R600_TReg32_YSubClassMask,
938 .SuperRegIndices: SuperRegIdxSeqs + 4,
939 .LaneMask: LaneBitmask(0x000000000000000F),
940 .AllocationPriority: 0,
941 .GlobalPriority: false,
942 .TSFlags: 0x00, /* TSFlags */
943 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
944 .CoveredBySubRegs: false, /* CoveredBySubRegs */
945 .SuperClasses: R600_Reg128Vertical_with_sub0_in_R600_TReg32_YSuperclasses, .SuperClassesSize: 1,
946 .OrderFunc: nullptr
947 };
948
949 extern const TargetRegisterClass R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZRegClass = {
950 .MC: &R600MCRegisterClasses[R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZRegClassID],
951 .SubClassMask: R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZSubClassMask,
952 .SuperRegIndices: SuperRegIdxSeqs + 4,
953 .LaneMask: LaneBitmask(0x000000000000000F),
954 .AllocationPriority: 0,
955 .GlobalPriority: false,
956 .TSFlags: 0x00, /* TSFlags */
957 .HasDisjunctSubRegs: true, /* HasDisjunctSubRegs */
958 .CoveredBySubRegs: false, /* CoveredBySubRegs */
959 .SuperClasses: R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZSuperclasses, .SuperClassesSize: 1,
960 .OrderFunc: nullptr
961 };
962
963
964} // namespace R600
965namespace {
966
967 const TargetRegisterClass *const RegisterClasses[] = {
968 &R600::R600_Reg32RegClass,
969 &R600::R600_TReg32RegClass,
970 &R600::R600_TReg32_XRegClass,
971 &R600::R600_AddrRegClass,
972 &R600::R600_KC0RegClass,
973 &R600::R600_KC1RegClass,
974 &R600::R600_TReg32_WRegClass,
975 &R600::R600_TReg32_YRegClass,
976 &R600::R600_TReg32_ZRegClass,
977 &R600::R600_ArrayBaseRegClass,
978 &R600::R600_KC0_WRegClass,
979 &R600::R600_KC0_XRegClass,
980 &R600::R600_KC0_YRegClass,
981 &R600::R600_KC0_ZRegClass,
982 &R600::R600_KC1_WRegClass,
983 &R600::R600_KC1_XRegClass,
984 &R600::R600_KC1_YRegClass,
985 &R600::R600_KC1_ZRegClass,
986 &R600::R600_LDS_SRC_REGRegClass,
987 &R600::R600_PredicateRegClass,
988 &R600::R600_Addr_WRegClass,
989 &R600::R600_Addr_YRegClass,
990 &R600::R600_Addr_ZRegClass,
991 &R600::R600_LDS_SRC_REG_and_R600_Reg32RegClass,
992 &R600::R600_Predicate_BitRegClass,
993 &R600::R600_Reg64RegClass,
994 &R600::R600_Reg64VerticalRegClass,
995 &R600::R600_Reg64Vertical_with_sub0_in_R600_TReg32_WRegClass,
996 &R600::R600_Reg64Vertical_with_sub0_in_R600_TReg32_XRegClass,
997 &R600::R600_Reg64Vertical_with_sub0_in_R600_TReg32_YRegClass,
998 &R600::R600_Reg64Vertical_with_sub0_in_R600_TReg32_ZRegClass,
999 &R600::R600_Reg128RegClass,
1000 &R600::R600_Reg128VerticalRegClass,
1001 &R600::R600_Reg128Vertical_with_sub0_in_R600_TReg32_WRegClass,
1002 &R600::R600_Reg128Vertical_with_sub0_in_R600_TReg32_XRegClass,
1003 &R600::R600_Reg128Vertical_with_sub0_in_R600_TReg32_YRegClass,
1004 &R600::R600_Reg128Vertical_with_sub0_in_R600_TReg32_ZRegClass,
1005 };
1006} // namespace
1007
1008static const uint8_t CostPerUseTable[] = {
10090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
1010
1011
1012static const bool InAllocatableClassTable[] = {
1013false, true, false, true, false, false, true, true, true, true, false, false, true, true, true, true, false, true, false, false, true, true, true, true, false, false, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, };
1014
1015
1016static const TargetRegisterInfoDesc R600RegInfoDesc = { // Extra Descriptors
1017.CostPerUse: CostPerUseTable, .NumCosts: 1, .InAllocatableClass: InAllocatableClassTable};
1018
1019unsigned R600GenRegisterInfo::composeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
1020 static const uint8_t Rows[1][16] = {
1021 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1022 };
1023
1024 --IdxA; assert(IdxA < 16); (void) IdxA;
1025 --IdxB; assert(IdxB < 16);
1026 return Rows[0][IdxB];
1027}
1028
1029unsigned R600GenRegisterInfo::reverseComposeSubRegIndicesImpl(unsigned IdxA, unsigned IdxB) const {
1030 static const uint8_t Table[16][16] = {
1031 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1032 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1033 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1034 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1035 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1036 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1037 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1038 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1039 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1040 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1041 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1042 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1043 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1044 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1045 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1046 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1047 };
1048
1049 --IdxA; assert(IdxA < 16);
1050 --IdxB; assert(IdxB < 16);
1051 return Table[IdxA][IdxB];
1052 }
1053
1054 struct MaskRolOp {
1055 LaneBitmask Mask;
1056 uint8_t RotateLeft;
1057 };
1058 static const MaskRolOp LaneMaskComposeSequences[] = {
1059 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 0 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 0
1060 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 1 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 2
1061 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 2 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 4
1062 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 3 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 6
1063 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 4 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 8
1064 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 5 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 10
1065 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 6 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 12
1066 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 7 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 14
1067 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 8 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 16
1068 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 9 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 18
1069 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 10 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 20
1070 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 11 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 22
1071 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 12 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 24
1072 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 13 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 26
1073 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 14 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 }, // Sequence 28
1074 { .Mask: LaneBitmask(0xFFFFFFFFFFFFFFFF), .RotateLeft: 15 }, { .Mask: LaneBitmask::getNone(), .RotateLeft: 0 } // Sequence 30
1075 };
1076 static const uint8_t CompositeSequences[] = {
1077 0, // to sub0
1078 2, // to sub1
1079 4, // to sub2
1080 6, // to sub3
1081 8, // to sub4
1082 10, // to sub5
1083 12, // to sub6
1084 14, // to sub7
1085 16, // to sub8
1086 18, // to sub9
1087 20, // to sub10
1088 22, // to sub11
1089 24, // to sub12
1090 26, // to sub13
1091 28, // to sub14
1092 30 // to sub15
1093 };
1094
1095LaneBitmask R600GenRegisterInfo::composeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
1096 --IdxA; assert(IdxA < 16 && "Subregister index out of bounds");
1097 LaneBitmask Result;
1098 for (const MaskRolOp *Ops =
1099 &LaneMaskComposeSequences[CompositeSequences[IdxA]];
1100 Ops->Mask.any(); ++Ops) {
1101 LaneBitmask::Type M = LaneMask.getAsInteger() & Ops->Mask.getAsInteger();
1102 if (unsigned S = Ops->RotateLeft)
1103 Result |= LaneBitmask((M << S) | (M >> (LaneBitmask::BitWidth - S)));
1104 else
1105 Result |= LaneBitmask(M);
1106 }
1107 return Result;
1108}
1109
1110LaneBitmask R600GenRegisterInfo::reverseComposeSubRegIndexLaneMaskImpl(unsigned IdxA, LaneBitmask LaneMask) const {
1111 LaneMask &= getSubRegIndexLaneMask(SubIdx: IdxA);
1112 --IdxA; assert(IdxA < 16 && "Subregister index out of bounds");
1113 LaneBitmask Result;
1114 for (const MaskRolOp *Ops =
1115 &LaneMaskComposeSequences[CompositeSequences[IdxA]];
1116 Ops->Mask.any(); ++Ops) {
1117 LaneBitmask::Type M = LaneMask.getAsInteger();
1118 if (unsigned S = Ops->RotateLeft)
1119 Result |= LaneBitmask((M >> S) | (M << (LaneBitmask::BitWidth - S)));
1120 else
1121 Result |= LaneBitmask(M);
1122 }
1123 return Result;
1124}
1125
1126const TargetRegisterClass *R600GenRegisterInfo::getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const {
1127 static constexpr uint8_t Table[37][16] = {
1128 { // R600_Reg32
1129 0, // sub0
1130 0, // sub1
1131 0, // sub2
1132 0, // sub3
1133 0, // sub4
1134 0, // sub5
1135 0, // sub6
1136 0, // sub7
1137 0, // sub8
1138 0, // sub9
1139 0, // sub10
1140 0, // sub11
1141 0, // sub12
1142 0, // sub13
1143 0, // sub14
1144 0, // sub15
1145 },
1146 { // R600_TReg32
1147 0, // sub0
1148 0, // sub1
1149 0, // sub2
1150 0, // sub3
1151 0, // sub4
1152 0, // sub5
1153 0, // sub6
1154 0, // sub7
1155 0, // sub8
1156 0, // sub9
1157 0, // sub10
1158 0, // sub11
1159 0, // sub12
1160 0, // sub13
1161 0, // sub14
1162 0, // sub15
1163 },
1164 { // R600_TReg32_X
1165 0, // sub0
1166 0, // sub1
1167 0, // sub2
1168 0, // sub3
1169 0, // sub4
1170 0, // sub5
1171 0, // sub6
1172 0, // sub7
1173 0, // sub8
1174 0, // sub9
1175 0, // sub10
1176 0, // sub11
1177 0, // sub12
1178 0, // sub13
1179 0, // sub14
1180 0, // sub15
1181 },
1182 { // R600_Addr
1183 0, // sub0
1184 0, // sub1
1185 0, // sub2
1186 0, // sub3
1187 0, // sub4
1188 0, // sub5
1189 0, // sub6
1190 0, // sub7
1191 0, // sub8
1192 0, // sub9
1193 0, // sub10
1194 0, // sub11
1195 0, // sub12
1196 0, // sub13
1197 0, // sub14
1198 0, // sub15
1199 },
1200 { // R600_KC0
1201 0, // sub0
1202 0, // sub1
1203 0, // sub2
1204 0, // sub3
1205 0, // sub4
1206 0, // sub5
1207 0, // sub6
1208 0, // sub7
1209 0, // sub8
1210 0, // sub9
1211 0, // sub10
1212 0, // sub11
1213 0, // sub12
1214 0, // sub13
1215 0, // sub14
1216 0, // sub15
1217 },
1218 { // R600_KC1
1219 0, // sub0
1220 0, // sub1
1221 0, // sub2
1222 0, // sub3
1223 0, // sub4
1224 0, // sub5
1225 0, // sub6
1226 0, // sub7
1227 0, // sub8
1228 0, // sub9
1229 0, // sub10
1230 0, // sub11
1231 0, // sub12
1232 0, // sub13
1233 0, // sub14
1234 0, // sub15
1235 },
1236 { // R600_TReg32_W
1237 0, // sub0
1238 0, // sub1
1239 0, // sub2
1240 0, // sub3
1241 0, // sub4
1242 0, // sub5
1243 0, // sub6
1244 0, // sub7
1245 0, // sub8
1246 0, // sub9
1247 0, // sub10
1248 0, // sub11
1249 0, // sub12
1250 0, // sub13
1251 0, // sub14
1252 0, // sub15
1253 },
1254 { // R600_TReg32_Y
1255 0, // sub0
1256 0, // sub1
1257 0, // sub2
1258 0, // sub3
1259 0, // sub4
1260 0, // sub5
1261 0, // sub6
1262 0, // sub7
1263 0, // sub8
1264 0, // sub9
1265 0, // sub10
1266 0, // sub11
1267 0, // sub12
1268 0, // sub13
1269 0, // sub14
1270 0, // sub15
1271 },
1272 { // R600_TReg32_Z
1273 0, // sub0
1274 0, // sub1
1275 0, // sub2
1276 0, // sub3
1277 0, // sub4
1278 0, // sub5
1279 0, // sub6
1280 0, // sub7
1281 0, // sub8
1282 0, // sub9
1283 0, // sub10
1284 0, // sub11
1285 0, // sub12
1286 0, // sub13
1287 0, // sub14
1288 0, // sub15
1289 },
1290 { // R600_ArrayBase
1291 0, // sub0
1292 0, // sub1
1293 0, // sub2
1294 0, // sub3
1295 0, // sub4
1296 0, // sub5
1297 0, // sub6
1298 0, // sub7
1299 0, // sub8
1300 0, // sub9
1301 0, // sub10
1302 0, // sub11
1303 0, // sub12
1304 0, // sub13
1305 0, // sub14
1306 0, // sub15
1307 },
1308 { // R600_KC0_W
1309 0, // sub0
1310 0, // sub1
1311 0, // sub2
1312 0, // sub3
1313 0, // sub4
1314 0, // sub5
1315 0, // sub6
1316 0, // sub7
1317 0, // sub8
1318 0, // sub9
1319 0, // sub10
1320 0, // sub11
1321 0, // sub12
1322 0, // sub13
1323 0, // sub14
1324 0, // sub15
1325 },
1326 { // R600_KC0_X
1327 0, // sub0
1328 0, // sub1
1329 0, // sub2
1330 0, // sub3
1331 0, // sub4
1332 0, // sub5
1333 0, // sub6
1334 0, // sub7
1335 0, // sub8
1336 0, // sub9
1337 0, // sub10
1338 0, // sub11
1339 0, // sub12
1340 0, // sub13
1341 0, // sub14
1342 0, // sub15
1343 },
1344 { // R600_KC0_Y
1345 0, // sub0
1346 0, // sub1
1347 0, // sub2
1348 0, // sub3
1349 0, // sub4
1350 0, // sub5
1351 0, // sub6
1352 0, // sub7
1353 0, // sub8
1354 0, // sub9
1355 0, // sub10
1356 0, // sub11
1357 0, // sub12
1358 0, // sub13
1359 0, // sub14
1360 0, // sub15
1361 },
1362 { // R600_KC0_Z
1363 0, // sub0
1364 0, // sub1
1365 0, // sub2
1366 0, // sub3
1367 0, // sub4
1368 0, // sub5
1369 0, // sub6
1370 0, // sub7
1371 0, // sub8
1372 0, // sub9
1373 0, // sub10
1374 0, // sub11
1375 0, // sub12
1376 0, // sub13
1377 0, // sub14
1378 0, // sub15
1379 },
1380 { // R600_KC1_W
1381 0, // sub0
1382 0, // sub1
1383 0, // sub2
1384 0, // sub3
1385 0, // sub4
1386 0, // sub5
1387 0, // sub6
1388 0, // sub7
1389 0, // sub8
1390 0, // sub9
1391 0, // sub10
1392 0, // sub11
1393 0, // sub12
1394 0, // sub13
1395 0, // sub14
1396 0, // sub15
1397 },
1398 { // R600_KC1_X
1399 0, // sub0
1400 0, // sub1
1401 0, // sub2
1402 0, // sub3
1403 0, // sub4
1404 0, // sub5
1405 0, // sub6
1406 0, // sub7
1407 0, // sub8
1408 0, // sub9
1409 0, // sub10
1410 0, // sub11
1411 0, // sub12
1412 0, // sub13
1413 0, // sub14
1414 0, // sub15
1415 },
1416 { // R600_KC1_Y
1417 0, // sub0
1418 0, // sub1
1419 0, // sub2
1420 0, // sub3
1421 0, // sub4
1422 0, // sub5
1423 0, // sub6
1424 0, // sub7
1425 0, // sub8
1426 0, // sub9
1427 0, // sub10
1428 0, // sub11
1429 0, // sub12
1430 0, // sub13
1431 0, // sub14
1432 0, // sub15
1433 },
1434 { // R600_KC1_Z
1435 0, // sub0
1436 0, // sub1
1437 0, // sub2
1438 0, // sub3
1439 0, // sub4
1440 0, // sub5
1441 0, // sub6
1442 0, // sub7
1443 0, // sub8
1444 0, // sub9
1445 0, // sub10
1446 0, // sub11
1447 0, // sub12
1448 0, // sub13
1449 0, // sub14
1450 0, // sub15
1451 },
1452 { // R600_LDS_SRC_REG
1453 0, // sub0
1454 0, // sub1
1455 0, // sub2
1456 0, // sub3
1457 0, // sub4
1458 0, // sub5
1459 0, // sub6
1460 0, // sub7
1461 0, // sub8
1462 0, // sub9
1463 0, // sub10
1464 0, // sub11
1465 0, // sub12
1466 0, // sub13
1467 0, // sub14
1468 0, // sub15
1469 },
1470 { // R600_Predicate
1471 0, // sub0
1472 0, // sub1
1473 0, // sub2
1474 0, // sub3
1475 0, // sub4
1476 0, // sub5
1477 0, // sub6
1478 0, // sub7
1479 0, // sub8
1480 0, // sub9
1481 0, // sub10
1482 0, // sub11
1483 0, // sub12
1484 0, // sub13
1485 0, // sub14
1486 0, // sub15
1487 },
1488 { // R600_Addr_W
1489 0, // sub0
1490 0, // sub1
1491 0, // sub2
1492 0, // sub3
1493 0, // sub4
1494 0, // sub5
1495 0, // sub6
1496 0, // sub7
1497 0, // sub8
1498 0, // sub9
1499 0, // sub10
1500 0, // sub11
1501 0, // sub12
1502 0, // sub13
1503 0, // sub14
1504 0, // sub15
1505 },
1506 { // R600_Addr_Y
1507 0, // sub0
1508 0, // sub1
1509 0, // sub2
1510 0, // sub3
1511 0, // sub4
1512 0, // sub5
1513 0, // sub6
1514 0, // sub7
1515 0, // sub8
1516 0, // sub9
1517 0, // sub10
1518 0, // sub11
1519 0, // sub12
1520 0, // sub13
1521 0, // sub14
1522 0, // sub15
1523 },
1524 { // R600_Addr_Z
1525 0, // sub0
1526 0, // sub1
1527 0, // sub2
1528 0, // sub3
1529 0, // sub4
1530 0, // sub5
1531 0, // sub6
1532 0, // sub7
1533 0, // sub8
1534 0, // sub9
1535 0, // sub10
1536 0, // sub11
1537 0, // sub12
1538 0, // sub13
1539 0, // sub14
1540 0, // sub15
1541 },
1542 { // R600_LDS_SRC_REG_and_R600_Reg32
1543 0, // sub0
1544 0, // sub1
1545 0, // sub2
1546 0, // sub3
1547 0, // sub4
1548 0, // sub5
1549 0, // sub6
1550 0, // sub7
1551 0, // sub8
1552 0, // sub9
1553 0, // sub10
1554 0, // sub11
1555 0, // sub12
1556 0, // sub13
1557 0, // sub14
1558 0, // sub15
1559 },
1560 { // R600_Predicate_Bit
1561 0, // sub0
1562 0, // sub1
1563 0, // sub2
1564 0, // sub3
1565 0, // sub4
1566 0, // sub5
1567 0, // sub6
1568 0, // sub7
1569 0, // sub8
1570 0, // sub9
1571 0, // sub10
1572 0, // sub11
1573 0, // sub12
1574 0, // sub13
1575 0, // sub14
1576 0, // sub15
1577 },
1578 { // R600_Reg64
1579 26, // sub0 -> R600_Reg64
1580 26, // sub1 -> R600_Reg64
1581 0, // sub2
1582 0, // sub3
1583 0, // sub4
1584 0, // sub5
1585 0, // sub6
1586 0, // sub7
1587 0, // sub8
1588 0, // sub9
1589 0, // sub10
1590 0, // sub11
1591 0, // sub12
1592 0, // sub13
1593 0, // sub14
1594 0, // sub15
1595 },
1596 { // R600_Reg64Vertical
1597 27, // sub0 -> R600_Reg64Vertical
1598 27, // sub1 -> R600_Reg64Vertical
1599 0, // sub2
1600 0, // sub3
1601 0, // sub4
1602 0, // sub5
1603 0, // sub6
1604 0, // sub7
1605 0, // sub8
1606 0, // sub9
1607 0, // sub10
1608 0, // sub11
1609 0, // sub12
1610 0, // sub13
1611 0, // sub14
1612 0, // sub15
1613 },
1614 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
1615 28, // sub0 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
1616 28, // sub1 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
1617 0, // sub2
1618 0, // sub3
1619 0, // sub4
1620 0, // sub5
1621 0, // sub6
1622 0, // sub7
1623 0, // sub8
1624 0, // sub9
1625 0, // sub10
1626 0, // sub11
1627 0, // sub12
1628 0, // sub13
1629 0, // sub14
1630 0, // sub15
1631 },
1632 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
1633 29, // sub0 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
1634 29, // sub1 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
1635 0, // sub2
1636 0, // sub3
1637 0, // sub4
1638 0, // sub5
1639 0, // sub6
1640 0, // sub7
1641 0, // sub8
1642 0, // sub9
1643 0, // sub10
1644 0, // sub11
1645 0, // sub12
1646 0, // sub13
1647 0, // sub14
1648 0, // sub15
1649 },
1650 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
1651 30, // sub0 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
1652 30, // sub1 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
1653 0, // sub2
1654 0, // sub3
1655 0, // sub4
1656 0, // sub5
1657 0, // sub6
1658 0, // sub7
1659 0, // sub8
1660 0, // sub9
1661 0, // sub10
1662 0, // sub11
1663 0, // sub12
1664 0, // sub13
1665 0, // sub14
1666 0, // sub15
1667 },
1668 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
1669 31, // sub0 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
1670 31, // sub1 -> R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
1671 0, // sub2
1672 0, // sub3
1673 0, // sub4
1674 0, // sub5
1675 0, // sub6
1676 0, // sub7
1677 0, // sub8
1678 0, // sub9
1679 0, // sub10
1680 0, // sub11
1681 0, // sub12
1682 0, // sub13
1683 0, // sub14
1684 0, // sub15
1685 },
1686 { // R600_Reg128
1687 32, // sub0 -> R600_Reg128
1688 32, // sub1 -> R600_Reg128
1689 32, // sub2 -> R600_Reg128
1690 32, // sub3 -> R600_Reg128
1691 0, // sub4
1692 0, // sub5
1693 0, // sub6
1694 0, // sub7
1695 0, // sub8
1696 0, // sub9
1697 0, // sub10
1698 0, // sub11
1699 0, // sub12
1700 0, // sub13
1701 0, // sub14
1702 0, // sub15
1703 },
1704 { // R600_Reg128Vertical
1705 33, // sub0 -> R600_Reg128Vertical
1706 33, // sub1 -> R600_Reg128Vertical
1707 33, // sub2 -> R600_Reg128Vertical
1708 33, // sub3 -> R600_Reg128Vertical
1709 0, // sub4
1710 0, // sub5
1711 0, // sub6
1712 0, // sub7
1713 0, // sub8
1714 0, // sub9
1715 0, // sub10
1716 0, // sub11
1717 0, // sub12
1718 0, // sub13
1719 0, // sub14
1720 0, // sub15
1721 },
1722 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
1723 34, // sub0 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
1724 34, // sub1 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
1725 34, // sub2 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
1726 34, // sub3 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
1727 0, // sub4
1728 0, // sub5
1729 0, // sub6
1730 0, // sub7
1731 0, // sub8
1732 0, // sub9
1733 0, // sub10
1734 0, // sub11
1735 0, // sub12
1736 0, // sub13
1737 0, // sub14
1738 0, // sub15
1739 },
1740 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
1741 35, // sub0 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
1742 35, // sub1 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
1743 35, // sub2 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
1744 35, // sub3 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
1745 0, // sub4
1746 0, // sub5
1747 0, // sub6
1748 0, // sub7
1749 0, // sub8
1750 0, // sub9
1751 0, // sub10
1752 0, // sub11
1753 0, // sub12
1754 0, // sub13
1755 0, // sub14
1756 0, // sub15
1757 },
1758 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
1759 36, // sub0 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
1760 36, // sub1 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
1761 36, // sub2 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
1762 36, // sub3 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
1763 0, // sub4
1764 0, // sub5
1765 0, // sub6
1766 0, // sub7
1767 0, // sub8
1768 0, // sub9
1769 0, // sub10
1770 0, // sub11
1771 0, // sub12
1772 0, // sub13
1773 0, // sub14
1774 0, // sub15
1775 },
1776 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
1777 37, // sub0 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
1778 37, // sub1 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
1779 37, // sub2 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
1780 37, // sub3 -> R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
1781 0, // sub4
1782 0, // sub5
1783 0, // sub6
1784 0, // sub7
1785 0, // sub8
1786 0, // sub9
1787 0, // sub10
1788 0, // sub11
1789 0, // sub12
1790 0, // sub13
1791 0, // sub14
1792 0, // sub15
1793 },
1794
1795 };
1796 assert(RC && "Missing regclass");
1797 if (!Idx) return RC;
1798 --Idx;
1799 assert(Idx < 16 && "Bad subreg");
1800 unsigned TV = Table[RC->getID()][Idx];
1801 return TV ? getRegClass(i: TV - 1) : nullptr;
1802}const TargetRegisterClass *R600GenRegisterInfo::getSubRegisterClass(const TargetRegisterClass *RC, unsigned Idx) const {
1803 static constexpr uint8_t Table[37][16] = {
1804 { // R600_Reg32
1805 0, // R600_Reg32:sub0
1806 0, // R600_Reg32:sub1
1807 0, // R600_Reg32:sub2
1808 0, // R600_Reg32:sub3
1809 0, // R600_Reg32:sub4
1810 0, // R600_Reg32:sub5
1811 0, // R600_Reg32:sub6
1812 0, // R600_Reg32:sub7
1813 0, // R600_Reg32:sub8
1814 0, // R600_Reg32:sub9
1815 0, // R600_Reg32:sub10
1816 0, // R600_Reg32:sub11
1817 0, // R600_Reg32:sub12
1818 0, // R600_Reg32:sub13
1819 0, // R600_Reg32:sub14
1820 0, // R600_Reg32:sub15
1821 },
1822 { // R600_TReg32
1823 0, // R600_TReg32:sub0
1824 0, // R600_TReg32:sub1
1825 0, // R600_TReg32:sub2
1826 0, // R600_TReg32:sub3
1827 0, // R600_TReg32:sub4
1828 0, // R600_TReg32:sub5
1829 0, // R600_TReg32:sub6
1830 0, // R600_TReg32:sub7
1831 0, // R600_TReg32:sub8
1832 0, // R600_TReg32:sub9
1833 0, // R600_TReg32:sub10
1834 0, // R600_TReg32:sub11
1835 0, // R600_TReg32:sub12
1836 0, // R600_TReg32:sub13
1837 0, // R600_TReg32:sub14
1838 0, // R600_TReg32:sub15
1839 },
1840 { // R600_TReg32_X
1841 0, // R600_TReg32_X:sub0
1842 0, // R600_TReg32_X:sub1
1843 0, // R600_TReg32_X:sub2
1844 0, // R600_TReg32_X:sub3
1845 0, // R600_TReg32_X:sub4
1846 0, // R600_TReg32_X:sub5
1847 0, // R600_TReg32_X:sub6
1848 0, // R600_TReg32_X:sub7
1849 0, // R600_TReg32_X:sub8
1850 0, // R600_TReg32_X:sub9
1851 0, // R600_TReg32_X:sub10
1852 0, // R600_TReg32_X:sub11
1853 0, // R600_TReg32_X:sub12
1854 0, // R600_TReg32_X:sub13
1855 0, // R600_TReg32_X:sub14
1856 0, // R600_TReg32_X:sub15
1857 },
1858 { // R600_Addr
1859 0, // R600_Addr:sub0
1860 0, // R600_Addr:sub1
1861 0, // R600_Addr:sub2
1862 0, // R600_Addr:sub3
1863 0, // R600_Addr:sub4
1864 0, // R600_Addr:sub5
1865 0, // R600_Addr:sub6
1866 0, // R600_Addr:sub7
1867 0, // R600_Addr:sub8
1868 0, // R600_Addr:sub9
1869 0, // R600_Addr:sub10
1870 0, // R600_Addr:sub11
1871 0, // R600_Addr:sub12
1872 0, // R600_Addr:sub13
1873 0, // R600_Addr:sub14
1874 0, // R600_Addr:sub15
1875 },
1876 { // R600_KC0
1877 0, // R600_KC0:sub0
1878 0, // R600_KC0:sub1
1879 0, // R600_KC0:sub2
1880 0, // R600_KC0:sub3
1881 0, // R600_KC0:sub4
1882 0, // R600_KC0:sub5
1883 0, // R600_KC0:sub6
1884 0, // R600_KC0:sub7
1885 0, // R600_KC0:sub8
1886 0, // R600_KC0:sub9
1887 0, // R600_KC0:sub10
1888 0, // R600_KC0:sub11
1889 0, // R600_KC0:sub12
1890 0, // R600_KC0:sub13
1891 0, // R600_KC0:sub14
1892 0, // R600_KC0:sub15
1893 },
1894 { // R600_KC1
1895 0, // R600_KC1:sub0
1896 0, // R600_KC1:sub1
1897 0, // R600_KC1:sub2
1898 0, // R600_KC1:sub3
1899 0, // R600_KC1:sub4
1900 0, // R600_KC1:sub5
1901 0, // R600_KC1:sub6
1902 0, // R600_KC1:sub7
1903 0, // R600_KC1:sub8
1904 0, // R600_KC1:sub9
1905 0, // R600_KC1:sub10
1906 0, // R600_KC1:sub11
1907 0, // R600_KC1:sub12
1908 0, // R600_KC1:sub13
1909 0, // R600_KC1:sub14
1910 0, // R600_KC1:sub15
1911 },
1912 { // R600_TReg32_W
1913 0, // R600_TReg32_W:sub0
1914 0, // R600_TReg32_W:sub1
1915 0, // R600_TReg32_W:sub2
1916 0, // R600_TReg32_W:sub3
1917 0, // R600_TReg32_W:sub4
1918 0, // R600_TReg32_W:sub5
1919 0, // R600_TReg32_W:sub6
1920 0, // R600_TReg32_W:sub7
1921 0, // R600_TReg32_W:sub8
1922 0, // R600_TReg32_W:sub9
1923 0, // R600_TReg32_W:sub10
1924 0, // R600_TReg32_W:sub11
1925 0, // R600_TReg32_W:sub12
1926 0, // R600_TReg32_W:sub13
1927 0, // R600_TReg32_W:sub14
1928 0, // R600_TReg32_W:sub15
1929 },
1930 { // R600_TReg32_Y
1931 0, // R600_TReg32_Y:sub0
1932 0, // R600_TReg32_Y:sub1
1933 0, // R600_TReg32_Y:sub2
1934 0, // R600_TReg32_Y:sub3
1935 0, // R600_TReg32_Y:sub4
1936 0, // R600_TReg32_Y:sub5
1937 0, // R600_TReg32_Y:sub6
1938 0, // R600_TReg32_Y:sub7
1939 0, // R600_TReg32_Y:sub8
1940 0, // R600_TReg32_Y:sub9
1941 0, // R600_TReg32_Y:sub10
1942 0, // R600_TReg32_Y:sub11
1943 0, // R600_TReg32_Y:sub12
1944 0, // R600_TReg32_Y:sub13
1945 0, // R600_TReg32_Y:sub14
1946 0, // R600_TReg32_Y:sub15
1947 },
1948 { // R600_TReg32_Z
1949 0, // R600_TReg32_Z:sub0
1950 0, // R600_TReg32_Z:sub1
1951 0, // R600_TReg32_Z:sub2
1952 0, // R600_TReg32_Z:sub3
1953 0, // R600_TReg32_Z:sub4
1954 0, // R600_TReg32_Z:sub5
1955 0, // R600_TReg32_Z:sub6
1956 0, // R600_TReg32_Z:sub7
1957 0, // R600_TReg32_Z:sub8
1958 0, // R600_TReg32_Z:sub9
1959 0, // R600_TReg32_Z:sub10
1960 0, // R600_TReg32_Z:sub11
1961 0, // R600_TReg32_Z:sub12
1962 0, // R600_TReg32_Z:sub13
1963 0, // R600_TReg32_Z:sub14
1964 0, // R600_TReg32_Z:sub15
1965 },
1966 { // R600_ArrayBase
1967 0, // R600_ArrayBase:sub0
1968 0, // R600_ArrayBase:sub1
1969 0, // R600_ArrayBase:sub2
1970 0, // R600_ArrayBase:sub3
1971 0, // R600_ArrayBase:sub4
1972 0, // R600_ArrayBase:sub5
1973 0, // R600_ArrayBase:sub6
1974 0, // R600_ArrayBase:sub7
1975 0, // R600_ArrayBase:sub8
1976 0, // R600_ArrayBase:sub9
1977 0, // R600_ArrayBase:sub10
1978 0, // R600_ArrayBase:sub11
1979 0, // R600_ArrayBase:sub12
1980 0, // R600_ArrayBase:sub13
1981 0, // R600_ArrayBase:sub14
1982 0, // R600_ArrayBase:sub15
1983 },
1984 { // R600_KC0_W
1985 0, // R600_KC0_W:sub0
1986 0, // R600_KC0_W:sub1
1987 0, // R600_KC0_W:sub2
1988 0, // R600_KC0_W:sub3
1989 0, // R600_KC0_W:sub4
1990 0, // R600_KC0_W:sub5
1991 0, // R600_KC0_W:sub6
1992 0, // R600_KC0_W:sub7
1993 0, // R600_KC0_W:sub8
1994 0, // R600_KC0_W:sub9
1995 0, // R600_KC0_W:sub10
1996 0, // R600_KC0_W:sub11
1997 0, // R600_KC0_W:sub12
1998 0, // R600_KC0_W:sub13
1999 0, // R600_KC0_W:sub14
2000 0, // R600_KC0_W:sub15
2001 },
2002 { // R600_KC0_X
2003 0, // R600_KC0_X:sub0
2004 0, // R600_KC0_X:sub1
2005 0, // R600_KC0_X:sub2
2006 0, // R600_KC0_X:sub3
2007 0, // R600_KC0_X:sub4
2008 0, // R600_KC0_X:sub5
2009 0, // R600_KC0_X:sub6
2010 0, // R600_KC0_X:sub7
2011 0, // R600_KC0_X:sub8
2012 0, // R600_KC0_X:sub9
2013 0, // R600_KC0_X:sub10
2014 0, // R600_KC0_X:sub11
2015 0, // R600_KC0_X:sub12
2016 0, // R600_KC0_X:sub13
2017 0, // R600_KC0_X:sub14
2018 0, // R600_KC0_X:sub15
2019 },
2020 { // R600_KC0_Y
2021 0, // R600_KC0_Y:sub0
2022 0, // R600_KC0_Y:sub1
2023 0, // R600_KC0_Y:sub2
2024 0, // R600_KC0_Y:sub3
2025 0, // R600_KC0_Y:sub4
2026 0, // R600_KC0_Y:sub5
2027 0, // R600_KC0_Y:sub6
2028 0, // R600_KC0_Y:sub7
2029 0, // R600_KC0_Y:sub8
2030 0, // R600_KC0_Y:sub9
2031 0, // R600_KC0_Y:sub10
2032 0, // R600_KC0_Y:sub11
2033 0, // R600_KC0_Y:sub12
2034 0, // R600_KC0_Y:sub13
2035 0, // R600_KC0_Y:sub14
2036 0, // R600_KC0_Y:sub15
2037 },
2038 { // R600_KC0_Z
2039 0, // R600_KC0_Z:sub0
2040 0, // R600_KC0_Z:sub1
2041 0, // R600_KC0_Z:sub2
2042 0, // R600_KC0_Z:sub3
2043 0, // R600_KC0_Z:sub4
2044 0, // R600_KC0_Z:sub5
2045 0, // R600_KC0_Z:sub6
2046 0, // R600_KC0_Z:sub7
2047 0, // R600_KC0_Z:sub8
2048 0, // R600_KC0_Z:sub9
2049 0, // R600_KC0_Z:sub10
2050 0, // R600_KC0_Z:sub11
2051 0, // R600_KC0_Z:sub12
2052 0, // R600_KC0_Z:sub13
2053 0, // R600_KC0_Z:sub14
2054 0, // R600_KC0_Z:sub15
2055 },
2056 { // R600_KC1_W
2057 0, // R600_KC1_W:sub0
2058 0, // R600_KC1_W:sub1
2059 0, // R600_KC1_W:sub2
2060 0, // R600_KC1_W:sub3
2061 0, // R600_KC1_W:sub4
2062 0, // R600_KC1_W:sub5
2063 0, // R600_KC1_W:sub6
2064 0, // R600_KC1_W:sub7
2065 0, // R600_KC1_W:sub8
2066 0, // R600_KC1_W:sub9
2067 0, // R600_KC1_W:sub10
2068 0, // R600_KC1_W:sub11
2069 0, // R600_KC1_W:sub12
2070 0, // R600_KC1_W:sub13
2071 0, // R600_KC1_W:sub14
2072 0, // R600_KC1_W:sub15
2073 },
2074 { // R600_KC1_X
2075 0, // R600_KC1_X:sub0
2076 0, // R600_KC1_X:sub1
2077 0, // R600_KC1_X:sub2
2078 0, // R600_KC1_X:sub3
2079 0, // R600_KC1_X:sub4
2080 0, // R600_KC1_X:sub5
2081 0, // R600_KC1_X:sub6
2082 0, // R600_KC1_X:sub7
2083 0, // R600_KC1_X:sub8
2084 0, // R600_KC1_X:sub9
2085 0, // R600_KC1_X:sub10
2086 0, // R600_KC1_X:sub11
2087 0, // R600_KC1_X:sub12
2088 0, // R600_KC1_X:sub13
2089 0, // R600_KC1_X:sub14
2090 0, // R600_KC1_X:sub15
2091 },
2092 { // R600_KC1_Y
2093 0, // R600_KC1_Y:sub0
2094 0, // R600_KC1_Y:sub1
2095 0, // R600_KC1_Y:sub2
2096 0, // R600_KC1_Y:sub3
2097 0, // R600_KC1_Y:sub4
2098 0, // R600_KC1_Y:sub5
2099 0, // R600_KC1_Y:sub6
2100 0, // R600_KC1_Y:sub7
2101 0, // R600_KC1_Y:sub8
2102 0, // R600_KC1_Y:sub9
2103 0, // R600_KC1_Y:sub10
2104 0, // R600_KC1_Y:sub11
2105 0, // R600_KC1_Y:sub12
2106 0, // R600_KC1_Y:sub13
2107 0, // R600_KC1_Y:sub14
2108 0, // R600_KC1_Y:sub15
2109 },
2110 { // R600_KC1_Z
2111 0, // R600_KC1_Z:sub0
2112 0, // R600_KC1_Z:sub1
2113 0, // R600_KC1_Z:sub2
2114 0, // R600_KC1_Z:sub3
2115 0, // R600_KC1_Z:sub4
2116 0, // R600_KC1_Z:sub5
2117 0, // R600_KC1_Z:sub6
2118 0, // R600_KC1_Z:sub7
2119 0, // R600_KC1_Z:sub8
2120 0, // R600_KC1_Z:sub9
2121 0, // R600_KC1_Z:sub10
2122 0, // R600_KC1_Z:sub11
2123 0, // R600_KC1_Z:sub12
2124 0, // R600_KC1_Z:sub13
2125 0, // R600_KC1_Z:sub14
2126 0, // R600_KC1_Z:sub15
2127 },
2128 { // R600_LDS_SRC_REG
2129 0, // R600_LDS_SRC_REG:sub0
2130 0, // R600_LDS_SRC_REG:sub1
2131 0, // R600_LDS_SRC_REG:sub2
2132 0, // R600_LDS_SRC_REG:sub3
2133 0, // R600_LDS_SRC_REG:sub4
2134 0, // R600_LDS_SRC_REG:sub5
2135 0, // R600_LDS_SRC_REG:sub6
2136 0, // R600_LDS_SRC_REG:sub7
2137 0, // R600_LDS_SRC_REG:sub8
2138 0, // R600_LDS_SRC_REG:sub9
2139 0, // R600_LDS_SRC_REG:sub10
2140 0, // R600_LDS_SRC_REG:sub11
2141 0, // R600_LDS_SRC_REG:sub12
2142 0, // R600_LDS_SRC_REG:sub13
2143 0, // R600_LDS_SRC_REG:sub14
2144 0, // R600_LDS_SRC_REG:sub15
2145 },
2146 { // R600_Predicate
2147 0, // R600_Predicate:sub0
2148 0, // R600_Predicate:sub1
2149 0, // R600_Predicate:sub2
2150 0, // R600_Predicate:sub3
2151 0, // R600_Predicate:sub4
2152 0, // R600_Predicate:sub5
2153 0, // R600_Predicate:sub6
2154 0, // R600_Predicate:sub7
2155 0, // R600_Predicate:sub8
2156 0, // R600_Predicate:sub9
2157 0, // R600_Predicate:sub10
2158 0, // R600_Predicate:sub11
2159 0, // R600_Predicate:sub12
2160 0, // R600_Predicate:sub13
2161 0, // R600_Predicate:sub14
2162 0, // R600_Predicate:sub15
2163 },
2164 { // R600_Addr_W
2165 0, // R600_Addr_W:sub0
2166 0, // R600_Addr_W:sub1
2167 0, // R600_Addr_W:sub2
2168 0, // R600_Addr_W:sub3
2169 0, // R600_Addr_W:sub4
2170 0, // R600_Addr_W:sub5
2171 0, // R600_Addr_W:sub6
2172 0, // R600_Addr_W:sub7
2173 0, // R600_Addr_W:sub8
2174 0, // R600_Addr_W:sub9
2175 0, // R600_Addr_W:sub10
2176 0, // R600_Addr_W:sub11
2177 0, // R600_Addr_W:sub12
2178 0, // R600_Addr_W:sub13
2179 0, // R600_Addr_W:sub14
2180 0, // R600_Addr_W:sub15
2181 },
2182 { // R600_Addr_Y
2183 0, // R600_Addr_Y:sub0
2184 0, // R600_Addr_Y:sub1
2185 0, // R600_Addr_Y:sub2
2186 0, // R600_Addr_Y:sub3
2187 0, // R600_Addr_Y:sub4
2188 0, // R600_Addr_Y:sub5
2189 0, // R600_Addr_Y:sub6
2190 0, // R600_Addr_Y:sub7
2191 0, // R600_Addr_Y:sub8
2192 0, // R600_Addr_Y:sub9
2193 0, // R600_Addr_Y:sub10
2194 0, // R600_Addr_Y:sub11
2195 0, // R600_Addr_Y:sub12
2196 0, // R600_Addr_Y:sub13
2197 0, // R600_Addr_Y:sub14
2198 0, // R600_Addr_Y:sub15
2199 },
2200 { // R600_Addr_Z
2201 0, // R600_Addr_Z:sub0
2202 0, // R600_Addr_Z:sub1
2203 0, // R600_Addr_Z:sub2
2204 0, // R600_Addr_Z:sub3
2205 0, // R600_Addr_Z:sub4
2206 0, // R600_Addr_Z:sub5
2207 0, // R600_Addr_Z:sub6
2208 0, // R600_Addr_Z:sub7
2209 0, // R600_Addr_Z:sub8
2210 0, // R600_Addr_Z:sub9
2211 0, // R600_Addr_Z:sub10
2212 0, // R600_Addr_Z:sub11
2213 0, // R600_Addr_Z:sub12
2214 0, // R600_Addr_Z:sub13
2215 0, // R600_Addr_Z:sub14
2216 0, // R600_Addr_Z:sub15
2217 },
2218 { // R600_LDS_SRC_REG_and_R600_Reg32
2219 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub0
2220 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub1
2221 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub2
2222 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub3
2223 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub4
2224 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub5
2225 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub6
2226 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub7
2227 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub8
2228 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub9
2229 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub10
2230 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub11
2231 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub12
2232 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub13
2233 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub14
2234 0, // R600_LDS_SRC_REG_and_R600_Reg32:sub15
2235 },
2236 { // R600_Predicate_Bit
2237 0, // R600_Predicate_Bit:sub0
2238 0, // R600_Predicate_Bit:sub1
2239 0, // R600_Predicate_Bit:sub2
2240 0, // R600_Predicate_Bit:sub3
2241 0, // R600_Predicate_Bit:sub4
2242 0, // R600_Predicate_Bit:sub5
2243 0, // R600_Predicate_Bit:sub6
2244 0, // R600_Predicate_Bit:sub7
2245 0, // R600_Predicate_Bit:sub8
2246 0, // R600_Predicate_Bit:sub9
2247 0, // R600_Predicate_Bit:sub10
2248 0, // R600_Predicate_Bit:sub11
2249 0, // R600_Predicate_Bit:sub12
2250 0, // R600_Predicate_Bit:sub13
2251 0, // R600_Predicate_Bit:sub14
2252 0, // R600_Predicate_Bit:sub15
2253 },
2254 { // R600_Reg64
2255 3, // R600_Reg64:sub0 -> R600_TReg32_X
2256 8, // R600_Reg64:sub1 -> R600_TReg32_Y
2257 0, // R600_Reg64:sub2
2258 0, // R600_Reg64:sub3
2259 0, // R600_Reg64:sub4
2260 0, // R600_Reg64:sub5
2261 0, // R600_Reg64:sub6
2262 0, // R600_Reg64:sub7
2263 0, // R600_Reg64:sub8
2264 0, // R600_Reg64:sub9
2265 0, // R600_Reg64:sub10
2266 0, // R600_Reg64:sub11
2267 0, // R600_Reg64:sub12
2268 0, // R600_Reg64:sub13
2269 0, // R600_Reg64:sub14
2270 0, // R600_Reg64:sub15
2271 },
2272 { // R600_Reg64Vertical
2273 2, // R600_Reg64Vertical:sub0 -> R600_TReg32
2274 2, // R600_Reg64Vertical:sub1 -> R600_TReg32
2275 0, // R600_Reg64Vertical:sub2
2276 0, // R600_Reg64Vertical:sub3
2277 0, // R600_Reg64Vertical:sub4
2278 0, // R600_Reg64Vertical:sub5
2279 0, // R600_Reg64Vertical:sub6
2280 0, // R600_Reg64Vertical:sub7
2281 0, // R600_Reg64Vertical:sub8
2282 0, // R600_Reg64Vertical:sub9
2283 0, // R600_Reg64Vertical:sub10
2284 0, // R600_Reg64Vertical:sub11
2285 0, // R600_Reg64Vertical:sub12
2286 0, // R600_Reg64Vertical:sub13
2287 0, // R600_Reg64Vertical:sub14
2288 0, // R600_Reg64Vertical:sub15
2289 },
2290 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
2291 7, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub0 -> R600_TReg32_W
2292 7, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub1 -> R600_TReg32_W
2293 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub2
2294 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub3
2295 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub4
2296 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub5
2297 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub6
2298 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub7
2299 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub8
2300 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub9
2301 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub10
2302 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub11
2303 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub12
2304 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub13
2305 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub14
2306 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W:sub15
2307 },
2308 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
2309 3, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub0 -> R600_TReg32_X
2310 3, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub1 -> R600_TReg32_X
2311 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub2
2312 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub3
2313 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub4
2314 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub5
2315 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub6
2316 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub7
2317 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub8
2318 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub9
2319 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub10
2320 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub11
2321 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub12
2322 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub13
2323 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub14
2324 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X:sub15
2325 },
2326 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
2327 8, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub0 -> R600_TReg32_Y
2328 8, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub1 -> R600_TReg32_Y
2329 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub2
2330 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub3
2331 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub4
2332 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub5
2333 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub6
2334 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub7
2335 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub8
2336 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub9
2337 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub10
2338 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub11
2339 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub12
2340 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub13
2341 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub14
2342 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y:sub15
2343 },
2344 { // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
2345 9, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub0 -> R600_TReg32_Z
2346 9, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub1 -> R600_TReg32_Z
2347 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub2
2348 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub3
2349 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub4
2350 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub5
2351 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub6
2352 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub7
2353 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub8
2354 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub9
2355 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub10
2356 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub11
2357 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub12
2358 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub13
2359 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub14
2360 0, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z:sub15
2361 },
2362 { // R600_Reg128
2363 3, // R600_Reg128:sub0 -> R600_TReg32_X
2364 8, // R600_Reg128:sub1 -> R600_TReg32_Y
2365 9, // R600_Reg128:sub2 -> R600_TReg32_Z
2366 7, // R600_Reg128:sub3 -> R600_TReg32_W
2367 0, // R600_Reg128:sub4
2368 0, // R600_Reg128:sub5
2369 0, // R600_Reg128:sub6
2370 0, // R600_Reg128:sub7
2371 0, // R600_Reg128:sub8
2372 0, // R600_Reg128:sub9
2373 0, // R600_Reg128:sub10
2374 0, // R600_Reg128:sub11
2375 0, // R600_Reg128:sub12
2376 0, // R600_Reg128:sub13
2377 0, // R600_Reg128:sub14
2378 0, // R600_Reg128:sub15
2379 },
2380 { // R600_Reg128Vertical
2381 2, // R600_Reg128Vertical:sub0 -> R600_TReg32
2382 2, // R600_Reg128Vertical:sub1 -> R600_TReg32
2383 2, // R600_Reg128Vertical:sub2 -> R600_TReg32
2384 2, // R600_Reg128Vertical:sub3 -> R600_TReg32
2385 0, // R600_Reg128Vertical:sub4
2386 0, // R600_Reg128Vertical:sub5
2387 0, // R600_Reg128Vertical:sub6
2388 0, // R600_Reg128Vertical:sub7
2389 0, // R600_Reg128Vertical:sub8
2390 0, // R600_Reg128Vertical:sub9
2391 0, // R600_Reg128Vertical:sub10
2392 0, // R600_Reg128Vertical:sub11
2393 0, // R600_Reg128Vertical:sub12
2394 0, // R600_Reg128Vertical:sub13
2395 0, // R600_Reg128Vertical:sub14
2396 0, // R600_Reg128Vertical:sub15
2397 },
2398 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
2399 7, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub0 -> R600_TReg32_W
2400 7, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub1 -> R600_TReg32_W
2401 7, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub2 -> R600_TReg32_W
2402 7, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub3 -> R600_TReg32_W
2403 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub4
2404 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub5
2405 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub6
2406 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub7
2407 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub8
2408 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub9
2409 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub10
2410 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub11
2411 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub12
2412 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub13
2413 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub14
2414 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W:sub15
2415 },
2416 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
2417 3, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub0 -> R600_TReg32_X
2418 3, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub1 -> R600_TReg32_X
2419 3, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub2 -> R600_TReg32_X
2420 3, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub3 -> R600_TReg32_X
2421 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub4
2422 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub5
2423 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub6
2424 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub7
2425 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub8
2426 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub9
2427 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub10
2428 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub11
2429 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub12
2430 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub13
2431 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub14
2432 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X:sub15
2433 },
2434 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
2435 8, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub0 -> R600_TReg32_Y
2436 8, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub1 -> R600_TReg32_Y
2437 8, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub2 -> R600_TReg32_Y
2438 8, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub3 -> R600_TReg32_Y
2439 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub4
2440 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub5
2441 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub6
2442 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub7
2443 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub8
2444 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub9
2445 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub10
2446 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub11
2447 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub12
2448 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub13
2449 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub14
2450 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y:sub15
2451 },
2452 { // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
2453 9, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub0 -> R600_TReg32_Z
2454 9, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub1 -> R600_TReg32_Z
2455 9, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub2 -> R600_TReg32_Z
2456 9, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub3 -> R600_TReg32_Z
2457 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub4
2458 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub5
2459 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub6
2460 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub7
2461 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub8
2462 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub9
2463 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub10
2464 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub11
2465 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub12
2466 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub13
2467 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub14
2468 0, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z:sub15
2469 },
2470
2471 };
2472 assert(RC && "Missing regclass");
2473 if (!Idx) return RC;
2474 --Idx;
2475 assert(Idx < 16 && "Bad subreg");
2476 unsigned TV = Table[RC->getID()][Idx];
2477 return TV ? getRegClass(i: TV - 1) : nullptr;
2478}/// Get the weight in units of pressure for this register class.
2479const RegClassWeight &R600GenRegisterInfo::
2480getRegClassWeight(const TargetRegisterClass *RC) const {
2481 static const RegClassWeight RCWeightTable[] = {
2482 {.RegWeight: 0, .WeightLimit: 942}, // R600_Reg32
2483 {.RegWeight: 0, .WeightLimit: 513}, // R600_TReg32
2484 {.RegWeight: 0, .WeightLimit: 129}, // R600_TReg32_X
2485 {.RegWeight: 0, .WeightLimit: 128}, // R600_Addr
2486 {.RegWeight: 0, .WeightLimit: 128}, // R600_KC0
2487 {.RegWeight: 0, .WeightLimit: 128}, // R600_KC1
2488 {.RegWeight: 0, .WeightLimit: 128}, // R600_TReg32_W
2489 {.RegWeight: 0, .WeightLimit: 128}, // R600_TReg32_Y
2490 {.RegWeight: 0, .WeightLimit: 128}, // R600_TReg32_Z
2491 {.RegWeight: 0, .WeightLimit: 33}, // R600_ArrayBase
2492 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC0_W
2493 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC0_X
2494 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC0_Y
2495 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC0_Z
2496 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC1_W
2497 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC1_X
2498 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC1_Y
2499 {.RegWeight: 0, .WeightLimit: 32}, // R600_KC1_Z
2500 {.RegWeight: 0, .WeightLimit: 1}, // R600_LDS_SRC_REG
2501 {.RegWeight: 0, .WeightLimit: 3}, // R600_Predicate
2502 {.RegWeight: 0, .WeightLimit: 0}, // R600_Addr_W
2503 {.RegWeight: 0, .WeightLimit: 0}, // R600_Addr_Y
2504 {.RegWeight: 0, .WeightLimit: 0}, // R600_Addr_Z
2505 {.RegWeight: 1, .WeightLimit: 1}, // R600_LDS_SRC_REG_and_R600_Reg32
2506 {.RegWeight: 0, .WeightLimit: 1}, // R600_Predicate_Bit
2507 {.RegWeight: 0, .WeightLimit: 128}, // R600_Reg64
2508 {.RegWeight: 0, .WeightLimit: 16}, // R600_Reg64Vertical
2509 {.RegWeight: 2, .WeightLimit: 4}, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
2510 {.RegWeight: 2, .WeightLimit: 4}, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
2511 {.RegWeight: 2, .WeightLimit: 4}, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
2512 {.RegWeight: 2, .WeightLimit: 4}, // R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
2513 {.RegWeight: 0, .WeightLimit: 512}, // R600_Reg128
2514 {.RegWeight: 0, .WeightLimit: 16}, // R600_Reg128Vertical
2515 {.RegWeight: 4, .WeightLimit: 4}, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_W
2516 {.RegWeight: 4, .WeightLimit: 4}, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_X
2517 {.RegWeight: 4, .WeightLimit: 4}, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Y
2518 {.RegWeight: 4, .WeightLimit: 4}, // R600_Reg128Vertical_with_sub0_in_R600_TReg32_Z
2519 };
2520 return RCWeightTable[RC->getID()];
2521}
2522
2523/// Get the weight in units of pressure for this register unit.
2524unsigned R600GenRegisterInfo::
2525getRegUnitWeight(MCRegUnit RegUnit) const {
2526 assert(static_cast<unsigned>(RegUnit) < 1342 && "invalid register unit");
2527 // All register units have unit weight.
2528 return 1;
2529}
2530
2531
2532// Get the number of dimensions of register pressure.
2533unsigned R600GenRegisterInfo::getNumRegPressureSets() const {
2534 return 23;
2535}
2536
2537// Get the name of this register unit pressure set.
2538const char *R600GenRegisterInfo::
2539getRegPressureSetName(unsigned Idx) const {
2540 static const char *PressureNameTable[] = {
2541 "R600_LDS_SRC_REG_and_R600_Reg32",
2542 "R600_Predicate_Bit",
2543 "R600_Predicate",
2544 "R600_Reg64Vertical_with_sub0_in_R600_TReg32_W",
2545 "R600_Reg64Vertical_with_sub0_in_R600_TReg32_X",
2546 "R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y",
2547 "R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z",
2548 "R600_Reg64Vertical",
2549 "R600_ArrayBase",
2550 "R600_TReg32_W",
2551 "R600_TReg32_Y",
2552 "R600_TReg32_Z",
2553 "R600_Reg64",
2554 "R600_TReg32_X",
2555 "R600_Reg64_with_R600_Reg64Vertical",
2556 "R600_TReg32_W_with_R600_Reg64Vertical",
2557 "R600_TReg32_Y_with_R600_Reg64Vertical",
2558 "R600_TReg32_Z_with_R600_Reg64Vertical",
2559 "R600_TReg32_X_with_R600_Reg64Vertical",
2560 "R600_TReg32_Y_with_R600_Reg64",
2561 "R600_TReg32_X_with_R600_Reg64",
2562 "R600_TReg32",
2563 "R600_Reg32",
2564 };
2565 return PressureNameTable[Idx];
2566}
2567
2568// Get the register unit pressure limit for this dimension.
2569// This limit must be adjusted dynamically for reserved registers.
2570unsigned R600GenRegisterInfo::
2571getRegPressureSetLimit(const MachineFunction &MF, unsigned Idx) const {
2572 static const uint16_t PressureLimitTable[] = {
2573 1, // 0: R600_LDS_SRC_REG_and_R600_Reg32
2574 1, // 1: R600_Predicate_Bit
2575 3, // 2: R600_Predicate
2576 4, // 3: R600_Reg64Vertical_with_sub0_in_R600_TReg32_W
2577 4, // 4: R600_Reg64Vertical_with_sub0_in_R600_TReg32_X
2578 4, // 5: R600_Reg64Vertical_with_sub0_in_R600_TReg32_Y
2579 4, // 6: R600_Reg64Vertical_with_sub0_in_R600_TReg32_Z
2580 16, // 7: R600_Reg64Vertical
2581 33, // 8: R600_ArrayBase
2582 128, // 9: R600_TReg32_W
2583 128, // 10: R600_TReg32_Y
2584 128, // 11: R600_TReg32_Z
2585 128, // 12: R600_Reg64
2586 129, // 13: R600_TReg32_X
2587 136, // 14: R600_Reg64_with_R600_Reg64Vertical
2588 140, // 15: R600_TReg32_W_with_R600_Reg64Vertical
2589 140, // 16: R600_TReg32_Y_with_R600_Reg64Vertical
2590 140, // 17: R600_TReg32_Z_with_R600_Reg64Vertical
2591 141, // 18: R600_TReg32_X_with_R600_Reg64Vertical
2592 192, // 19: R600_TReg32_Y_with_R600_Reg64
2593 193, // 20: R600_TReg32_X_with_R600_Reg64
2594 513, // 21: R600_TReg32
2595 942, // 22: R600_Reg32
2596 };
2597 return PressureLimitTable[Idx];
2598}
2599
2600/// Table of pressure sets per register class or unit.
2601static const int RCSetsTable[] = {
2602 /* 0 */ 1, -1,
2603 /* 2 */ 2, -1,
2604 /* 4 */ 0, 22, -1,
2605 /* 7 */ 8, 22, -1,
2606 /* 10 */ 9, 15, 21, 22, -1,
2607 /* 15 */ 11, 17, 21, 22, -1,
2608 /* 20 */ 7, 14, 15, 16, 17, 18, 21, 22, -1,
2609 /* 29 */ 3, 7, 9, 14, 15, 16, 17, 18, 21, 22, -1,
2610 /* 40 */ 6, 7, 11, 14, 15, 16, 17, 18, 21, 22, -1,
2611 /* 51 */ 10, 16, 19, 21, 22, -1,
2612 /* 57 */ 13, 18, 20, 21, 22, -1,
2613 /* 63 */ 12, 14, 19, 20, 21, 22, -1,
2614 /* 70 */ 10, 12, 14, 16, 19, 20, 21, 22, -1,
2615 /* 79 */ 12, 13, 14, 18, 19, 20, 21, 22, -1,
2616 /* 88 */ 5, 7, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, -1,
2617 /* 102 */ 4, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, -1,
2618};
2619
2620/// Get the dimensions of register pressure impacted by this register class.
2621/// Returns a -1 terminated array of pressure set IDs
2622const int *R600GenRegisterInfo::
2623getRegClassPressureSets(const TargetRegisterClass *RC) const {
2624 static const uint8_t RCSetStartTable[] = {
2625 5,12,57,1,1,1,10,51,15,7,1,1,1,1,1,1,1,1,1,2,1,1,1,4,0,63,20,29,102,88,40,12,20,29,102,88,40,};
2626 return &RCSetsTable[RCSetStartTable[RC->getID()]];
2627}
2628
2629/// Get the dimensions of register pressure impacted by this register unit.
2630/// Returns a -1 terminated array of pressure set IDs
2631const int *R600GenRegisterInfo::
2632getRegUnitPressureSets(MCRegUnit RegUnit) const {
2633 assert(static_cast<unsigned>(RegUnit) < 1342 && "invalid register unit");
2634 static const uint8_t RUSetStartTable[] = {
2635 5,1,5,1,1,5,57,5,5,1,1,5,5,5,5,1,4,1,1,0,2,2,2,1,1,5,1,1,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,29,29,29,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,102,102,102,102,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,88,88,88,88,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,40,40,40,40,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,};
2636 return &RCSetsTable[RUSetStartTable[static_cast<unsigned>(RegUnit)]];
2637}
2638
2639extern const MCRegisterDesc R600RegDesc[];
2640extern const int16_t R600RegDiffLists[];
2641extern const LaneBitmask R600LaneMaskLists[];
2642extern const char R600RegStrings[];
2643extern const char R600RegClassStrings[];
2644extern const MCPhysReg R600RegUnitRoots[][2];
2645extern const uint16_t R600SubRegIdxLists[];
2646extern const uint16_t R600RegEncodingTable[];
2647
2648R600GenRegisterInfo::
2649R600GenRegisterInfo(unsigned RA, unsigned DwarfFlavour, unsigned EHFlavour,
2650 unsigned PC, unsigned HwMode)
2651 : TargetRegisterInfo(&R600RegInfoDesc, RegisterClasses, RegisterClasses+37,
2652 R600SubRegIndexStrings, R600SubRegIndexNameOffsets,
2653 SubRegIdxRangeTable, SubRegIndexLaneMaskTable,
2654
2655 LaneBitmask(0xFFFFFFFFFFFFFFF0), RegClassInfos, VTLists, HwMode) {
2656 InitMCRegisterInfo(D: R600RegDesc, NR: 1675, RA, PC,
2657 C: R600MCRegisterClasses, NC: 37,
2658 RURoots: R600RegUnitRoots,
2659 NRU: 1342,
2660 DL: R600RegDiffLists,
2661 RUMS: R600LaneMaskLists,
2662 Strings: R600RegStrings,
2663 ClassStrings: R600RegClassStrings,
2664 SubIndices: R600SubRegIdxLists,
2665 NumIndices: 17,
2666 RET: R600RegEncodingTable,
2667 RUI: nullptr);
2668
2669}
2670
2671
2672
2673ArrayRef<const uint32_t *> R600GenRegisterInfo::getRegMasks() const {
2674 return {};
2675}
2676
2677bool R600GenRegisterInfo::
2678isGeneralPurposeRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2679 return
2680 false;
2681}
2682
2683bool R600GenRegisterInfo::
2684isGeneralPurposeRegisterClass(const TargetRegisterClass *RC) const {
2685 return
2686 false;
2687}
2688
2689bool R600GenRegisterInfo::
2690isFixedRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2691 return
2692 false;
2693}
2694
2695bool R600GenRegisterInfo::
2696isArgumentRegister(const MachineFunction &MF, MCRegister PhysReg) const {
2697 return
2698 false;
2699}
2700
2701bool R600GenRegisterInfo::
2702isConstantPhysReg(MCRegister PhysReg) const {
2703 return
2704 false;
2705}
2706
2707ArrayRef<const char *> R600GenRegisterInfo::getRegMaskNames() const {
2708 return {};
2709}
2710
2711const R600FrameLowering *
2712R600GenRegisterInfo::getFrameLowering(const MachineFunction &MF) {
2713 return static_cast<const R600FrameLowering *>(
2714 MF.getSubtarget().getFrameLowering());
2715}
2716
2717
2718} // namespace llvm
2719