@@ -160,25 +160,30 @@ def GPR64common : RegisterClass<"AArch64", [i64], 64,
160160 (add (sequence "X%u", 0, 28), FP, LR)> {
161161 let AltOrders = [(rotl GPR64common, 8)];
162162 let AltOrderSelect = [{ return 1; }];
163+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64commonRegClassID, 0, 31>";
163164}
164165// GPR register classes which exclude SP/WSP.
165166def GPR32 : RegisterClass<"AArch64", [i32], 32, (add GPR32common, WZR)> {
166167 let AltOrders = [(rotl GPR32, 8)];
167168 let AltOrderSelect = [{ return 1; }];
169+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR32RegClassID, 0, 32>";
168170}
169171def GPR64 : RegisterClass<"AArch64", [i64], 64, (add GPR64common, XZR)> {
170172 let AltOrders = [(rotl GPR64, 8)];
171173 let AltOrderSelect = [{ return 1; }];
174+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64RegClassID, 0, 32>";
172175}
173176
174177// GPR register classes which include SP/WSP.
175178def GPR32sp : RegisterClass<"AArch64", [i32], 32, (add GPR32common, WSP)> {
176179 let AltOrders = [(rotl GPR32sp, 8)];
177180 let AltOrderSelect = [{ return 1; }];
181+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR32spRegClassID, 0, 32>";
178182}
179183def GPR64sp : RegisterClass<"AArch64", [i64], 64, (add GPR64common, SP)> {
180184 let AltOrders = [(rotl GPR64sp, 8)];
181185 let AltOrderSelect = [{ return 1; }];
186+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::GPR64spRegClassID,0, 32>";
182187}
183188
184189def GPR32sponly : RegisterClass<"AArch64", [i32], 32, (add WSP)>;
@@ -446,18 +451,24 @@ def Q31 : AArch64Reg<31, "q31", [D31], ["v31", ""]>, DwarfRegAlias<B31>;
446451
447452def FPR8 : RegisterClass<"AArch64", [i8], 8, (sequence "B%u", 0, 31)> {
448453 let Size = 8;
454+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR8RegClassID, 0, 32>";
449455}
450456def FPR16 : RegisterClass<"AArch64", [f16, bf16, i16], 16, (sequence "H%u", 0, 31)> {
451457 let Size = 16;
458+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR16RegClassID, 0, 32>";
452459}
453460
454461def FPR16_lo : RegisterClass<"AArch64", [f16], 16, (trunc FPR16, 16)> {
455462 let Size = 16;
456463}
457- def FPR32 : RegisterClass<"AArch64", [f32, i32], 32,(sequence "S%u", 0, 31)>;
464+ def FPR32 : RegisterClass<"AArch64", [f32, i32], 32,(sequence "S%u", 0, 31)> {
465+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR32RegClassID, 0, 32>";
466+ }
458467def FPR64 : RegisterClass<"AArch64", [f64, i64, v2f32, v1f64, v8i8, v4i16, v2i32,
459468 v1i64, v4f16, v4bf16],
460- 64, (sequence "D%u", 0, 31)>;
469+ 64, (sequence "D%u", 0, 31)> {
470+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR64RegClassID, 0, 32>";
471+ }
461472def FPR64_lo : RegisterClass<"AArch64",
462473 [v8i8, v4i16, v2i32, v1i64, v4f16, v4bf16, v2f32,
463474 v1f64],
@@ -469,21 +480,27 @@ def FPR64_lo : RegisterClass<"AArch64",
469480def FPR128 : RegisterClass<"AArch64",
470481 [v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, f128,
471482 v8f16, v8bf16],
472- 128, (sequence "Q%u", 0, 31)>;
483+ 128, (sequence "Q%u", 0, 31)> {
484+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 32>";
485+ }
473486
474487// The lower 16 vector registers. Some instructions can only take registers
475488// in this range.
476489def FPR128_lo : RegisterClass<"AArch64",
477490 [v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, v8f16,
478491 v8bf16],
479- 128, (trunc FPR128, 16)>;
492+ 128, (trunc FPR128, 16)> {
493+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 16>";
494+ }
480495
481496// The lower 8 vector registers. Some instructions can only take registers
482497// in this range.
483498def FPR128_0to7 : RegisterClass<"AArch64",
484499 [v16i8, v8i16, v4i32, v2i64, v4f32, v2f64, v8f16,
485500 v8bf16],
486- 128, (trunc FPR128, 8)>;
501+ 128, (trunc FPR128, 8)> {
502+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::FPR128RegClassID, 0, 8>";
503+ }
487504
488505// Pairs, triples, and quads of 64-bit vector registers.
489506def DSeqPairs : RegisterTuples<[dsub0, dsub1], [(rotl FPR64, 0), (rotl FPR64, 1)]>;
@@ -495,12 +512,15 @@ def DSeqQuads : RegisterTuples<[dsub0, dsub1, dsub2, dsub3],
495512 (rotl FPR64, 2), (rotl FPR64, 3)]>;
496513def DD : RegisterClass<"AArch64", [untyped], 64, (add DSeqPairs)> {
497514 let Size = 128;
515+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDRegClassID, 0, 32>";
498516}
499517def DDD : RegisterClass<"AArch64", [untyped], 64, (add DSeqTriples)> {
500518 let Size = 192;
519+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDDRegClassID, 0, 32>";
501520}
502521def DDDD : RegisterClass<"AArch64", [untyped], 64, (add DSeqQuads)> {
503522 let Size = 256;
523+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::DDDDRegClassID, 0, 32>";
504524}
505525
506526// Pairs, triples, and quads of 128-bit vector registers.
@@ -513,12 +533,15 @@ def QSeqQuads : RegisterTuples<[qsub0, qsub1, qsub2, qsub3],
513533 (rotl FPR128, 2), (rotl FPR128, 3)]>;
514534def QQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqPairs)> {
515535 let Size = 256;
536+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQRegClassID, 0, 32>";
516537}
517538def QQQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqTriples)> {
518539 let Size = 384;
540+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQQRegClassID, 0, 32>";
519541}
520542def QQQQ : RegisterClass<"AArch64", [untyped], 128, (add QSeqQuads)> {
521543 let Size = 512;
544+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::QQQQRegClassID, 0, 32>";
522545}
523546
524547
@@ -904,9 +927,15 @@ class PPRClass<int firstreg, int lastreg> : RegisterClass<
904927 let Size = 16;
905928}
906929
907- def PPR : PPRClass<0, 15>;
908- def PPR_3b : PPRClass<0, 7>; // Restricted 3 bit SVE predicate register class.
909- def PPR_p8to15 : PPRClass<8, 15>;
930+ def PPR : PPRClass<0, 15> {
931+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRRegClassID, 0, 16>";
932+ }
933+ def PPR_3b : PPRClass<0, 7> { // Restricted 3 bit SVE predicate register class.
934+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRRegClassID, 0, 8>";
935+ }
936+ def PPR_p8to15 : PPRClass<8, 15> {
937+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 8, 8>";
938+ }
910939
911940class PPRAsmOperand <string name, string RegClass, int Width>: AsmOperandClass {
912941 let Name = "SVE" # name # "Reg";
@@ -941,7 +970,9 @@ class PNRClass<int firstreg, int lastreg> : RegisterClass<
941970 let Size = 16;
942971}
943972
944- def PNR : PNRClass<0, 15>;
973+ def PNR : PNRClass<0, 15> {
974+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 0, 16>";
975+ }
945976def PNR_3b : PNRClass<0, 7>;
946977def PNR_p8to15 : PNRClass<8, 15>;
947978
@@ -982,7 +1013,7 @@ class PNRP8to15RegOp<string Suffix, AsmOperandClass C, int Width, RegisterClass
9821013 : SVERegOp<Suffix, C, ElementSizeNone, RC> {
9831014 let PrintMethod = "printPredicateAsCounter<" # Width # ">";
9841015 let EncoderMethod = "EncodePNR_p8to15";
985- let DecoderMethod = "DecodePNR_p8to15RegisterClass ";
1016+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PNRRegClassID, 8, 8> ";
9861017}
9871018
9881019def PNRAny_p8to15 : PNRP8to15RegOp<"", PNRAsmAny_p8to15, 0, PNR_p8to15>;
@@ -1013,7 +1044,9 @@ class PPRorPNRAsmOperand<string name, string RegClass, int Width>: AsmOperandCla
10131044 let ParserMethod = "tryParseSVEPredicateOrPredicateAsCounterVector";
10141045}
10151046
1016- def PPRorPNR : PPRorPNRClass;
1047+ def PPRorPNR : PPRorPNRClass {
1048+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPRorPNRRegClassID, 0, 16>";
1049+ }
10171050def PPRorPNRAsmOp8 : PPRorPNRAsmOperand<"PPRorPNRB", "PPRorPNR", 8>;
10181051def PPRorPNRAsmOpAny : PPRorPNRAsmOperand<"PPRorPNRAny", "PPRorPNR", 0>;
10191052def PPRorPNRAny : PPRRegOp<"", PPRorPNRAsmOpAny, ElementSizeNone, PPRorPNR>;
@@ -1024,6 +1057,7 @@ def PSeqPairs : RegisterTuples<[psub0, psub1], [(rotl PPR, 0), (rotl PPR, 1)]>;
10241057
10251058def PPR2 : RegisterClass<"AArch64", [untyped], 16, (add PSeqPairs)> {
10261059 let Size = 32;
1060+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::PPR2RegClassID, 0, 16>";
10271061}
10281062
10291063class PPRVectorList<int ElementWidth, int NumRegs> : AsmOperandClass {
@@ -1097,9 +1131,15 @@ class ZPRClass<int lastreg> : RegisterClass<"AArch64",
10971131 let Size = 128;
10981132}
10991133
1100- def ZPR : ZPRClass<31>;
1101- def ZPR_4b : ZPRClass<15>; // Restricted 4 bit SVE vector register class.
1102- def ZPR_3b : ZPRClass<7>; // Restricted 3 bit SVE vector register class.
1134+ def ZPR : ZPRClass<31> {
1135+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 32>";
1136+ }
1137+ def ZPR_4b : ZPRClass<15> { // Restricted 4 bit SVE vector register class.
1138+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 16>";
1139+ }
1140+ def ZPR_3b : ZPRClass<7> { // Restricted 3 bit SVE vector register class.
1141+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPRRegClassID, 0, 8>";
1142+ }
11031143
11041144class ZPRAsmOperand<string name, int Width, string RegClassSuffix = "">
11051145 : AsmOperandClass {
@@ -1176,12 +1216,15 @@ def ZSeqQuads : RegisterTuples<[zsub0, zsub1, zsub2, zsub3], [(rotl ZPR, 0), (
11761216
11771217def ZPR2 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqPairs)> {
11781218 let Size = 256;
1219+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2RegClassID, 0, 32>";
11791220}
11801221def ZPR3 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqTriples)> {
11811222 let Size = 384;
1223+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR3RegClassID, 0, 32>";
11821224}
11831225def ZPR4 : RegisterClass<"AArch64", [untyped], 128, (add ZSeqQuads)> {
11841226 let Size = 512;
1227+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4RegClassID, 0, 32>";
11851228}
11861229
11871230class ZPRVectorList<int ElementWidth, int NumRegs> : AsmOperandClass {
@@ -1379,10 +1422,12 @@ def ZStridedQuadsHi : RegisterTuples<[zsub0, zsub1, zsub2, zsub3], [
13791422def ZPR2Strided : RegisterClass<"AArch64", [untyped], 128,
13801423 (add ZStridedPairsLo, ZStridedPairsHi)> {
13811424 let Size = 256;
1425+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2StridedRegClassID, 0, 16>";
13821426}
13831427def ZPR4Strided : RegisterClass<"AArch64", [untyped], 128,
13841428 (add ZStridedQuadsLo, ZStridedQuadsHi)> {
13851429 let Size = 512;
1430+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4StridedRegClassID, 0, 8>";
13861431}
13871432
13881433def ZPR2StridedOrContiguous : RegisterClass<"AArch64", [untyped], 128,
@@ -1401,7 +1446,7 @@ class ZPRVectorListStrided<int ElementWidth, int NumRegs, int Stride>
14011446}
14021447
14031448let EncoderMethod = "EncodeZPR2StridedRegisterClass",
1404- DecoderMethod = "DecodeZPR2StridedRegisterClass " in {
1449+ DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR2StridedRegClassID, 0, 16> " in {
14051450 def ZZ_b_strided
14061451 : RegisterOperand<ZPR2Strided, "printTypedVectorList<0, 'b'>"> {
14071452 let ParserMatchClass = ZPRVectorListStrided<8, 2, 8>;
@@ -1439,7 +1484,7 @@ def ZPR4StridedOrContiguous : RegisterClass<"AArch64", [untyped], 128,
14391484}
14401485
14411486let EncoderMethod = "EncodeZPR4StridedRegisterClass",
1442- DecoderMethod = "DecodeZPR4StridedRegisterClass " in {
1487+ DecoderMethod = "DecodeSimpleRegisterClass<AArch64::ZPR4StridedRegClassID, 0, 16> " in {
14431488 def ZZZZ_b_strided
14441489 : RegisterOperand<ZPR4Strided, "printTypedVectorList<0,'b'>"> {
14451490 let ParserMatchClass = ZPRVectorListStrided<8, 4, 4>;
@@ -1774,9 +1819,11 @@ def MatrixTileList : MatrixTileListOperand<>;
17741819
17751820def MatrixIndexGPR32_8_11 : RegisterClass<"AArch64", [i32], 32, (sequence "W%u", 8, 11)> {
17761821 let DiagnosticType = "InvalidMatrixIndexGPR32_8_11";
1822+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::MatrixIndexGPR32_8_11RegClassID, 0, 4>";
17771823}
17781824def MatrixIndexGPR32_12_15 : RegisterClass<"AArch64", [i32], 32, (sequence "W%u", 12, 15)> {
17791825 let DiagnosticType = "InvalidMatrixIndexGPR32_12_15";
1826+ let DecoderMethod = "DecodeSimpleRegisterClass<AArch64::MatrixIndexGPR32_12_15RegClassID, 0, 4>";
17801827}
17811828def MatrixIndexGPR32Op8_11 : RegisterOperand<MatrixIndexGPR32_8_11> {
17821829 let EncoderMethod = "encodeMatrixIndexGPR32<AArch64::W8>";
0 commit comments