[llvm] [CodeGen][NewPM] Port cfi-fixup to new pass manager (PR #203692)

via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 14 17:54:38 PDT 2026


https://github.com/paperchalice updated https://github.com/llvm/llvm-project/pull/203692

>From 5578fd316c4fe5a8c2f4a6b926bf0e21ef6ae80d Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Sat, 13 Jun 2026 09:59:55 +0800
Subject: [PATCH 1/2] [CodeGen][NewPM] Port cfi-fixup to new pass manager

---
 llvm/include/llvm/CodeGen/CFIFixup.h                   |  7 +++++++
 llvm/include/llvm/Passes/MachinePassRegistry.def       |  2 +-
 llvm/lib/CodeGen/CFIFixup.cpp                          | 10 +++++++++-
 llvm/lib/Passes/PassBuilder.cpp                        |  1 +
 .../CodeGen/AArch64/cfi-fixup-multi-block-prologue.mir |  1 +
 llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir  |  1 +
 llvm/test/CodeGen/AArch64/cfi-fixup.mir                |  1 +
 7 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/CFIFixup.h b/llvm/include/llvm/CodeGen/CFIFixup.h
index 5b425b8574771..d394bdf6bcc90 100644
--- a/llvm/include/llvm/CodeGen/CFIFixup.h
+++ b/llvm/include/llvm/CodeGen/CFIFixup.h
@@ -15,6 +15,7 @@
 #define LLVM_CODEGEN_CFIFIXUP_H
 
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachinePassManager.h"
 #include "llvm/InitializePasses.h"
 
 namespace llvm {
@@ -31,6 +32,12 @@ class LLVM_ABI CFIFixup : public MachineFunctionPass {
 
   bool runOnMachineFunction(MachineFunction &MF) override;
 };
+
+class LLVM_ABI CFIFixupPass : public PassInfoMixin<CFIFixupPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
 } // namespace llvm
 
 #endif // LLVM_CODEGEN_CFIFIXUP_H
diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index a297c08fac1b2..46b268f328780 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -109,6 +109,7 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis())
 MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass())
 MACHINE_FUNCTION_PASS("branch-relaxation", BranchRelaxationPass())
 MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass())
+MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass())
 MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass())
 MACHINE_FUNCTION_PASS("detect-dead-lanes", DetectDeadLanesPass())
 MACHINE_FUNCTION_PASS("dot-machine-cfg", MachineCFGPrinterPass())
@@ -275,7 +276,6 @@ DUMMY_MACHINE_MODULE_PASS("mir-check-debugify", CheckDebugMachineModulePass)
 DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass)
 DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", BasicBlockSectionsProfileReaderPass)
 DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass)
-DUMMY_MACHINE_FUNCTION_PASS("cfi-fixup", CFIFixupPass)
 DUMMY_MACHINE_FUNCTION_PASS("cfi-instr-inserter", CFIInstrInserterPass)
 DUMMY_MACHINE_FUNCTION_PASS("eh-cont-guard-targets", EHContGuardTargetsPass)
 DUMMY_MACHINE_FUNCTION_PASS("fs-profile-loader", MIRProfileLoaderNewPass)
diff --git a/llvm/lib/CodeGen/CFIFixup.cpp b/llvm/lib/CodeGen/CFIFixup.cpp
index c538acb55049d..cd887c3e2da5b 100644
--- a/llvm/lib/CodeGen/CFIFixup.cpp
+++ b/llvm/lib/CodeGen/CFIFixup.cpp
@@ -301,7 +301,7 @@ fixupBlock(MachineBasicBlock &CurrBB, const BlockFlagsVector &BlockInfo,
   return true;
 }
 
