35 #define GET_INSTRMAP_INFO 1 36 #include "WebAssemblyGenInstrInfo.inc" 42 cl::desc(
"WebAssembly: output stack registers in" 43 " instruction output for test purposes only."),
49 WebAssemblyMCInstLower::GetGlobalAddressSymbol(
const MachineOperand &MO)
const {
53 if (
const auto *FuncTy = dyn_cast<FunctionType>(Global->
getValueType())) {
71 MCSymbol *WebAssemblyMCInstLower::GetExternalSymbolSymbol(
82 if (strcmp(Name,
"__stack_pointer") == 0) {
93 if (strcmp(Name,
"__cpp_exception") == 0) {
116 make_unique<wasm::WasmSignature>(std::move(Returns), std::move(Params));
125 bool IsFunc,
bool IsGlob,
126 bool IsEvent)
const {
151 if (RC == &WebAssembly::I32RegClass)
153 if (RC == &WebAssembly::I64RegClass)
155 if (RC == &WebAssembly::F32RegClass)
157 if (RC == &WebAssembly::F64RegClass)
159 if (RC == &WebAssembly::V128RegClass)
213 auto Signature = make_unique<wasm::WasmSignature>(std::move(Returns),
241 "WebAssembly does not use target flags on GlobalAddresses");
242 MCOp = LowerSymbolOperand(GetGlobalAddressSymbol(MO), MO.
getOffset(),
250 "WebAssembly uses only symbol flags on ExternalSymbols");
251 MCOp = LowerSymbolOperand(
252 GetExternalSymbolSymbol(MO), 0,
261 "WebAssembly does not use target flags on MCSymbol");
262 MCOp = LowerSymbolOperand(MO.
getMCSymbol(), 0,
false,
false,
293 auto StackOpcode = WebAssembly::getStackOpcode(RegOpcode);
294 assert(StackOpcode != -1 &&
"Failed to stackify instruction");
unsigned getTargetFlags() const
raw_ostream & errs()
This returns a reference to a raw_ostream for standard error.
MachineInstr * getParent()
getParent - Return the instruction that this operand belongs to.
bool isLabel() const
Returns true if the MachineInstr represents a label.
const TargetRegisterClass * getRegClass(unsigned Reg) const
Return the register class of the specified virtual register.
MCSymbol * GetExternalSymbolSymbol(StringRef Sym) const
Return the MCSymbol for the specified ExternalSymbol.
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
This class represents lattice values for constants.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
void setWeak(bool isWeak)
static MCOperand createExpr(const MCExpr *Val)
void push_back(const T &Elt)
Describe properties that are true of each instruction in the target description file.
unsigned getReg() const
getReg - Returns the register number.
void setGlobalType(wasm::WasmGlobalType GT)
This file declares the class to lower WebAssembly MachineInstrs to their corresponding MCInst records...
float convertToFloat() const
MachineBasicBlock reference.
static cl::opt< bool > WasmKeepRegisters("wasm-keep-registers", cl::Hidden, cl::desc("WebAssembly: output stack registers in" " instruction output for test purposes only."), cl::init(false))
amdgpu Simplify well known AMD library false Value Value const Twine & Name
void setExternal(bool Value) const
static MCOperand createReg(unsigned Reg)
const ConstantFP * getFPImm() const
unsigned getNumOperands() const
Retuns the total number of operands.
Base class for the full range of assembler expressions which are needed for parsing.
Name of external global symbol.
static void removeRegisterOperands(const MachineInstr *MI, MCInst &OutMI)
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
const char * getSymbolName() const
uint8_t OperandType
Information about the type of the operand.
const MCInstrDesc & getDesc() const
Returns the target instruction descriptor of this MachineInstr.
Type * getType() const
All values are typed, get the type of this value.
static const MCBinaryExpr * createAdd(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
Analysis containing CSE Info
Instances of this class represent a single low-level machine instruction.
void setEventType(wasm::WasmEventType ET)
unsigned short NumOperands
This file contains the declaration of the WebAssembly-specific utility functions. ...
bool isFloatTy() const
Return true if this is 'float', a 32-bit IEEE fp type.
Address of a global value.
initializer< Ty > init(const Ty &Val)
unsigned const MachineRegisterInfo * MRI
This file provides signature information for runtime libcalls.
const WebAssemblySubtarget & getSubtarget() const
This file contains the declarations for the subclasses of Constant, which represent the different fla...
const GlobalValue * getGlobal() const
ConstantFP - Floating Point Values [float, double].
double convertToDouble() const
iterator_range< mop_iterator > defs()
Returns a range over all explicit operands that are register definitions.
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
std::unique_ptr< wasm::WasmSignature > SignatureFromMVTs(const SmallVectorImpl< MVT > &Results, const SmallVectorImpl< MVT > &Params)
unsigned getNumOperands() const
void print(raw_ostream &OS, bool IsStandalone=true, bool SkipOpers=false, bool SkipDebugLoc=false, bool AddNewLine=true, const TargetInstrInfo *TII=nullptr) const
Print this MI to OS.
type signature immediate for call_indirect.
static wasm::ValType getType(const TargetRegisterClass *RC)
bool isDebugInstr() const
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
void setType(wasm::WasmSymbolType type)
iterator_range< mop_iterator > explicit_uses()
void addSignature(std::unique_ptr< wasm::WasmSignature > &&Sig)
const APFloat & getValueAPF() const
void Lower(const MachineInstr *MI, MCInst &OutMI) const
void GetLibcallSignature(const WebAssemblySubtarget &Subtarget, RTLIB::Libcall LC, SmallVectorImpl< wasm::ValType > &Rets, SmallVectorImpl< wasm::ValType > &Params)
void setOpcode(unsigned Op)
MCSymbol * getSymbol(const GlobalValue *GV) const
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...
const MCOperand & getOperand(unsigned i) const
static MCOperand createFPImm(double Val)
const Function & getFunction() const
Return the LLVM function that this machine code represents.
MCSymbol reference (for debug/eh info)
void ComputeSignatureVTs(const FunctionType *Ty, const Function &F, const TargetMachine &TM, SmallVectorImpl< MVT > &Params, SmallVectorImpl< MVT > &Results)
const MachineBasicBlock * getParent() const
MachineRegisterInfo - Keep track of information for virtual and physical registers, including vreg register classes, use/def chains for registers, etc.
Representation of each machine instruction.
This class is derived from MachineFunctionInfo and contains private WebAssembly-specific information ...
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
bool isFunctionTy() const
True if this is an instance of FunctionType.
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
int64_t getOffset() const
Return the offset from the symbol in this operand.
This file declares WebAssembly-specific per-machine-function information.
Type * getValueType() const
unsigned getWAReg(unsigned VReg) const
const LLVMTargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
bool isReg() const
isReg - Tests if this is a MO_Register operand.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
void setSignature(wasm::WasmSignature *Sig)
MCSymbol * getMCSymbol() const
Floating-point immediate operand.
const MCOperandInfo * OpInfo
Primary interface to the complete machine description for the target machine.
void addOperand(const MCOperand &Op)
bool isCallIndirect(const MachineInstr &MI)
This holds information about one operand of a machine instruction, indicating the register class for ...
unsigned getOpcode() const
const MachineOperand & getOperand(unsigned i) const
Instances of this class represent operands of the MCInst class.
bool isDoubleTy() const
Return true if this is 'double', a 64-bit IEEE fp type.
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
MCSymbol * createTempSymbol(const Twine &Name) const
static MCOperand createImm(int64_t Val)
static const MCConstantExpr * create(int64_t Value, MCContext &Ctx)