[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