aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/XCore
diff options
context:
space:
mode:
authorJay Foad <jay.foad@amd.com>2023-05-16 11:26:30 +0100
committerJay Foad <jay.foad@amd.com>2023-05-18 09:58:53 +0100
commit13bd96e43df14892cc6d9874d166447e6182d612 (patch)
tree5df19305e3380fffe21e9ce518c3150cb8e324f4 /llvm/lib/Target/XCore
parenta2916016d825d4ad2011a70ca93e08a215bcdcfc (diff)
downloadllvm-13bd96e43df14892cc6d9874d166447e6182d612.zip
llvm-13bd96e43df14892cc6d9874d166447e6182d612.tar.gz
llvm-13bd96e43df14892cc6d9874d166447e6182d612.tar.bz2
[XCore] 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/D150673
Diffstat (limited to 'llvm/lib/Target/XCore')
-rw-r--r--llvm/lib/Target/XCore/XCoreRegisterInfo.cpp9
-rw-r--r--llvm/lib/Target/XCore/XCoreRegisterInfo.h2
2 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp b/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp
index ed5a0ad..7c11ec0 100644
--- a/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp
+++ b/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp
@@ -97,7 +97,8 @@ static void InsertFPConstInst(MachineBasicBlock::iterator II,
MachineInstr &MI = *II;
MachineBasicBlock &MBB = *MI.getParent();
DebugLoc dl = MI.getDebugLoc();
- Register ScratchOffset = RS->scavengeRegister(&XCore::GRRegsRegClass, II, 0);
+ Register ScratchOffset =
+ RS->scavengeRegisterBackwards(XCore::GRRegsRegClass, II, false, 0);
RS->setRegUsed(ScratchOffset);
TII.loadImmediate(MBB, II, ScratchOffset, Offset);
@@ -169,12 +170,14 @@ static void InsertSPConstInst(MachineBasicBlock::iterator II,
unsigned ScratchBase;
if (OpCode==XCore::STWFI) {
- ScratchBase = RS->scavengeRegister(&XCore::GRRegsRegClass, II, 0);
+ ScratchBase =
+ RS->scavengeRegisterBackwards(XCore::GRRegsRegClass, II, false, 0);
RS->setRegUsed(ScratchBase);
} else
ScratchBase = Reg;
BuildMI(MBB, II, dl, TII.get(XCore::LDAWSP_ru6), ScratchBase).addImm(0);
- Register ScratchOffset = RS->scavengeRegister(&XCore::GRRegsRegClass, II, 0);
+ Register ScratchOffset =
+ RS->scavengeRegisterBackwards(XCore::GRRegsRegClass, II, false, 0);
RS->setRegUsed(ScratchOffset);
TII.loadImmediate(MBB, II, ScratchOffset, Offset);
diff --git a/llvm/lib/Target/XCore/XCoreRegisterInfo.h b/llvm/lib/Target/XCore/XCoreRegisterInfo.h
index b72875c..8d420ab 100644
--- a/llvm/lib/Target/XCore/XCoreRegisterInfo.h
+++ b/llvm/lib/Target/XCore/XCoreRegisterInfo.h
@@ -34,6 +34,8 @@ public:
bool useFPForScavengingIndex(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;