[x86] fix assert with horizontal math + broadcast of vector (PR43402)
[llvm-core.git] / lib / Target / WebAssembly / WebAssemblyUtilities.h
blob26cf84de89b92766bd76d83f72e0d9b8ea57d17d
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 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H
16 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYUTILITIES_H
18 #include "llvm/CodeGen/MachineBasicBlock.h"
20 namespace llvm {
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())
43 Bottom = MBB;
44 return Bottom;
47 } // end namespace WebAssembly
49 } // end namespace llvm
51 #endif