[llvm] f445284 - [WebAssembly] Port WebAssemblyAddMissingPrototypesPass to NewPM

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 15 06:51:46 PDT 2026


Author: Aiden Grossman
Date: 2026-07-15T06:51:41-07:00
New Revision: f4452848f0a5e827f5732ab390099d7d90084ca0

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

LOG: [WebAssembly] Port WebAssemblyAddMissingPrototypesPass to NewPM

Standard pass porting.

Reviewers: dschuff, aheejin, sbc100

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

Added: 
    

Modified: 
    llvm/lib/Target/WebAssembly/WebAssembly.h
    llvm/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
    llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
    llvm/test/CodeGen/WebAssembly/add-prototypes.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/WebAssembly/WebAssembly.h b/llvm/lib/Target/WebAssembly/WebAssembly.h
index 9b54f49a2dcb6..cf5ff90d635f4 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -19,6 +19,8 @@
 #include "WebAssemblySubtarget.h"
 #include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
 #include "llvm/CodeGen/SelectionDAGISel.h"
+#include "llvm/IR/Analysis.h"
+#include "llvm/IR/PassManager.h"
 #include "llvm/PassRegistry.h"
 #include "llvm/Support/CodeGen.h"
 
@@ -30,7 +32,14 @@ class FunctionPass;
 
 // LLVM IR passes.
 ModulePass *createWebAssemblyLowerEmscriptenEHSjLj();
-ModulePass *createWebAssemblyAddMissingPrototypes();
+
+class WebAssemblyAddMissingPrototypesPass
+    : public RequiredPassInfoMixin<WebAssemblyAddMissingPrototypesPass> {
+public:
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+ModulePass *createWebAssemblyAddMissingPrototypesLegacyPass();
 ModulePass *createWebAssemblyFixFunctionBitcasts();
 FunctionPass *createWebAssemblyOptimizeReturned();
 FunctionPass *createWebAssemblyRefTypeMem2Local();
@@ -85,7 +94,7 @@ ModulePass *createWebAssemblyMCLowerPrePass();
 void initializeFixFunctionBitcastsPass(PassRegistry &);
 void initializeOptimizeReturnedPass(PassRegistry &);
 void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &);
-void initializeWebAssemblyAddMissingPrototypesPass(PassRegistry &);
+void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &);
 void initializeWebAssemblyArgumentMovePass(PassRegistry &);
 void initializeWebAssemblyAsmPrinterPass(PassRegistry &);
 void initializeWebAssemblyCleanCodeAfterTrapPass(PassRegistry &);

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
index 344a3636b431b..6c607fb9236d7 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyAddMissingPrototypes.cpp
@@ -19,9 +19,11 @@
 //===----------------------------------------------------------------------===//
 
 #include "WebAssembly.h"
+#include "llvm/IR/Analysis.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Operator.h"
+#include "llvm/IR/PassManager.h"
 #include "llvm/Pass.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Transforms/Utils/Local.h"
