[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