@@ -331,6 +331,15 @@ def C_LW : CLoad_ri<0b010, "c.lw", GPRC, uimm7_lsb00>,
331331 let Inst{5} = imm{6};
332332}
333333
334+ let isCodeGenOnly = 1 in
335+ def C_LW_INX : CLoad_ri<0b010, "c.lw", GPRF32C, uimm7_lsb00>,
336+ Sched<[WriteLDW, ReadMemBase]> {
337+ bits<7> imm;
338+ let Inst{12-10} = imm{5-3};
339+ let Inst{6} = imm{2};
340+ let Inst{5} = imm{6};
341+ }
342+
334343let DecoderNamespace = "RISCV32Only_",
335344 Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
336345def C_FLW : CLoad_ri<0b011, "c.flw", FPR32C, uimm7_lsb00>,
@@ -365,6 +374,15 @@ def C_SW : CStore_rri<0b110, "c.sw", GPRC, uimm7_lsb00>,
365374 let Inst{5} = imm{6};
366375}
367376
377+ let isCodeGenOnly = 1 in
378+ def C_SW_INX : CStore_rri<0b110, "c.sw", GPRF32C, uimm7_lsb00>,
379+ Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
380+ bits<7> imm;
381+ let Inst{12-10} = imm{5-3};
382+ let Inst{6} = imm{2};
383+ let Inst{5} = imm{6};
384+ }
385+
368386let DecoderNamespace = "RISCV32Only_",
369387 Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
370388def C_FSW : CStore_rri<0b111, "c.fsw", FPR32C, uimm7_lsb00>,
@@ -517,6 +535,13 @@ def C_LWSP : CStackLoad<0b010, "c.lwsp", GPRNoX0, uimm8_lsb00>,
517535 let Inst{3-2} = imm{7-6};
518536}
519537
538+ let isCodeGenOnly = 1 in
539+ def C_LWSP_INX : CStackLoad<0b010, "c.lwsp", GPRF32NoX0, uimm8_lsb00>,
540+ Sched<[WriteLDW, ReadMemBase]> {
541+ let Inst{6-4} = imm{4-2};
542+ let Inst{3-2} = imm{7-6};
543+ }
544+
520545let DecoderNamespace = "RISCV32Only_",
521546 Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
522547def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
@@ -575,6 +600,13 @@ def C_SWSP : CStackStore<0b110, "c.swsp", GPR, uimm8_lsb00>,
575600 let Inst{8-7} = imm{7-6};
576601}
577602
603+ let isCodeGenOnly = 1 in
604+ def C_SWSP_INX : CStackStore<0b110, "c.swsp", GPRF32, uimm8_lsb00>,
605+ Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
606+ let Inst{12-9} = imm{5-2};
607+ let Inst{8-7} = imm{7-6};
608+ }
609+
578610let DecoderNamespace = "RISCV32Only_",
579611 Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
580612def C_FSWSP : CStackStore<0b111, "c.fswsp", FPR32, uimm8_lsb00>,
@@ -869,6 +901,10 @@ def : CompressPat<(FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
869901let Predicates = [HasStdExtCOrZca] in {
870902def : CompressPat<(LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
871903 (C_LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
904+
905+ let isCompressOnly = true in
906+ def : CompressPat<(LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
907+ (C_LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
872908} // Predicates = [HasStdExtCOrZca]
873909
874910let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
@@ -889,6 +925,10 @@ def : CompressPat<(FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
889925let Predicates = [HasStdExtCOrZca] in {
890926def : CompressPat<(SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
891927 (C_SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
928+
929+ let isCompressOnly = true in
930+ def : CompressPat<(SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
931+ (C_SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
892932} // Predicates = [HasStdExtCOrZca]
893933
894934let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
@@ -992,6 +1032,10 @@ def : CompressPat<(FLD FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
9921032let Predicates = [HasStdExtCOrZca] in {
9931033def : CompressPat<(LW GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
9941034 (C_LWSP GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
1035+
1036+ let isCompressOnly = true in
1037+ def : CompressPat<(LW_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
1038+ (C_LWSP_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
9951039} // Predicates = [HasStdExtCOrZca]
9961040
9971041let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
@@ -1034,6 +1078,10 @@ def : CompressPat<(FSD FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
10341078let Predicates = [HasStdExtCOrZca] in {
10351079def : CompressPat<(SW GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
10361080 (C_SWSP GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
1081+
1082+ let isCompressOnly = true in
1083+ def : CompressPat<(SW_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
1084+ (C_SWSP_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
10371085} // Predicates = [HasStdExtCOrZca]
10381086
10391087let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
0 commit comments