[llvm] 2494e80 - [WebAssembly] Port WebAssemblyFixBrTableDefaultsPass

via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 16 16:46:41 PDT 2026


Author: Aiden Grossman
Date: 2026-07-16T16:46:37-07:00
New Revision: 2494e80d1cd91911713ec8451a961e07b9da8b9c

URL: https://github.com/llvm/llvm-project/commit/2494e80d1cd91911713ec8451a961e07b9da8b9c
DIFF: https://github.com/llvm/llvm-project/commit/2494e80d1cd91911713ec8451a961e07b9da8b9c.diff

LOG: [WebAssembly] Port WebAssemblyFixBrTableDefaultsPass

Standard NewPM pass porting.

Reviewers: dschuff, sbc100, aheejin

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

Added: 
    

Modified: 
    llvm/lib/Target/WebAssembly/WebAssembly.h
    llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.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 f838481340c38..f4bcfd79cdd79 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -158,7 +158,15 @@ FunctionPass *createWebAssemblyOptimizeLiveIntervals();
 FunctionPass *createWebAssemblyMemIntrinsicResults();
 FunctionPass *createWebAssemblyRegStackify(CodeGenOptLevel OptLevel);
 FunctionPass *createWebAssemblyRegColoring();
-FunctionPass *createWebAssemblyFixBrTableDefaults();
+
+class WebAssemblyFixBrTableDefaultsPass
+    : public RequiredPassInfoMixin<WebAssemblyFixBrTableDefaultsPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createWebAssemblyFixBrTableDefaultsLegacyPass();
 
 class WebAssemblyFixIrreducibleControlFlowPass
     : public RequiredPassInfoMixin<WebAssemblyFixIrreducibleControlFlowPass> {
@@ -192,7 +200,7 @@ void initializeWebAssemblyDAGToDAGISelLegacyPass(PassRegistry &);
 void initializeWebAssemblyDebugFixupPass(PassRegistry &);
 void initializeWebAssemblyExceptionInfoPass(PassRegistry &);
 void initializeWebAssemblyExplicitLocalsPass(PassRegistry &);
-void initializeWebAssemblyFixBrTableDefaultsPass(PassRegistry &);
+void initializeWebAssemblyFixBrTableDefaultsLegacyPass(PassRegistry &);
 void initializeWebAssemblyFixFunctionBitcastsLegacyPass(PassRegistry &);
 void initializeWebAssemblyFixIrreducibleControlFlowLegacyPass(PassRegistry &);
 void initializeWebAssemblyLateEHPreparePass(PassRegistry &);

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index 8cc6e25999a0f..a86bd28f7b5d4 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -158,7 +158,7 @@ Error WebAssemblyCodeGenPassBuilder::addInstSelector(
   addMachineFunctionPass(WebAssemblySetP2AlignOperandsPass(), PMW);
 
   // Eliminate range checks and add default targets to br_table instructions.
-  // TODO(boomanaiden154): WebAssemblyFixBrTableDefaults
+  addMachineFunctionPass(WebAssemblyFixBrTableDefaultsPass(), PMW);
 
   // unreachable is terminator, non-terminator instruction after it is not
   // allowed.

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
index d8fb15666662c..09512009c19d0 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyFixBrTableDefaults.cpp
@@ -18,8 +18,11 @@
 #include "WebAssembly.h"
 #include "WebAssemblySubtarget.h"
 #include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachinePassManager.h"
 #include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/IR/Analysis.h"
 #include "llvm/Pass.h"
 
 using namespace llvm;
@@ -28,7 +31,7 @@ using namespace llvm;
 
 namespace {
 
-class WebAssemblyFixBrTableDefaults final : public MachineFunctionPass {
+class WebAssemblyFixBrTableDefaultsLegacy final : public MachineFunctionPass {
   StringRef getPassName() const override {
     return "WebAssembly Fix br_table Defaults";
   }
@@ -37,10 +40,10 @@ class WebAssemblyFixBrTableDefaults final : public MachineFunctionPass {
 
 public:
   static char ID; // Pass identification, replacement for typeid
-  WebAssemblyFixBrTableDefaults() : MachineFunctionPass(ID) {}
+  WebAssemblyFixBrTableDefaultsLegacy() : MachineFunctionPass(ID) {}
 };
 
-char WebAssemblyFixBrTableDefaults::ID = 0;
+char WebAssemblyFixBrTableDefaultsLegacy::ID = 0;
 
 // Target independent selection dag assumes that it is ok to use PointerTy
 // as the index for a "switch", whereas Wasm so far only has a 32-bit br_table.
@@ -153,7 +156,7 @@ MachineBasicBlock *fixBrTableDefault(MachineInstr &MI, MachineBasicBlock *MBB,
   return HeaderMBB;
 }
 
-bool WebAssemblyFixBrTableDefaults::runOnMachineFunction(MachineFunction &MF) {
+bool fixBrTableDefaults(MachineFunction &MF) {
   LLVM_DEBUG(dbgs() << "********** Fixing br_table Default Targets **********\n"
                        "********** Function: "
                     << MF.getName() << '\n');
@@ -192,10 +195,22 @@ bool WebAssemblyFixBrTableDefaults::runOnMachineFunction(MachineFunction &MF) {
 
 } // end anonymous namespace
 
-INITIALIZE_PASS(WebAssemblyFixBrTableDefaults, DEBUG_TYPE,
+INITIALIZE_PASS(WebAssemblyFixBrTableDefaultsLegacy, DEBUG_TYPE,
                 "Removes range checks and sets br_table default targets", false,
                 false)
 
-FunctionPass *llvm::createWebAssemblyFixBrTableDefaults() {
-  return new WebAssemblyFixBrTableDefaults();
+FunctionPass *llvm::createWebAssemblyFixBrTableDefaultsLegacyPass() {
+  return new WebAssemblyFixBrTableDefaultsLegacy();
+}
+
+bool WebAssemblyFixBrTableDefaultsLegacy::runOnMachineFunction(
+    MachineFunction &MF) {
+  return fixBrTableDefaults(MF);
+}
+
+PreservedAnalyses
+WebAssemblyFixBrTableDefaultsPass::run(MachineFunction &MF,
+                                       MachineFunctionAnalysisManager &MFAM) {
+  return fixBrTableDefaults(MF) ? getMachineFunctionPassPreservedAnalyses()
+                                : PreservedAnalyses::all();
 }

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index aeb4f4be02bbc..b28efc08678b1 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -34,6 +34,8 @@ FUNCTION_PASS("wasm-ref-type-mem2local", WebAssemblyRefTypeMem2LocalPass())
 #endif
 MACHINE_FUNCTION_PASS("wasm-argument-move", WebAssemblyArgumentMovePass())
 MACHINE_FUNCTION_PASS("wasm-isel", WebAssemblyISelDAGToDAGPass(*this, getOptLevel()))
+MACHINE_FUNCTION_PASS("wasm-fix-br-table-defaults",
+                      WebAssemblyFixBrTableDefaultsPass())
 MACHINE_FUNCTION_PASS("wasm-fix-irreducible-control-flow",
                       WebAssemblyFixIrreducibleControlFlowPass())
 MACHINE_FUNCTION_PASS("wasm-nullify-dbg-value-lists",

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index b296e71f38ecb..2751693c33a75 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -119,7 +119,7 @@ LLVMInitializeWebAssemblyTarget() {
   initializeWebAssemblyDebugFixupPass(PR);
   initializeWebAssemblyPeepholePass(PR);
   initializeWebAssemblyMCLowerPrePassPass(PR);
-  initializeWebAssemblyFixBrTableDefaultsPass(PR);
+  initializeWebAssemblyFixBrTableDefaultsLegacyPass(PR);
   initializeWebAssemblyDAGToDAGISelLegacyPass(PR);
 }
 
@@ -390,7 +390,7 @@ bool WebAssemblyPassConfig::addInstSelector() {
   addPass(createWebAssemblySetP2AlignOperandsLegacyPass());
 
   // Eliminate range checks and add default targets to br_table instructions.
-  addPass(createWebAssemblyFixBrTableDefaults());
+  addPass(createWebAssemblyFixBrTableDefaultsLegacyPass());
 
   // unreachable is terminator, non-terminator instruction after it is not
   // allowed.
@@ -548,7 +548,7 @@ bool WebAssemblyPassConfig::addGlobalInstructionSelect() {
   if (isGlobalISelAbortEnabled()) {
     addPass(createWebAssemblyArgumentMoveLegacyPass());
     addPass(createWebAssemblySetP2AlignOperandsLegacyPass());
-    addPass(createWebAssemblyFixBrTableDefaults());
+    addPass(createWebAssemblyFixBrTableDefaultsLegacyPass());
     addPass(createWebAssemblyCleanCodeAfterTrap());
   }
 


        


More information about the llvm-commits mailing list