Skip to content

Commit 640dc21

Browse files
authored
[RISCV] Group Zcf and Zcd instructions and CompressPats together. NFC (#155555)
Instead of repeatedly changing Predicates for each instruction.
1 parent f005e2c commit 640dc21

File tree

1 file changed

+89
-103
lines changed

1 file changed

+89
-103
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoC.td

Lines changed: 89 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -301,14 +301,6 @@ def C_ADDI4SPN : RVInst16CIW<0b000, 0b00, (outs GPRC:$rd),
301301
let Inst{5} = imm{3};
302302
}
303303

304-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
305-
def C_FLD : CLoad_ri<0b001, "c.fld", FPR64C, uimm8_lsb000>,
306-
Sched<[WriteFLD64, ReadFMemBase]> {
307-
bits<8> imm;
308-
let Inst{12-10} = imm{5-3};
309-
let Inst{6-5} = imm{7-6};
310-
}
311-
312304
def C_LW : CLoad_ri<0b010, "c.lw", GPRC, uimm7_lsb00>,
313305
Sched<[WriteLDW, ReadMemBase]> {
314306
bits<7> imm;
@@ -326,16 +318,6 @@ def C_LW_INX : CLoad_ri<0b010, "c.lw", GPRF32C, uimm7_lsb00>,
326318
let Inst{5} = imm{6};
327319
}
328320

329-
let DecoderNamespace = "RV32Only",
330-
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
331-
def C_FLW : CLoad_ri<0b011, "c.flw", FPR32C, uimm7_lsb00>,
332-
Sched<[WriteFLD32, ReadFMemBase]> {
333-
bits<7> imm;
334-
let Inst{12-10} = imm{5-3};
335-
let Inst{6} = imm{2};
336-
let Inst{5} = imm{6};
337-
}
338-
339321
let Predicates = [HasStdExtZca, IsRV64] in
340322
def C_LD : CLoad_ri<0b011, "c.ld", GPRC, uimm8_lsb000>,
341323
Sched<[WriteLDD, ReadMemBase]> {
@@ -344,14 +326,6 @@ def C_LD : CLoad_ri<0b011, "c.ld", GPRC, uimm8_lsb000>,
344326
let Inst{6-5} = imm{7-6};
345327
}
346328

347-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
348-
def C_FSD : CStore_rri<0b101, "c.fsd", FPR64C, uimm8_lsb000>,
349-
Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
350-
bits<8> imm;
351-
let Inst{12-10} = imm{5-3};
352-
let Inst{6-5} = imm{7-6};
353-
}
354-
355329
def C_SW : CStore_rri<0b110, "c.sw", GPRC, uimm7_lsb00>,
356330
Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
357331
bits<7> imm;
@@ -369,16 +343,6 @@ def C_SW_INX : CStore_rri<0b110, "c.sw", GPRF32C, uimm7_lsb00>,
369343
let Inst{5} = imm{6};
370344
}
371345

372-
let DecoderNamespace = "RV32Only",
373-
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
374-
def C_FSW : CStore_rri<0b111, "c.fsw", FPR32C, uimm7_lsb00>,
375-
Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
376-
bits<7> imm;
377-
let Inst{12-10} = imm{5-3};
378-
let Inst{6} = imm{2};
379-
let Inst{5} = imm{6};
380-
}
381-
382346
let Predicates = [HasStdExtZca, IsRV64] in
383347
def C_SD : CStore_rri<0b111, "c.sd", GPRC, uimm8_lsb000>,
384348
Sched<[WriteSTD, ReadStoreData, ReadMemBase]> {
@@ -500,12 +464,6 @@ def C_SLLI : RVInst16CI<0b000, 0b10, (outs GPR:$rd_wb),
500464
let Constraints = "$rd = $rd_wb";
501465
}
502466

503-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
504-
def C_FLDSP : CStackLoad<0b001, "c.fldsp", FPR64, uimm9_lsb000>,
505-
Sched<[WriteFLD64, ReadFMemBase]> {
506-
let Inst{4-2} = imm{8-6};
507-
}
508-
509467
def C_LWSP : CStackLoad<0b010, "c.lwsp", GPRNoX0, uimm8_lsb00>,
510468
Sched<[WriteLDW, ReadMemBase]> {
511469
let Inst{3-2} = imm{7-6};
@@ -517,13 +475,6 @@ def C_LWSP_INX : CStackLoad<0b010, "c.lwsp", GPRF32NoX0, uimm8_lsb00>,
517475
let Inst{3-2} = imm{7-6};
518476
}
519477

