| //===-- WebAssemblyUtilities - WebAssembly Utility Functions ---*- C++ -*-====// | |
| // | |
| // 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 contains the declaration of the WebAssembly-specific | |
| /// utility functions. | |
| /// | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H | |
| #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H | |
| #include "llvm/CodeGen/MachineBasicBlock.h" | |
| namespace llvm { | |
| class WebAssemblyFunctionInfo; | |
| namespace WebAssembly { | |
| bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI); | |
| bool mayThrow(const MachineInstr &MI); | |
| // Exception-related function names | |
| extern const char *const ClangCallTerminateFn; | |
| extern const char *const CxaBeginCatchFn; | |
| extern const char *const CxaRethrowFn; | |
| extern const char *const StdTerminateFn; | |
| extern const char *const PersonalityWrapperFn; | |
| /// Return the "bottom" block of an entity, which can be either a MachineLoop or | |
| /// WebAssemblyException. This differs from MachineLoop::getBottomBlock in that | |
| /// it works even if the entity is discontiguous. | |
| template <typename T> MachineBasicBlock *getBottom(const T *Unit) { | |
| MachineBasicBlock *Bottom = Unit->getHeader(); | |
| for (MachineBasicBlock *MBB : Unit->blocks()) | |
| if (MBB->getNumber() > Bottom->getNumber()) | |
| Bottom = MBB; | |
| return Bottom; | |
| } | |
| } // end namespace WebAssembly | |
| } // end namespace llvm | |
| #endif |