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. getBottom(const T * Unit)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 } // end namespace WebAssembly 48 49 } // end namespace llvm 50 51 #endif 52