[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