Skip to content

Commit d9eeeb0

Browse files
committed
use register scavenger to spill the register
1 parent 8423778 commit d9eeeb0

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

llvm/lib/Target/LoongArch/LoongArchRegisterInfo.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ using namespace llvm;
2929

3030
#define GET_REGINFO_TARGET_DESC
3131
#include "LoongArchGenRegisterInfo.inc"
32-
3332
LoongArchRegisterInfo::LoongArchRegisterInfo(unsigned HwMode)
3433
: LoongArchGenRegisterInfo(LoongArch::R1, /*DwarfFlavour*/ 0,
3534
/*EHFlavor*/ 0,
@@ -254,3 +253,15 @@ bool LoongArchRegisterInfo::canRealignStack(const MachineFunction &MF) const {
254253
// reserve it.
255254
return MRI->canReserveReg(LoongArchABI::getBPReg());
256255
}
256+
257+
bool LoongArchRegisterInfo::saveScavengerRegister(
258+
MachineBasicBlock &MBB, MachineBasicBlock::iterator I,
259+
MachineBasicBlock::iterator &UseMI, const TargetRegisterClass *RC,
260+
Register Reg) const {
261+
262+
DebugLoc DL;
263+
const TargetInstrInfo &TII = *MBB.getParent()->getSubtarget().getInstrInfo();
264+
TII.copyPhysReg(MBB, I, DL, LoongArch::R12, Reg, true);
265+
TII.copyPhysReg(MBB, UseMI, DL, Reg, LoongArch::R12, true);
266+
return true;
267+
}

llvm/lib/Target/LoongArch/LoongArchRegisterInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ struct LoongArchRegisterInfo : public LoongArchGenRegisterInfo {
5252
return true;
5353
}
5454
bool canRealignStack(const MachineFunction &MF) const override;
55+
bool saveScavengerRegister(MachineBasicBlock &MBB,
56+
MachineBasicBlock::iterator I,
57+
MachineBasicBlock::iterator &UseMI,
58+
const TargetRegisterClass *RC,
59+
Register Reg) const override;
5560
};
5661
} // end namespace llvm
5762

0 commit comments

Comments
 (0)