[llvm] f69748c - [WebAssembly] Port WebAssemblyFixFunctionBitcastsPass to NewPM
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 06:52:59 PDT 2026
Author: Aiden Grossman
Date: 2026-07-15T06:52:55-07:00
New Revision: f69748cd80db74bcd81834b4bba8749fc508f99f
URL: https://github.com/llvm/llvm-project/commit/f69748cd80db74bcd81834b4bba8749fc508f99f
DIFF: https://github.com/llvm/llvm-project/commit/f69748cd80db74bcd81834b4bba8749fc508f99f.diff
LOG: [WebAssembly] Port WebAssemblyFixFunctionBitcastsPass to NewPM
Standard pass porting.
Reviewers: aheejin, dschuff, sbc100
Pull Request: https://github.com/llvm/llvm-project/pull/208986
Added:
Modified:
llvm/lib/Target/WebAssembly/WebAssembly.h
llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/WebAssembly/WebAssembly.h b/llvm/lib/Target/WebAssembly/WebAssembly.h
index cf5ff90d635f4..0d215264b6bbc 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -40,7 +40,14 @@ class WebAssemblyAddMissingPrototypesPass
};
ModulePass *createWebAssemblyAddMissingPrototypesLegacyPass();
-ModulePass *createWebAssemblyFixFunctionBitcasts();
+
+class WebAssemblyFixFunctionBitcastsPass
+ : public RequiredPassInfoMixin<WebAssemblyFixFunctionBitcastsPass> {
+public:
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+ModulePass *createWebAssemblyFixFunctionBitcastsLegacyPass();
FunctionPass *createWebAssemblyOptimizeReturned();
FunctionPass *createWebAssemblyRefTypeMem2Local();
FunctionPass *createWebAssemblyReduceToAnyAllTrue(WebAssemblyTargetMachine &TM);
@@ -91,7 +98,6 @@ FunctionPass *createWebAssemblyPeephole();
ModulePass *createWebAssemblyMCLowerPrePass();
// PassRegistry initialization declarations.
-void initializeFixFunctionBitcastsPass(PassRegistry &);
void initializeOptimizeReturnedPass(PassRegistry &);
void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &);
void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &);
@@ -105,6 +111,7 @@ void initializeWebAssemblyDebugFixupPass(PassRegistry &);
void initializeWebAssemblyExceptionInfoPass(PassRegistry &);
void initializeWebAssemblyExplicitLocalsPass(PassRegistry &);
void initializeWebAssemblyFixBrTableDefaultsPass(PassRegistry &);
+void initializeWebAssemblyFixFunctionBitcastsLegacyPass(PassRegistry &);
void initializeWebAssemblyFixIrreducibleControlFlowPass(PassRegistry &);
void initializeWebAssemblyLateEHPreparePass(PassRegistry &);
void initializeWebAssemblyLowerBrUnlessPass(PassRegistry &);
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index 53d7e8e7a9121..6060b58430008 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -91,7 +91,7 @@ void WebAssemblyCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) const {
// Fix function bitcasts, as WebAssembly requires caller and callee signatures
// to match.
- // TODO(boomanaiden154): WebAssemblyFixFunctionBitcasts
+ addModulePass(WebAssemblyFixFunctionBitcastsPass(), PMW);
// Optimize "returned" function attributes.
if (getOptLevel() != CodeGenOptLevel::None) {
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
index f4fe3ccd4bf9e..6a8d00140e4db 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp
@@ -23,11 +23,13 @@
//===----------------------------------------------------------------------===//
#include "WebAssembly.h"
+#include "llvm/IR/Analysis.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.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/Support/raw_ostream.h"
@@ -36,7 +38,7 @@ using namespace llvm;
#define DEBUG_TYPE "wasm-fix-function-bitcasts"
namespace {
-class FixFunctionBitcasts final : public ModulePass {
+class WebAssemblyFixFunctionBitcastsLegacy final : public ModulePass {
StringRef getPassName() const override {
return "WebAssembly Fix Function Bitcasts";
}
@@ -50,16 +52,16 @@ class FixFunctionBitcasts final : public ModulePass {
public:
static char ID;
- FixFunctionBitcasts() : ModulePass(ID) {}
+ WebAssemblyFixFunctionBitcastsLegacy() : ModulePass(ID) {}
};
} // End anonymous namespace
-char FixFunctionBitcasts::ID = 0;
-INITIALIZE_PASS(FixFunctionBitcasts, DEBUG_TYPE,
+char WebAssemblyFixFunctionBitcastsLegacy::ID = 0;
+INITIALIZE_PASS(WebAssemblyFixFunctionBitcastsLegacy, DEBUG_TYPE,
"Fix mismatching bitcasts for WebAssembly", false, false)
-ModulePass *llvm::createWebAssemblyFixFunctionBitcasts() {
- return new FixFunctionBitcasts();
+ModulePass *llvm::createWebAssemblyFixFunctionBitcastsLegacyPass() {
+ return new WebAssemblyFixFunctionBitcastsLegacy();
}
// Recursively descend the def-use lists from V to find non-bitcast users of
@@ -220,7 +222,7 @@ static bool shouldFixMainFunction(FunctionType *FuncTy, FunctionType *MainTy) {
!FuncTy->isVarArg();
}
-bool FixFunctionBitcasts::runOnModule(Module &M) {
+static bool fixFunctionBitcasts(Module &M) {
LLVM_DEBUG(dbgs() << "********** Fix Function Bitcasts **********\n");
Function *Main = nullptr;
@@ -298,3 +300,14 @@ bool FixFunctionBitcasts::runOnModule(Module &M) {
return true;
}
+
+bool WebAssemblyFixFunctionBitcastsLegacy::runOnModule(Module &M) {
+ return fixFunctionBitcasts(M);
+}
+
+PreservedAnalyses
+WebAssemblyFixFunctionBitcastsPass::run(Module &M, ModuleAnalysisManager &MAM) {
+ return fixFunctionBitcasts(M)
+ ? PreservedAnalyses::none().preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index 60f902cbfb77e..01f4394454a03 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -15,6 +15,7 @@
#define MODULE_PASS(NAME, CREATE_PASS)
#endif
MODULE_PASS("wasm-add-missing-prototypes", WebAssemblyAddMissingPrototypesPass())
+MODULE_PASS("wasm-fix-function-bitcasts", WebAssemblyFixFunctionBitcastsPass())
#undef MODULE_PASS
#ifndef MACHINE_FUNCTION_PASS
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index d71cd7c1ca6d0..073edc6d98623 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -96,7 +96,7 @@ LLVMInitializeWebAssemblyTarget() {
initializeWebAssemblyAddMissingPrototypesLegacyPass(PR);
initializeWebAssemblyLowerEmscriptenEHSjLjPass(PR);
initializeLowerGlobalDtorsLegacyPassPass(PR);
- initializeFixFunctionBitcastsPass(PR);
+ initializeWebAssemblyFixFunctionBitcastsLegacyPass(PR);
initializeOptimizeReturnedPass(PR);
initializeWebAssemblyRefTypeMem2LocalPass(PR);
initializeWebAssemblyArgumentMovePass(PR);
@@ -494,7 +494,7 @@ void WebAssemblyPassConfig::addIRPasses() {
// Fix function bitcasts, as WebAssembly requires caller and callee signatures
// to match.
- addPass(createWebAssemblyFixFunctionBitcasts());
+ addPass(createWebAssemblyFixFunctionBitcastsLegacyPass());
// Optimize "returned" function attributes.
if (getOptLevel() != CodeGenOptLevel::None)
More information about the llvm-commits
mailing list