From a8dd9f42b7f437b233b1cd98e0c4c12aa2fab2f4 Mon Sep 17 00:00:00 2001 From: Jay Foad Date: Mon, 15 May 2023 16:52:59 +0100 Subject: [PATCH] [ARC] 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/D150599 --- llvm/lib/Target/ARC/ARCRegisterInfo.cpp | 3 ++- llvm/lib/Target/ARC/ARCRegisterInfo.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/ARC/ARCRegisterInfo.cpp b/llvm/lib/Target/ARC/ARCRegisterInfo.cpp index 4b818c0..28dca4f 100644 --- a/llvm/lib/Target/ARC/ARCRegisterInfo.cpp +++ b/llvm/lib/Target/ARC/ARCRegisterInfo.cpp @@ -63,7 +63,8 @@ static void replaceFrameIndex(MachineBasicBlock::iterator II, // of the load offset. const TargetRegisterInfo *TRI = MBB.getParent()->getSubtarget().getRegisterInfo(); - BaseReg = RS->scavengeRegister(&ARC::GPR32RegClass, II, SPAdj); + BaseReg = + RS->scavengeRegisterBackwards(ARC::GPR32RegClass, II, false, SPAdj); assert(BaseReg && "Register scavenging failed."); LLVM_DEBUG(dbgs() << "Scavenged register " << printReg(BaseReg, TRI) << " for FrameReg=" << printReg(FrameReg, TRI) diff --git a/llvm/lib/Target/ARC/ARCRegisterInfo.h b/llvm/lib/Target/ARC/ARCRegisterInfo.h index ea82289..fce4b69 100644 --- a/llvm/lib/Target/ARC/ARCRegisterInfo.h +++ b/llvm/lib/Target/ARC/ARCRegisterInfo.h @@ -39,6 +39,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; -- 2.7.4