@@ -1225,25 +1225,25 @@ def PostIdxRegShiftedAsmOperand : AsmOperandClass {
12251225 let ParserMethod = "parsePostIdxReg";
12261226}
12271227def am2offset_reg : MemOperand,
1228- ComplexPattern<i32, 2, "SelectAddrMode2OffsetReg",
1229- [], [SDNPWantRoot]> {
1228+ ComplexPattern<i32, 2, "SelectAddrMode2OffsetReg"> {
12301229 let EncoderMethod = "getAddrMode2OffsetOpValue";
12311230 let PrintMethod = "printAddrMode2OffsetOperand";
12321231 // When using this for assembly, it's always as a post-index offset.
12331232 let ParserMatchClass = PostIdxRegShiftedAsmOperand;
12341233 let MIOperandInfo = (ops GPRnopc, i32imm);
1234+ let WantsRoot = true;
12351235}
12361236
12371237// FIXME: am2offset_imm should only need the immediate, not the GPR. Having
12381238// the GPR is purely vestigal at this point.
12391239def AM2OffsetImmAsmOperand : AsmOperandClass { let Name = "AM2OffsetImm"; }
12401240def am2offset_imm : MemOperand,
1241- ComplexPattern<i32, 2, "SelectAddrMode2OffsetImm",
1242- [], [SDNPWantRoot]> {
1241+ ComplexPattern<i32, 2, "SelectAddrMode2OffsetImm"> {
12431242 let EncoderMethod = "getAddrMode2OffsetOpValue";
12441243 let PrintMethod = "printAddrMode2OffsetOperand";
12451244 let ParserMatchClass = AM2OffsetImmAsmOperand;
12461245 let MIOperandInfo = (ops GPRnopc, i32imm);
1246+ let WantsRoot = true;
12471247}
12481248
12491249
@@ -1275,13 +1275,12 @@ def AM3OffsetAsmOperand : AsmOperandClass {
12751275 let Name = "AM3Offset";
12761276 let ParserMethod = "parseAM3Offset";
12771277}
1278- def am3offset : MemOperand,
1279- ComplexPattern<i32, 2, "SelectAddrMode3Offset",
1280- [], [SDNPWantRoot]> {
1278+ def am3offset : MemOperand, ComplexPattern<i32, 2, "SelectAddrMode3Offset"> {
12811279 let EncoderMethod = "getAddrMode3OffsetOpValue";
12821280 let PrintMethod = "printAddrMode3OffsetOperand";
12831281 let ParserMatchClass = AM3OffsetAsmOperand;
12841282 let MIOperandInfo = (ops GPR, i32imm);
1283+ let WantsRoot = true;
12851284}
12861285
12871286// ldstm_mode := {ia, ib, da, db}
@@ -1328,40 +1327,39 @@ def addrmode5fp16 : AddrMode5FP16 {
13281327// addrmode6 := reg with optional alignment
13291328//
13301329def AddrMode6AsmOperand : AsmOperandClass { let Name = "AlignedMemory"; }
1331- def addrmode6 : MemOperand,
1332- ComplexPattern<i32, 2, "SelectAddrMode6", [], [SDNPWantParent]>{
1330+ def addrmode6 : MemOperand, ComplexPattern<i32, 2, "SelectAddrMode6"> {
13331331 let PrintMethod = "printAddrMode6Operand";
13341332 let MIOperandInfo = (ops GPR:$addr, i32imm:$align);
13351333 let EncoderMethod = "getAddrMode6AddressOpValue";
13361334 let DecoderMethod = "DecodeAddrMode6Operand";
13371335 let ParserMatchClass = AddrMode6AsmOperand;
1336+ let WantsParent = true;
13381337}
13391338
1340- def am6offset : MemOperand,
1341- ComplexPattern<i32, 1, "SelectAddrMode6Offset",
1342- [], [SDNPWantRoot]> {
1339+ def am6offset : MemOperand, ComplexPattern<i32, 1, "SelectAddrMode6Offset"> {
13431340 let PrintMethod = "printAddrMode6OffsetOperand";
13441341 let MIOperandInfo = (ops GPR);
13451342 let EncoderMethod = "getAddrMode6OffsetOpValue";
13461343 let DecoderMethod = "DecodeGPRRegisterClass";
1344+ let WantsRoot = true;
13471345}
13481346
13491347// Special version of addrmode6 to handle alignment encoding for VST1/VLD1
13501348// (single element from one lane) for size 32.
1351- def addrmode6oneL32 : MemOperand,
1352- ComplexPattern<i32, 2, "SelectAddrMode6", [], [SDNPWantParent]>{
1349+ def addrmode6oneL32 : MemOperand, ComplexPattern<i32, 2, "SelectAddrMode6"> {
13531350 let PrintMethod = "printAddrMode6Operand";
13541351 let MIOperandInfo = (ops GPR:$addr, i32imm);
13551352 let EncoderMethod = "getAddrMode6OneLane32AddressOpValue";
1353+ let WantsParent = true;
13561354}
13571355
13581356// Base class for addrmode6 with specific alignment restrictions.
1359- class AddrMode6Align : MemOperand,
1360- ComplexPattern<i32, 2, "SelectAddrMode6", [], [SDNPWantParent]>{
1357+ class AddrMode6Align : MemOperand, ComplexPattern<i32, 2, "SelectAddrMode6"> {
13611358 let PrintMethod = "printAddrMode6Operand";
13621359 let MIOperandInfo = (ops GPR:$addr, i32imm:$align);
13631360 let EncoderMethod = "getAddrMode6AddressOpValue";
13641361 let DecoderMethod = "DecodeAddrMode6Operand";
1362+ let WantsParent = true;
13651363}
13661364
13671365// Special version of addrmode6 to handle no allowed alignment encoding for
@@ -1432,22 +1430,23 @@ def addrmode6align64or128or256 : AddrMode6Align {
14321430
14331431// Special version of addrmode6 to handle alignment encoding for VLD-dup
14341432// instructions, specifically VLD4-dup.
1435- def addrmode6dup : MemOperand,
1436- ComplexPattern<i32, 2, "SelectAddrMode6", [], [SDNPWantParent]>{
1433+ def addrmode6dup : MemOperand, ComplexPattern<i32, 2, "SelectAddrMode6"> {
14371434 let PrintMethod = "printAddrMode6Operand";
14381435 let MIOperandInfo = (ops GPR:$addr, i32imm);
14391436 let EncoderMethod = "getAddrMode6DupAddressOpValue";
14401437 // FIXME: This is close, but not quite right. The alignment specifier is
14411438 // different.
14421439 let ParserMatchClass = AddrMode6AsmOperand;
1440+ let WantsParent = true;
14431441}
14441442
14451443// Base class for addrmode6dup with specific alignment restrictions.
14461444class AddrMode6DupAlign : MemOperand,
1447- ComplexPattern<i32, 2, "SelectAddrMode6", [], [SDNPWantParent]> {
1445+ ComplexPattern<i32, 2, "SelectAddrMode6"> {
14481446 let PrintMethod = "printAddrMode6Operand";
14491447 let MIOperandInfo = (ops GPR:$addr, i32imm);
14501448 let EncoderMethod = "getAddrMode6DupAddressOpValue";
1449+ let WantsParent = true;
14511450}
14521451
14531452// Special version of addrmode6 to handle no allowed alignment encoding for
0 commit comments