Skip to content

Commit b34efb2

Browse files
s-barannikovvar-const
authored andcommitted
[Sparc] Use helper class for emitting CFI instructions into MIR (llvm#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: llvm#136027
1 parent 3eb38dc commit b34efb2

File tree

2 files changed

+11
-27
lines changed

2 files changed

+11
-27
lines changed

Diff for: llvm/include/llvm/CodeGen/CFIInstBuilder.h

+4
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ class CFIInstBuilder {
8282
TRI.getDwarfRegNum(Reg2, IsEH)));
8383
}
8484

85+
void buildWindowSave() const {
86+
insertCFIInst(MCCFIInstruction::createWindowSave(nullptr));
87+
}
88+
8589
void buildRestore(MCRegister Reg) const {
8690
insertCFIInst(MCCFIInstruction::createRestore(
8791
nullptr, TRI.getDwarfRegNum(Reg, IsEH)));

Diff for: llvm/lib/Target/Sparc/SparcFrameLowering.cpp

+7-27
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "SparcInstrInfo.h"
1515
#include "SparcMachineFunctionInfo.h"
1616
#include "SparcSubtarget.h"
17+
#include "llvm/CodeGen/CFIInstBuilder.h"
1718
#include "llvm/CodeGen/MachineFrameInfo.h"
1819
#include "llvm/CodeGen/MachineFunction.h"
1920
#include "llvm/CodeGen/MachineInstrBuilder.h"
@@ -88,14 +89,7 @@ void SparcFrameLowering::emitPrologue(MachineFunction &MF,
8889
assert(&MF.front() == &MBB && "Shrink-wrapping not yet supported");
8990
MachineFrameInfo &MFI = MF.getFrameInfo();
9091
const SparcSubtarget &Subtarget = MF.getSubtarget<SparcSubtarget>();
91-
const SparcInstrInfo &TII =
92-
*static_cast<const SparcInstrInfo *>(Subtarget.getInstrInfo());
93-
const SparcRegisterInfo &RegInfo =
94-
*static_cast<const SparcRegisterInfo *>(Subtarget.getRegisterInfo());
9592
MachineBasicBlock::iterator MBBI = MBB.begin();
96-
// Debug location must be unknown since the first debug location is used
97-
// to determine the end of the prologue.
98-
DebugLoc dl;
9993

10094
// Get the number of bytes to allocate from the FrameInfo
10195
int NumBytes = (int) MFI.getStackSize();
@@ -141,26 +135,12 @@ void SparcFrameLowering::emitPrologue(MachineFunction &MF,
141135

142136
emitSPAdjustment(MF, MBB, MBBI, -NumBytes, SAVErr, SAVEri);
143137

144-
unsigned regFP = RegInfo.getDwarfRegNum(SP::I6, true);
145-
146-
// Emit ".cfi_def_cfa_register 30".
147-
unsigned CFIIndex =
148-
MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, regFP));
149-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
150-
.addCFIIndex(CFIIndex);
151-
152-
// Emit ".cfi_window_save".
153-
CFIIndex = MF.addFrameInst(MCCFIInstruction::createWindowSave(nullptr));
154-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
155-
.addCFIIndex(CFIIndex);
156-
157-
unsigned regInRA = RegInfo.getDwarfRegNum(SP::I7, true);
158-
unsigned regOutRA = RegInfo.getDwarfRegNum(SP::O7, true);
159-
// Emit ".cfi_register 15, 31".
160-
CFIIndex = MF.addFrameInst(
161-
MCCFIInstruction::createRegister(nullptr, regOutRA, regInRA));
162-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
163-
.addCFIIndex(CFIIndex);
138+
if (MF.needsFrameMoves()) {
139+
CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::NoFlags);
140+
CFIBuilder.buildDefCFARegister(SP::I6);
141+
CFIBuilder.buildWindowSave();
142+
CFIBuilder.buildRegister(SP::O7, SP::I7);
143+
}
164144
}
165145

166146
MachineBasicBlock::iterator SparcFrameLowering::

0 commit comments

Comments
 (0)