[llvm] 8bc9dae - [WebAssembly] Port WebAssemblyArgumentMovePass

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 15 07:06:30 PDT 2026


Author: Aiden Grossman
Date: 2026-07-15T07:06:25-07:00
New Revision: 8bc9dae5c79d418ee96d920eef9a858f58e71530

URL: https://github.com/llvm/llvm-project/commit/8bc9dae5c79d418ee96d920eef9a858f58e71530
DIFF: https://github.com/llvm/llvm-project/commit/8bc9dae5c79d418ee96d920eef9a858f58e71530.diff

LOG: [WebAssembly] Port WebAssemblyArgumentMovePass

Standard NewPM pass porting.

Reviewers: aheejin, sbc100, dschuff

Pull Request: https://github.com/llvm/llvm-project/pull/209368

Added: 
    

Modified: 
    llvm/lib/Target/WebAssembly/WebAssembly.h
    llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
    llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/WebAssembly/WebAssembly.h b/llvm/lib/Target/WebAssembly/WebAssembly.h
index 3f41eac4bf25f..79811ba19fbdb 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -123,7 +123,15 @@ class WebAssemblyISelDAGToDAGPass : public SelectionDAGISelPass {
 
 FunctionPass *createWebAssemblyISelDagLegacyPass(WebAssemblyTargetMachine &TM,
                                                  CodeGenOptLevel OptLevel);
-FunctionPass *createWebAssemblyArgumentMove();
+
+class WebAssemblyArgumentMovePass
+    : public RequiredPassInfoMixin<WebAssemblyArgumentMovePass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createWebAssemblyArgumentMoveLegacyPass();
 FunctionPass *createWebAssemblySetP2AlignOperands();
 FunctionPass *createWebAssemblyCleanCodeAfterTrap();
 
@@ -167,7 +175,7 @@ ModulePass *createWebAssemblyMCLowerPrePass();
 void initializeWebAssemblyOptimizeReturnedLegacyPass(PassRegistry &);
 void initializeWebAssemblyRefTypeMem2LocalLegacyPass(PassRegistry &);
 void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &);
-void initializeWebAssemblyArgumentMovePass(PassRegistry &);
+void initializeWebAssemblyArgumentMoveLegacyPass(PassRegistry &);
 void initializeWebAssemblyAsmPrinterPass(PassRegistry &);
 void initializeWebAssemblyCleanCodeAfterTrapPass(PassRegistry &);
 void initializeWebAssemblyCFGSortPass(PassRegistry &);

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
index 8601a61626ac6..00a02fc17af5e 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyArgumentMove.cpp
@@ -29,7 +29,11 @@
 #include "WebAssembly.h"
 #include "WebAssemblyUtilities.h"
 #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
 #include "llvm/CodeGen/Passes.h"
+#include "llvm/IR/Analysis.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
 using namespace llvm;
