llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-webassembly Author: Aiden Grossman (boomanaiden154) <details> <summary>Changes</summary> Standard pass porting. --- Full diff: https://github.com/llvm/llvm-project/pull/208986.diff 4 Files Affected: - (modified) llvm/lib/Target/WebAssembly/WebAssembly.h (+9-2) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp (+20-7) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def (+1) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp (+2-2) ``````````diff 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/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) `````````` </details> https://github.com/llvm/llvm-project/pull/208986 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
