From bbea044c7d9057b1a1e8ee26408adbeafecf9955 Mon Sep 17 00:00:00 2001 From: shylie Date: Mon, 6 Apr 2026 22:06:00 -0400 Subject: [PATCH] Add rules to restore RRA --- llvm/lib/Target/Foot/FootFrameLowering.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Target/Foot/FootFrameLowering.cpp b/llvm/lib/Target/Foot/FootFrameLowering.cpp index 2fe1dc811895..f1d74a9df659 100644 --- a/llvm/lib/Target/Foot/FootFrameLowering.cpp +++ b/llvm/lib/Target/Foot/FootFrameLowering.cpp @@ -21,9 +21,10 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF, int FI = MF.getInfo()->getReturnAddressFrameIndex(); - unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createDefCfaRegister( - nullptr, MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum( - Foot::RSP, true))); + unsigned int CFIIndex = + MF.addFrameInst(MCCFIInstruction::createDefCfaRegister( + nullptr, MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum( + Foot::RSP, true))); BuildMI(MBB, MBB.begin(), DebugLoc(), TII->get(TargetOpcode::CFI_INSTRUCTION)) .addCFIIndex(CFIIndex); @@ -31,6 +32,13 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF, .addFrameIndex(FI) .addReg(Foot::RRA) .addImm(0); + unsigned int RRADwarfRegNum = + MF.getRegInfo().getTargetRegisterInfo()->getDwarfRegNum(Foot::RRA, false); + int Offset = MFI.getObjectOffset(FI); + CFIIndex = MF.addFrameInst( + MCCFIInstruction::createOffset(nullptr, RRADwarfRegNum, Offset)); + BuildMI(MBB, MBB.begin(), DebugLoc(), TII->get(TargetOpcode::CFI_INSTRUCTION)) + .addCFIIndex(CFIIndex); unsigned NumBytes = MFI.getStackSize(); @@ -51,11 +59,11 @@ void FootFrameLowering::emitPrologue(MachineFunction &MF, .addImm(NumBytes); } - unsigned int CFIOffsetIndex = MF.addFrameInst( + CFIIndex = MF.addFrameInst( MCCFIInstruction::createAdjustCfaOffset(nullptr, NumBytes)); BuildMI(MBB, MBB.getFirstTerminator(), DebugLoc(), TII->get(TargetOpcode::CFI_INSTRUCTION)) - .addCFIIndex(CFIOffsetIndex); + .addCFIIndex(CFIIndex); } } @@ -132,6 +140,7 @@ void FootFrameLowering::determineCalleeSaves(MachineFunction &MF, TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); SavedRegs.set(Foot::RSP); + SavedRegs.set(Foot::RRA); MachineFrameInfo &MFI = MF.getFrameInfo();