520-
let DecoderNamespace = "RV32Only",
521-
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
522-
def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
523-
Sched<[WriteFLD32, ReadFMemBase]> {
524-
let Inst{3-2} = imm{7-6};
525-
}
526-
527478
let Predicates = [HasStdExtZca, IsRV64] in
528479
def C_LDSP : CStackLoad<0b011, "c.ldsp", GPRNoX0, uimm9_lsb000>,
529480
Sched<[WriteLDD, ReadMemBase]> {
@@ -560,12 +511,6 @@ def C_ADD : RVInst16CR<0b1001, 0b10, (outs GPR:$rd),
560511
let Constraints = "$rs1 = $rd";
561512
}
562513

563-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
564-
def C_FSDSP : CStackStore<0b101, "c.fsdsp", FPR64, uimm9_lsb000>,
565-
Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
566-
let Inst{9-7} = imm{8-6};
567-
}
568-
569514
def C_SWSP : CStackStore<0b110, "c.swsp", GPR, uimm8_lsb00>,
570515
Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
571516
let Inst{8-7} = imm{7-6};
@@ -577,13 +522,6 @@ def C_SWSP_INX : CStackStore<0b110, "c.swsp", GPRF32, uimm8_lsb00>,
577522
let Inst{8-7} = imm{7-6};
578523
}
579524

580-
let DecoderNamespace = "RV32Only",
581-
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
582-
def C_FSWSP : CStackStore<0b111, "c.fswsp", FPR32, uimm8_lsb00>,
583-
Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
584-
let Inst{8-7} = imm{7-6};
585-
}
586-
587525
let Predicates = [HasStdExtZca, IsRV64] in
588526
def C_SDSP : CStackStore<0b111, "c.sdsp", GPR, uimm9_lsb000>,
589527
Sched<[WriteSTD, ReadStoreData, ReadMemBase]> {
@@ -600,6 +538,61 @@ def C_UNIMP : RVInst16<(outs), (ins), "c.unimp", "", [], InstFormatOther>,
600538

601539
} // Predicates = [HasStdExtZca]
602540

541+
let DecoderNamespace = "RV32Only",
542+
Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
543+
def C_FLW : CLoad_ri<0b011, "c.flw", FPR32C, uimm7_lsb00>,
544+
Sched<[WriteFLD32, ReadFMemBase]> {
545+
bits<7> imm;
546+
let Inst{12-10} = imm{5-3};
547+
let Inst{6} = imm{2};
548+
let Inst{5} = imm{6};
549+
}
550+
551+
def C_FSW : CStore_rri<0b111, "c.fsw", FPR32C, uimm7_lsb00>,
552+
Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
553+
bits<7> imm;
554+
let Inst{12-10} = imm{5-3};
555+
let Inst{6} = imm{2};
556+
let Inst{5} = imm{6};
557+
}
558+
559+
def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
560+
Sched<[WriteFLD32, ReadFMemBase]> {
561+
let Inst{3-2} = imm{7-6};
562+
}
563+
564+
def C_FSWSP : CStackStore<0b111, "c.fswsp", FPR32, uimm8_lsb00>,
565+
Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
566+
let Inst{8-7} = imm{7-6};
567+
}
568+
} // DecoderNamespace = "RV32Only", Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
569+
570+
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
571+
def C_FLD : CLoad_ri<0b001, "c.fld", FPR64C, uimm8_lsb000>,
572+
Sched<[WriteFLD64, ReadFMemBase]> {
573+
bits<8> imm;
574+
let Inst{12-10} = imm{5-3};
575+
let Inst{6-5} = imm{7-6};
576+
}
577+
578+
def C_FSD : CStore_rri<0b101, "c.fsd", FPR64C, uimm8_lsb000>,
579+
Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
580+
bits<8> imm;
581+
let Inst{12-10} = imm{5-3};
582+
let Inst{6-5} = imm{7-6};
583+
}
584+
585+
def C_FLDSP : CStackLoad<0b001, "c.fldsp", FPR64, uimm9_lsb000>,
586+
Sched<[WriteFLD64, ReadFMemBase]> {
587+
let Inst{4-2} = imm{8-6};
588+
}
589+
590+
def C_FSDSP : CStackStore<0b101, "c.fsdsp", FPR64, uimm9_lsb000>,
591+
Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
592+
let Inst{9-7} = imm{8-6};
593+
}
594+
} // Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
595+
603596
//===----------------------------------------------------------------------===//
604597
// HINT Instructions
605598
//===----------------------------------------------------------------------===//
@@ -767,20 +760,17 @@ def : InstAlias<".insn_cj $opcode, $funct3, $imm11",
767760
// Compress Instruction tablegen backend.
768761
//===----------------------------------------------------------------------===//
769762

770-
// Patterns are defined in the same order the compressed instructions appear
763+
// Zca patterns are defined in the same order the compressed instructions appear
771764
// under the "RVC Instruction Set Listings" section of the ISA manual.
772765

766+
// Zca Instructions
767+
773768
// Quadrant 0
774769
let Predicates = [HasStdExtZca] in {
775770
def : CompressPat<(ADDI GPRC:$rd, SP:$rs1, uimm10_lsb00nonzero:$imm),
776771
(C_ADDI4SPN GPRC:$rd, SP:$rs1, uimm10_lsb00nonzero:$imm)>;
777772
} // Predicates = [HasStdExtZca]
778773