@@ -31,7 +33,7 @@ using namespace llvm;
 #define DEBUG_TYPE "wasm-add-missing-prototypes"
 
 namespace {
-class WebAssemblyAddMissingPrototypes final : public ModulePass {
+class WebAssemblyAddMissingPrototypesLegacy final : public ModulePass {
   StringRef getPassName() const override {
     return "Add prototypes to prototypes-less functions";
   }
@@ -45,19 +47,19 @@ class WebAssemblyAddMissingPrototypes final : public ModulePass {
 
 public:
   static char ID;
-  WebAssemblyAddMissingPrototypes() : ModulePass(ID) {}
+  WebAssemblyAddMissingPrototypesLegacy() : ModulePass(ID) {}
 };
 } // End anonymous namespace
 
-char WebAssemblyAddMissingPrototypes::ID = 0;
-INITIALIZE_PASS(WebAssemblyAddMissingPrototypes, DEBUG_TYPE,
+char WebAssemblyAddMissingPrototypesLegacy::ID = 0;
+INITIALIZE_PASS(WebAssemblyAddMissingPrototypesLegacy, DEBUG_TYPE,
                 "Add prototypes to prototypes-less functions", false, false)
 
-ModulePass *llvm::createWebAssemblyAddMissingPrototypes() {
-  return new WebAssemblyAddMissingPrototypes();
+ModulePass *llvm::createWebAssemblyAddMissingPrototypesLegacyPass() {
+  return new WebAssemblyAddMissingPrototypesLegacy();
 }
 
-bool WebAssemblyAddMissingPrototypes::runOnModule(Module &M) {
+static bool addMissingPrototypes(Module &M) {
   LLVM_DEBUG(dbgs() << "********** Add Missing Prototypes **********\n");
 
   std::vector<std::pair<Function *, Function *>> Replacements;
@@ -151,3 +153,15 @@ bool WebAssemblyAddMissingPrototypes::runOnModule(Module &M) {
 
   return !Replacements.empty();
 }
+
+bool WebAssemblyAddMissingPrototypesLegacy::runOnModule(Module &M) {
+  return addMissingPrototypes(M);
+}
+
+PreservedAnalyses
+WebAssemblyAddMissingPrototypesPass::run(Module &M,
+                                         ModuleAnalysisManager &MAM) {
+  return addMissingPrototypes(M)
+             ? PreservedAnalyses::none().preserveSet<CFGAnalyses>()
+             : PreservedAnalyses::all();
+}

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index d82130da3bcf5..53d7e8e7a9121 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -83,10 +83,10 @@ class WebAssemblyCodeGenPassBuilder
 
 void WebAssemblyCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) const {
   // Add signatures to prototype-less function declarations
-  // TODO(boomanaiden154): WebAssemblyAddMissingPrototypes
+  flushFPMsToMPM(PMW);
+  addModulePass(WebAssemblyAddMissingPrototypesPass(), PMW);
 
   // Lower .llvm.global_dtors into .llvm.global_ctors with __cxa_atexit calls.
-  flushFPMsToMPM(PMW);
   addModulePass(LowerGlobalDtorsPass(), PMW);
 
   // Fix function bitcasts, as WebAssembly requires caller and callee signatures

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index b4a5760148c04..60f902cbfb77e 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -11,6 +11,12 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifndef MODULE_PASS
+#define MODULE_PASS(NAME, CREATE_PASS)
+#endif
+MODULE_PASS("wasm-add-missing-prototypes", WebAssemblyAddMissingPrototypesPass())
+#undef MODULE_PASS
+
 #ifndef MACHINE_FUNCTION_PASS
 #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
 #endif

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index 8ac6708b4fdae..d71cd7c1ca6d0 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -93,7 +93,7 @@ LLVMInitializeWebAssemblyTarget() {
   initializeGlobalISel(PR);
   initializeWebAssemblyPreLegalizerCombinerPass(PR);
   initializeWebAssemblyPostLegalizerCombinerPass(PR);
-  initializeWebAssemblyAddMissingPrototypesPass(PR);
+  initializeWebAssemblyAddMissingPrototypesLegacyPass(PR);
   initializeWebAssemblyLowerEmscriptenEHSjLjPass(PR);
   initializeLowerGlobalDtorsLegacyPassPass(PR);
   initializeFixFunctionBitcastsPass(PR);
@@ -487,7 +487,7 @@ FunctionPass *WebAssemblyPassConfig::createTargetRegisterAllocator(bool) {
 
 void WebAssemblyPassConfig::addIRPasses() {
   // Add signatures to prototype-less function declarations
-  addPass(createWebAssemblyAddMissingPrototypes());
+  addPass(createWebAssemblyAddMissingPrototypesLegacyPass());
 
   // Lower .llvm.global_dtors into .llvm.global_ctors with __cxa_atexit calls.
   addPass(createLowerGlobalDtorsLegacyPass());

diff  --git a/llvm/test/CodeGen/WebAssembly/add-prototypes.ll b/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
index 2bbc402dd1b6d..853bbfab078c2 100644
--- a/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
+++ b/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
@@ -1,4 +1,5 @@
 ; RUN: opt -S -wasm-add-missing-prototypes %s | FileCheck %s
+; RUN: opt -S -passes=wasm-add-missing-prototypes %s | FileCheck %s
 
 target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
 target triple = "wasm32-unknown-unknown"


        


More information about the llvm-commits mailing list