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

Reply via email to