llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-webassembly Author: Aiden Grossman (boomanaiden154) <details> <summary>Changes</summary> Standard NewPM pass porting. --- Full diff: https://github.com/llvm/llvm-project/pull/209892.diff 5 Files Affected: - (modified) llvm/lib/Target/WebAssembly/WebAssembly.h (+10-2) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp (+23-7) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyCodeGenPassBuilder.cpp (+1-1) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyPassRegistry.def (+2) - (modified) llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp (+2-2) ``````````diff 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; `````````` </details> https://github.com/llvm/llvm-project/pull/209892 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
