[llvm] Revert "[CFIFixup] Factor CFI remember/restore insertion into a helper (NFC)" (PR #111168)

Daniel Hoekwater via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 4 07:33:26 PDT 2024


https://github.com/dhoekwater created https://github.com/llvm/llvm-project/pull/111168

Reverts llvm/llvm-project#111066

This seems to be breaking some builds:
- https://lab.llvm.org/buildbot/#/builders/51/builds/4732
- https://lab.llvm.org/buildbot/#/builders/41/builds/2534
- https://lab.llvm.org/buildbot/#/builders/73/builds/6601

>From 92b4baaa5d8ce3aad74c070ae7f1bdc393fae751 Mon Sep 17 00:00:00 2001
From: Daniel Hoekwater <danieh65 at gmail.com>
Date: Fri, 4 Oct 2024 10:32:49 -0400
Subject: [PATCH] =?UTF-8?q?Revert=20"[CFIFixup]=20Factor=20CFI=20remember/?=
 =?UTF-8?q?restore=20insertion=20into=20a=20helper=20(NFC)=20=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 47c8b95daeec8e6cb012344ed037024528a73295.
---
 llvm/lib/CodeGen/CFIFixup.cpp | 46 ++++++++++++-----------------------
 1 file changed, 16 insertions(+), 30 deletions(-)

diff --git a/llvm/lib/CodeGen/CFIFixup.cpp b/llvm/lib/CodeGen/CFIFixup.cpp
index e881a62522f0cb..61888a42666524 100644
--- a/llvm/lib/CodeGen/CFIFixup.cpp
+++ b/llvm/lib/CodeGen/CFIFixup.cpp
@@ -116,32 +116,6 @@ findPrologueEnd(MachineFunction &MF, MachineBasicBlock::iterator &PrologueEnd) {
   return nullptr;
 }
 
-// Inserts a `.cfi_remember_state` instruction before PrologueEnd and a
-// `.cfi_restore_state` instruction before DstInsertPt. Returns an iterator
-// to the first instruction after the inserted `.cfi_restore_state` instruction.
-static MachineBasicBlock::iterator
-insertRememberRestorePair(MachineBasicBlock::iterator RememberInsertPt,
-                          MachineBasicBlock::iterator RestoreInsertPt) {
-  MachineBasicBlock *RememberMBB = RememberInsertPt->getParent();
-  MachineBasicBlock *RestoreMBB = RestoreInsertPt->getParent();
-  MachineFunction &MF = *RememberMBB->getParent();
-  const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
-
-  // Insert the `.cfi_remember_state` instruction.
-  unsigned CFIIndex =
-      MF.addFrameInst(MCCFIInstruction::createRememberState(nullptr));
-  BuildMI(*RememberMBB, RememberInsertPt, DebugLoc(),
-          TII.get(TargetOpcode::CFI_INSTRUCTION))
-      .addCFIIndex(CFIIndex);
-
-  // Insert the `.cfi_restore_state` instruction.
-  CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestoreState(nullptr));
-  BuildMI(*RestoreMBB, RestoreInsertPt, DebugLoc(),
-          TII.get(TargetOpcode::CFI_INSTRUCTION))
-      .addCFIIndex(CFIIndex);
-  return RestoreInsertPt;
-}
-
 bool CFIFixup::runOnMachineFunction(MachineFunction &MF) {
   const TargetFrameLowering &TFL = *MF.getSubtarget().getFrameLowering();
   if (!TFL.enableCFIFixup(MF))
@@ -200,10 +174,12 @@ bool CFIFixup::runOnMachineFunction(MachineFunction &MF) {
   // Every block inherits the frame state (as recorded in the unwind tables)
   // of the previous block. If the intended frame state is different, insert
   // compensating CFI instructions.
+  const TargetInstrInfo &TII = *MF.getSubtarget().getInstrInfo();
   bool Change = false;
   // `InsertPt` always points to the point in a preceding block where we have to
   // insert a `.cfi_remember_state`, in the case that the current block needs a
   // `.cfi_restore_state`.
+  MachineBasicBlock *InsertMBB = PrologueBlock;
   MachineBasicBlock::iterator InsertPt = PrologueEnd;
 
   assert(InsertPt != PrologueBlock->begin() &&
@@ -234,10 +210,20 @@ bool CFIFixup::runOnMachineFunction(MachineFunction &MF) {
     if (!Info.StrongNoFrameOnEntry && Info.HasFrameOnEntry && !HasFrame) {
       // Reset to the "after prologue" state.
 
-      // There's an earlier block known to have a stack frame. Insert a
-      // `.cfi_remember_state` instruction into that block and a
-      // `.cfi_restore_state` instruction at the beginning of the current block.
-      InsertPt = insertRememberRestorePair(InsertPt, CurrBB->begin());
+      // Insert a `.cfi_remember_state` into the last block known to have a
+      // stack frame.
+      unsigned CFIIndex =
+          MF.addFrameInst(MCCFIInstruction::createRememberState(nullptr));
+      BuildMI(*InsertMBB, InsertPt, DebugLoc(),
+              TII.get(TargetOpcode::CFI_INSTRUCTION))
+          .addCFIIndex(CFIIndex);
+      // Insert a `.cfi_restore_state` at the beginning of the current block.
+      CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestoreState(nullptr));
+      InsertPt = BuildMI(*CurrBB, CurrBB->begin(), DebugLoc(),
+                         TII.get(TargetOpcode::CFI_INSTRUCTION))
+                     .addCFIIndex(CFIIndex);
+      ++InsertPt;
+      InsertMBB = &*CurrBB;
       Change = true;
     } else if ((Info.StrongNoFrameOnEntry || !Info.HasFrameOnEntry) &&
                HasFrame) {



More information about the llvm-commits mailing list