Skip to content

Commit 404aa7b

Browse files
committed
fixup! Add compressed load/store CodeGenOnly instructions.
1 parent ae9fcd6 commit 404aa7b

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoZc.td

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@ class CLoadB_ri<bits<6> funct6, string OpcodeStr>
112112
}
113113

114114
let hasSideEffects = 0, mayLoad = 1, mayStore = 0 in
115-
class CLoadH_ri<bits<6> funct6, bit funct1, string OpcodeStr>
116-
: RVInst16CLH<funct6, funct1, 0b00, (outs GPRC:$rd),
115+
class CLoadH_ri<bits<6> funct6, bit funct1, string OpcodeStr,
116+
DAGOperand rty = GPRC>
117+
: RVInst16CLH<funct6, funct1, 0b00, (outs rty:$rd),
117118
(ins GPRCMem:$rs1, uimm2_lsb0:$imm),
118119
OpcodeStr, "$rd, ${imm}(${rs1})"> {
119120
bits<2> imm;
@@ -132,9 +133,10 @@ class CStoreB_rri<bits<6> funct6, string OpcodeStr>
132133
}
133134

134135
let hasSideEffects = 0, mayLoad = 0, mayStore = 1 in
135-
class CStoreH_rri<bits<6> funct6, bit funct1, string OpcodeStr>
136+
class CStoreH_rri<bits<6> funct6, bit funct1, string OpcodeStr,
137+
DAGOperand rty = GPRC>
136138
: RVInst16CSH<funct6, funct1, 0b00, (outs),
137-
(ins GPRC:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
139+
(ins rty:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
138140
OpcodeStr, "$rs2, ${imm}(${rs1})"> {
139141
bits<2> imm;
140142

@@ -202,7 +204,15 @@ def C_SB : CStoreB_rri<0b100010, "c.sb">,
202204
Sched<[WriteSTB, ReadStoreData, ReadMemBase]>;
203205
def C_SH : CStoreH_rri<0b100011, 0b0, "c.sh">,
204206
Sched<[WriteSTH, ReadStoreData, ReadMemBase]>;
207+
208+
// Compressed versions of Zhinx load/store.
209+
let isCodeGenOnly = 1 in {
210+
def C_LH_INX : CLoadH_ri<0b100001, 0b1, "c.lh", GPRF16C>,
211+
Sched<[WriteLDH, ReadMemBase]>;
212+
def C_SH_INX : CStoreH_rri<0b100011, 0b0, "c.sh", GPRF16C>,
213+
Sched<[WriteSTH, ReadStoreData, ReadMemBase]>;
205214
}
215+
} // Predicates = [HasStdExtZcb]
206216

207217
// Zcmp
208218
let DecoderNamespace = "RVZcmp", Predicates = [HasStdExtZcmp],
@@ -318,6 +328,13 @@ def : CompressPat<(SB GPRC:$rs2, GPRCMem:$rs1, uimm2:$imm),
318328
(C_SB GPRC:$rs2, GPRCMem:$rs1, uimm2:$imm)>;
319329
def : CompressPat<(SH GPRC:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
320330
(C_SH GPRC:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
331+
332+
let isCompressOnly = true in {
333+
def : CompressPat<(LH_INX GPRF16C:$rd, GPRCMem:$rs1, uimm2_lsb0:$imm),
334+
(C_LH_INX GPRF16C:$rd, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
335+
def : CompressPat<(SH_INX GPRF16C:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm),
336+
(C_SH_INX GPRF16C:$rs2, GPRCMem:$rs1, uimm2_lsb0:$imm)>;
337+
}
321338
}// Predicates = [HasStdExtZcb]
322339

323340

llvm/lib/Target/RISCV/RISCVRegisterInfo.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,8 @@ def GPRF16 : RISCVRegisterClass<[f16], 16, (add (sequence "X%u_H", 10, 17),
614614
(sequence "X%u_H", 8, 9),
615615
(sequence "X%u_H", 18, 27),
616616
(sequence "X%u_H", 0, 4))>;
617+
def GPRF16C : RISCVRegisterClass<[f16], 16, (add (sequence "X%u_H", 10, 15),
618+
(sequence "X%u_H", 8, 9))>;
617619

618620
let RegInfos = XLenRI in {
619621
def GPRF32 : RISCVRegisterClass<[f32], 32, (add GPR)>;

0 commit comments

Comments
 (0)