-bool CFIFixup::runOnMachineFunction(MachineFunction &MF) {
+static bool runImpl(MachineFunction &MF) {
   if (!MF.getSubtarget().getFrameLowering()->enableCFIFixup(MF))
     return false;
 
@@ -342,3 +342,11 @@ bool CFIFixup::runOnMachineFunction(MachineFunction &MF) {
 
   return Change;
 }
+
+PreservedAnalyses CFIFixupPass::run(MachineFunction &MF,
+                                    MachineFunctionAnalysisManager &) {
+  runImpl(MF);
+  return PreservedAnalyses::all();
+}
+
+bool CFIFixup::runOnMachineFunction(MachineFunction &MF) { return runImpl(MF); }
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 0f288a2124b7b..abf92ba7b018c 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -85,6 +85,7 @@
 #include "llvm/CodeGen/BranchFoldingPass.h"
 #include "llvm/CodeGen/BranchRelaxation.h"
 #include "llvm/CodeGen/BreakFalseDeps.h"
+#include "llvm/CodeGen/CFIFixup.h"
 #include "llvm/CodeGen/CodeGenPrepare.h"
 #include "llvm/CodeGen/ComplexDeinterleavingPass.h"
 #include "llvm/CodeGen/DeadMachineInstructionElim.h"
diff --git a/llvm/test/CodeGen/AArch64/cfi-fixup-multi-block-prologue.mir b/llvm/test/CodeGen/AArch64/cfi-fixup-multi-block-prologue.mir
index d696776f45d51..8b1bdc96dfaf4 100644
--- a/llvm/test/CodeGen/AArch64/cfi-fixup-multi-block-prologue.mir
+++ b/llvm/test/CodeGen/AArch64/cfi-fixup-multi-block-prologue.mir
@@ -1,5 +1,6 @@
 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
 # RUN: llc -run-pass=cfi-fixup %s -o - | FileCheck %s
+# RUN: llc -p cfi-fixup %s -o - | FileCheck %s
 --- |
   source_filename = "cfi-fixup.ll"
   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
diff --git a/llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir b/llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir
index 47ede6af42113..b621f89075aa3 100644
--- a/llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir
+++ b/llvm/test/CodeGen/AArch64/cfi-fixup-multi-section.mir
@@ -1,5 +1,6 @@
 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
 # RUN: llc -mtriple=aarch64 -run-pass=cfi-fixup %s -o - | FileCheck %s
+# RUN: llc -mtriple=aarch64 -p cfi-fixup %s -o - | FileCheck %s
 --- |
   define i32 @f0(i32 %x) #0 {
   entry: br label %return
diff --git a/llvm/test/CodeGen/AArch64/cfi-fixup.mir b/llvm/test/CodeGen/AArch64/cfi-fixup.mir
index b4df731fb266b..0fc333bc4b00d 100644
--- a/llvm/test/CodeGen/AArch64/cfi-fixup.mir
+++ b/llvm/test/CodeGen/AArch64/cfi-fixup.mir
@@ -1,5 +1,6 @@
 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
 # RUN: llc -mtriple=aarch64 -run-pass=cfi-fixup %s -o - | FileCheck %s
+# RUN: llc -mtriple=aarch64 -p cfi-fixup %s -o - | FileCheck %s
 --- |
   define i32 @f0(i32 %x) #0 {
   entry: br label %return

>From b23ced305ee4c67eeda27ddff2984bef208ae6fe Mon Sep 17 00:00:00 2001
From: PaperChalice <liujunchang97 at outlook.com>
Date: Mon, 15 Jun 2026 08:54:24 +0800
Subject: [PATCH 2/2] add Legacy suffix

---
 llvm/include/llvm/CodeGen/CFIFixup.h  |  4 ++--
 llvm/include/llvm/CodeGen/Passes.h    |  2 +-
 llvm/include/llvm/InitializePasses.h  |  2 +-
 llvm/lib/CodeGen/CFIFixup.cpp         | 10 ++++++----
 llvm/lib/CodeGen/TargetPassConfig.cpp |  2 +-
 5 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/CFIFixup.h b/llvm/include/llvm/CodeGen/CFIFixup.h
index d394bdf6bcc90..5901875bf215d 100644
--- a/llvm/include/llvm/CodeGen/CFIFixup.h
+++ b/llvm/include/llvm/CodeGen/CFIFixup.h
@@ -19,11 +19,11 @@
 #include "llvm/InitializePasses.h"
 
 namespace llvm {
-class LLVM_ABI CFIFixup : public MachineFunctionPass {
+class LLVM_ABI CFIFixupLegacy : public MachineFunctionPass {
 public:
   static char ID;
 
-  CFIFixup() : MachineFunctionPass(ID) {}
+  CFIFixupLegacy() : MachineFunctionPass(ID) {}
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
     AU.setPreservesAll();
diff --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index 2fdf792512ec9..b2a16dd74c304 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -562,7 +562,7 @@ LLVM_ABI FunctionPass *createBreakFalseDepsLegacyPass();
 LLVM_ABI FunctionPass *createIndirectBrExpandPass();
 
 /// Creates CFI Fixup pass. \see CFIFixup.cpp
-LLVM_ABI FunctionPass *createCFIFixup();
+LLVM_ABI FunctionPass *createCFIFixupLegacy();
 
 /// Creates CFI Instruction Inserter pass. \see CFIInstrInserter.cpp
 LLVM_ABI FunctionPass *createCFIInstrInserter();
diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index c576b1562385f..ebaefc3ec451b 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -74,7 +74,7 @@ LLVM_ABI void initializeCanonicalizeFreezeInLoopsPass(PassRegistry &);
 LLVM_ABI void initializeCFGSimplifyPassPass(PassRegistry &);
 LLVM_ABI void initializeCFGuardPass(PassRegistry &);
 LLVM_ABI void initializeCFGuardLongjmpPass(PassRegistry &);
-LLVM_ABI void initializeCFIFixupPass(PassRegistry &);
+LLVM_ABI void initializeCFIFixupLegacyPass(PassRegistry &);
 LLVM_ABI void initializeCFIInstrInserterPass(PassRegistry &);
 LLVM_ABI void initializeCallGraphDOTPrinterPass(PassRegistry &);
 LLVM_ABI void initializeCallGraphViewerPass(PassRegistry &);
diff --git a/llvm/lib/CodeGen/CFIFixup.cpp b/llvm/lib/CodeGen/CFIFixup.cpp
index cd887c3e2da5b..45e582f1f18bc 100644
--- a/llvm/lib/CodeGen/CFIFixup.cpp
+++ b/llvm/lib/CodeGen/CFIFixup.cpp
@@ -88,11 +88,11 @@ using namespace llvm;
 
 #define DEBUG_TYPE "cfi-fixup"
 
-char CFIFixup::ID = 0;
+char CFIFixupLegacy::ID = 0;
 
-INITIALIZE_PASS(CFIFixup, "cfi-fixup",
+INITIALIZE_PASS(CFIFixupLegacy, "cfi-fixup",
                 "Insert CFI remember/restore state instructions", false, false)
-FunctionPass *llvm::createCFIFixup() { return new CFIFixup(); }
+FunctionPass *llvm::createCFIFixupLegacy() { return new CFIFixupLegacy(); }
 
 static bool isPrologueCFIInstruction(const MachineInstr &MI) {
   return MI.getOpcode() == TargetOpcode::CFI_INSTRUCTION &&
@@ -349,4 +349,6 @@ PreservedAnalyses CFIFixupPass::run(MachineFunction &MF,
   return PreservedAnalyses::all();
 }
 
-bool CFIFixup::runOnMachineFunction(MachineFunction &MF) { return runImpl(MF); }
+bool CFIFixupLegacy::runOnMachineFunction(MachineFunction &MF) {
+  return runImpl(MF);
+}
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index 6231ab1ba0734..4a76aba55b78b 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1313,7 +1313,7 @@ void TargetPassConfig::addMachinePasses() {
   addPostBBSections();
 
   if (!DisableCFIFixup && TM->Options.EnableCFIFixup)
-    addPass(createCFIFixup());
+    addPass(createCFIFixupLegacy());
 
   PM->add(createStackFrameLayoutAnalysisPass());
 



More information about the llvm-commits mailing list