Skip to content

Commit 00d6232

Browse files
authored
[RISCV][GISel] Don't create generic virtual registers in selectSHXADDOp/selectSHXADD_UWOp. (llvm#78396)
Since we're creating target specific instructions, I think we should be creating registers with the GPR register class.
1 parent 46a929f commit 00d6232

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,7 @@ RISCVInstructionSelector::selectSHXADDOp(MachineOperand &Root,
200200
// Given (and (shl y, c2), mask) in which mask has no leading zeros and
201201
// c3 trailing zeros. We can use an SRLI by c3 - c2 followed by a SHXADD.
202202
if (*LeftShift && Leading == 0 && C2.ult(Trailing) && Trailing == ShAmt) {
203-
Register DstReg =
204-
MRI.createGenericVirtualRegister(MRI.getType(RootReg));
203+
Register DstReg = MRI.createVirtualRegister(&RISCV::GPRRegClass);
205204
return {{[=](MachineInstrBuilder &MIB) {
206205
MachineIRBuilder(*MIB.getInstr())
207206
.buildInstr(RISCV::SRLI, {DstReg}, {RegY})
@@ -213,8 +212,7 @@ RISCVInstructionSelector::selectSHXADDOp(MachineOperand &Root,
213212
// Given (and (lshr y, c2), mask) in which mask has c2 leading zeros and
214213
// c3 trailing zeros. We can use an SRLI by c2 + c3 followed by a SHXADD.
215214
if (!*LeftShift && Leading == C2 && Trailing == ShAmt) {
216-
Register DstReg =
217-
MRI.createGenericVirtualRegister(MRI.getType(RootReg));
215+
Register DstReg = MRI.createVirtualRegister(&RISCV::GPRRegClass);
218216
return {{[=](MachineInstrBuilder &MIB) {
219217
MachineIRBuilder(*MIB.getInstr())
220218
.buildInstr(RISCV::SRLI, {DstReg}, {RegY})
@@ -253,7 +251,7 @@ RISCVInstructionSelector::selectSHXADDOp(MachineOperand &Root,
253251
(Trailing - C2.getLimitedValue()) == ShAmt;
254252

255253
if (Cond) {
256-
Register DstReg = MRI.createGenericVirtualRegister(MRI.getType(RootReg));
254+
Register DstReg = MRI.createVirtualRegister(&RISCV::GPRRegClass);
257255
return {{[=](MachineInstrBuilder &MIB) {
258256
MachineIRBuilder(*MIB.getInstr())
259257
.buildInstr(RISCV::SRLIW, {DstReg}, {RegY})
@@ -292,8 +290,7 @@ RISCVInstructionSelector::selectSHXADD_UWOp(MachineOperand &Root,
292290
unsigned Leading = Mask.countl_zero();
293291
unsigned Trailing = Mask.countr_zero();
294292
if (Leading == 32 - ShAmt && C2 == Trailing && Trailing > ShAmt) {
295-
Register DstReg =
296-
MRI.createGenericVirtualRegister(MRI.getType(RootReg));
293+
Register DstReg = MRI.createVirtualRegister(&RISCV::GPRRegClass);
297294
return {{[=](MachineInstrBuilder &MIB) {
298295
MachineIRBuilder(*MIB.getInstr())
299296
.buildInstr(RISCV::SLLI, {DstReg}, {RegX})

0 commit comments

Comments
 (0)