@@ -2059,6 +2059,7 @@ multiclass thumb2_ld_mult<string asm, InstrItinClass itin,
20592059 def IA :
20602060 T2XI<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
20612061 itin, !strconcat(asm, "${p}.w\t$Rn, $regs"), []> {
2062+ bits<0> p;
20622063 bits<4> Rn;
20632064 bits<16> regs;
20642065
@@ -2074,6 +2075,7 @@ multiclass thumb2_ld_mult<string asm, InstrItinClass itin,
20742075 def IA_UPD :
20752076 T2XIt<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
20762077 itin_upd, !strconcat(asm, "${p}.w\t$Rn!, $regs"), "$Rn = $wb", []> {
2078+ bits<0> p;
20772079 bits<4> Rn;
20782080 bits<16> regs;
20792081
@@ -2089,6 +2091,7 @@ multiclass thumb2_ld_mult<string asm, InstrItinClass itin,
20892091 def DB :
20902092 T2XI<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
20912093 itin, !strconcat(asm, "db${p}\t$Rn, $regs"), []> {
2094+ bits<0> p;
20922095 bits<4> Rn;
20932096 bits<16> regs;
20942097
@@ -2104,6 +2107,7 @@ multiclass thumb2_ld_mult<string asm, InstrItinClass itin,
21042107 def DB_UPD :
21052108 T2XIt<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
21062109 itin_upd, !strconcat(asm, "db${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
2110+ bits<0> p;
21072111 bits<4> Rn;
21082112 bits<16> regs;
21092113
@@ -2128,6 +2132,7 @@ multiclass thumb2_st_mult<string asm, InstrItinClass itin,
21282132 def IA :
21292133 T2XI<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
21302134 itin, !strconcat(asm, "${p}.w\t$Rn, $regs"), []> {
2135+ bits<0> p;
21312136 bits<4> Rn;
21322137 bits<16> regs;
21332138
@@ -2146,6 +2151,7 @@ multiclass thumb2_st_mult<string asm, InstrItinClass itin,
21462151 def IA_UPD :
21472152 T2XIt<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
21482153 itin_upd, !strconcat(asm, "${p}.w\t$Rn!, $regs"), "$Rn = $wb", []> {
2154+ bits<0> p;
21492155 bits<4> Rn;
21502156 bits<16> regs;
21512157
@@ -2164,6 +2170,7 @@ multiclass thumb2_st_mult<string asm, InstrItinClass itin,
21642170 def DB :
21652171 T2XI<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
21662172 itin, !strconcat(asm, "db${p}\t$Rn, $regs"), []> {
2173+ bits<0> p;
21672174 bits<4> Rn;
21682175 bits<16> regs;
21692176
@@ -2182,6 +2189,7 @@ multiclass thumb2_st_mult<string asm, InstrItinClass itin,
21822189 def DB_UPD :
21832190 T2XIt<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
21842191 itin_upd, !strconcat(asm, "db${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
2192+ bits<0> p;
21852193 bits<4> Rn;
21862194 bits<16> regs;
21872195
@@ -4030,9 +4038,11 @@ def t2TBH : T2I<(outs), (ins (addrmode_tbh $Rn, $Rm):$addr), IIC_Br,
40304038// FIXME: should be able to write a pattern for ARMBrcond, but can't use
40314039// a two-value operand where a dag node expects ", "two operands. :(
40324040let isBranch = 1, isTerminator = 1 in
4033- def t2Bcc : T2I<(outs), (ins brtarget:$target), IIC_Br,
4034- "b", ".w\t$target",
4035- [/*(ARMbrcond bb:$target, imm:$cc)*/]>, Sched<[WriteBr]> {
4041+ def t2Bcc : Thumb2XI<(outs), (ins brtarget:$target, pred:$p),
4042+ AddrModeNone, 4, IIC_Br,
4043+ "b${p}.w\t$target", "",
4044+ [/*(ARMbrcond bb:$target, imm:$cc)*/]>,
4045+ Sched<[WriteBr]> {
40364046 let Inst{31-27} = 0b11110;
40374047 let Inst{15-14} = 0b10;
40384048 let Inst{12} = 0;
@@ -5481,6 +5491,7 @@ class V8_1MI<dag oops, dag iops, AddrMode am, InstrItinClass itin, string asm,
54815491def t2CLRM : V8_1MI<(outs),
54825492 (ins pred:$p, reglist_with_apsr:$regs, variable_ops),
54835493 AddrModeNone, NoItinerary, "clrm${p}", "$regs", "", []> {
5494+ bits<0> p;
54845495 bits<16> regs;
54855496
54865497 let Inst{31-16} = 0b1110100010011111;
@@ -5509,6 +5520,7 @@ def t2BF_LabelPseudo
55095520
55105521def t2BFi : t2BF<(ins bflabel_u4:$b_label, bflabel_s16:$label, pred:$p),
55115522 !strconcat("bf", "${p}"), "$b_label, $label"> {
5523+ bits<0> p;
55125524 bits<4> b_label;
55135525 bits<16> label;
55145526
@@ -5540,6 +5552,7 @@ def t2BFic : t2BF<(ins bflabel_u4:$b_label, bflabel_s12:$label,
55405552
55415553def t2BFr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55425554 !strconcat("bfx", "${p}"), "$b_label, $Rn"> {
5555+ bits<0> p;
55435556 bits<4> b_label;
55445557 bits<4> Rn;
55455558
@@ -5551,6 +5564,7 @@ def t2BFr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55515564
55525565def t2BFLi : t2BF<(ins bflabel_u4:$b_label, bflabel_s18:$label, pred:$p),
55535566 !strconcat("bfl", "${p}"), "$b_label, $label"> {
5567+ bits<0> p;
55545568 bits<4> b_label;
55555569 bits<18> label;
55565570
@@ -5563,6 +5577,7 @@ def t2BFLi : t2BF<(ins bflabel_u4:$b_label, bflabel_s18:$label, pred:$p),
55635577
55645578def t2BFLr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55655579 !strconcat("bflx", "${p}"), "$b_label, $Rn"> {
5580+ bits<0> p;
55665581 bits<4> b_label;
55675582 bits<4> Rn;
55685583
@@ -5803,6 +5818,7 @@ let Predicates = [IsThumb2, HasV8_1MMainline, HasPACBTI] in {
58035818def t2PACG : V8_1MI<(outs rGPR:$Rd),
58045819 (ins pred:$p, GPRnopc:$Rn, GPRnopc:$Rm),
58055820 AddrModeNone, NoItinerary, "pacg${p}", "$Rd, $Rn, $Rm", "", []> {
5821+ bits<0> p;
58065822 bits<4> Rd;
58075823 bits<4> Rn;
58085824 bits<4> Rm;
@@ -5818,6 +5834,7 @@ let hasSideEffects = 1 in {
58185834class PACBTIAut<dag iops, string asm, bit b>
58195835 : V8_1MI<(outs), iops,
58205836 AddrModeNone, NoItinerary, asm, "$Ra, $Rn, $Rm", "", []> {
5837+ bits<0> p;
58215838 bits<4> Ra;
58225839 bits<4> Rn;
58235840 bits<4> Rm;
0 commit comments