LLVM  8.0.1
WebAssemblyISelLowering.h
Go to the documentation of this file.
1 //- WebAssemblyISelLowering.h - WebAssembly DAG Lowering Interface -*- C++ -*-//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// This file defines the interfaces that WebAssembly uses to lower LLVM
12 /// code into a selection DAG.
13 ///
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYISELLOWERING_H
17 #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYISELLOWERING_H
18 
20 
21 namespace llvm {
22 
23 namespace WebAssemblyISD {
24 
25 enum NodeType : unsigned {
27 #define HANDLE_NODETYPE(NODE) NODE,
28 #include "WebAssemblyISD.def"
29 #undef HANDLE_NODETYPE
30 };
31 
32 } // end namespace WebAssemblyISD
33 
34 class WebAssemblySubtarget;
35 class WebAssemblyTargetMachine;
36 
38 public:
40  const WebAssemblySubtarget &STI);
41 
42 private:
43  /// Keep a pointer to the WebAssemblySubtarget around so that we can make the
44  /// right decision when generating code for different targets.
45  const WebAssemblySubtarget *Subtarget;
46 
47  AtomicExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *) const override;
49  const TargetLibraryInfo *LibInfo) const override;
50  bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override;
51  MVT getScalarShiftAmountTy(const DataLayout &DL, EVT) const override;
53  EmitInstrWithCustomInserter(MachineInstr &MI,
54  MachineBasicBlock *MBB) const override;
55  const char *getTargetNodeName(unsigned Opcode) const override;
56  std::pair<unsigned, const TargetRegisterClass *>
57  getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
58  StringRef Constraint, MVT VT) const override;
59  bool isCheapToSpeculateCttz() const override;
60  bool isCheapToSpeculateCtlz() const override;
61  bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty,
62  unsigned AS,
63  Instruction *I = nullptr) const override;
64  bool allowsMisalignedMemoryAccesses(EVT, unsigned AddrSpace, unsigned Align,
65  bool *Fast) const override;
66  bool isIntDivCheap(EVT VT, AttributeList Attr) const override;
67 
68  EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
69  EVT VT) const override;
70  bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
71  MachineFunction &MF,
72  unsigned Intrinsic) const override;
73 
74  SDValue LowerCall(CallLoweringInfo &CLI,
75  SmallVectorImpl<SDValue> &InVals) const override;
76  bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
77  bool isVarArg,
79  LLVMContext &Context) const override;
80  SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
82  const SmallVectorImpl<SDValue> &OutVals, const SDLoc &dl,
83  SelectionDAG &DAG) const override;
84  SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
85  bool IsVarArg,
87  const SDLoc &DL, SelectionDAG &DAG,
88  SmallVectorImpl<SDValue> &InVals) const override;
89 
90  // Custom lowering hooks.
91  SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
92  SDValue LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const;
94  SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
95  SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
96  SDValue LowerBR_JT(SDValue Op, SelectionDAG &DAG) const;
97  SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
98  SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
99  SDValue LowerCopyToReg(SDValue Op, SelectionDAG &DAG) const;
100  SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const;
101  SDValue LowerINTRINSIC_VOID(SDValue Op, SelectionDAG &DAG) const;
102  SDValue LowerSIGN_EXTEND_INREG(SDValue Op, SelectionDAG &DAG) const;
104  SDValue LowerAccessVectorElement(SDValue Op, SelectionDAG &DAG) const;
105  SDValue LowerShift(SDValue Op, SelectionDAG &DAG) const;
106 };
107 
108 namespace WebAssembly {
110  const TargetLibraryInfo *libInfo);
111 } // end namespace WebAssembly
112 
113 } // end namespace llvm
114 
115 #endif
BUILTIN_OP_END - This must be the last enum value in this list.
Definition: ISDOpcodes.h:877
A parsed version of the target data layout string in and methods for querying it. ...
Definition: DataLayout.h:111
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
This represents an addressing mode of: BaseGV + BaseOffs + BaseReg + Scale*ScaleReg If BaseGV is null...
LLVMContext & Context
This class represents lattice values for constants.
Definition: AllocatorList.h:24
This class represents a function call, abstracting a target machine&#39;s calling convention.
unsigned const TargetRegisterInfo * TRI
an instruction that atomically reads a memory location, combines it with another value, and then stores the result back.
Definition: Instructions.h:692
AtomicExpansionKind
Enum that specifies what an atomic load/AtomicRMWInst is expanded to, if at all.
FastISel * createFastISel(FunctionLoweringInfo &funcInfo, const TargetLibraryInfo *libInfo)
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APFloat.h:42
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
Fast - This calling convention attempts to make calls as fast as possible (e.g.
Definition: CallingConv.h:43
This is a fast-path instruction selection class that generates poor code and doesn&#39;t support illegal ...
Definition: FastISel.h:67
static SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG)
Analysis containing CSE Info
Definition: CSEInfo.cpp:21
Machine Value Type.
static SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG)
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:69
static SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG, const SparcSubtarget *Subtarget)
Extended Value Type.
Definition: ValueTypes.h:34
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
This structure contains all information that is necessary for lowering calls.
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Definition: SelectionDAG.h:222
static SDValue LowerShift(SDNode *N, SelectionDAG &DAG, const ARMSubtarget *ST)
Provides information about what library functions are available for the current target.
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
Representation of each machine instruction.
Definition: MachineInstr.h:64
#define I(x, y, z)
Definition: MD5.cpp:58
FunctionLoweringInfo - This contains information that is global to a function that is used when lower...
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:59
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation...
This file describes how to lower LLVM code to machine code.