[llvm-branch-commits] [llvm] b95e62b - Revert "[WebAssembly] remove instruction after builtin trap (#90207)"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Apr 27 12:12:50 PDT 2024


Author: Mehdi Amini
Date: 2024-04-27T21:12:47+02:00
New Revision: b95e62ba350fedcf01b3220279c007fb75723106

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

LOG: Revert "[WebAssembly] remove instruction after builtin trap (#90207)"

This reverts commit ff03f23be8bc6df701efd9e1093779fbcf382d87.

Added: 
    

Modified: 
    llvm/lib/Target/WebAssembly/CMakeLists.txt
    llvm/lib/Target/WebAssembly/WebAssembly.h
    llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
    llvm/test/CodeGen/WebAssembly/unreachable.ll
    llvm/test/MC/WebAssembly/global-ctor-dtor.ll

Removed: 
    llvm/lib/Target/WebAssembly/WebAssemblyCleanCodeAfterTrap.cpp


################################################################################
diff  --git a/llvm/lib/Target/WebAssembly/CMakeLists.txt b/llvm/lib/Target/WebAssembly/CMakeLists.txt
index 1e83cbeac50d6d..f430be2653b4ee 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 7fc8546248f164..1c40addb6d6f78 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 e5cba3c485473c..00000000000000
--- 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 de342e89657367..cdd39eeb6bbbc2 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 ccac31a9af4a3d..5368c2ba5b8dc1 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 f1ec71da1ebb64..bc1be793134969 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


        


More information about the llvm-branch-commits mailing list