From 471d2c034cfe99858e8fb138a301471bdfdef867 Mon Sep 17 00:00:00 2001 From: bidhan-a Date: Sat, 21 Mar 2026 22:14:10 +0545 Subject: [PATCH] [BPF] override getFrameIndexReference to fix stack offset calculation --- llvm/lib/Target/BPF/BPFFrameLowering.cpp | 15 +++++++++++++++ llvm/lib/Target/BPF/BPFFrameLowering.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/llvm/lib/Target/BPF/BPFFrameLowering.cpp b/llvm/lib/Target/BPF/BPFFrameLowering.cpp index 00780b4d1406f..135cd6b2fb343 100644 --- a/llvm/lib/Target/BPF/BPFFrameLowering.cpp +++ b/llvm/lib/Target/BPF/BPFFrameLowering.cpp @@ -36,3 +36,18 @@ void BPFFrameLowering::determineCalleeSaves(MachineFunction &MF, SavedRegs.reset(BPF::R8); SavedRegs.reset(BPF::R9); } + +StackOffset BPFFrameLowering::getFrameIndexReference(const MachineFunction &MF, + int FI, + Register &FrameReg) const { + const MachineFrameInfo &MFI = MF.getFrameInfo(); + const TargetRegisterInfo *RI = MF.getSubtarget().getRegisterInfo(); + + FrameReg = RI->getFrameRegister(MF); + + // BPF uses a fixed frame pointer (R10), and offsets are already relative to + // it. No StackSize adjustment (as in the default implementation) is needed. + return StackOffset::getFixed(MFI.getObjectOffset(FI) - + getOffsetOfLocalArea() + + MFI.getOffsetAdjustment()); +} diff --git a/llvm/lib/Target/BPF/BPFFrameLowering.h b/llvm/lib/Target/BPF/BPFFrameLowering.h index 6beffcbe69dd0..76ddce740d383 100644 --- a/llvm/lib/Target/BPF/BPFFrameLowering.h +++ b/llvm/lib/Target/BPF/BPFFrameLowering.h @@ -35,6 +35,9 @@ class BPFFrameLowering : public TargetFrameLowering { return MBB.erase(MI); } + StackOffset getFrameIndexReference(const MachineFunction &MF, int FI, + Register &FrameReg) const override; + protected: bool hasFPImpl(const MachineFunction &MF) const override; };