LCOV - code coverage report
Current view: top level - lib/Target/WebAssembly - WebAssemblyISelLowering.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 1 1 100.0 %
Date: 2018-07-13 00:08:38 Functions: 0 2 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : 
      19             : #include "llvm/CodeGen/TargetLowering.h"
      20             : 
      21             : namespace llvm {
      22             : 
      23             : namespace WebAssemblyISD {
      24             : 
      25             : enum NodeType : unsigned {
      26             :   FIRST_NUMBER = ISD::BUILTIN_OP_END,
      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             : 
      37         246 : class WebAssemblyTargetLowering final : public TargetLowering {
      38             :  public:
      39             :   WebAssemblyTargetLowering(const TargetMachine &TM,
      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             :   FastISel *createFastISel(FunctionLoweringInfo &FuncInfo,
      48             :                            const TargetLibraryInfo *LibInfo) const override;
      49             :   bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override;
      50             :   MVT getScalarShiftAmountTy(const DataLayout &DL, EVT) const override;
      51             :   MachineBasicBlock *
      52             :   EmitInstrWithCustomInserter(MachineInstr &MI,
      53             :                               MachineBasicBlock *MBB) const override;
      54             :   const char *getTargetNodeName(unsigned Opcode) const override;
      55             :   std::pair<unsigned, const TargetRegisterClass *> getRegForInlineAsmConstraint(
      56             :       const TargetRegisterInfo *TRI, StringRef Constraint,
      57             :       MVT VT) const override;
      58             :   bool isCheapToSpeculateCttz() const override;
      59             :   bool isCheapToSpeculateCtlz() const override;
      60             :   bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty,
      61             :                              unsigned AS,
      62             :                              Instruction *I = nullptr) const override;
      63             :   bool allowsMisalignedMemoryAccesses(EVT, unsigned AddrSpace, unsigned Align,
      64             :                                       bool *Fast) const override;
      65             :   bool isIntDivCheap(EVT VT, AttributeList Attr) const override;
      66             : 
      67             :   EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
      68             :                          EVT VT) const override;
      69             : 
      70             :   SDValue LowerCall(CallLoweringInfo &CLI,
      71             :                     SmallVectorImpl<SDValue> &InVals) const override;
      72             :   bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
      73             :                       bool isVarArg,
      74             :                       const SmallVectorImpl<ISD::OutputArg> &Outs,
      75             :                       LLVMContext &Context) const override;
      76             :   SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
      77             :                       const SmallVectorImpl<ISD::OutputArg> &Outs,
      78             :                       const SmallVectorImpl<SDValue> &OutVals, const SDLoc &dl,
      79             :                       SelectionDAG &DAG) const override;
      80             :   SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
      81             :                                bool IsVarArg,
      82             :                                const SmallVectorImpl<ISD::InputArg> &Ins,
      83             :                                const SDLoc &DL, SelectionDAG &DAG,
      84             :                                SmallVectorImpl<SDValue> &InVals) const override;
      85             : 
      86             :   // Custom lowering hooks.
      87             :   SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
      88             :   SDValue LowerFrameIndex(SDValue Op, SelectionDAG &DAG) const;
      89             :   SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
      90             :   SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
      91             :   SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
      92             :   SDValue LowerBR_JT(SDValue Op, SelectionDAG &DAG) const;
      93             :   SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
      94             :   SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
      95             :   SDValue LowerCopyToReg(SDValue Op, SelectionDAG &DAG) const;
      96             :   SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const;
      97             : };
      98             : 
      99             : namespace WebAssembly {
     100             : FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
     101             :                          const TargetLibraryInfo *libInfo);
     102             : }  // end namespace WebAssembly
     103             : 
     104             : }  // end namespace llvm
     105             : 
     106             : #endif

Generated by: LCOV version 1.13