Skip to content

Commit 394455c

Browse files
committed
[RISCV] Add a default common assignment of Inst{6-2} to the RVInst16CI base class.
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 328c3a8 commit 394455c

File tree

2 files changed

+7
-24
lines changed

2 files changed

+7
-24
lines changed

llvm/lib/Target/RISCV/RISCVInstrFormatsC.td

+3-1
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

+4-23
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,6 @@ def C_NOP : RVInst16CI<0b000, 0b01, (outs), (ins), "c.nop", "">,
402402
Sched<[WriteNop]> {
403403
let rd = 0;
404404
let imm = 0;
405-
let Inst{6-2} = 0;
406405
}
407406

408407
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
@@ -411,7 +410,6 @@ def C_ADDI : RVInst16CI<0b000, 0b01, (outs GPRNoX0:$rd_wb),
411410
"c.addi", "$rd, $imm">,
412411
Sched<[WriteIALU, ReadIALU]> {
413412
let Constraints = "$rd = $rd_wb";
414-
let Inst{6-2} = imm{4-0};
415413
}
416414

417415
// Alternate syntax for c.nop. Converted to C_NOP by the assembler.
@@ -433,15 +431,12 @@ def C_ADDIW : RVInst16CI<0b001, 0b01, (outs GPRNoX0:$rd_wb),
433431
"c.addiw", "$rd, $imm">,
434432
Sched<[WriteIALU32, ReadIALU32]> {
435433
let Constraints = "$rd = $rd_wb";
436-
let Inst{6-2} = imm{4-0};
437434
}
438435

439436
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
440437
def C_LI : RVInst16CI<0b010, 0b01, (outs GPRNoX0:$rd), (ins simm6:$imm),
441438
"c.li", "$rd, $imm">,
442-
Sched<[WriteIALU]> {
443-
let Inst{6-2} = imm{4-0};
444-
}
439+
Sched<[WriteIALU]>;
445440

446441
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
447442
def C_ADDI16SP : RVInst16CI<0b011, 0b01, (outs SP:$rd_wb),
@@ -461,9 +456,7 @@ let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
461456
def C_LUI : RVInst16CI<0b011, 0b01, (outs GPRNoX0X2:$rd),
462457
(ins c_lui_imm:$imm),
463458
"c.lui", "$rd, $imm">,
464-
Sched<[WriteIALU]> {
465-
let Inst{6-2} = imm{4-0};
466-
}
459+
Sched<[WriteIALU]>;
467460

468461
def C_SRLI : Shift_right<0b00, "c.srli", GPRC, uimmlog2xlennonzero>,
469462
Sched<[WriteShiftImm, ReadShiftImm]>;
@@ -513,41 +506,35 @@ def C_SLLI : RVInst16CI<0b000, 0b10, (outs GPRNoX0:$rd_wb),
513506
"c.slli", "$rd, $imm">,
514507
Sched<[WriteShiftImm, ReadShiftImm]> {
515508
let Constraints = "$rd = $rd_wb";
516-
let Inst{6-2} = imm{4-0};
517509
}
518510

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

526517
def C_LWSP : CStackLoad<0b010, "c.lwsp", GPRNoX0, uimm8_lsb00>,
527518
Sched<[WriteLDW, ReadMemBase]> {
528-
let Inst{6-4} = imm{4-2};
529519
let Inst{3-2} = imm{7-6};
530520
}
531521

532522
let isCodeGenOnly = 1 in
533523
def C_LWSP_INX : CStackLoad<0b010, "c.lwsp", GPRF32NoX0, uimm8_lsb00>,
534524
Sched<[WriteLDW, ReadMemBase]> {
535-
let Inst{6-4} = imm{4-2};
536525
let Inst{3-2} = imm{7-6};
537526
}
538527

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

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

@@ -636,23 +623,20 @@ let Predicates = [HasStdExtCOrZca, HasRVCHints], hasSideEffects = 0, mayLoad = 0
636623
def C_NOP_HINT : RVInst16CI<0b000, 0b01, (outs), (ins simm6nonzero:$imm),
637624
"c.nop", "$imm">, Sched<[WriteNop]> {
638625
let rd = 0;
639-
let Inst{6-2} = imm{4-0};
640626
}
641627

642628
def C_ADDI_HINT_IMM_ZERO : RVInst16CI<0b000, 0b01, (outs GPRNoX0:$rd_wb),
643629
(ins GPRNoX0:$rd, immzero:$imm),
644630
"c.addi", "$rd, $imm">,
645631
Sched<[WriteIALU, ReadIALU]> {
646632
let Constraints = "$rd = $rd_wb";
647-
let Inst{12} = 0;
648-
let Inst{6-2} = 0;
633+
let imm = 0;
649634
let DecoderMethod = "decodeRVCInstrRdRs1ImmZero";
650635
}
651636

652637
def C_LI_HINT : RVInst16CI<0b010, 0b01, (outs GPRX0:$rd), (ins simm6:$imm),
653638
"c.li", "$rd, $imm">,
654639
Sched<[WriteIALU]> {
655-
let Inst{6-2} = imm{4-0};
656640
let Inst{11-7} = 0;
657641
let DecoderMethod = "decodeRVCInstrRdSImm";
658642
}
@@ -661,7 +645,6 @@ def C_LUI_HINT : RVInst16CI<0b011, 0b01, (outs GPRX0:$rd),
661645
(ins c_lui_imm:$imm),
662646
"c.lui", "$rd, $imm">,
663647
Sched<[WriteIALU]> {
664-
let Inst{6-2} = imm{4-0};
665648
let Inst{11-7} = 0;
666649
let DecoderMethod = "decodeRVCInstrRdSImm";
667650
}
@@ -686,7 +669,6 @@ def C_SLLI_HINT : RVInst16CI<0b000, 0b10, (outs GPRX0:$rd_wb),
686669
"c.slli", "$rd, $imm">,
687670
Sched<[WriteShiftImm, ReadShiftImm]> {
688671
let Constraints = "$rd = $rd_wb";
689-
let Inst{6-2} = imm{4-0};
690672
let Inst{11-7} = 0;
691673
let DecoderMethod = "decodeRVCInstrRdRs1UImm";
692674
}
@@ -695,8 +677,7 @@ def C_SLLI64_HINT : RVInst16CI<0b000, 0b10, (outs GPR:$rd_wb), (ins GPR:$rd),
695677
"c.slli64", "$rd">,
696678
Sched<[WriteShiftImm, ReadShiftImm]> {
697679
let Constraints = "$rd = $rd_wb";
698-
let Inst{6-2} = 0;
699-
let Inst{12} = 0;
680+
let imm = 0;
700681
}
701682

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

0 commit comments

Comments
 (0)