@@ -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;
@@ -5488,6 +5498,7 @@ class V8_1MI<dag oops, dag iops, AddrMode am, InstrItinClass itin, string asm,
54885498def t2CLRM : V8_1MI<(outs),
54895499 (ins pred:$p, reglist_with_apsr:$regs, variable_ops),
54905500 AddrModeNone, NoItinerary, "clrm${p}", "$regs", "", []> {
5501+ bits<0> p;
54915502 bits<16> regs;
54925503
54935504 let Inst{31-16} = 0b1110100010011111;
@@ -5516,6 +5527,7 @@ def t2BF_LabelPseudo
55165527
55175528def t2BFi : t2BF<(ins bflabel_u4:$b_label, bflabel_s16:$label, pred:$p),
55185529 !strconcat("bf", "${p}"), "$b_label, $label"> {
5530+ bits<0> p;
55195531 bits<4> b_label;
55205532 bits<16> label;
55215533
@@ -5547,6 +5559,7 @@ def t2BFic : t2BF<(ins bflabel_u4:$b_label, bflabel_s12:$label,
55475559
55485560def t2BFr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55495561 !strconcat("bfx", "${p}"), "$b_label, $Rn"> {
5562+ bits<0> p;
55505563 bits<4> b_label;
55515564 bits<4> Rn;
55525565
@@ -5558,6 +5571,7 @@ def t2BFr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55585571
55595572def t2BFLi : t2BF<(ins bflabel_u4:$b_label, bflabel_s18:$label, pred:$p),
55605573 !strconcat("bfl", "${p}"), "$b_label, $label"> {
5574+ bits<0> p;
55615575 bits<4> b_label;
55625576 bits<18> label;
55635577
@@ -5570,6 +5584,7 @@ def t2BFLi : t2BF<(ins bflabel_u4:$b_label, bflabel_s18:$label, pred:$p),
55705584
55715585def t2BFLr : t2BF<(ins bflabel_u4:$b_label, rGPR:$Rn, pred:$p),
55725586 !strconcat("bflx", "${p}"), "$b_label, $Rn"> {
5587+ bits<0> p;
55735588 bits<4> b_label;
55745589 bits<4> Rn;
55755590
@@ -5810,6 +5825,7 @@ let Predicates = [IsThumb2, HasV8_1MMainline, HasPACBTI] in {
58105825def t2PACG : V8_1MI<(outs rGPR:$Rd),
58115826 (ins pred:$p, GPRnopc:$Rn, GPRnopc:$Rm),
58125827 AddrModeNone, NoItinerary, "pacg${p}", "$Rd, $Rn, $Rm", "", []> {
5828+ bits<0> p;
58135829 bits<4> Rd;
58145830 bits<4> Rn;
58155831 bits<4> Rm;
@@ -5825,6 +5841,7 @@ let hasSideEffects = 1 in {
58255841class PACBTIAut<dag iops, string asm, bit b>
58265842 : V8_1MI<(outs), iops,
58275843 AddrModeNone, NoItinerary, asm, "$Ra, $Rn, $Rm", "", []> {
5844+ bits<0> p;
58285845 bits<4> Ra;
58295846 bits<4> Rn;
58305847 bits<4> Rm;
0 commit comments