Skip to content

[WebAssembly][NewPM] Add GISel Pass Skeleton - #217981

Merged
boomanaiden154 merged 4 commits into
mainfrom
users/boomanaiden154/webassemblynewpm-add-gisel-pass-skeleton
Aug 21, 2026
Merged

[WebAssembly][NewPM] Add GISel Pass Skeleton#217981
boomanaiden154 merged 4 commits into
mainfrom
users/boomanaiden154/webassemblynewpm-add-gisel-pass-skeleton

Conversation

@boomanaiden154

Copy link
Copy Markdown
Contributor

Mostly complete, but I still need to port a few more passes.

@dschuff dschuff left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also +cc @QuantumSegfault

@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-backend-webassembly

Author: Aiden Grossman (boomanaiden154)

Changes

Mostly complete, but I still need to port a few more passes.


Full diff: https://github.com/llvm/llvm-project/pull/217981.diff

1 Files Affected:

  • (modified) llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp (+59)
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index e0a6769a7461f..72fc88ef04db6 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -12,6 +12,10 @@
 #include "WebAssemblyTargetMachine.h"
 #include "llvm/CodeGen/AtomicExpand.h"
 #include "llvm/CodeGen/FuncletLayout.h"
+#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
+#include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
+#include "llvm/CodeGen/GlobalISel/Legalizer.h"
+#include "llvm/CodeGen/GlobalISel/RegBankSelect.h"
 #include "llvm/CodeGen/IndirectBrExpand.h"
 #include "llvm/CodeGen/MachineBlockPlacement.h"
 #include "llvm/CodeGen/MachineCopyPropagation.h"
@@ -82,7 +86,16 @@ class WebAssemblyCodeGenPassBuilder : public CodeGenPassBuilder {
 
   void addIRPasses(PassManagerWrapper &PMW) override;
   void addISelPrepare(PassManagerWrapper &PMW) override;
+
   Error addInstSelector(PassManagerWrapper &PMW) override;
+
+  Error addIRTranslator(PassManagerWrapper &PMW) override;
+  void addPreLegalizeMachineIR(PassManagerWrapper &PMW) override;
+  Error addLegalizeMachineIR(PassManagerWrapper &PMW) override;
+  void addPreRegBankSelect(PassManagerWrapper &PMW) override;
+  Error addRegBankSelect(PassManagerWrapper &PMW) override;
+  Error addGlobalInstructionSelect(PassManagerWrapper &PMW) override;
+
   Error addRegAssignAndRewriteFast(PassManagerWrapper &PMW) override;
   Expected<bool>
   addRegAssignAndRewriteOptimized(PassManagerWrapper &PMW) override;
@@ -177,6 +190,52 @@ Error WebAssemblyCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
   return Error::success();
 }
 
+Error WebAssemblyCodeGenPassBuilder::addIRTranslator(PassManagerWrapper &PMW) {
+  addMachineFunctionPass(IRTranslatorPass(getOptLevel()), PMW);
+  return Error::success();
+}
+
+void WebAssemblyCodeGenPassBuilder::addPreLegalizeMachineIR(
+    PassManagerWrapper &PMW) {
+  if (getOptLevel() != CodeGenOptLevel::None) {
+    // TODO(boomanaiden154): Add WebAssemblyPreLegalizerCombiner when it has
+    // been ported.
+  }
+}
+
+Error WebAssemblyCodeGenPassBuilder::addLegalizeMachineIR(
+    PassManagerWrapper &PMW) {
+  addMachineFunctionPass(LegalizerPass(), PMW);
+  return Error::success();
+}
+
+void WebAssemblyCodeGenPassBuilder::addPreRegBankSelect(
+    PassManagerWrapper &PMW) {
+  if (getOptLevel() != CodeGenOptLevel::None) {
+    // TODO(boomanaiden154): Add WebAssemblyPostLegalizerCombiner when it has
+    // been ported.
+  }
+}
+
+Error WebAssemblyCodeGenPassBuilder::addRegBankSelect(PassManagerWrapper &PMW) {
+  addMachineFunctionPass(RegBankSelectPass(), PMW);
+  return Error::success();
+}
+
+Error WebAssemblyCodeGenPassBuilder::addGlobalInstructionSelect(
+    PassManagerWrapper &PMW) {
+  addMachineFunctionPass(InstructionSelectPass(getOptLevel()), PMW);
+
+  if (isGlobalISelAbortEnabled()) {
+    addMachineFunctionPass(WebAssemblyArgumentMovePass(), PMW);
+    addMachineFunctionPass(WebAssemblySetP2AlignOperandsPass(), PMW);
+    addMachineFunctionPass(WebAssemblyFixBrTableDefaultsPass(), PMW);
+    addMachineFunctionPass(WebAssemblyCleanCodeAfterTrapPass(), PMW);
+  }
+
+  return Error::success();
+}
+
 Error WebAssemblyCodeGenPassBuilder::addRegAssignAndRewriteFast(
     PassManagerWrapper &PMW) {
   return Error::success();

Created using spr 1.3.7

[skip ci]
Created using spr 1.3.7
@boomanaiden154
boomanaiden154 changed the base branch from users/boomanaiden154/main.webassemblynewpm-add-gisel-pass-skeleton to main August 21, 2026 22:34
@boomanaiden154
boomanaiden154 merged commit 9675f27 into main Aug 21, 2026
10 of 22 checks passed
@boomanaiden154
boomanaiden154 deleted the users/boomanaiden154/webassemblynewpm-add-gisel-pass-skeleton branch August 21, 2026 22:34
llvm-upstreamsync Bot pushed a commit to qualcomm/cpullvm-toolchain that referenced this pull request Aug 21, 2026
Mostly complete, but I still need to port a few more passes.

Reviewers: sbc100, dschuff, aheejin, QuantumSegfault

Pull Request: llvm/llvm-project#217981
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants