Skip to content

Commit b07d2e6

Browse files
authored
[Mips] Use helper class for emitting CFI instructions (NFCI) (#136242)
1 parent 5e834b9 commit b07d2e6

File tree

2 files changed

+25
-73
lines changed

2 files changed

+25
-73
lines changed

llvm/lib/Target/Mips/Mips16FrameLowering.cpp

+6-21
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "MipsRegisterInfo.h"
1717
#include "MipsSubtarget.h"
1818
#include "llvm/ADT/BitVector.h"
19+
#include "llvm/CodeGen/CFIInstBuilder.h"
1920
#include "llvm/CodeGen/MachineBasicBlock.h"
2021
#include "llvm/CodeGen/MachineFrameInfo.h"
2122
#include "llvm/CodeGen/MachineFunction.h"
@@ -24,9 +25,6 @@
2425
#include "llvm/CodeGen/MachineModuleInfo.h"
2526
#include "llvm/CodeGen/TargetFrameLowering.h"
2627
#include "llvm/IR/DebugLoc.h"
27-
#include "llvm/MC/MCContext.h"
28-
#include "llvm/MC/MCDwarf.h"
29-
#include "llvm/MC/MCRegisterInfo.h"
3028
#include "llvm/Support/MathExtras.h"
3129
#include <cstdint>
3230
#include <vector>
@@ -52,32 +50,19 @@ void Mips16FrameLowering::emitPrologue(MachineFunction &MF,
5250
// No need to allocate space on the stack.
5351
if (StackSize == 0 && !MFI.adjustsStack()) return;
5452

55-
const MCRegisterInfo *MRI = MF.getContext().getRegisterInfo();
56-
5753
// Adjust stack.
5854
TII.makeFrame(Mips::SP, StackSize, MBB, MBBI);
5955

60-
// emit ".cfi_def_cfa_offset StackSize"
61-
unsigned CFIIndex =
62-
MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset(nullptr, StackSize));
63-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
64-
.addCFIIndex(CFIIndex);
56+
CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::NoFlags);
57+
CFIBuilder.buildDefCFAOffset(StackSize);
6558

6659
const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
6760

6861
if (!CSI.empty()) {
69-
const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
70-
71-
for (const CalleeSavedInfo &I : CSI) {
72-
int64_t Offset = MFI.getObjectOffset(I.getFrameIdx());
73-
MCRegister Reg = I.getReg();
74-
unsigned DReg = MRI->getDwarfRegNum(Reg, true);
75-
unsigned CFIIndex = MF.addFrameInst(
76-
MCCFIInstruction::createOffset(nullptr, DReg, Offset));
77-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
78-
.addCFIIndex(CFIIndex);
79-
}
62+
for (const CalleeSavedInfo &I : CSI)
63+
CFIBuilder.buildOffset(I.getReg(), MFI.getObjectOffset(I.getFrameIdx()));
8064
}
65+
8166
if (hasFP(MF))
8267
BuildMI(MBB, MBBI, dl, TII.get(Mips::MoveR3216), Mips::S0)
8368
.addReg(Mips::SP).setMIFlag(MachineInstr::FrameSetup);

llvm/lib/Target/Mips/MipsSEFrameLowering.cpp

+19-52
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "llvm/ADT/BitVector.h"
2020
#include "llvm/ADT/StringRef.h"
2121
#include "llvm/ADT/StringSwitch.h"
22+
#include "llvm/CodeGen/CFIInstBuilder.h"
2223
#include "llvm/CodeGen/MachineBasicBlock.h"
2324
#include "llvm/CodeGen/MachineFrameInfo.h"
2425
#include "llvm/CodeGen/MachineFunction.h"
@@ -33,8 +34,6 @@
3334
#include "llvm/CodeGen/TargetSubtargetInfo.h"
3435
#include "llvm/IR/DebugLoc.h"
3536
#include "llvm/IR/Function.h"
36-
#include "llvm/MC/MCDwarf.h"
37-
#include "llvm/MC/MCRegisterInfo.h"
3837
#include "llvm/Support/CodeGen.h"
3938
#include "llvm/Support/ErrorHandling.h"
4039
#include "llvm/Support/MathExtras.h"
@@ -426,28 +425,23 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF,
426425
// No need to allocate space on the stack.
427426
if (StackSize == 0 && !MFI.adjustsStack()) return;
428427

429-
const MCRegisterInfo *MRI = MF.getContext().getRegisterInfo();
428+
CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::NoFlags);
430429

431430
// Adjust stack.
432431
TII.adjustStackPtr(SP, -StackSize, MBB, MBBI);
433-
434-
// emit ".cfi_def_cfa_offset StackSize"
435-
unsigned CFIIndex =
436-
MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset(nullptr, StackSize));
437-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
438-
.addCFIIndex(CFIIndex);
432+
CFIBuilder.buildDefCFAOffset(StackSize);
439433

