1 //===-- WebAssemblyUtilities - WebAssembly Utility Functions ---*- C++ -*-====//
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
7 //===----------------------------------------------------------------------===//
10 /// This file contains the declaration of the WebAssembly-specific
11 /// utility functions.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H
16 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H
18 #include "llvm/CodeGen/MachineBasicBlock.h"
22 class WebAssemblyFunctionInfo
;
24 namespace WebAssembly
{
26 bool isChild(const MachineInstr
&MI
, const WebAssemblyFunctionInfo
&MFI
);
27 bool mayThrow(const MachineInstr
&MI
);
29 // Exception-related function names
30 extern const char *const ClangCallTerminateFn
;
31 extern const char *const CxaBeginCatchFn
;
32 extern const char *const CxaRethrowFn
;
33 extern const char *const StdTerminateFn
;
34 extern const char *const PersonalityWrapperFn
;
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.
39 template <typename T
> MachineBasicBlock
*getBottom(const T
*Unit
) {
40 MachineBasicBlock
*Bottom
= Unit
->getHeader();
41 for (MachineBasicBlock
*MBB
: Unit
->blocks())
42 if (MBB
->getNumber() > Bottom
->getNumber())
47 } // end namespace WebAssembly
49 } // end namespace llvm