[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