[llvm] [AArch64] Use helper class for emitting CFI instructions into MIR (NFCI) (PR #136004)
Sergei Barannikov via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 17 15:52:13 PDT 2025
================
@@ -602,33 +603,23 @@ void AArch64FrameLowering::emitCalleeSavedGPRLocations(
if (CSI.empty())
return;
- const TargetSubtargetInfo &STI = MF.getSubtarget();
- const TargetRegisterInfo &TRI = *STI.getRegisterInfo();
- const TargetInstrInfo &TII = *STI.getInstrInfo();
- DebugLoc DL = MBB.findDebugLoc(MBBI);
-
+ CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameSetup);
for (const auto &Info : CSI) {
unsigned FrameIdx = Info.getFrameIdx();
if (MFI.getStackID(FrameIdx) == TargetStackID::ScalableVector)
continue;
assert(!Info.isSpilledToReg() && "Spilling to registers not implemented");
- int64_t DwarfReg = TRI.getDwarfRegNum(Info.getReg(), true);
int64_t Offset = MFI.getObjectOffset(FrameIdx) - getOffsetOfLocalArea();
// The location of VG will be emitted before each streaming-mode change in
// the function. Only locally-streaming functions require emitting the
// non-streaming VG location here.
if ((LocallyStreaming && FrameIdx == AFI->getStreamingVGIdx()) ||
- (!LocallyStreaming &&
- DwarfReg == TRI.getDwarfRegNum(AArch64::VG, true)))
+ (!LocallyStreaming && Info.getReg() == AArch64::VG))
continue;
- unsigned CFIIndex = MF.addFrameInst(
- MCCFIInstruction::createOffset(nullptr, DwarfReg, Offset));
- BuildMI(MBB, MBBI, DL, TII.get(TargetOpcode::CFI_INSTRUCTION))
- .addCFIIndex(CFIIndex)
- .setMIFlags(MachineInstr::FrameSetup);
+ CFIBuilder.buildOffset(Info.getReg(), Offset);
----------------
s-barannikov wrote:
It is not exactly expensive, but it contains a couple of virtual calls, so we should probably avoid calling it in loops like this. Most other places use temporaries as in your second suggestion.
I can assure you that it looks much more readable on a local machine than on github :slightly_smiling_face:
https://github.com/llvm/llvm-project/pull/136004
More information about the llvm-commits
mailing list