diff options
author | Jay Foad <jay.foad@amd.com> | 2023-05-15 16:58:16 +0100 |
---|---|---|
committer | Jay Foad <jay.foad@amd.com> | 2023-05-18 09:58:45 +0100 |
commit | a2916016d825d4ad2011a70ca93e08a215bcdcfc (patch) | |
tree | f6b9332963e2be4d84ba1a5007cc40c1b0fec2c2 | |
parent | a8dd9f42b7f437b233b1cd98e0c4c12aa2fab2f4 (diff) | |
download | llvm-a2916016d825d4ad2011a70ca93e08a215bcdcfc.zip llvm-a2916016d825d4ad2011a70ca93e08a215bcdcfc.tar.gz llvm-a2916016d825d4ad2011a70ca93e08a215bcdcfc.tar.bz2 |
[Lanai] Use backwards scavenging in frame index elimination
This is preferred because it does not rely on accurate kill flags.
Differential Revision: https://reviews.llvm.org/D150600
-rw-r--r-- | llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Target/Lanai/LanaiRegisterInfo.h | 2 |
2 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp b/llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp index 5450bdb..3a271cb 100644 --- a/llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp +++ b/llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp @@ -167,7 +167,7 @@ bool LanaiRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, assert(RS && "Register scavenging must be on"); Register Reg = RS->FindUnusedReg(&Lanai::GPRRegClass); if (!Reg) - Reg = RS->scavengeRegister(&Lanai::GPRRegClass, II, SPAdj); + Reg = RS->scavengeRegisterBackwards(Lanai::GPRRegClass, II, false, SPAdj); assert(Reg && "Register scavenger failed"); bool HasNegOffset = false; @@ -235,10 +235,11 @@ bool LanaiRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, .addReg(FrameReg) .addImm(-Offset); MI.eraseFromParent(); - } else { - MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false); - MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset); + return true; } + + MI.getOperand(FIOperandNum).ChangeToRegister(FrameReg, /*isDef=*/false); + MI.getOperand(FIOperandNum + 1).ChangeToImmediate(Offset); return false; } diff --git a/llvm/lib/Target/Lanai/LanaiRegisterInfo.h b/llvm/lib/Target/Lanai/LanaiRegisterInfo.h index 5168ddd..89d9eba 100644 --- a/llvm/lib/Target/Lanai/LanaiRegisterInfo.h +++ b/llvm/lib/Target/Lanai/LanaiRegisterInfo.h @@ -34,6 +34,8 @@ struct LanaiRegisterInfo : public LanaiGenRegisterInfo { bool requiresRegisterScavenging(const MachineFunction &MF) const override; + bool supportsBackwardScavenger() const override { return true; } + bool eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, unsigned FIOperandNum, RegScavenger *RS = nullptr) const override; |