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

Reply via email to