[llvm] [RISCV] Speed up RISCVRegisterInfo::needsFrameBaseReg when frame pointer isn't used. NFC (PR #89163)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 17 18:56:05 PDT 2024
https://github.com/topperc created https://github.com/llvm/llvm-project/pull/89163
The callee saved size is only used if there is a frame pointer. Sink the code onto the frame pointer only path.
>From d86a127682b0e91a693e6a94c8a724147943ab3e Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Wed, 17 Apr 2024 18:53:50 -0700
Subject: [PATCH] [RISCV] Speed up RISCVRegisterInfo::needsFrameBaseReg when
frame pointer isn't used. NFC
The callee saved size is only used if there is a frame pointer.
Sink the code onto the frame pointer only path.
---
llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp | 22 +++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp b/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
index 84af6eec40ee6f..367a62e830cbf5 100644
--- a/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
@@ -607,20 +607,22 @@ bool RISCVRegisterInfo::needsFrameBaseReg(MachineInstr *MI,
const MachineFrameInfo &MFI = MF.getFrameInfo();
const RISCVFrameLowering *TFI = getFrameLowering(MF);
const MachineRegisterInfo &MRI = MF.getRegInfo();
- unsigned CalleeSavedSize = 0;
Offset += getFrameIndexInstrOffset(MI, FIOperandNum);
- // Estimate the stack size used to store callee saved registers(
- // excludes reserved registers).
- BitVector ReservedRegs = getReservedRegs(MF);
- for (const MCPhysReg *R = MRI.getCalleeSavedRegs(); MCPhysReg Reg = *R; ++R) {
- if (!ReservedRegs.test(Reg))
- CalleeSavedSize += getSpillSize(*getMinimalPhysRegClass(Reg));
- }
+ if (TFI->hasFP(MF) && !shouldRealignStack(MF)) {
+ // Estimate the stack size used to store callee saved registers(
+ // excludes reserved registers).
+ unsigned CalleeSavedSize = 0;
+ BitVector ReservedRegs = getReservedRegs(MF);
+ for (const MCPhysReg *R = MRI.getCalleeSavedRegs(); MCPhysReg Reg = *R;
+ ++R) {
+ if (!ReservedRegs.test(Reg))
+ CalleeSavedSize += getSpillSize(*getMinimalPhysRegClass(Reg));
+ }
- int64_t MaxFPOffset = Offset - CalleeSavedSize;
- if (TFI->hasFP(MF) && !shouldRealignStack(MF))
+ int64_t MaxFPOffset = Offset - CalleeSavedSize;
return !isFrameOffsetLegal(MI, RISCV::X8, MaxFPOffset);
+ }
// Assume 128 bytes spill slots size to estimate the maximum possible
// offset relative to the stack pointer.
More information about the llvm-commits
mailing list