[llvm] 78671db - [Sparc] Use helper class for emitting CFI instructions into MIR (#136027)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 16 17:53:12 PDT 2025
Author: Sergei Barannikov
Date: 2025-04-17T03:53:08+03:00
New Revision: 78671dbb26628f072cb94de784349c50201c1e0f
URL: https://github.com/llvm/llvm-project/commit/78671dbb26628f072cb94de784349c50201c1e0f
DIFF: https://github.com/llvm/llvm-project/commit/78671dbb26628f072cb94de784349c50201c1e0f.diff
LOG: [Sparc] Use helper class for emitting CFI instructions into MIR (#136027)
Also, guard emission by `needsFrameMoves()` check. There are no changes
in tests because cfi instructions are currently ignored by AsmPrinter
when they don't need to be printed/encoded.
PR: https://github.com/llvm/llvm-project/pull/136027
Added:
Modified:
llvm/include/llvm/CodeGen/CFIInstBuilder.h
llvm/lib/Target/Sparc/SparcFrameLowering.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/CFIInstBuilder.h b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
index 9025624c0d8ab..bf7102eeea497 100644
--- a/llvm/include/llvm/CodeGen/CFIInstBuilder.h
+++ b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
@@ -82,6 +82,10 @@ class CFIInstBuilder {
TRI.getDwarfRegNum(Reg2, IsEH)));
}
+ void buildWindowSave() const {
+ insertCFIInst(MCCFIInstruction::createWindowSave(nullptr));
+ }
+
void buildRestore(MCRegister Reg) const {
insertCFIInst(MCCFIInstruction::createRestore(
nullptr, TRI.getDwarfRegNum(Reg, IsEH)));
diff --git a/llvm/lib/Target/Sparc/SparcFrameLowering.cpp b/llvm/lib/Target/Sparc/SparcFrameLowering.cpp
index 14233a526eec1..2934c88b6bffc 100644
--- a/llvm/lib/Target/Sparc/SparcFrameLowering.cpp
+++ b/llvm/lib/Target/Sparc/SparcFrameLowering.cpp
@@ -14,6 +14,7 @@
#include "SparcInstrInfo.h"
#include "SparcMachineFunctionInfo.h"
#include "SparcSubtarget.h"
+#include "llvm/CodeGen/CFIInstBuilder.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
@@ -88,14 +89,7 @@ void SparcFrameLowering::emitPrologue(MachineFunction &MF,
assert(&MF.front() == &MBB && "Shrink-wrapping not yet supported");
MachineFrameInfo &MFI = MF.getFrameInfo();
const SparcSubtarget &Subtarget = MF.getSubtarget<SparcSubtarget>();
- const SparcInstrInfo &TII =
- *static_cast<const SparcInstrInfo *>(Subtarget.getInstrInfo());
- const SparcRegisterInfo &RegInfo =
- *static_cast<const SparcRegisterInfo *>(Subtarget.getRegisterInfo());
MachineBasicBlock::iterator MBBI = MBB.begin();
- // Debug location must be unknown since the first debug location is used
- // to determine the end of the prologue.
- DebugLoc dl;
// Get the number of bytes to allocate from the FrameInfo
int NumBytes = (int) MFI.getStackSize();
@@ -141,26 +135,12 @@ void SparcFrameLowering::emitPrologue(MachineFunction &MF,
emitSPAdjustment(MF, MBB, MBBI, -NumBytes, SAVErr, SAVEri);
- unsigned regFP = RegInfo.getDwarfRegNum(SP::I6, true);
-
- // Emit ".cfi_def_cfa_register 30".
- unsigned CFIIndex =
- MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, regFP));
- BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex);
-
- // Emit ".cfi_window_save".
- CFIIndex = MF.addFrameInst(MCCFIInstruction::createWindowSave(nullptr));
- BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex);
-
- unsigned regInRA = RegInfo.getDwarfRegNum(SP::I7, true);
- unsigned regOutRA = RegInfo.getDwarfRegNum(SP::O7, true);
- // Emit ".cfi_register 15, 31".
- CFIIndex = MF.addFrameInst(
- MCCFIInstruction::createRegister(nullptr, regOutRA, regInRA));
- BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex);
+ if (MF.needsFrameMoves()) {
+ CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::NoFlags);
+ CFIBuilder.buildDefCFARegister(SP::I6);
+ CFIBuilder.buildWindowSave();
+ CFIBuilder.buildRegister(SP::O7, SP::I7);
+ }
}
MachineBasicBlock::iterator SparcFrameLowering::
More information about the llvm-commits
mailing list