Skip to content

Commit d8dd294

Browse files
committed
[RISCV] Prevent copying dummy_reg_pair_with_x0 in RISCVMakeCompressible.
1 parent ebe8555 commit d8dd294

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

llvm/lib/Target/RISCV/RISCVMakeCompressible.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,13 +452,21 @@ bool RISCVMakeCompressibleOpt::runOnMachineFunction(MachineFunction &Fn) {
452452
.addReg(RegImm.Reg);
453453
} else if (RISCV::GPRPairRegClass.contains(RegImm.Reg)) {
454454
assert(RegImm.Imm == 0);
455+
MCRegister EvenReg = TRI.getSubReg(RegImm.Reg, RISCV::sub_gpr_even);
456+
MCRegister OddReg;
457+
// We need to special case odd reg for X0_PAIR.
458+
if (RegImm.Reg == RISCV::X0_Pair)
459+
OddReg = RISCV::X0;
460+
else
461+
OddReg = TRI.getSubReg(RegImm.Reg, RISCV::sub_gpr_odd);
462+
assert(NewReg != RISCV::X0_Pair && "Cannot write to X0_Pair");
455463
BuildMI(MBB, MI, MI.getDebugLoc(), TII.get(RISCV::ADDI),
456464
TRI.getSubReg(NewReg, RISCV::sub_gpr_even))
457-
.addReg(TRI.getSubReg(RegImm.Reg, RISCV::sub_gpr_even))
465+
.addReg(EvenReg)
458466
.addImm(0);
459467
BuildMI(MBB, MI, MI.getDebugLoc(), TII.get(RISCV::ADDI),
460468
TRI.getSubReg(NewReg, RISCV::sub_gpr_odd))
461-
.addReg(TRI.getSubReg(RegImm.Reg, RISCV::sub_gpr_odd))
469+
.addReg(OddReg)
462470
.addImm(0);
463471
} else {
464472
assert((RISCV::FPR32RegClass.contains(RegImm.Reg) ||

llvm/test/CodeGen/RISCV/make-compressible-zilsd.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ body: |
137137
; RV32: liveins: $x10, $x11, $x12
138138
; RV32-NEXT: {{ $}}
139139
; RV32-NEXT: $x14 = ADDI $x0, 0
140-
; RV32-NEXT: $x15 = ADDI $dummy_reg_pair_with_x0, 0
140+
; RV32-NEXT: $x15 = ADDI $x0, 0
141141
; RV32-NEXT: SD_RV32 $x14_x15, killed renamable $x10, 0 :: (store (s64) into %ir.a)
142142
; RV32-NEXT: SD_RV32 $x14_x15, killed renamable $x11, 0 :: (store (s64) into %ir.b)
143143
; RV32-NEXT: SD_RV32 $x14_x15, killed renamable $x12, 0 :: (store (s64) into %ir.c)

0 commit comments

Comments
 (0)