From: Jay Foad Date: Mon, 15 May 2023 15:58:16 +0000 (+0100) Subject: [Lanai] Use backwards scavenging in frame index elimination X-Git-Tag: upstream/17.0.6~8031 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2916016d825d4ad2011a70ca93e08a215bcdcfc;p=platform%2Fupstream%2Fllvm.git [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 --- 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;