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 for the NewPM. --- Full diff: https://github.com/llvm/llvm-project/pull/209036.diff 5 Files Affected: - (modified) llvm/lib/Target/WebAssembly/WebAssembly.h (+9-2) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp (+2-3) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyOptimizeReturned.cpp (+36-12) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def (+6) - (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 0d215264b6bbc..681fea9f41a00 100644 --- a/llvm/lib/Target/WebAssembly/WebAssembly.h +++ b/llvm/lib/Target/WebAssembly/WebAssembly.h @@ -48,7 +48,14 @@ class WebAssemblyFixFunctionBitcastsPass }; ModulePass *createWebAssemblyFixFunctionBitcastsLegacyPass(); -FunctionPass *createWebAssemblyOptimizeReturned(); + +class WebAssemblyOptimizeReturnedPass + : public OptionalPassInfoMixin<WebAssemblyOptimizeReturnedPass> { +public: + PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM); +}; + +FunctionPass *createWebAssemblyOptimizeReturnedLegacyPass(); FunctionPass *createWebAssemblyRefTypeMem2Local(); FunctionPass *createWebAssemblyReduceToAnyAllTrue(WebAssemblyTargetMachine &TM); @@ -98,7 +105,7 @@ FunctionPass *createWebAssemblyPeephole(); ModulePass *createWebAssemblyMCLowerPrePass(); // PassRegistry initialization declarations. -void initializeOptimizeReturnedPass(PassRegistry &); +void initializeWebAssemblyOptimizeReturnedLegacyPass(PassRegistry &); void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &); void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &); void initializeWebAssemblyArgumentMovePass(PassRegistry &); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp index 5fa71afb2444d..1eee69e2c552e 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp @@ -84,9 +84,8 @@ void WebAssemblyCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) const { addModulePass(WebAssemblyFixFunctionBitcastsPass(), PMW); // Optimize "returned" function attributes. - if (getOptLevel() != CodeGenOptLevel::None) { - // TODO(boomanaiden154): WebAssemblyOptimizeReturned - } + if (getOptLevel() != CodeGenOptLevel::None) + addFunctionPass(WebAssemblyOptimizeReturnedPass(), PMW); // If exception handling is not enabled and setjmp/longjmp handling is // enabled, we lower invokes into calls and delete unreachable landingpad diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyOptimizeReturned.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyOptimizeReturned.cpp index ffd135d62aaf0..534ae934a9528 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyOptimizeReturned.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyOptimizeReturned.cpp @@ -12,8 +12,10 @@ //===----------------------------------------------------------------------===// #include "WebAssembly.h" +#include "llvm/IR/Analysis.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/InstVisitor.h" +#include "llvm/IR/PassManager.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -21,8 +23,17 @@ using namespace llvm; #define DEBUG_TYPE "wasm-optimize-returned" namespace { -class OptimizeReturned final : public FunctionPass, - public InstVisitor<OptimizeReturned> { +class WebAssemblyOptimizeReturnedImpl + : public InstVisitor<WebAssemblyOptimizeReturnedImpl> { + DominatorTree *DT = nullptr; + +public: + WebAssemblyOptimizeReturnedImpl(DominatorTree *DT) : DT(DT) {} + bool runOnFunction(Function &F); + void visitCallBase(CallBase &CB); +}; + +class WebAssemblyOptimizeReturnedLegacy final : public FunctionPass { StringRef getPassName() const override { return "WebAssembly Optimize Returned"; } @@ -36,26 +47,24 @@ class OptimizeReturned final : public FunctionPass, bool runOnFunction(Function &F) override; - DominatorTree *DT = nullptr; - public: static char ID; - OptimizeReturned() : FunctionPass(ID) {} + WebAssemblyOptimizeReturnedLegacy() : FunctionPass(ID) {} void visitCallBase(CallBase &CB); }; } // End anonymous namespace -char OptimizeReturned::ID = 0; -INITIALIZE_PASS(OptimizeReturned, DEBUG_TYPE, +char WebAssemblyOptimizeReturnedLegacy::ID = 0; +INITIALIZE_PASS(WebAssemblyOptimizeReturnedLegacy, DEBUG_TYPE, "Optimize calls with \"returned\" attributes for WebAssembly", false, false) -FunctionPass *llvm::createWebAssemblyOptimizeReturned() { - return new OptimizeReturned(); +FunctionPass *llvm::createWebAssemblyOptimizeReturnedLegacyPass() { + return new WebAssemblyOptimizeReturnedLegacy(); } -void OptimizeReturned::visitCallBase(CallBase &CB) { +void WebAssemblyOptimizeReturnedImpl::visitCallBase(CallBase &CB) { for (unsigned I = 0, E = CB.arg_size(); I < E; ++I) if (CB.paramHasAttr(I, Attribute::Returned)) { Value *Arg = CB.getArgOperand(I); @@ -70,12 +79,27 @@ void OptimizeReturned::visitCallBase(CallBase &CB) { } } -bool OptimizeReturned::runOnFunction(Function &F) { +bool WebAssemblyOptimizeReturnedImpl::runOnFunction(Function &F) { LLVM_DEBUG(dbgs() << "********** Optimize returned Attributes **********\n" "********** Function: " << F.getName() << '\n'); - DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); visit(F); return true; } + +bool WebAssemblyOptimizeReturnedLegacy::runOnFunction(Function &F) { + DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); + WebAssemblyOptimizeReturnedImpl Impl(DT); + return Impl.runOnFunction(F); +} + +PreservedAnalyses +WebAssemblyOptimizeReturnedPass::run(Function &F, + FunctionAnalysisManager &FAM) { + DominatorTree *DT = &FAM.getResult<DominatorTreeAnalysis>(F); + WebAssemblyOptimizeReturnedImpl Impl(DT); + return Impl.runOnFunction(F) + ? PreservedAnalyses::none().preserveSet<CFGAnalyses>() + : PreservedAnalyses::all(); +} diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def index 01f4394454a03..3c9a21978bf46 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def +++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def @@ -18,6 +18,12 @@ MODULE_PASS("wasm-add-missing-prototypes", WebAssemblyAddMissingPrototypesPass() MODULE_PASS("wasm-fix-function-bitcasts", WebAssemblyFixFunctionBitcastsPass()) #undef MODULE_PASS +#ifndef FUNCTION_PASS +#define FUNCTION_PASS(NAME, CREATE_PASS) +#endif +FUNCTION_PASS("wasm-optimize-returned", WebAssemblyOptimizeReturnedPass()) +#undef FUNCTION_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 073edc6d98623..b5533d4c9bc6f 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -97,7 +97,7 @@ LLVMInitializeWebAssemblyTarget() { initializeWebAssemblyLowerEmscriptenEHSjLjPass(PR); initializeLowerGlobalDtorsLegacyPassPass(PR); initializeWebAssemblyFixFunctionBitcastsLegacyPass(PR); - initializeOptimizeReturnedPass(PR); + initializeWebAssemblyOptimizeReturnedLegacyPass(PR); initializeWebAssemblyRefTypeMem2LocalPass(PR); initializeWebAssemblyArgumentMovePass(PR); initializeWebAssemblyAsmPrinterPass(PR); @@ -498,7 +498,7 @@ void WebAssemblyPassConfig::addIRPasses() { // Optimize "returned" function attributes. if (getOptLevel() != CodeGenOptLevel::None) - addPass(createWebAssemblyOptimizeReturned()); + addPass(createWebAssemblyOptimizeReturnedLegacyPass()); // If exception handling is not enabled and setjmp/longjmp handling is // enabled, we lower invokes into calls and delete unreachable landingpad `````````` </details> https://github.com/llvm/llvm-project/pull/209036 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
