[llvm] 1672767 - AArch64: Use AArch64InstrInfo instead of base class in frame lowering (#172183)

via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 13 15:16:29 PST 2025


Author: Matt Arsenault
Date: 2025-12-13T23:16:25Z
New Revision: 16727674e09ddd61f998554c21d3cf3bdf392df8

URL: https://github.com/llvm/llvm-project/commit/16727674e09ddd61f998554c21d3cf3bdf392df8
DIFF: https://github.com/llvm/llvm-project/commit/16727674e09ddd61f998554c21d3cf3bdf392df8.diff

LOG: AArch64: Use AArch64InstrInfo instead of base class in frame lowering (#172183)

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
    llvm/lib/Target/AArch64/AArch64FrameLowering.h
    llvm/lib/Target/AArch64/AArch64PrologueEpilogue.cpp
    llvm/lib/Target/AArch64/AArch64PrologueEpilogue.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
index 799e116f05c27..e1b4d229e113b 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
@@ -990,7 +990,7 @@ bool AArch64FrameLowering::shouldSignReturnAddressEverywhere(
 // code on Windows.
 MachineBasicBlock::iterator
 AArch64FrameLowering::insertSEH(MachineBasicBlock::iterator MBBI,
-                                const TargetInstrInfo &TII,
+                                const AArch64InstrInfo &TII,
                                 MachineInstr::MIFlag Flag) const {
   unsigned Opc = MBBI->getOpcode();
   MachineBasicBlock *MBB = MBBI->getParent();
@@ -1181,7 +1181,7 @@ bool AArch64FrameLowering::requiresSaveVG(const MachineFunction &MF) const {
 void AArch64FrameLowering::emitPacRetPlusLeafHardening(
     MachineFunction &MF) const {
   const AArch64Subtarget &Subtarget = MF.getSubtarget<AArch64Subtarget>();
-  const TargetInstrInfo *TII = Subtarget.getInstrInfo();
+  const AArch64InstrInfo *TII = Subtarget.getInstrInfo();
 
   auto EmitSignRA = [&](MachineBasicBlock &MBB) {
     DebugLoc DL; // Set debug location to unknown.
@@ -1947,8 +1947,9 @@ bool AArch64FrameLowering::spillCalleeSavedRegisters(
     MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
     ArrayRef<CalleeSavedInfo> CSI, const TargetRegisterInfo *TRI) const {
   MachineFunction &MF = *MBB.getParent();
-  auto &TLI = *MF.getSubtarget<AArch64Subtarget>().getTargetLowering();
-  const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
+  const AArch64Subtarget &Subtarget = MF.getSubtarget<AArch64Subtarget>();
+  auto &TLI = *Subtarget.getTargetLowering();
+  const AArch64InstrInfo &TII = *Subtarget.getInstrInfo();
   bool NeedsWinCFI = needsWinCFI(MF);
   DebugLoc DL;
   SmallVector<RegPairInfo, 8> RegPairs;
@@ -2165,7 +2166,8 @@ bool AArch64FrameLowering::restoreCalleeSavedRegisters(
     MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
     MutableArrayRef<CalleeSavedInfo> CSI, const TargetRegisterInfo *TRI) const {
   MachineFunction &MF = *MBB.getParent();
-  const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
+  const AArch64InstrInfo &TII =
+      *MF.getSubtarget<AArch64Subtarget>().getInstrInfo();
   DebugLoc DL;
   SmallVector<RegPairInfo, 8> RegPairs;
   bool NeedsWinCFI = needsWinCFI(MF);
@@ -3033,7 +3035,8 @@ void AArch64FrameLowering::processFunctionBeforeFrameFinalized(
   RS->backward(MBBI);
   Register DstReg = RS->FindUnusedReg(&AArch64::GPR64commonRegClass);
   assert(DstReg && "There must be a free register after frame setup");
-  const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
+  const AArch64InstrInfo &TII =
+      *MF.getSubtarget<AArch64Subtarget>().getInstrInfo();
   BuildMI(MBB, MBBI, DL, TII.get(AArch64::MOVi64imm), DstReg).addImm(-2);
   BuildMI(MBB, MBBI, DL, TII.get(AArch64::STURXi))
       .addReg(DstReg, getKillRegState(true))

diff  --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.h b/llvm/lib/Target/AArch64/AArch64FrameLowering.h
index b2002dfd7039f..7ef2c4f388c7c 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.h
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.h
@@ -21,6 +21,7 @@ namespace llvm {
 
 class TargetLowering;
 class AArch64FunctionInfo;
+class AArch64InstrInfo;
 class AArch64PrologueEmitter;
 class AArch64EpilogueEmitter;
 
@@ -235,7 +236,7 @@ class AArch64FrameLowering : public TargetFrameLowering {
   // Given a load or a store instruction, generate an appropriate unwinding SEH
   // code on Windows.
   MachineBasicBlock::iterator insertSEH(MachineBasicBlock::iterator MBBI,
-                                        const TargetInstrInfo &TII,
+                                        const AArch64InstrInfo &TII,
                                         MachineInstr::MIFlag Flag) const;
 
   /// Returns how much of the incoming argument stack area (in bytes) we should

diff  --git a/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.cpp b/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.cpp
index bb4f7e241fbca..d7b2ddcd06334 100644
--- a/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.cpp
@@ -162,8 +162,7 @@ AArch64PrologueEpilogueCommon::convertCalleeSaveRestoreToSPPrePostIncDec(
   }
   TypeSize Scale = TypeSize::getFixed(1), Width = TypeSize::getFixed(0);
   int64_t MinOffset, MaxOffset;
-  bool Success = static_cast<const AArch64InstrInfo *>(TII)->getMemOpInfo(
-      NewOpc, Scale, Width, MinOffset, MaxOffset);
+  bool Success = TII->getMemOpInfo(NewOpc, Scale, Width, MinOffset, MaxOffset);
   (void)Success;
   assert(Success && "unknown load/store opcode");
 

diff  --git a/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.h b/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.h
index 7f297b5d337b0..326a6ea3e25ee 100644
--- a/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.h
+++ b/llvm/lib/Target/AArch64/AArch64PrologueEpilogue.h
@@ -22,10 +22,11 @@
 
 namespace llvm {
 
-class TargetLowering;
-class AArch64Subtarget;
 class AArch64FunctionInfo;
 class AArch64FrameLowering;
+class AArch64InstrInfo;
+class AArch64Subtarget;
+class TargetLowering;
 
 struct SVEFrameSizes {
   struct {
@@ -93,7 +94,7 @@ class AArch64PrologueEpilogueCommon {
   // Note: "HasWinCFI" is mutable as it can change in any "emit" function.
   mutable bool HasWinCFI = false;
 
-  const TargetInstrInfo *TII = nullptr;
+  const AArch64InstrInfo *TII = nullptr;
   AArch64FunctionInfo *AFI = nullptr;
 };
 


        


More information about the llvm-commits mailing list