779-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
780-
def : CompressPat<(FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
781-
(C_FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
782-
} // Predicates = [HasStdExtCOrZcd, HasStdExtD]
783-
784774
let Predicates = [HasStdExtZca] in {
785775
def : CompressPat<(LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
786776
(C_LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
@@ -790,21 +780,11 @@ def : CompressPat<(LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
790780
(C_LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
791781
} // Predicates = [HasStdExtZca]
792782

793-
let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
794-
def : CompressPat<(FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
795-
(C_FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
796-
} // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
797-
798783
let Predicates = [HasStdExtZca, IsRV64] in {
799784
def : CompressPat<(LD GPRC:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
800785
(C_LD GPRC:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
801786
} // Predicates = [HasStdExtZca, IsRV64]
802787

803-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
804-
def : CompressPat<(FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
805-
(C_FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
806-
} // Predicates = [HasStdExtCOrZcd, HasStdExtD]
807-
808788
let Predicates = [HasStdExtZca] in {
809789
def : CompressPat<(SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
810790
(C_SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
@@ -814,11 +794,6 @@ def : CompressPat<(SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
814794
(C_SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
815795
} // Predicates = [HasStdExtZca]
816796

817-
let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
818-
def : CompressPat<(FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
819-
(C_FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
820-
} // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
821-
822797
let Predicates = [HasStdExtZca, IsRV64] in {
823798
def : CompressPat<(SD GPRC:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
824799
(C_SD GPRC:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
@@ -907,11 +882,6 @@ def : CompressPat<(SLLI GPRNoX0:$rs1, GPRNoX0:$rs1, uimmlog2xlennonzero:$imm),
907882
(C_SLLI GPRNoX0:$rs1, uimmlog2xlennonzero:$imm)>;
908883
} // Predicates = [HasStdExtZca]
909884

910-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
911-
def : CompressPat<(FLD FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
912-
(C_FLDSP FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
913-
} // Predicates = [HasStdExtCOrZcd, HasStdExtD]
914-
915885
let Predicates = [HasStdExtZca] in {
916886
def : CompressPat<(LW GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
917887
(C_LWSP GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
@@ -921,11 +891,6 @@ def : CompressPat<(LW_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
921891
(C_LWSP_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
922892
} // Predicates = [HasStdExtZca]
923893

924-
let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
925-
def : CompressPat<(FLW FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
926-
(C_FLWSP FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
927-
} // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
928-
929894
let Predicates = [HasStdExtZca, IsRV64] in {
930895
def : CompressPat<(LD GPRNoX0:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
931896
(C_LDSP GPRNoX0:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
@@ -953,11 +918,6 @@ def : CompressPat<(ADD GPRNoX0:$rs1, GPRNoX0:$rs2, GPRNoX0:$rs1),
953918
(C_ADD GPRNoX0:$rs1, GPRNoX0:$rs2)>;
954919
} // Predicates = [HasStdExtZca]
955920

956-
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
957-
def : CompressPat<(FSD FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
958-
(C_FSDSP FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
959-
} // Predicates = [HasStdExtCOrZcd, HasStdExtD]
960-
961921
let Predicates = [HasStdExtZca] in {
962922
def : CompressPat<(SW GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
963923
(C_SWSP GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
@@ -967,12 +927,38 @@ def : CompressPat<(SW_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
967927
(C_SWSP_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
968928
} // Predicates = [HasStdExtZca]
969929

970-
let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
971-
def : CompressPat<(FSW FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
972-
(C_FSWSP FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
973-
} // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
974-
975930
let Predicates = [HasStdExtZca, IsRV64] in {
976931
def : CompressPat<(SD GPR:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
977932
(C_SDSP GPR:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
978933
} // Predicates = [HasStdExtZca, IsRV64]
934+
935+
// Zcf Instructions
936+
let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
937+
// Quadrant 0
938+
def : CompressPat<(FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
939+
(C_FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
940+
def : CompressPat<(FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
941+
(C_FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
942+
943+
// Quadrant 2
944+
def : CompressPat<(FLW FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
945+
(C_FLWSP FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
946+
def : CompressPat<(FSW FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
947+
(C_FSWSP FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
948+
} // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
949+
950+
// Zcd Instructions
951+
let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
952+
// Quadrant 0
953+
def : CompressPat<(FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
954+
(C_FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
955+
def : CompressPat<(FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
956+
(C_FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
957+
958+
// Quadrant 2
959+
def : CompressPat<(FLD FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
960+
(C_FLDSP FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
961+
def : CompressPat<(FSD FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
962+
(C_FSDSP FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
963+
} // Predicates = [HasStdExtCOrZcd, HasStdExtD]
964+

0 commit comments

Comments
 (0)