[llvm] 311c3ce - [NewPM] Port StaticDataAnnotator

via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 5 19:42:47 PDT 2026


Author: Aiden Grossman
Date: 2026-07-06T02:42:44Z
New Revision: 311c3cee0c6c6d7f192b58ec02dd381539ccb0a2

URL: https://github.com/llvm/llvm-project/commit/311c3cee0c6c6d7f192b58ec02dd381539ccb0a2
DIFF: https://github.com/llvm/llvm-project/commit/311c3cee0c6c6d7f192b58ec02dd381539ccb0a2.diff

LOG: [NewPM] Port StaticDataAnnotator

Standard NewPM pass porting. The PassBuilder wireup/test coverage will
come in the next PR.

Reviewers: arsenm, teresajohnson, mingmingl-llvm

Pull Request: https://github.com/llvm/llvm-project/pull/207629

Added: 
    llvm/include/llvm/CodeGen/StaticDataAnnotator.h

Modified: 
    llvm/include/llvm/CodeGen/Passes.h
    llvm/include/llvm/InitializePasses.h
    llvm/include/llvm/Passes/MachinePassRegistry.def
    llvm/lib/CodeGen/CodeGen.cpp
    llvm/lib/CodeGen/StaticDataAnnotator.cpp
    llvm/lib/CodeGen/TargetPassConfig.cpp
    llvm/lib/Passes/PassBuilder.cpp
    llvm/lib/Passes/PassRegistry.def

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/Passes.h b/llvm/include/llvm/CodeGen/Passes.h
index d30f4e2031817..34ba2a2cae897 100644
--- a/llvm/include/llvm/CodeGen/Passes.h
+++ b/llvm/include/llvm/CodeGen/Passes.h
@@ -91,7 +91,7 @@ LLVM_ABI MachineFunctionPass *createStaticDataSplitterLegacyPass();
 /// createStaticDataAnnotatorPASS - This is a module pass that reads from
 /// StaticDataProfileInfoWrapperPass and annotates the section prefix of
 /// global variables.
-LLVM_ABI ModulePass *createStaticDataAnnotatorPass();
+LLVM_ABI ModulePass *createStaticDataAnnotatorLegacyPass();
 
 /// MachineFunctionPrinter pass - This pass prints out the machine function to
 /// the given stream as a debugging tool.

diff  --git a/llvm/include/llvm/CodeGen/StaticDataAnnotator.h b/llvm/include/llvm/CodeGen/StaticDataAnnotator.h
new file mode 100644
index 0000000000000..14a00340954c6
--- /dev/null
+++ b/llvm/include/llvm/CodeGen/StaticDataAnnotator.h
@@ -0,0 +1,25 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_STATICDATAANNOTATOR_H
+#define LLVM_CODEGEN_STATICDATAANNOTATOR_H
+
+#include "llvm/IR/Analysis.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class StaticDataAnnoatorPass
+    : public OptionalPassInfoMixin<StaticDataAnnoatorPass> {
+public:
+  LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+} // namespace llvm
+
+#endif // LLVM_CODEGEN_STATICDATAANNOTATOR_H

diff  --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h
index c24edf0e6a2e8..4280d35e53405 100644
--- a/llvm/include/llvm/InitializePasses.h
+++ b/llvm/include/llvm/InitializePasses.h
@@ -215,7 +215,7 @@ LLVM_ABI void
 initializeMachineOptimizationRemarkEmitterPassPass(PassRegistry &);
 LLVM_ABI void initializeMachineOutlinerPass(PassRegistry &);
 LLVM_ABI void initializeStaticDataProfileInfoWrapperPassPass(PassRegistry &);
-LLVM_ABI void initializeStaticDataAnnotatorPass(PassRegistry &);
+LLVM_ABI void initializeStaticDataAnnotatorLegacyPass(PassRegistry &);
 LLVM_ABI void initializeMachinePipelinerPass(PassRegistry &);
 LLVM_ABI void initializeMachinePostDominatorTreeWrapperPassPass(PassRegistry &);
 LLVM_ABI void initializeMachineRegionInfoPassPass(PassRegistry &);

