diff options
author | Mehdi Amini <joker.eph@gmail.com> | 2024-04-27 21:14:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-27 21:14:46 +0200 |
commit | 38a2051c5222b3e5245043a3056b3a1e89f69b22 (patch) | |
tree | 4a7b39195386886b3b31e0dc1c6b439c7d215358 | |
parent | 0336328e970e7e809d52a33a704bb7c05f6e170e (diff) | |
download | llvm-38a2051c5222b3e5245043a3056b3a1e89f69b22.zip llvm-38a2051c5222b3e5245043a3056b3a1e89f69b22.tar.gz llvm-38a2051c5222b3e5245043a3056b3a1e89f69b22.tar.bz2 |
Revert "[WebAssembly] remove instruction after builtin trap" (#90354)
Reverts llvm/llvm-project#90207
LLD Bots are broken.
-rw-r--r-- | llvm/lib/Target/WebAssembly/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssembly.h | 2 | ||||
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp | 80 | ||||
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/unreachable.ll | 11 | ||||
-rw-r--r-- | llvm/test/MC/WebAssembly/global-ctor-dtor.ll | 12 |
6 files changed, 8 insertions, 102 deletions
diff --git a/llvm/lib/Target/WebAssembly/CMakeLists.txt b/llvm/lib/Target/WebAssembly/CMakeLists.txt index 1e83cbe..f430be2 100644 --- a/llvm/lib/Target/WebAssembly/CMakeLists.txt +++ b/llvm/lib/Target/WebAssembly/CMakeLists.txt @@ -19,7 +19,6 @@ add_llvm_target(WebAssemblyCodeGen WebAssemblyArgumentMove.cpp WebAssemblyAsmPrinter.cpp WebAssemblyCFGStackify.cpp - WebAssemblyCleanCodeAfterTrap.cpp WebAssemblyCFGSort.cpp WebAssemblyDebugFixup.cpp WebAssemblyDebugValueManager.cpp diff --git a/llvm/lib/Target/WebAssembly/WebAssembly.h b/llvm/lib/Target/WebAssembly/WebAssembly.h index 7fc8546..1c40add 100644 --- a/llvm/lib/Target/WebAssembly/WebAssembly.h +++ b/llvm/lib/Target/WebAssembly/WebAssembly.h @@ -37,7 +37,6 @@ FunctionPass *createWebAssemblyISelDag(WebAssemblyTargetMachine &TM, CodeGenOptLevel OptLevel); FunctionPass *createWebAssemblyArgumentMove(); FunctionPass *createWebAssemblySetP2AlignOperands(); -FunctionPass *createWebAssemblyCleanCodeAfterTrap(); // Late passes. FunctionPass *createWebAssemblyReplacePhysRegs(); @@ -64,7 +63,6 @@ void initializeOptimizeReturnedPass(PassRegistry &); void initializeWebAssemblyRefTypeMem2LocalPass(PassRegistry &); void initializeWebAssemblyAddMissingPrototypesPass(PassRegistry &); void initializeWebAssemblyArgumentMovePass(PassRegistry &); -void initializeWebAssemblyCleanCodeAfterTrapPass(PassRegistry &); void initializeWebAssemblyCFGSortPass(PassRegistry &); void initializeWebAssemblyCFGStackifyPass(PassRegistry &); void initializeWebAssemblyDAGToDAGISelPass(PassRegistry &); diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp deleted file mode 100644 index e5cba3c..0000000 --- a/llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp +++ /dev/null @@ -1,80 +0,0 @@ -//===-- WebAssemblyCleanCodeAfterTrap.cpp - Clean Code After Trap ---------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// This file remove instruction after trap. -/// ``llvm.trap`` will be convert as ``unreachable`` which is terminator. -/// Instruction after terminator will cause validation failed. -/// -//===----------------------------------------------------------------------===// - -#include "WebAssembly.h" -#include "WebAssemblyUtilities.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/CodeGen/MachineBlockFrequencyInfo.h" -#include "llvm/CodeGen/Passes.h" -#include "llvm/MC/MCInstrDesc.h" -#include "llvm/Support/Debug.h" -#include "llvm/Support/raw_ostream.h" -using namespace llvm; - -#define DEBUG_TYPE "wasm-clean-code-after-trap" - -namespace { -class WebAssemblyCleanCodeAfterTrap final : public MachineFunctionPass { -public: - static char ID; // Pass identification, replacement for typeid - WebAssemblyCleanCodeAfterTrap() : MachineFunctionPass(ID) {} - - StringRef getPassName() const override { - return "WebAssembly Clean Code After Trap"; - } - - bool runOnMachineFunction(MachineFunction &MF) override; -}; -} // end anonymous namespace - -char WebAssemblyCleanCodeAfterTrap::ID = 0; -INITIALIZE_PASS(WebAssemblyCleanCodeAfterTrap, DEBUG_TYPE, - "WebAssembly Clean Code After Trap", false, false) - -FunctionPass *llvm::createWebAssemblyCleanCodeAfterTrap() { - return new WebAssemblyCleanCodeAfterTrap(); -} - -bool WebAssemblyCleanCodeAfterTrap::runOnMachineFunction(MachineFunction &MF) { - LLVM_DEBUG({ - dbgs() << "********** CleanCodeAfterTrap **********\n" - << "********** Function: " << MF.getName() << '\n'; - }); - - bool Changed = false; - - for (MachineBasicBlock &BB : MF) { - bool HasTerminator = false; - llvm::SmallVector<MachineInstr *> RemoveMI{}; - for (MachineInstr &MI : BB) { - if (HasTerminator) - RemoveMI.push_back(&MI); - if (MI.hasProperty(MCID::Trap) && MI.isTerminator()) - HasTerminator = true; - } - if (!RemoveMI.empty()) { - Changed = true; - LLVM_DEBUG({ - for (MachineInstr *MI : RemoveMI) { - llvm::dbgs() << "* remove "; - MI->print(llvm::dbgs()); - } - }); - for (MachineInstr *MI : RemoveMI) - MI->eraseFromParent(); - } - } - return Changed; -} diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index de342e8..cdd39ee 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -512,10 +512,6 @@ bool WebAssemblyPassConfig::addInstSelector() { // Eliminate range checks and add default targets to br_table instructions. addPass(createWebAssemblyFixBrTableDefaults()); - // unreachable is terminator, non-terminator instruction after it is not - // allowed. - addPass(createWebAssemblyCleanCodeAfterTrap()); - return false; } diff --git a/llvm/test/CodeGen/WebAssembly/unreachable.ll b/llvm/test/CodeGen/WebAssembly/unreachable.ll index ccac31a..5368c2b 100644 --- a/llvm/test/CodeGen/WebAssembly/unreachable.ll +++ b/llvm/test/CodeGen/WebAssembly/unreachable.ll @@ -30,6 +30,7 @@ define void @trap_ret_void() { ; CHECK: .functype trap_ret_void () -> () ; CHECK-NEXT: # %bb.0: ; CHECK-NEXT: unreachable +; CHECK-NEXT: # fallthrough-return ; CHECK-NEXT: end_function call void @llvm.trap() ret void @@ -53,6 +54,7 @@ define void @trap_unreacheable() { ; CHECK: .functype trap_unreacheable () -> () ; CHECK-NEXT: # %bb.0: ; CHECK-NEXT: unreachable +; CHECK-NEXT: unreachable ; CHECK-NEXT: end_function call void @llvm.trap() unreachable @@ -92,12 +94,3 @@ define i32 @missing_ret_noreturn_unreachable() { call void @ext_never_return() unreachable } - -define i32 @no_crash_for_other_instruction_after_trap(ptr %p, i32 %b) { -; CHECK-LABEL: no_crash_for_other_instruction_after_trap: -; CHECK: unreachable -; CHECK-NEXT: end_function - %a = load i32, ptr %p - call void @llvm.trap() - ret i32 %a -} diff --git a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll index f1ec71d..bc1be79 100644 --- a/llvm/test/MC/WebAssembly/global-ctor-dtor.ll +++ b/llvm/test/MC/WebAssembly/global-ctor-dtor.ll @@ -80,29 +80,29 @@ declare void @func3() ; CHECK-NEXT: Offset: 0x1D ; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB ; CHECK-NEXT: Index: 6 -; CHECK-NEXT: Offset: 0x2B +; CHECK-NEXT: Offset: 0x2C ; CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_SLEB ; CHECK-NEXT: Index: 5 -; CHECK-NEXT: Offset: 0x36 +; CHECK-NEXT: Offset: 0x37 ; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_SLEB ; CHECK-NEXT: Index: 3 -; CHECK-NEXT: Offset: 0x3E +; CHECK-NEXT: Offset: 0x3F ; CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB ; CHECK-NEXT: Index: 4 -; CHECK-NEXT: Offset: 0x44 +; CHECK-NEXT: Offset: 0x45 ; CHECK-NEXT: Functions: ; CHECK-NEXT: - Index: 5 ; CHECK-NEXT: Locals: ; CHECK-NEXT: Body: 1080808080000B ; CHECK-NEXT: - Index: 6 ; CHECK-NEXT: Locals: -; CHECK-NEXT: Body: 02404181808080004100418080808000108180808000450D00000B0B +; CHECK-NEXT: Body: 02404181808080004100418080808000108180808000450D0000000B0B ; CHECK-NEXT: - Index: 7 ; CHECK-NEXT: Locals: ; CHECK-NEXT: Body: 1082808080000B ; CHECK-NEXT: - Index: 8 ; CHECK-NEXT: Locals: -; CHECK-NEXT: Body: 02404182808080004100418080808000108180808000450D00000B0B +; CHECK-NEXT: Body: 02404182808080004100418080808000108180808000450D0000000B0B ; CHECK-NEXT: - Type: DATA ; CHECK-NEXT: Segments: ; CHECK-NEXT: - SectionOffset: 6 |