diff options
author | Jay Foad <jay.foad@amd.com> | 2023-05-16 11:26:30 +0100 |
---|---|---|
committer | Jay Foad <jay.foad@amd.com> | 2023-05-18 09:58:53 +0100 |
commit | 13bd96e43df14892cc6d9874d166447e6182d612 (patch) | |
tree | 5df19305e3380fffe21e9ce518c3150cb8e324f4 /llvm/lib/Target/XCore | |
parent | a2916016d825d4ad2011a70ca93e08a215bcdcfc (diff) | |
download | llvm-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.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/Target/XCore/XCoreRegisterInfo.h | 2 |
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; |