40 #define DEBUG_TYPE "wasm-call-indirect-fixup" 45 return "WebAssembly CallIndirect Fixup";
58 "Rewrite call_indirect argument orderings",
false,
false)
61 return new WebAssemblyCallIndirectFixup();
66 using namespace WebAssembly;
67 case PCALL_INDIRECT_VOID:
68 return CALL_INDIRECT_VOID;
69 case PCALL_INDIRECT_I32:
70 return CALL_INDIRECT_I32;
71 case PCALL_INDIRECT_I64:
72 return CALL_INDIRECT_I64;
73 case PCALL_INDIRECT_F32:
74 return CALL_INDIRECT_F32;
75 case PCALL_INDIRECT_F64:
76 return CALL_INDIRECT_F64;
77 case PCALL_INDIRECT_v16i8:
78 return CALL_INDIRECT_v16i8;
79 case PCALL_INDIRECT_v8i16:
80 return CALL_INDIRECT_v8i16;
81 case PCALL_INDIRECT_v4i32:
82 return CALL_INDIRECT_v4i32;
83 case PCALL_INDIRECT_v2i64:
84 return CALL_INDIRECT_v2i64;
85 case PCALL_INDIRECT_v4f32:
86 return CALL_INDIRECT_v4f32;
87 case PCALL_INDIRECT_v2f64:
88 return CALL_INDIRECT_v2f64;
90 return INSTRUCTION_LIST_END;
96 WebAssembly::INSTRUCTION_LIST_END;
99 bool WebAssemblyCallIndirectFixup::runOnMachineFunction(
MachineFunction &MF) {
100 LLVM_DEBUG(
dbgs() <<
"********** Fixing up CALL_INDIRECTs **********\n" 101 <<
"********** Function: " << MF.
getName() <<
'\n');
103 bool Changed =
false;
128 MI.operands_begin() +
MI.getNumExplicitOperands()))
133 while (
MI.getNumOperands() >
MI.getDesc().getNumDefs())
134 MI.RemoveOperand(
MI.getNumOperands() - 1);
static unsigned GetNonPseudoCallIndirectOpcode(const MachineInstr &MI)
This class represents lattice values for constants.
void push_back(const T &Elt)
Describe properties that are true of each instruction in the target description file.
This file contains the entry points for global functions defined in the LLVM WebAssembly back-end...
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
const HexagonInstrInfo * TII
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
static bool IsPseudoCallIndirect(const MachineInstr &MI)
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
FunctionPass * createWebAssemblyCallIndirectFixup()
This file provides WebAssembly-specific target descriptions.
FunctionPass class - This class is used to implement most global optimizations.
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
This file declares the WebAssembly-specific subclass of TargetSubtarget.
MachineOperand class - Representation of each machine instruction operand.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Representation of each machine instruction.
static MachineOperand CreateImm(int64_t Val)
This file declares WebAssembly-specific per-machine-function information.
INITIALIZE_PASS(WebAssemblyCallIndirectFixup, DEBUG_TYPE, "Rewrite call_indirect argument orderings", false, false) FunctionPass *llvm
StringRef - Represent a constant reference to a string, i.e.