440434
if (MF.getFunction().hasFnAttribute("interrupt"))
441435
emitInterruptPrologueStub(MF, MBB);
442436

443437
const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
444438

445-
if (!CSI.empty()) {
446-
// Find the instruction past the last instruction that saves a callee-saved
447-
// register to the stack.
448-
for (unsigned i = 0; i < CSI.size(); ++i)
449-
++MBBI;
439+
// Find the instruction past the last instruction that saves a callee-saved
440+
// register to the stack.
441+
std::advance(MBBI, CSI.size());
442+
CFIBuilder.setInsertPoint(MBBI);
450443

444+
if (!CSI.empty()) {
451445
// Iterate over list of callee-saved registers and emit .cfi_offset
452446
// directives.
453447
for (const CalleeSavedInfo &I : CSI) {
@@ -457,45 +451,26 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF,
457451
// If Reg is a double precision register, emit two cfa_offsets,
458452
// one for each of the paired single precision registers.
459453
if (Mips::AFGR64RegClass.contains(Reg)) {
460-
unsigned Reg0 =
461-
MRI->getDwarfRegNum(RegInfo.getSubReg(Reg, Mips::sub_lo), true);
462-
unsigned Reg1 =
463-
MRI->getDwarfRegNum(RegInfo.getSubReg(Reg, Mips::sub_hi), true);
454+
MCRegister Reg0 = RegInfo.getSubReg(Reg, Mips::sub_lo);
455+
MCRegister Reg1 = RegInfo.getSubReg(Reg, Mips::sub_hi);
464456

465457
if (!STI.isLittle())
466458
std::swap(Reg0, Reg1);
467459

468-
unsigned CFIIndex = MF.addFrameInst(
469-
MCCFIInstruction::createOffset(nullptr, Reg0, Offset));
470-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
471-
.addCFIIndex(CFIIndex);
472-
473-
CFIIndex = MF.addFrameInst(
474-
MCCFIInstruction::createOffset(nullptr, Reg1, Offset + 4));
475-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
476-
.addCFIIndex(CFIIndex);
460+
CFIBuilder.buildOffset(Reg0, Offset);
461+
CFIBuilder.buildOffset(Reg1, Offset + 4);
477462
} else if (Mips::FGR64RegClass.contains(Reg)) {
478-
unsigned Reg0 = MRI->getDwarfRegNum(Reg, true);
479-
unsigned Reg1 = MRI->getDwarfRegNum(Reg, true) + 1;
463+
MCRegister Reg0 = Reg;
464+
MCRegister Reg1 = Reg + 1;
480465

481466
if (!STI.isLittle())
482467
std::swap(Reg0, Reg1);
483468

484-
unsigned CFIIndex = MF.addFrameInst(
485-
MCCFIInstruction::createOffset(nullptr, Reg0, Offset));
486-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
487-
.addCFIIndex(CFIIndex);
488-
489-
CFIIndex = MF.addFrameInst(
490-
MCCFIInstruction::createOffset(nullptr, Reg1, Offset + 4));
491-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
492-
.addCFIIndex(CFIIndex);
469+
CFIBuilder.buildOffset(Reg0, Offset);
470+
CFIBuilder.buildOffset(Reg1, Offset + 4);
493471
} else {
494472
// Reg is either in GPR32 or FGR32.
495-
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
496-
nullptr, MRI->getDwarfRegNum(Reg, true), Offset));
497-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
498-
.addCFIIndex(CFIIndex);
473+
CFIBuilder.buildOffset(Reg, Offset);
499474
}
500475
}
501476
}
@@ -513,11 +488,7 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF,
513488
// Emit .cfi_offset directives for eh data registers.
514489
for (int I = 0; I < 4; ++I) {
515490
int64_t Offset = MFI.getObjectOffset(MipsFI->getEhDataRegFI(I));
516-
unsigned Reg = MRI->getDwarfRegNum(ABI.GetEhDataReg(I), true);
517-
unsigned CFIIndex = MF.addFrameInst(
518-
MCCFIInstruction::createOffset(nullptr, Reg, Offset));
519-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
520-
.addCFIIndex(CFIIndex);
491+
CFIBuilder.buildOffset(ABI.GetEhDataReg(I), Offset);
521492
}
522493
}
523494

@@ -527,11 +498,7 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF,
527498
BuildMI(MBB, MBBI, dl, TII.get(MOVE), FP).addReg(SP).addReg(ZERO)
528499
.setMIFlag(MachineInstr::FrameSetup);
529500

530-
// emit ".cfi_def_cfa_register $fp"
531-
unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(
532-
nullptr, MRI->getDwarfRegNum(FP, true)));
533-
BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
534-
.addCFIIndex(CFIIndex);
501+
CFIBuilder.buildDefCFARegister(FP);
535502

536503
if (RegInfo.hasStackRealignment(MF)) {
537504
// addiu $Reg, $zero, -MaxAlignment

0 commit comments

Comments
 (0)