@@ -2328,6 +2328,12 @@ class AsmCondBranchRI<string mnemonic, bits<12> opcode>
23282328 : InstRIc<opcode, (outs), (ins imm32zx4:$M1, brtarget16:$RI2),
23292329 mnemonic#"\t$M1, $RI2", []>;
23302330
2331+ class NeverCondBranchRI<string mnemonic, bits<12> opcode>
2332+ : InstRIc<opcode, (outs), (ins brtarget16:$RI2),
2333+ mnemonic#"\t$RI2", []> {
2334+ let M1 = 0;
2335+ }
2336+
23312337class FixedCondBranchRI<CondVariant V, string mnemonic, bits<12> opcode,
23322338 SDPatternOperator operator = null_frag>
23332339 : InstRIc<opcode, (outs), (ins brtarget16:$RI2),
@@ -2347,6 +2353,12 @@ class AsmCondBranchRIL<string mnemonic, bits<12> opcode>
23472353 : InstRILc<opcode, (outs), (ins imm32zx4:$M1, brtarget32:$RI2),
23482354 mnemonic#"\t$M1, $RI2", []>;
23492355
2356+ class NeverCondBranchRIL<string mnemonic, bits<12> opcode>
2357+ : InstRILc<opcode, (outs), (ins brtarget32:$RI2),
2358+ mnemonic#"\t$RI2", []> {
2359+ let M1 = 0;
2360+ }
2361+
23502362class FixedCondBranchRIL<CondVariant V, string mnemonic, bits<12> opcode>
23512363 : InstRILc<opcode, (outs), (ins brtarget32:$RI2),
23522364 !subst("#", V.suffix, mnemonic)#"\t$RI2", []> {
@@ -2365,10 +2377,16 @@ class AsmCondBranchRR<string mnemonic, bits<8> opcode>
23652377 : InstRR<opcode, (outs), (ins imm32zx4:$R1, GR64:$R2),
23662378 mnemonic#"\t$R1, $R2", []>;
23672379
2368- class NeverCondBranchRR<string mnemonic, bits<8> opcode>
2369- : InstRR<opcode, (outs), (ins GR64:$R2),
2370- mnemonic#"\t$R2", []> {
2371- let R1 = 0;
2380+ multiclass NeverCondBranchRR<string mnemonic, bits<8> opcode> {
2381+ // For the no-op (always false) branch, the target is optional.
2382+ def "" : InstRR<opcode, (outs), (ins GR64:$R2),
2383+ mnemonic#"\t$R2", []> {
2384+ let R1 = 0;
2385+ }
2386+ def Opt : InstRR<opcode, (outs), (ins), mnemonic, []> {
2387+ let R1 = 0;
2388+ let R2 = 0;
2389+ }
23722390}
23732391
23742392class FixedCondBranchRR<CondVariant V, string mnemonic, bits<8> opcode,
@@ -2392,11 +2410,19 @@ class AsmCondBranchRX<string mnemonic, bits<8> opcode>
23922410 (ins imm32zx4:$M1, (bdxaddr12only $B2, $D2, $X2):$XBD2),
23932411 mnemonic#"\t$M1, $XBD2", []>;
23942412
2395- class NeverCondBranchRX<string mnemonic, bits<8> opcode>
2396- : InstRXb<opcode, (outs),
2397- (ins (bdxaddr12only $B2, $D2, $X2):$XBD2),
2398- mnemonic#"\t$XBD2", []> {
2399- let M1 = 0;
2413+ multiclass NeverCondBranchRX<string mnemonic, bits<8> opcode> {
2414+ // For the no-op (always false) branch, the target is optional.
2415+ def "" : InstRXb<opcode, (outs),
2416+ (ins (bdxaddr12only $B2, $D2, $X2):$XBD2),
2417+ mnemonic#"\t$XBD2", []> {
2418+ let M1 = 0;
2419+ }
2420+ def Opt : InstRXb<opcode, (outs), (ins), mnemonic, []> {
2421+ let M1 = 0;
2422+ let B2 = 0;
2423+ let D2 = 0;
2424+ let X2 = 0;
2425+ }
24002426}
24012427
24022428class FixedCondBranchRX<CondVariant V, string mnemonic, bits<8> opcode>
0 commit comments