[llvm] [NewPM] Port AArch64CollectLOHPass (PR #185789)

via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 10 19:07:39 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: Anshul Nigham (nigham)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/185789.diff


4 Files Affected:

- (modified) llvm/lib/Target/AArch64/AArch64.h (+7-1) 
- (modified) llvm/lib/Target/AArch64/AArch64CollectLOH.cpp (+30-11) 
- (modified) llvm/lib/Target/AArch64/AArch64PassRegistry.def (+1) 
- (modified) llvm/lib/Target/AArch64/AArch64TargetMachine.cpp (+1-1) 


``````````diff
diff --git a/llvm/lib/Target/AArch64/AArch64.h b/llvm/lib/Target/AArch64/AArch64.h
index ca9a78114158e..aa8ba0600fed5 100644
--- a/llvm/lib/Target/AArch64/AArch64.h
+++ b/llvm/lib/Target/AArch64/AArch64.h
@@ -87,7 +87,7 @@ void initializeAArch64AsmPrinterPass(PassRegistry &);
 void initializeAArch64PointerAuthPass(PassRegistry&);
 void initializeAArch64BranchTargetsLegacyPass(PassRegistry &);
 void initializeAArch64CFIFixupPass(PassRegistry&);
-void initializeAArch64CollectLOHPass(PassRegistry &);
+void initializeAArch64CollectLOHLegacyPass(PassRegistry &);
 void initializeAArch64CompressJumpTablesPass(PassRegistry&);
 void initializeAArch64CondBrTuningPass(PassRegistry &);
 void initializeAArch64ConditionOptimizerPass(PassRegistry&);
@@ -149,6 +149,12 @@ class AArch64AdvSIMDScalarPass
                         MachineFunctionAnalysisManager &MFAM);
 };
 
+class AArch64CollectLOHPass : public PassInfoMixin<AArch64CollectLOHPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+
 } // end namespace llvm
 
 #endif
diff --git a/llvm/lib/Target/AArch64/AArch64CollectLOH.cpp b/llvm/lib/Target/AArch64/AArch64CollectLOH.cpp
index 069147a1b669b..fe77e3e49013d 100644
--- a/llvm/lib/Target/AArch64/AArch64CollectLOH.cpp
+++ b/llvm/lib/Target/AArch64/AArch64CollectLOH.cpp
@@ -84,7 +84,8 @@
 // This LOH aims at getting rid of redundant ADRP instructions.
 //
 // The overall design for emitting the LOHs is:
-// 1. AArch64CollectLOH (this pass) records the LOHs in the AArch64FunctionInfo.
+// 1. AArch64CollectLOHLegacy (this pass) records the LOHs in the
+// AArch64FunctionInfo.
 // 2. AArch64AsmPrinter reads the LOHs from AArch64FunctionInfo and it:
 //     1. Associates them a label.
 //     2. Emits them in a MCStreamer (EmitLOHDirective).
@@ -125,11 +126,21 @@ STATISTIC(NumADRSimpleCandidate, "Number of simplifiable ADRP + ADD");
 
 namespace {
 
-struct AArch64CollectLOH : public MachineFunctionPass {
+struct AArch64CollectLOHImpl {
+  bool run(MachineFunction &MF);
+};
+
+struct AArch64CollectLOHLegacy : public MachineFunctionPass {
   static char ID;
-  AArch64CollectLOH() : MachineFunctionPass(ID) {}
+  AArch64CollectLOHLegacy() : MachineFunctionPass(ID) {
+    initializeAArch64CollectLOHLegacyPass(*PassRegistry::getPassRegistry());
+  }
 
-  bool runOnMachineFunction(MachineFunction &MF) override;
+  bool runOnMachineFunction(MachineFunction &MF) override {
+    if (skipFunction(MF.getFunction()))
+      return false;
+    return AArch64CollectLOHImpl().run(MF);
+  }
 
   MachineFunctionProperties getRequiredProperties() const override {
     return MachineFunctionProperties().setNoVRegs();
@@ -143,11 +154,11 @@ struct AArch64CollectLOH : public MachineFunctionPass {
   }
 };
 
-char AArch64CollectLOH::ID = 0;
+char AArch64CollectLOHLegacy::ID = 0;
 
 } // end anonymous namespace.
 
-INITIALIZE_PASS(AArch64CollectLOH, "aarch64-collect-loh",
+INITIALIZE_PASS(AArch64CollectLOHLegacy, "aarch64-collect-loh",
                 AARCH64_COLLECT_LOH_NAME, false, false)
 
 static bool canAddBePartOfLOH(const MachineInstr &MI) {
@@ -536,10 +547,7 @@ static void handleNormalInst(const MachineInstr &MI, LOHInfo *LOHInfos) {
   }
 }
 
-bool AArch64CollectLOH::runOnMachineFunction(MachineFunction &MF) {
-  if (skipFunction(MF.getFunction()))
-    return false;
-
+bool AArch64CollectLOHImpl::run(MachineFunction &MF) {
   LLVM_DEBUG(dbgs() << "********** AArch64 Collect LOH **********\n"
                     << "Looking in function " << MF.getName() << '\n');
 
@@ -595,6 +603,17 @@ bool AArch64CollectLOH::runOnMachineFunction(MachineFunction &MF) {
   return false;
 }
 
+PreservedAnalyses
+AArch64CollectLOHPass::run(MachineFunction &MF,
+                           MachineFunctionAnalysisManager &MFAM) {
+  bool Changed = AArch64CollectLOHImpl().run(MF);
+  if (!Changed)
+    return PreservedAnalyses::all();
+  PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses();
+  PA.preserveSet<CFGAnalyses>();
+  return PA;
+}
+
 FunctionPass *llvm::createAArch64CollectLOHPass() {
-  return new AArch64CollectLOH();
+  return new AArch64CollectLOHLegacy();
 }
diff --git a/llvm/lib/Target/AArch64/AArch64PassRegistry.def b/llvm/lib/Target/AArch64/AArch64PassRegistry.def
index 47e6130d6891b..de1f08025edbc 100644
--- a/llvm/lib/Target/AArch64/AArch64PassRegistry.def
+++ b/llvm/lib/Target/AArch64/AArch64PassRegistry.def
@@ -27,6 +27,7 @@
 #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
 #endif
 MACHINE_FUNCTION_PASS("aarch64-branch-targets", AArch64BranchTargetsPass())
+MACHINE_FUNCTION_PASS("aarch64-collect-loh", AArch64CollectLOHPass())
 MACHINE_FUNCTION_PASS("aarch64-fix-cortex-a53-835769", AArch64A53Fix835769Pass())
 MACHINE_FUNCTION_PASS("aarch64-ldst-opt", AArch64LoadStoreOptPass())
 MACHINE_FUNCTION_PASS("aarch64-simd-scalar", AArch64AdvSIMDScalarPass())
diff --git a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
index 45d01c7d3ae93..4c2caab8c8cd3 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
@@ -248,7 +248,7 @@ LLVMInitializeAArch64Target() {
   initializeAArch64AdvSIMDScalarLegacyPass(PR);
   initializeAArch64AsmPrinterPass(PR);
   initializeAArch64BranchTargetsLegacyPass(PR);
-  initializeAArch64CollectLOHPass(PR);
+  initializeAArch64CollectLOHLegacyPass(PR);
   initializeAArch64CompressJumpTablesPass(PR);
   initializeAArch64ConditionalComparesPass(PR);
   initializeAArch64ConditionOptimizerPass(PR);

``````````

</details>


https://github.com/llvm/llvm-project/pull/185789


More information about the llvm-commits mailing list