[llvm] 565ef24 - [WebAssembly] Port WebAssemblyCleanCodeAfterTrapPass
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 16:48:39 PDT 2026
Author: Aiden Grossman
Date: 2026-07-16T16:48:35-07:00
New Revision: 565ef24d6c1b31e2fbf736b2b115d49d49b86af7
URL: https://github.com/llvm/llvm-project/commit/565ef24d6c1b31e2fbf736b2b115d49d49b86af7
DIFF: https://github.com/llvm/llvm-project/commit/565ef24d6c1b31e2fbf736b2b115d49d49b86af7.diff
LOG: [WebAssembly] Port WebAssemblyCleanCodeAfterTrapPass
Standard NewPM pass porting.
Reviewers: sbc100, dschuff, aheejin
Pull Request: https://github.com/llvm/llvm-project/pull/209892
Added:
Modified:
llvm/lib/Target/WebAssembly/WebAssembly.h
llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.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 f4bcfd79cdd79..cf90353f963b9 100644
--- a/llvm/lib/Target/WebAssembly/WebAssembly.h
+++ b/llvm/lib/Target/WebAssembly/WebAssembly.h
@@ -141,7 +141,15 @@ class WebAssemblySetP2AlignOperandsPass
};
FunctionPass *createWebAssemblySetP2AlignOperandsLegacyPass();
-FunctionPass *createWebAssemblyCleanCodeAfterTrap();
+
+class WebAssemblyCleanCodeAfterTrapPass
+ : public RequiredPassInfoMixin<WebAssemblyCleanCodeAfterTrapPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+FunctionPass *createWebAssemblyCleanCodeAfterTrapLegacyPass();
// Late passes.
FunctionPass *createWebAssemblyReplacePhysRegs();
@@ -193,7 +201,7 @@ void initializeWebAssemblyRefTypeMem2LocalLegacyPass(PassRegistry &);
void initializeWebAssemblyAddMissingPrototypesLegacyPass(PassRegistry &);
void initializeWebAssemblyArgumentMoveLegacyPass(PassRegistry &);
void initializeWebAssemblyAsmPrinterPass(PassRegistry &);
-void initializeWebAssemblyCleanCodeAfterTrapPass(PassRegistry &);
+void initializeWebAssemblyCleanCodeAfterTrapLegacyPass(PassRegistry &);
void initializeWebAssemblyCFGSortPass(PassRegistry &);
void initializeWebAssemblyCFGStackifyPass(PassRegistry &);
void initializeWebAssemblyDAGToDAGISelLegacyPass(PassRegistry &);
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp
index e5cba3c485473..e8e7ac2b9f63c 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp
@@ -17,7 +17,10 @@
#include "WebAssemblyUtilities.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/CodeGen/Passes.h"
+#include "llvm/IR/Analysis.h"
#include "llvm/MC/MCInstrDesc.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
@@ -26,10 +29,10 @@ using namespace llvm;
#define DEBUG_TYPE "wasm-clean-code-after-trap"
namespace {
-class WebAssemblyCleanCodeAfterTrap final : public MachineFunctionPass {
+class WebAssemblyCleanCodeAfterTrapLegacy final : public MachineFunctionPass {
public:
static char ID; // Pass identification, replacement for typeid
- WebAssemblyCleanCodeAfterTrap() : MachineFunctionPass(ID) {}
+ WebAssemblyCleanCodeAfterTrapLegacy() : MachineFunctionPass(ID) {}
StringRef getPassName() const override {
return "WebAssembly Clean Code After Trap";
@@ -39,15 +42,15 @@ class WebAssemblyCleanCodeAfterTrap final : public MachineFunctionPass {
};
} // end anonymous namespace
-char WebAssemblyCleanCodeAfterTrap::ID = 0;
-INITIALIZE_PASS(WebAssemblyCleanCodeAfterTrap, DEBUG_TYPE,
+char WebAssemblyCleanCodeAfterTrapLegacy::ID = 0;
+INITIALIZE_PASS(WebAssemblyCleanCodeAfterTrapLegacy, DEBUG_TYPE,
"WebAssembly Clean Code After Trap", false, false)
-FunctionPass *llvm::createWebAssemblyCleanCodeAfterTrap() {
- return new WebAssemblyCleanCodeAfterTrap();
+FunctionPass *llvm::createWebAssemblyCleanCodeAfterTrapLegacyPass() {
+ return new WebAssemblyCleanCodeAfterTrapLegacy();
}
-bool WebAssemblyCleanCodeAfterTrap::runOnMachineFunction(MachineFunction &MF) {
+static bool cleanCodeAfterTrap(MachineFunction &MF) {
LLVM_DEBUG({
dbgs() << "********** CleanCodeAfterTrap **********\n"
<< "********** Function: " << MF.getName() << '\n';
@@ -78,3 +81,16 @@ bool WebAssemblyCleanCodeAfterTrap::runOnMachineFunction(MachineFunction &MF) {
}
return Changed;
}
+
+bool WebAssemblyCleanCodeAfterTrapLegacy::runOnMachineFunction(
+ MachineFunction &MF) {
+ return cleanCodeAfterTrap(MF);
+}
+
+PreservedAnalyses
+WebAssemblyCleanCodeAfterTrapPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ return cleanCodeAfterTrap(MF) ? getMachineFunctionPassPreservedAnalyses()
+ .preserveSet<CFGAnalyses>()
+ : PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
index a86bd28f7b5d4..afd970ea8f577 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp
@@ -162,7 +162,7 @@ Error WebAssemblyCodeGenPassBuilder::addInstSelector(
// unreachable is terminator, non-terminator instruction after it is not
// allowed.
- // TODO(boomanaiden154): WebAssemblyCleanCodeAfterTrap
+ addMachineFunctionPass(WebAssemblyCleanCodeAfterTrapPass(), PMW);
return Error::success();
}
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
index b28efc08678b1..caf32fae60470 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def
@@ -33,6 +33,8 @@ FUNCTION_PASS("wasm-ref-type-mem2local", WebAssemblyRefTypeMem2LocalPass())
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
#endif
MACHINE_FUNCTION_PASS("wasm-argument-move", WebAssemblyArgumentMovePass())
+MACHINE_FUNCTION_PASS("wasm-clean-code-after-trap",
+ WebAssemblyCleanCodeAfterTrapPass())
MACHINE_FUNCTION_PASS("wasm-isel", WebAssemblyISelDAGToDAGPass(*this, getOptLevel()))
MACHINE_FUNCTION_PASS("wasm-fix-br-table-defaults",
WebAssemblyFixBrTableDefaultsPass())
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index 2751693c33a75..ac44dcc2be674 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -394,7 +394,7 @@ bool WebAssemblyPassConfig::addInstSelector() {
// unreachable is terminator, non-terminator instruction after it is not
// allowed.
- addPass(createWebAssemblyCleanCodeAfterTrap());
+ addPass(createWebAssemblyCleanCodeAfterTrapLegacyPass());
return false;
}
@@ -549,7 +549,7 @@ bool WebAssemblyPassConfig::addGlobalInstructionSelect() {
addPass(createWebAssemblyArgumentMoveLegacyPass());
addPass(createWebAssemblySetP2AlignOperandsLegacyPass());
addPass(createWebAssemblyFixBrTableDefaultsLegacyPass());
- addPass(createWebAssemblyCleanCodeAfterTrap());
+ addPass(createWebAssemblyCleanCodeAfterTrapLegacyPass());
}
return false;
More information about the llvm-commits
mailing list