]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/lib/Target/WebAssembly/WebAssemblyUtilities.h
Merge diff elimination updates from r355953 into vendor/llvm-project.
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / lib / Target / WebAssembly / WebAssemblyUtilities.h
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
20 namespace llvm {
21
22 class WebAssemblyFunctionInfo;
23
24 namespace WebAssembly {
25
26 bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI);
27 bool mayThrow(const MachineInstr &MI);
28
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;
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.
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())
43       Bottom = MBB;
44   return Bottom;
45 }
46
47 } // end namespace WebAssembly
48
49 } // end namespace llvm
50
51 #endif