[llvm] d21d602 - [NPM] Port ImmutableModuleSummaryAnalysis to NPM (#203510)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 14 02:03:08 PDT 2026
Author: Vikram Hegde
Date: 2026-07-14T14:33:03+05:30
New Revision: d21d602d65bc5f6494da679d004b764e47347b49
URL: https://github.com/llvm/llvm-project/commit/d21d602d65bc5f6494da679d004b764e47347b49
DIFF: https://github.com/llvm/llvm-project/commit/d21d602d65bc5f6494da679d004b764e47347b49.diff
LOG: [NPM] Port ImmutableModuleSummaryAnalysis to NPM (#203510)
Required in LTO pipelines
Added:
Modified:
llvm/include/llvm/Analysis/ModuleSummaryAnalysis.h
llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
llvm/lib/Analysis/StackSafetyAnalysis.cpp
llvm/lib/Passes/PassRegistry.def
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/ModuleSummaryAnalysis.h b/llvm/include/llvm/Analysis/ModuleSummaryAnalysis.h
index 7e78e9b9f2262..c0d198d16bba5 100644
--- a/llvm/include/llvm/Analysis/ModuleSummaryAnalysis.h
+++ b/llvm/include/llvm/Analysis/ModuleSummaryAnalysis.h
@@ -92,6 +92,35 @@ class LLVM_ABI ImmutableModuleSummaryIndexWrapperPass : public ImmutablePass {
void getAnalysisUsage(AnalysisUsage &AU) const override;
};
+/// NPM analysis to provide an externally-built ModuleSummaryIndex (e.g. the
+/// combined index from LTO).
+class ImmutableModuleSummaryIndexAnalysis
+ : public AnalysisInfoMixin<ImmutableModuleSummaryIndexAnalysis> {
+ friend AnalysisInfoMixin<ImmutableModuleSummaryIndexAnalysis>;
+ LLVM_ABI static AnalysisKey Key;
+ const ModuleSummaryIndex *Index = nullptr;
+
+public:
+ class Result {
+ const ModuleSummaryIndex *Index = nullptr;
+ Result(const ModuleSummaryIndex *Index) : Index(Index) {}
+ friend class ImmutableModuleSummaryIndexAnalysis;
+
+ public:
+ const ModuleSummaryIndex *getIndex() const { return Index; }
+ bool invalidate(Module &, const PreservedAnalyses &,
+ ModuleAnalysisManager::Invalidator &) {
+ return false;
+ }
+ };
+
+ ImmutableModuleSummaryIndexAnalysis() = default;
+ ImmutableModuleSummaryIndexAnalysis(const ModuleSummaryIndex *Index)
+ : Index(Index) {}
+
+ Result run(Module &M, ModuleAnalysisManager &AM) { return Result(Index); }
+};
+
//===--------------------------------------------------------------------===//
//
// ImmutableModuleSummaryIndexWrapperPass - This pass wrap provided
diff --git a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
index 0a2e5583c240b..33caa268b1c6e 100644
--- a/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
+++ b/llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
@@ -1175,6 +1175,7 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex(
}
AnalysisKey ModuleSummaryIndexAnalysis::Key;
+AnalysisKey ImmutableModuleSummaryIndexAnalysis::Key;
ModuleSummaryIndex
ModuleSummaryIndexAnalysis::run(Module &M, ModuleAnalysisManager &AM) {
diff --git a/llvm/lib/Analysis/StackSafetyAnalysis.cpp b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
index 024a30f10e8f0..9c20019677895 100644
--- a/llvm/lib/Analysis/StackSafetyAnalysis.cpp
+++ b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
@@ -1068,14 +1068,17 @@ AnalysisKey StackSafetyGlobalAnalysis::Key;
StackSafetyGlobalInfo
StackSafetyGlobalAnalysis::run(Module &M, ModuleAnalysisManager &AM) {
- // FIXME: Lookup Module Summary.
FunctionAnalysisManager &FAM =
AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
+ const ModuleSummaryIndex *Index = nullptr;
+ if (auto *IndexPass =
+ AM.getCachedResult<ImmutableModuleSummaryIndexAnalysis>(M))
+ Index = IndexPass->getIndex();
return {&M,
[&FAM](Function &F) -> const StackSafetyInfo & {
return FAM.getResult<StackSafetyAnalysis>(F);
},
- nullptr};
+ Index};
}
PreservedAnalyses StackSafetyGlobalPrinterPass::run(Module &M,
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 04fa421cebb4b..ec5657d3208e9 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -31,6 +31,8 @@ MODULE_ANALYSIS("ir-similarity", IRSimilarityAnalysis())
MODULE_ANALYSIS("last-run-tracking", LastRunTrackingAnalysis())
MODULE_ANALYSIS("lcg", LazyCallGraphAnalysis())
MODULE_ANALYSIS("libcall-lowering-info", LibcallLoweringModuleAnalysis())
+MODULE_ANALYSIS("immutable-module-summary",
+ ImmutableModuleSummaryIndexAnalysis())
MODULE_ANALYSIS("module-summary", ModuleSummaryIndexAnalysis())
MODULE_ANALYSIS("no-op-module", NoOpModuleAnalysis())
MODULE_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
More information about the llvm-commits
mailing list