llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-webassembly Author: Aiden Grossman (boomanaiden154) <details> <summary>Changes</summary> Standard NewPM pass porting. --- Full diff: https://github.com/llvm/llvm-project/pull/209044.diff 5 Files Affected: - (modified) llvm/lib/Target/WebAssembly/WebAssembly.h (+9-2) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp (+1-1) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def (+1) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyRefTypeMem2Local.cpp (+34-13) - (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 bfc2107858165..933062c86c8eb 100644 --- a/llvm/lib/Target/WebAssembly/WebAssembly.h +++ b/llvm/lib/Target/WebAssembly/WebAssembly.h @@ -62,7 +62,14 @@ class WebAssemblyOptimizeReturnedPass }; FunctionPass *createWebAssemblyOptimizeReturnedLegacyPass(); -FunctionPass *createWebAssemblyRefTypeMem2Local(); + +class WebAssemblyRefTypeMem2LocalPass + : public RequiredPassInfoMixin<WebAssemblyRefTypeMem2LocalPass> { +public: + PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM); +}; + +FunctionPass *createWebAssemblyRefTypeMem2LocalLegacyPass(); class WebAssemblyReduceToAnyAllTruePass : public RequiredPassInfoMixin<WebAssemblyReduceToAnyAllTruePass> { @@ -126,7 +133,7 @@ ModulePass *createWebAssemblyMCLowerPrePass(); // PassRegistry initialization declarations. void initializeWebAssemblyOptimizeReturnedLegacyPass(PassRegistry &); -void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &); +void initializeWebAssemblyRefTypeMem2LocalLegacyPass(PassRegistry &); void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &); void initializeWebAssemblyArgumentMovePass(PassRegistry &); void initializeWebAssemblyAsmPrinterPass(PassRegistry &); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp index f1b60f5113b96..48713ecacba0b 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp @@ -121,7 +121,7 @@ void WebAssemblyCodeGenPassBuilder::addISelPrepare( PassManagerWrapper &PMW) const { // We need to move reference type allocas to WASM_ADDRESS_SPACE_VAR so that // loads and stores are promoted to local.gets/local.sets. - // TODO(boomanaiden154): WebAssemblyRefTypeMem2Local + addFunctionPass(WebAssemblyRefTypeMem2LocalPass(), PMW); // Lower atomics and TLS if necessary // TODO(boomanaiden154): CoalesceFeaturesAndStripAtomics diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def index a771512786b6e..6767f7a6a6b77 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def +++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def @@ -24,6 +24,7 @@ MODULE_PASS("wasm-lower-em-ehsjlj", WebAssemblyLowerEmscriptenEHSjLjPass()) #endif FUNCTION_PASS("wasm-optimize-returned", WebAssemblyOptimizeReturnedPass()) FUNCTION_PASS("wasm-reduce-to-any-all-true", WebAssemblyReduceToAnyAllTruePass(*this)) +FUNCTION_PASS("wasm-ref-type-mem2local", WebAssemblyRefTypeMem2LocalPass()) #undef FUNCTION_PASS #ifndef MACHINE_FUNCTION_PASS diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyRefTypeMem2Local.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyRefTypeMem2Local.cpp index d2ff9b264d576..2c162308700af 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyRefTypeMem2Local.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyRefTypeMem2Local.cpp @@ -15,8 +15,11 @@ #include "Utils/WasmAddressSpaces.h" #include "Utils/WebAssemblyTypeUtilities.h" #include "WebAssembly.h" +#include "llvm/IR/Analysis.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/InstVisitor.h" +#include "llvm/IR/Instructions.h" +#include "llvm/IR/PassManager.h" #include "llvm/IR/ValueHandle.h" #include "llvm/Pass.h" using namespace llvm; @@ -24,9 +27,16 @@ using namespace llvm; #define DEBUG_TYPE "wasm-ref-type-mem2local" namespace { -class WebAssemblyRefTypeMem2Local final - : public FunctionPass, - public InstVisitor<WebAssemblyRefTypeMem2Local> { +class WebAssemblyRefTypeMem2LocalImpl + : public InstVisitor<WebAssemblyRefTypeMem2LocalImpl> { + bool Changed = false; + +public: + void visitAllocaInst(AllocaInst &AI); + bool runOnFunction(Function &F); +}; + +class WebAssemblyRefTypeMem2LocalLegacy final : public FunctionPass { StringRef getPassName() const override { return "WebAssembly Reference Types Memory to Local"; } @@ -37,26 +47,23 @@ class WebAssemblyRefTypeMem2Local final } bool runOnFunction(Function &F) override; - bool Changed = false; public: static char ID; - WebAssemblyRefTypeMem2Local() : FunctionPass(ID) {} - - void visitAllocaInst(AllocaInst &AI); + WebAssemblyRefTypeMem2LocalLegacy() : FunctionPass(ID) {} }; } // End anonymous namespace -char WebAssemblyRefTypeMem2Local::ID = 0; -INITIALIZE_PASS(WebAssemblyRefTypeMem2Local, DEBUG_TYPE, +char WebAssemblyRefTypeMem2LocalLegacy::ID = 0; +INITIALIZE_PASS(WebAssemblyRefTypeMem2LocalLegacy, DEBUG_TYPE, "Assign reference type allocas to local address space", true, false) -FunctionPass *llvm::createWebAssemblyRefTypeMem2Local() { - return new WebAssemblyRefTypeMem2Local(); +FunctionPass *llvm::createWebAssemblyRefTypeMem2LocalLegacyPass() { + return new WebAssemblyRefTypeMem2LocalLegacy(); } -void WebAssemblyRefTypeMem2Local::visitAllocaInst(AllocaInst &AI) { +void WebAssemblyRefTypeMem2LocalImpl::visitAllocaInst(AllocaInst &AI) { if (WebAssembly::isWebAssemblyReferenceType(AI.getAllocatedType())) { Changed = true; IRBuilder<> IRB(AI.getContext()); @@ -83,7 +90,7 @@ void WebAssemblyRefTypeMem2Local::visitAllocaInst(AllocaInst &AI) { } } -bool WebAssemblyRefTypeMem2Local::runOnFunction(Function &F) { +bool WebAssemblyRefTypeMem2LocalImpl::runOnFunction(Function &F) { LLVM_DEBUG(dbgs() << "********** WebAssembly RefType Mem2Local **********\n" "********** Function: " << F.getName() << '\n'); @@ -94,3 +101,17 @@ bool WebAssemblyRefTypeMem2Local::runOnFunction(Function &F) { visit(F); return Changed; } + +bool WebAssemblyRefTypeMem2LocalLegacy::runOnFunction(Function &F) { + WebAssemblyRefTypeMem2LocalImpl Impl; + return Impl.runOnFunction(F); +} + +PreservedAnalyses +WebAssemblyRefTypeMem2LocalPass::run(Function &F, + FunctionAnalysisManager &FAM) { + WebAssemblyRefTypeMem2LocalImpl Impl; + return Impl.runOnFunction(F) + ? PreservedAnalyses::none().preserveSet<CFGAnalyses>() + : PreservedAnalyses::all(); +} diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index ac292f5c665c1..cdea4298aed20 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -98,7 +98,7 @@ LLVMInitializeWebAssemblyTarget() { initializeLowerGlobalDtorsLegacyPassPass(PR); initializeWebAssemblyFixFunctionBitcastsLegacyPass(PR); initializeWebAssemblyOptimizeReturnedLegacyPass(PR); - initializeWebAssemblyRefTypeMem2LocalPass(PR); + initializeWebAssemblyRefTypeMem2LocalLegacyPass(PR); initializeWebAssemblyArgumentMovePass(PR); initializeWebAssemblyAsmPrinterPass(PR); initializeWebAssemblySetP2AlignOperandsPass(PR); @@ -533,7 +533,7 @@ void WebAssemblyPassConfig::addIRPasses() { void WebAssemblyPassConfig::addISelPrepare() { // We need to move reference type allocas to WASM_ADDRESS_SPACE_VAR so that // loads and stores are promoted to local.gets/local.sets. - addPass(createWebAssemblyRefTypeMem2Local()); + addPass(createWebAssemblyRefTypeMem2LocalLegacyPass()); // Lower atomics and TLS if necessary addPass(new CoalesceFeaturesAndStripAtomics(&getWebAssemblyTargetMachine())); `````````` </details> https://github.com/llvm/llvm-project/pull/209044 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