@@ -37,10 +41,10 @@ using namespace llvm;
 #define DEBUG_TYPE "wasm-argument-move"
 
 namespace {
-class WebAssemblyArgumentMove final : public MachineFunctionPass {
+class WebAssemblyArgumentMoveLegacy final : public MachineFunctionPass {
 public:
   static char ID; // Pass identification, replacement for typeid
-  WebAssemblyArgumentMove() : MachineFunctionPass(ID) {}
+  WebAssemblyArgumentMoveLegacy() : MachineFunctionPass(ID) {}
 
   StringRef getPassName() const override { return "WebAssembly Argument Move"; }
 
@@ -55,15 +59,15 @@ class WebAssemblyArgumentMove final : public MachineFunctionPass {
 };
 } // end anonymous namespace
 
-char WebAssemblyArgumentMove::ID = 0;
-INITIALIZE_PASS(WebAssemblyArgumentMove, DEBUG_TYPE,
+char WebAssemblyArgumentMoveLegacy::ID = 0;
+INITIALIZE_PASS(WebAssemblyArgumentMoveLegacy, DEBUG_TYPE,
                 "Move ARGUMENT instructions for WebAssembly", false, false)
 
-FunctionPass *llvm::createWebAssemblyArgumentMove() {
-  return new WebAssemblyArgumentMove();
+FunctionPass *llvm::createWebAssemblyArgumentMoveLegacyPass() {
+  return new WebAssemblyArgumentMoveLegacy();
 }
 
-bool WebAssemblyArgumentMove::runOnMachineFunction(MachineFunction &MF) {
+static bool argumentMove(MachineFunction &MF) {
   LLVM_DEBUG({
     dbgs() << "********** Argument Move **********\n"
            << "********** Function: " << MF.getName() << '\n';
@@ -92,3 +96,15 @@ bool WebAssemblyArgumentMove::runOnMachineFunction(MachineFunction &MF) {
 
   return Changed;
 }
+
+bool WebAssemblyArgumentMoveLegacy::runOnMachineFunction(MachineFunction &MF) {
+  return argumentMove(MF);
+}
+
+PreservedAnalyses
+WebAssemblyArgumentMovePass::run(MachineFunction &MF,
+                                 MachineFunctionAnalysisManager &MFAM) {
+  return argumentMove(MF) ? getMachineFunctionPassPreservedAnalyses()
+                                .preserveSet<CFGAnalyses>()
+                          : PreservedAnalyses::all();
+}

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index 6583d596732ea..6eb7bf5d414fe 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -150,7 +150,7 @@ Error WebAssemblyCodeGenPassBuilder::addInstSelector(
   // Run the argument-move pass immediately after the ScheduleDAG scheduler
   // so that we can fix up the ARGUMENT instructions before anything else
   // sees them in the wrong place.
-  // TODO(boomanaiden154): WebAssemblyArgumentMove
+  addMachineFunctionPass(WebAssemblyArgumentMovePass(), PMW);
 
   // Set the p2align operands. This information is present during ISel, however
   // it's inconvenient to collect. Collect it now, and update the immediate

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index 6a28585c9d749..7a369c89e55bb 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -32,6 +32,7 @@ FUNCTION_PASS("wasm-ref-type-mem2local", WebAssemblyRefTypeMem2LocalPass())
 #ifndef MACHINE_FUNCTION_PASS
 #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
 #endif
+MACHINE_FUNCTION_PASS("wasm-argument-move", WebAssemblyArgumentMovePass())
 MACHINE_FUNCTION_PASS("wasm-isel", WebAssemblyISelDAGToDAGPass(*this, getOptLevel()))
 MACHINE_FUNCTION_PASS("wasm-fix-irreducible-control-flow",
                       WebAssemblyFixIrreducibleControlFlowPass())

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index daaec237ab426..e4d1564993ded 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -99,7 +99,7 @@ LLVMInitializeWebAssemblyTarget() {
   initializeWebAssemblyFixFunctionBitcastsLegacyPass(PR);
   initializeWebAssemblyOptimizeReturnedLegacyPass(PR);
   initializeWebAssemblyRefTypeMem2LocalLegacyPass(PR);
-  initializeWebAssemblyArgumentMovePass(PR);
+  initializeWebAssemblyArgumentMoveLegacyPass(PR);
   initializeWebAssemblyAsmPrinterPass(PR);
   initializeWebAssemblySetP2AlignOperandsPass(PR);
   initializeWebAssemblyReplacePhysRegsPass(PR);
@@ -383,7 +383,7 @@ bool WebAssemblyPassConfig::addInstSelector() {
   // Run the argument-move pass immediately after the ScheduleDAG scheduler
   // so that we can fix up the ARGUMENT instructions before anything else
   // sees them in the wrong place.
-  addPass(createWebAssemblyArgumentMove());
+  addPass(createWebAssemblyArgumentMoveLegacyPass());
   // Set the p2align operands. This information is present during ISel, however
   // it's inconvenient to collect. Collect it now, and update the immediate
   // operands.
@@ -546,7 +546,7 @@ bool WebAssemblyPassConfig::addGlobalInstructionSelect() {
 
   // We insert only if ISelDAG won't insert these at a later point.
   if (isGlobalISelAbortEnabled()) {
-    addPass(createWebAssemblyArgumentMove());
+    addPass(createWebAssemblyArgumentMoveLegacyPass());
     addPass(createWebAssemblySetP2AlignOperands());
     addPass(createWebAssemblyFixBrTableDefaults());
     addPass(createWebAssemblyCleanCodeAfterTrap());


        


More information about the llvm-commits mailing list