Skip to content

Commit 6829f30

Browse files
authored
[RISCV] Add a default common assignment of Inst{6-2} to the RVInst16CI base class. NFC (llvm#122377)
Many instructions assign all or a subset of Inst{6-2} to Imm{4-0}. Make this the default. Subsets of Inst{6-2} can be overridden as needed by derived classes/records which we already do with Inst{12} in a few places.
1 parent a4472c7 commit 6829f30

File tree

2 files changed

+7
-24
lines changed

2 files changed

+7
-24
lines changed

llvm/lib/Target/RISCV/RISCVInstrFormatsC.td

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ class RVInst16CR<bits<4> funct4, bits<2> opcode, dag outs, dag ins,
3636

3737
// The immediate value encoding differs for each instruction, so each subclass
3838
// is responsible for setting the appropriate bits in the Inst field.
39-
// The bits Inst{6-2} must be set for each instruction.
39+
// The bits Inst{12} and Inst{6-2} may need to be set differently for some
40+
// instructions.
4041
class RVInst16CI<bits<3> funct3, bits<2> opcode, dag outs, dag ins,
4142
string opcodestr, string argstr>
4243
: RVInst16<outs, ins, opcodestr, argstr, [], InstFormatCI> {
@@ -46,6 +47,7 @@ class RVInst16CI<bits<3> funct3, bits<2> opcode, dag outs, dag ins,
4647
let Inst{15-13} = funct3;
4748
let Inst{12} = imm{5};
4849
let Inst{11-7} = rd;
50+
let Inst{6-2} = imm{4-0};
4951
let Inst{1-0} = opcode;
5052
}
5153

llvm/lib/Target/RISCV/RISCVInstrInfoC.td

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,6 @@ def C_NOP : RVInst16CI<0b000, 0b01, (outs), (ins), "c.nop", "">,
400400
Sched<[WriteNop]> {
401401
let rd = 0;
402402
let imm = 0;
403-
let Inst{6-2} = 0;
404403
}
405404

406405
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
@@ -409,7 +408,6 @@ def C_ADDI : RVInst16CI<0b000, 0b01, (outs GPRNoX0:$rd_wb),
409408
"c.addi", "$rd, $imm">,
410409
Sched<[WriteIALU, ReadIALU]> {
411410
let Constraints = "$rd = $rd_wb";
412-
let Inst{6-2} = imm{4-0};
413411
}
414412

415413
// Alternate syntax for c.nop. Converted to C_NOP by the assembler.
@@ -431,15 +429,12 @@ def C_ADDIW : RVInst16CI<0b001, 0b01, (outs GPRNoX0:$rd_wb),
431429
"c.addiw", "$rd, $imm">,
432430
Sched<[WriteIALU32, ReadIALU32]> {
433431
let Constraints = "$rd = $rd_wb";
434-
let Inst{6-2} = imm{4-0};
435432
}
436433

437434
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
438435
def C_LI : RVInst16CI<0b010, 0b01, (outs GPRNoX0:$rd), (ins simm6:$imm),
439436
"c.li", "$rd, $imm">,
440-
Sched<[WriteIALU]> {
441-
let Inst{6-2} = imm{4-0};
442-
}
437+
Sched<[WriteIALU]>;
443438

444439
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
445440
def C_ADDI16SP : RVInst16CI<0b011, 0b01, (outs SP:$rd_wb),
@@ -459,9 +454,7 @@ let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
459454
def C_LUI : RVInst16CI<0b011, 0b01, (outs GPRNoX0X2:$rd),
460455
(ins c_lui_imm:$imm),
461456
"c.lui", "$rd, $imm">,
462-
Sched<[WriteIALU]> {
463-
let Inst{6-2} = imm{4-0};
464-
}
457+
Sched<[WriteIALU]>;
465458

466459
def C_SRLI : Shift_right<0b00, "c.srli">,
467460
Sched<[WriteShiftImm, ReadShiftImm]>;
@@ -511,41 +504,35 @@ def C_SLLI : RVInst16CI<0b000, 0b10, (outs GPRNoX0:$rd_wb),
511504
"c.slli", "$rd, $imm">,
512505
Sched<[WriteShiftImm, ReadShiftImm]> {
513506
let Constraints = "$rd = $rd_wb";
514-
let Inst{6-2} = imm{4-0};
515507
}
516508

517509
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
518510
def C_FLDSP : CStackLoad<0b001, "c.fldsp", FPR64, uimm9_lsb000>,
519511
Sched<[WriteFLD64, ReadFMemBase]> {
520-
let Inst{6-5} = imm{4-3};
521512
let Inst{4-2} = imm{8-6};
522513
}
523514

524515
def C_LWSP : CStackLoad<0b010, "c.lwsp", GPRNoX0, uimm8_lsb00>,
525516
Sched<[WriteLDW, ReadMemBase]> {
526-
let Inst{6-4} = imm{4-2};
527517
let Inst{3-2} = imm{7-6};
528518
}
529519

530520
let isCodeGenOnly = 1 in
531521
def C_LWSP_INX : CStackLoad<0b010, "c.lwsp", GPRF32NoX0, uimm8_lsb00>,
532522
Sched<[WriteLDW, ReadMemBase]> {
533-
let Inst{6-4} = imm{4-2};
534523
let Inst{3-2} = imm{7-6};
535524
}
536525

537526
let DecoderNamespace = "RISCV32Only_",
538527
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
539528
def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
540529
Sched<[WriteFLD32, ReadFMemBase]> {
541-
let Inst{6-4} = imm{4-2};
542530
let Inst{3-2} = imm{7-6};
543531
}
544532

545533
let Predicates = [HasStdExtCOrZca, IsRV64] in
546534
def C_LDSP : CStackLoad<0b011, "c.ldsp", GPRNoX0, uimm9_lsb000>,
547535
Sched<[WriteLDD, ReadMemBase]> {
548-
let Inst{6-5} = imm{4-3};
549536
let Inst{4-2} = imm{8-6};
550537
}
551538

@@ -634,23 +621,20 @@ let Predicates = [HasStdExtCOrZca, HasRVCHints], hasSideEffects = 0, mayLoad = 0
634621
def C_NOP_HINT : RVInst16CI<0b000, 0b01, (outs), (ins simm6nonzero:$imm),
635622
"c.nop", "$imm">, Sched<[WriteNop]> {
636623
let rd = 0;
637-
let Inst{6-2} = imm{4-0};
638624
}
639625

640626
def C_ADDI_HINT_IMM_ZERO : RVInst16CI<0b000, 0b01, (outs GPRNoX0:$rd_wb),
641627
(ins GPRNoX0:$rd, immzero:$imm),
642628
"c.addi", "$rd, $imm">,
643629
Sched<[WriteIALU, ReadIALU]> {
644630
let Constraints = "$rd = $rd_wb";
645-
let Inst{12} = 0;
646-
let Inst{6-2} = 0;
631+
let imm = 0;
647632
let DecoderMethod = "decodeRVCInstrRdRs1ImmZero";
648633
}
649634

650635
def C_LI_HINT : RVInst16CI<0b010, 0b01, (outs GPRX0:$rd), (ins simm6:$imm),
651636
"c.li", "$rd, $imm">,
652637
Sched<[WriteIALU]> {
653-
let Inst{6-2} = imm{4-0};
654638
let Inst{11-7} = 0;
655639
let DecoderMethod = "decodeRVCInstrRdSImm";
656640
}
@@ -659,7 +643,6 @@ def C_LUI_HINT : RVInst16CI<0b011, 0b01, (outs GPRX0:$rd),
659643
(ins c_lui_imm:$imm),
660644
"c.lui", "$rd, $imm">,
661645
Sched<[WriteIALU]> {
662-
let Inst{6-2} = imm{4-0};
663646
let Inst{11-7} = 0;
664647
let DecoderMethod = "decodeRVCInstrRdSImm";
665648
}
@@ -684,7 +667,6 @@ def C_SLLI_HINT : RVInst16CI<0b000, 0b10, (outs GPRX0:$rd_wb),
684667
"c.slli", "$rd, $imm">,
685668
Sched<[WriteShiftImm, ReadShiftImm]> {
686669
let Constraints = "$rd = $rd_wb";
687-
let Inst{6-2} = imm{4-0};
688670
let Inst{11-7} = 0;
689671
let DecoderMethod = "decodeRVCInstrRdRs1UImm";
690672
}
@@ -693,8 +675,7 @@ def C_SLLI64_HINT : RVInst16CI<0b000, 0b10, (outs GPR:$rd_wb), (ins GPR:$rd),
693675
"c.slli64", "$rd">,
694676
Sched<[WriteShiftImm, ReadShiftImm]> {
695677
let Constraints = "$rd = $rd_wb";
696-
let Inst{6-2} = 0;
697-
let Inst{12} = 0;
678+
let imm = 0;
698679
}
699680

700681
def C_SRLI64_HINT : RVInst16CB<0b100, 0b01, (outs GPRC:$rd),

0 commit comments

Comments
 (0)