[ARC] Use backwards scavenging in frame index elimination
authorJay Foad <jay.foad@amd.com>
Mon, 15 May 2023 15:52:59 +0000 (16:52 +0100)
committerJay Foad <jay.foad@amd.com>
Thu, 18 May 2023 08:58:44 +0000 (09:58 +0100)
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
llvm/lib/Target/ARC/ARCRegisterInfo.h

index 4b818c0..28dca4f 100644 (file)
@@ -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)
index ea82289..fce4b69 100644 (file)
@@ -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;