81 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file contains the declaration of the WebAssembly-specific11/// utility functions.12///13//===----------------------------------------------------------------------===//14 15#ifndef LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WEBASSEMBLYUTILITIES_H16#define LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WEBASSEMBLYUTILITIES_H17 18#include "llvm/Support/CommandLine.h"19 20namespace llvm {21 22class MachineBasicBlock;23class MachineInstr;24class MachineOperand;25class MCContext;26class MCSymbolWasm;27class TargetRegisterClass;28class WebAssemblyFunctionInfo;29class WebAssemblySubtarget;30 31namespace WebAssembly {32 33bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI);34bool mayThrow(const MachineInstr &MI);35 36// Exception-related function names37extern const char *const ClangCallTerminateFn;38extern const char *const CxaBeginCatchFn;39extern const char *const CxaRethrowFn;40extern const char *const StdTerminateFn;41extern const char *const PersonalityWrapperFn;42 43/// Returns the operand number of a callee, assuming the argument is a call44/// instruction.45const MachineOperand &getCalleeOp(const MachineInstr &MI);46 47/// Returns the __indirect_function_table, for use in call_indirect and in48/// function bitcasts.49MCSymbolWasm *50getOrCreateFunctionTableSymbol(MCContext &Ctx,51 const WebAssemblySubtarget *Subtarget);52 53/// Returns the __funcref_call_table, for use in funcref calls when lowered to54/// table.set + call_indirect.55MCSymbolWasm *56getOrCreateFuncrefCallTableSymbol(MCContext &Ctx,57 const WebAssemblySubtarget *Subtarget);58 59/// Find a catch instruction from an EH pad. Returns null if no catch60/// instruction found or the catch is in an invalid location.61MachineInstr *findCatch(MachineBasicBlock *EHPad);62 63/// Returns the appropriate copy opcode for the given register class.64unsigned getCopyOpcodeForRegClass(const TargetRegisterClass *RC);65 66/// Returns true if multivalue returns of a function can be lowered directly,67/// i.e., not indirectly via a pointer parameter that points to the value in68/// memory.69bool canLowerMultivalueReturn(const WebAssemblySubtarget *Subtarget);70 71/// Returns true if the function's return value(s) can be lowered directly,72/// i.e., not indirectly via a pointer parameter that points to the value in73/// memory.74bool canLowerReturn(size_t ResultSize, const WebAssemblySubtarget *Subtarget);75 76} // end namespace WebAssembly77 78} // end namespace llvm79 80#endif81