[llvm] 8bae4dc - [WebAssembly] Port WebAssemblyLowerBrUnlessPass

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 22 20:54:55 PDT 2026


Author: Aiden Grossman
Date: 2026-07-22T20:54:51-07:00
New Revision: 8bae4dc36e063dadb13dc883eaad4270430b1f9c

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

LOG: [WebAssembly] Port WebAssemblyLowerBrUnlessPass

Standard NewPM pass porting.

Reviewers: dschuff, sbc100, aheejin

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

Added: 
    

Modified: 
    llvm/lib/Target/WebAssembly/WebAssembly.h
    llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
    llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.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 8c0e3504d2b83..0cb3b55117b62 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -264,7 +264,15 @@ class WebAssemblyExplicitLocalsPass
 };
 
 FunctionPass *createWebAssemblyExplicitLocalsLegacyPass();
-FunctionPass *createWebAssemblyLowerBrUnless();
+
+class WebAssemblyLowerBrUnlessPass
+    : public RequiredPassInfoMixin<WebAssemblyLowerBrUnlessPass> {
+public:
+  PreservedAnalyses run(MachineFunction &MF,
+                        MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createWebAssemblyLowerBrUnlessLegacyPass();
 FunctionPass *createWebAssemblyRegNumbering();
 FunctionPass *createWebAssemblyVecReduce();
 FunctionPass *createWebAssemblyDebugFixup();
@@ -288,7 +296,7 @@ void initializeWebAssemblyFixBrTableDefaultsLegacyPass(PassRegistry &);
 void initializeWebAssemblyFixFunctionBitcastsLegacyPass(PassRegistry &);
 void initializeWebAssemblyFixIrreducibleControlFlowLegacyPass(PassRegistry &);
 void initializeWebAssemblyLateEHPrepareLegacyPass(PassRegistry &);
-void initializeWebAssemblyLowerBrUnlessPass(PassRegistry &);
+void initializeWebAssemblyLowerBrUnlessLegacyPass(PassRegistry &);
 void initializeWebAssemblyLowerEmscriptenEHSjLjLegacyPass(PassRegistry &);
 void initializeWebAssemblyMCLowerPrePassPass(PassRegistry &);
 void initializeWebAssemblyMemIntrinsicResultsLegacyPass(PassRegistry &);

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index 9a31d2ab0d075..01471bc0cbf14 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -227,7 +227,7 @@ void WebAssemblyCodeGenPassBuilder::addPreEmitPass(
     addMachineFunctionPass(WebAssemblyExplicitLocalsPass(), PMW);
 
   // Lower br_unless into br_if.
-  // TODO(boomanaiden154): WebAssemblyLowerBrUnless
+  addMachineFunctionPass(WebAssemblyLowerBrUnlessPass(), PMW);
 
   // Perform the very last peephole optimizations on the code.
   if (getOptLevel() != CodeGenOptLevel::None) {

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp
index 52226206eb325..3d154bcbd2d0b 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyLowerBrUnless.cpp
@@ -18,8 +18,11 @@
 #include "WebAssembly.h"
 #include "WebAssemblyMachineFunctionInfo.h"
 #include "WebAssemblySubtarget.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/MachinePassManager.h"
+#include "llvm/IR/Analysis.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
 using namespace llvm;
@@ -27,7 +30,7 @@ using namespace llvm;
 #define DEBUG_TYPE "wasm-lower-br_unless"
 
 namespace {
-class WebAssemblyLowerBrUnless final : public MachineFunctionPass {
+class WebAssemblyLowerBrUnlessLegacy final : public MachineFunctionPass {
   StringRef getPassName() const override {
     return "WebAssembly Lower br_unless";
   }
@@ -41,19 +44,19 @@ class WebAssemblyLowerBrUnless final : public MachineFunctionPass {
 
 public:
   static char ID; // Pass identification, replacement for typeid
-  WebAssemblyLowerBrUnless() : MachineFunctionPass(ID) {}
+  WebAssemblyLowerBrUnlessLegacy() : MachineFunctionPass(ID) {}
 };
 } // end anonymous namespace
 
-char WebAssemblyLowerBrUnless::ID = 0;
-INITIALIZE_PASS(WebAssemblyLowerBrUnless, DEBUG_TYPE,
+char WebAssemblyLowerBrUnlessLegacy::ID = 0;
+INITIALIZE_PASS(WebAssemblyLowerBrUnlessLegacy, DEBUG_TYPE,
                 "Lowers br_unless into inverted br_if", false, false)
 
-FunctionPass *llvm::createWebAssemblyLowerBrUnless() {
-  return new WebAssemblyLowerBrUnless();
+FunctionPass *llvm::createWebAssemblyLowerBrUnlessLegacyPass() {
+  return new WebAssemblyLowerBrUnlessLegacy();
 }
 
-bool WebAssemblyLowerBrUnless::runOnMachineFunction(MachineFunction &MF) {
+static bool lowerBrUnless(MachineFunction &MF) {
   LLVM_DEBUG(dbgs() << "********** Lowering br_unless **********\n"
                        "********** Function: "
                     << MF.getName() << '\n');
@@ -207,3 +210,15 @@ bool WebAssemblyLowerBrUnless::runOnMachineFunction(MachineFunction &MF) {
 
   return true;
 }
+
+bool WebAssemblyLowerBrUnlessLegacy::runOnMachineFunction(MachineFunction &MF) {
+  return lowerBrUnless(MF);
+}
+
+PreservedAnalyses
+WebAssemblyLowerBrUnlessPass::run(MachineFunction &MF,
+                                  MachineFunctionAnalysisManager &MFAM) {
+  return lowerBrUnless(MF) ? getMachineFunctionPassPreservedAnalyses()
+                                 .preserveSet<CFGAnalyses>()
+                           : PreservedAnalyses::all();
+}

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index aa7819d59f450..80276acb0458f 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -50,6 +50,7 @@ MACHINE_FUNCTION_PASS("wasm-fix-br-table-defaults",
 MACHINE_FUNCTION_PASS("wasm-fix-irreducible-control-flow",
                       WebAssemblyFixIrreducibleControlFlowPass())
 MACHINE_FUNCTION_PASS("wasm-late-eh-prepare", WebAssemblyLateEHPreparePass())
+MACHINE_FUNCTION_PASS("wasm-lower-br-unless", WebAssemblyLowerBrUnlessPass())
 MACHINE_FUNCTION_PASS("wasm-mem-intrinsic-results", WebAssemblyMemIntrinsicResultsPass())
 MACHINE_FUNCTION_PASS("wasm-nullify-dbg-value-lists",
                       WebAssemblyNullifyDebugValueListsPass())

diff  --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index aef29b428ee85..5c8ebd6fc554b 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -114,7 +114,7 @@ LLVMInitializeWebAssemblyTarget() {
   initializeWebAssemblyCFGSortLegacyPass(PR);
   initializeWebAssemblyCFGStackifyLegacyPass(PR);
   initializeWebAssemblyExplicitLocalsLegacyPass(PR);
-  initializeWebAssemblyLowerBrUnlessPass(PR);
+  initializeWebAssemblyLowerBrUnlessLegacyPass(PR);
   initializeWebAssemblyRegNumberingPass(PR);
   initializeWebAssemblyDebugFixupPass(PR);
   initializeWebAssemblyPeepholePass(PR);
@@ -493,7 +493,7 @@ void WebAssemblyPassConfig::addPreEmitPass() {
     addPass(createWebAssemblyExplicitLocalsLegacyPass());
 
   // Lower br_unless into br_if.
-  addPass(createWebAssemblyLowerBrUnless());
+  addPass(createWebAssemblyLowerBrUnlessLegacyPass());
 
   // Perform the very last peephole optimizations on the code.
   if (getOptLevel() != CodeGenOptLevel::None)


        


More information about the llvm-commits mailing list