1//===-- WebAssemblyUtilities - WebAssembly Utility Functions ---*- C++ -*-====// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8/// 9/// \file 10/// This file contains the declaration of the WebAssembly-specific 11/// utility functions. 12/// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H 16#define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H 17 18#include "llvm/CodeGen/MachineBasicBlock.h" 19 20namespace llvm { 21 22class WebAssemblyFunctionInfo; 23 24namespace WebAssembly { 25 26bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI); 27bool mayThrow(const MachineInstr &MI); 28 29// Exception-related function names 30extern const char *const ClangCallTerminateFn; 31extern const char *const CxaBeginCatchFn; 32extern const char *const CxaRethrowFn; 33extern const char *const StdTerminateFn; 34extern const char *const PersonalityWrapperFn; 35 36/// Return the "bottom" block of an entity, which can be either a MachineLoop or 37/// WebAssemblyException. This differs from MachineLoop::getBottomBlock in that 38/// it works even if the entity is discontiguous. 39template <typename T> MachineBasicBlock *getBottom(const T *Unit) { 40 MachineBasicBlock *Bottom = Unit->getHeader(); 41 for (MachineBasicBlock *MBB : Unit->blocks()) 42 if (MBB->getNumber() > Bottom->getNumber()) 43 Bottom = MBB; 44 return Bottom; 45} 46 47/// Returns the operand number of a callee, assuming the argument is a call 48/// instruction. 49const MachineOperand &getCalleeOp(const MachineInstr &MI); 50 51} // end namespace WebAssembly 52 53} // end namespace llvm 54 55#endif 56