diff  --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def
index 7a910556d1acc..a37deee1e5ff9 100644
--- a/llvm/include/llvm/Passes/MachinePassRegistry.def
+++ b/llvm/include/llvm/Passes/MachinePassRegistry.def
@@ -225,7 +225,6 @@ MACHINE_FUNCTION_PASS_WITH_PARAMS(
 #define DUMMY_MACHINE_MODULE_PASS(NAME, PASS_NAME)
 #endif
 DUMMY_MACHINE_MODULE_PASS("machine-outliner", MachineOutlinerPass)
-DUMMY_MACHINE_MODULE_PASS("static-data-annotator", StaticDataAnnotator)
 DUMMY_MACHINE_MODULE_PASS("pseudo-probe-inserter", PseudoProbeInserterPass)
 #undef DUMMY_MACHINE_MODULE_PASS
 

diff  --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp
index 1f7a5a02138e4..e0ed5731144b3 100644
--- a/llvm/lib/CodeGen/CodeGen.cpp
+++ b/llvm/lib/CodeGen/CodeGen.cpp
@@ -153,7 +153,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) {
   initializeStackProtectorPass(Registry);
   initializeStackSlotColoringLegacyPass(Registry);
   initializeStaticDataSplitterLegacyPass(Registry);
-  initializeStaticDataAnnotatorPass(Registry);
+  initializeStaticDataAnnotatorLegacyPass(Registry);
   initializeStripDebugMachineModulePass(Registry);
   initializeTailDuplicateLegacyPass(Registry);
   initializeTargetPassConfigPass(Registry);

diff  --git a/llvm/lib/CodeGen/StaticDataAnnotator.cpp b/llvm/lib/CodeGen/StaticDataAnnotator.cpp
index 196963ffa2b41..bc3d856942fd1 100644
--- a/llvm/lib/CodeGen/StaticDataAnnotator.cpp
+++ b/llvm/lib/CodeGen/StaticDataAnnotator.cpp
@@ -27,6 +27,7 @@
 // eagerly scheduled, and a module pass can use MachineBlockFrequencyInfo.
 //===----------------------------------------------------------------------===//
 
+#include "llvm/CodeGen/StaticDataAnnotator.h"
 #include "llvm/Analysis/ProfileSummaryInfo.h"
 #include "llvm/Analysis/StaticDataProfileInfo.h"
 #include "llvm/CodeGen/Passes.h"
@@ -42,14 +43,11 @@ using namespace llvm;
 
 /// A module pass which iterates global variables in the module and annotates
 /// their section prefixes based on profile-driven analysis.
-class StaticDataAnnotator : public ModulePass {
+class StaticDataAnnotatorLegacy : public ModulePass {
 public:
   static char ID;
 
-  StaticDataProfileInfo *SDPI = nullptr;
-  const ProfileSummaryInfo *PSI = nullptr;
-
-  StaticDataAnnotator() : ModulePass(ID) {}
+  StaticDataAnnotatorLegacy() : ModulePass(ID) {}
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
     AU.addRequired<StaticDataProfileInfoWrapperPass>();
@@ -63,12 +61,9 @@ class StaticDataAnnotator : public ModulePass {
   bool runOnModule(Module &M) override;
 };
 
-bool StaticDataAnnotator::runOnModule(Module &M) {
-  SDPI = &getAnalysis<StaticDataProfileInfoWrapperPass>()
-              .getStaticDataProfileInfo();
-  PSI = &getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI();
-
-  if (!PSI->hasProfileSummary())
+static bool annotateModule(Module &M, StaticDataProfileInfo *SDPI,
+                           ProfileSummaryInfo *PSI) {
+  if (!PSI || !PSI->hasProfileSummary())
     return false;
 
   bool Changed = false;
@@ -84,11 +79,29 @@ bool StaticDataAnnotator::runOnModule(Module &M) {
   return Changed;
 }
 
-char StaticDataAnnotator::ID = 0;
+bool StaticDataAnnotatorLegacy::runOnModule(Module &M) {
+  StaticDataProfileInfo *SDPI = &getAnalysis<StaticDataProfileInfoWrapperPass>()
+                                     .getStaticDataProfileInfo();
+  ProfileSummaryInfo *PSI =
+      &getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI();
+  return annotateModule(M, SDPI, PSI);
+}
+
+char StaticDataAnnotatorLegacy::ID = 0;
+
+INITIALIZE_PASS(StaticDataAnnotatorLegacy, DEBUG_TYPE, "Static Data Annotator",
+                false, false)
 
-INITIALIZE_PASS(StaticDataAnnotator, DEBUG_TYPE, "Static Data Annotator", false,
-                false)
+ModulePass *llvm::createStaticDataAnnotatorLegacyPass() {
+  return new StaticDataAnnotatorLegacy();
+}
 
-ModulePass *llvm::createStaticDataAnnotatorPass() {
-  return new StaticDataAnnotator();
+PreservedAnalyses StaticDataAnnoatorPass::run(Module &M,
+                                              ModuleAnalysisManager &MAM) {
+  StaticDataProfileInfo *SDPI = &MAM.getResult<StaticDataProfileInfoAnalysis>(M)
+                                     .getStaticDataProfileInfo();
+  ProfileSummaryInfo *PSI = &MAM.getResult<ProfileSummaryAnalysis>(M);
+  return annotateModule(M, SDPI, PSI)
+             ? PreservedAnalyses::none().preserveSet<CFGAnalyses>()
+             : PreservedAnalyses::all();
 }

diff  --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp
index 0cd4c4b74bd9d..4996f5517fc0a 100644
--- a/llvm/lib/CodeGen/TargetPassConfig.cpp
+++ b/llvm/lib/CodeGen/TargetPassConfig.cpp
@@ -1289,7 +1289,7 @@ void TargetPassConfig::addMachinePasses() {
     // static data annotator pass is a module-wide pass. See the file comment
     // in StaticDataAnnotator.cpp for the motivation.
     addPass(createStaticDataSplitterLegacyPass());
-    addPass(createStaticDataAnnotatorPass());
+    addPass(createStaticDataAnnotatorLegacyPass());
   }
   // We run the BasicBlockSections pass if either we need BB sections or BB
   // address map (or both).

diff  --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 019d43737fbc0..43c76c74c8930 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -183,6 +183,7 @@
 #include "llvm/CodeGen/StackFrameLayoutAnalysisPass.h"
 #include "llvm/CodeGen/StackProtector.h"
 #include "llvm/CodeGen/StackSlotColoring.h"
+#include "llvm/CodeGen/StaticDataAnnotator.h"
 #include "llvm/CodeGen/StaticDataSplitter.h"
 #include "llvm/CodeGen/TailDuplication.h"
 #include "llvm/CodeGen/TargetPassConfig.h"

diff  --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 559e7a297c0c5..04fa421cebb4b 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -172,6 +172,7 @@ MODULE_PASS("scc-oz-module-inliner",
             buildInlinerPipeline(OptimizationLevel::O2,
                                  ThinOrFullLTOPhase::None))
 MODULE_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass())
+MODULE_PASS("static-data-annotator", StaticDataAnnoatorPass())
 MODULE_PASS("strip", StripSymbolsPass())
 MODULE_PASS("strip-dead-debug-info", StripDeadDebugInfoPass())
 MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass())


        


More information about the llvm-commits mailing list