27    "_Unwind_Wasm_CallPersonality";
 
   32  if (
MI.getNumOperands() == 0)
 
 
   42  switch (
MI.getOpcode()) {
 
   43  case WebAssembly::THROW:
 
   44  case WebAssembly::THROW_S:
 
   45  case WebAssembly::THROW_REF:
 
   46  case WebAssembly::THROW_REF_S:
 
   47  case WebAssembly::RETHROW:
 
   48  case WebAssembly::RETHROW_S:
 
   66    if (strcmp(Name, 
"memcpy") == 0 || strcmp(Name, 
"memmove") == 0 ||
 
   67        strcmp(Name, 
"memset") == 0)
 
   75  if (
F->doesNotThrow())
 
 
   88  switch (
MI.getOpcode()) {
 
   89  case WebAssembly::CALL:
 
   90  case WebAssembly::CALL_S:
 
   91  case WebAssembly::RET_CALL:
 
   92  case WebAssembly::RET_CALL_S:
 
   93    return MI.getOperand(
MI.getNumExplicitDefs());
 
   94  case WebAssembly::CALL_INDIRECT:
 
   95  case WebAssembly::CALL_INDIRECT_S:
 
   96  case WebAssembly::RET_CALL_INDIRECT:
 
   97  case WebAssembly::RET_CALL_INDIRECT_S:
 
   98    return MI.getOperand(
MI.getNumExplicitOperands() - 1);
 
 
  106  StringRef Name = 
"__indirect_function_table";
 
  107  auto *Sym = 
static_cast<MCSymbolWasm *
>(Ctx.lookupSymbol(Name));
 
  109    if (!Sym->isFunctionTable())
 
  110      Ctx.reportError(
SMLoc(), 
"symbol is not a wasm funcref table");
 
  113    Sym = 
static_cast<MCSymbolWasm *
>(Ctx.getOrCreateSymbol(Name));
 
 
  126  auto *Sym = 
static_cast<MCSymbolWasm *
>(Ctx.lookupSymbol(Name));
 
  128    if (!Sym->isFunctionTable())
 
  129      Ctx.reportError(
SMLoc(), 
"symbol is not a wasm funcref table");
 
  131    Sym = 
static_cast<MCSymbolWasm *
>(Ctx.getOrCreateSymbol(Name));
 
  140    Sym->setTableType(TableType);
 
 
  151  auto Pos = EHPad->
begin();
 
  154  while (Pos != EHPad->
end() &&
 
  155         (Pos->isLabel() || Pos->isDebugInstr() || 
isMarker(Pos->getOpcode())))
 
 
  164  switch (RC->
getID()) {
 
  165  case WebAssembly::I32RegClassID:
 
  166    return WebAssembly::COPY_I32;
 
  167  case WebAssembly::I64RegClassID:
 
  168    return WebAssembly::COPY_I64;
 
  169  case WebAssembly::F32RegClassID:
 
  170    return WebAssembly::COPY_F32;
 
  171  case WebAssembly::F64RegClassID:
 
  172    return WebAssembly::COPY_F64;
 
  173  case WebAssembly::V128RegClassID:
 
  174    return WebAssembly::COPY_V128;
 
  175  case WebAssembly::FUNCREFRegClassID:
 
  176    return WebAssembly::COPY_FUNCREF;
 
  177  case WebAssembly::EXTERNREFRegClassID:
 
  178    return WebAssembly::COPY_EXTERNREF;
 
  179  case WebAssembly::EXNREFRegClassID:
 
  180    return WebAssembly::COPY_EXNREF;
 
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file declares WebAssembly-specific per-machine-function information.
This file declares the WebAssembly-specific subclass of TargetMachine.
This file contains the declaration of the WebAssembly-specific utility functions.
Context object for machine code objects.
void setFunctionTable(bool is64)
void setWeak(bool isWeak)
void setOmitFromLinkingSection()
bool isEHPad() const
Returns true if the block is a landing pad.
Representation of each machine instruction.
MachineOperand class - Representation of each machine instruction operand.
const GlobalValue * getGlobal() const
bool isReg() const
isReg - Tests if this is a MO_Register operand.
bool isSymbol() const
isSymbol - Tests if this is a MO_ExternalSymbol operand.
bool isGlobal() const
isGlobal - Tests if this is a MO_GlobalAddress operand.
const char * getSymbolName() const
Register getReg() const
getReg - Returns the register number.
Wrapper class representing virtual and physical registers.
constexpr bool isVirtual() const
Return true if the specified register number is in the virtual register namespace.
Represents a location in source code.
StringRef - Represent a constant reference to a string, i.e.
unsigned getID() const
Return the register class ID number.
LLVM_ABI bool isArch64Bit() const
Test whether the architecture is 64-bit.
This class is derived from MachineFunctionInfo and contains private WebAssembly-specific information ...
bool isVRegStackified(Register VReg) const
bool hasCallIndirectOverlong() const
const Triple & getTargetTriple() const
const WebAssemblyTargetLowering * getTargetLowering() const override
bool hasMultivalue() const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
const char *const StdTerminateFn
const char *const CxaBeginCatchFn
bool isChild(const MachineInstr &MI, const WebAssemblyFunctionInfo &MFI)
Test whether MI is a child of some other node in an expression tree.
bool isCallIndirect(unsigned Opc)
bool canLowerMultivalueReturn(const WebAssemblySubtarget *Subtarget)
Returns true if multivalue returns of a function can be lowered directly, i.e., not indirectly via a ...
const char *const CxaRethrowFn
MCSymbolWasm * getOrCreateFunctionTableSymbol(MCContext &Ctx, const WebAssemblySubtarget *Subtarget)
Returns the __indirect_function_table, for use in call_indirect and in function bitcasts.
bool isMarker(unsigned Opc)
unsigned getCopyOpcodeForRegClass(const TargetRegisterClass *RC)
Returns the appropriate copy opcode for the given register class.
const MachineOperand & getCalleeOp(const MachineInstr &MI)
Returns the operand number of a callee, assuming the argument is a call instruction.
MachineInstr * findCatch(MachineBasicBlock *EHPad)
Find a catch instruction from an EH pad.
bool isCatch(unsigned Opc)
MCSymbolWasm * getOrCreateFuncrefCallTableSymbol(MCContext &Ctx, const WebAssemblySubtarget *Subtarget)
Returns the __funcref_call_table, for use in funcref calls when lowered to table.set + call_indirect.
const char *const PersonalityWrapperFn
bool canLowerReturn(size_t ResultSize, const WebAssemblySubtarget *Subtarget)
Returns true if the function's return value(s) can be lowered directly, i.e., not indirectly via a po...
bool mayThrow(const MachineInstr &MI)
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.