aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Foad <jay.foad@amd.com>2023-05-15 16:58:16 +0100
committerJay Foad <jay.foad@amd.com>2023-05-18 09:58:45 +0100
commita2916016d825d4ad2011a70ca93e08a215bcdcfc (patch)
treef6b9332963e2be4d84ba1a5007cc40c1b0fec2c2
parenta8dd9f42b7f437b233b1cd98e0c4c12aa2fab2f4 (diff)
downloadllvm-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.cpp9
-rw-r--r--llvm/lib/Target/Lanai/LanaiRegisterInfo.h2
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;