LCOV - code coverage report
Current view: top level - lib/Target/WebAssembly - WebAssemblyTargetTransformInfo.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 6 66.7 %
Date: 2018-10-20 13:21:21 Functions: 1 3 33.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //==- WebAssemblyTargetTransformInfo.h - WebAssembly-specific TTI -*- 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 a TargetTransformInfo::Concept conforming object specific
      12             : /// to the WebAssembly target machine.
      13             : ///
      14             : /// It uses the target's detailed information to provide more precise answers to
      15             : /// certain TTI queries, while letting the target independent and default TTI
      16             : /// implementations handle the rest.
      17             : ///
      18             : //===----------------------------------------------------------------------===//
      19             : 
      20             : #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
      21             : #define LLVM_LIB_TARGET_WEBASSEMBLY_WEBASSEMBLYTARGETTRANSFORMINFO_H
      22             : 
      23             : #include "WebAssemblyTargetMachine.h"
      24             : #include "llvm/CodeGen/BasicTTIImpl.h"
      25             : #include <algorithm>
      26             : 
      27             : namespace llvm {
      28             : 
      29       24631 : class WebAssemblyTTIImpl final : public BasicTTIImplBase<WebAssemblyTTIImpl> {
      30             :   typedef BasicTTIImplBase<WebAssemblyTTIImpl> BaseT;
      31             :   typedef TargetTransformInfo TTI;
      32             :   friend BaseT;
      33             : 
      34             :   const WebAssemblySubtarget *ST;
      35             :   const WebAssemblyTargetLowering *TLI;
      36             : 
      37           0 :   const WebAssemblySubtarget *getST() const { return ST; }
      38           0 :   const WebAssemblyTargetLowering *getTLI() const { return TLI; }
      39             : 
      40             : public:
      41       24631 :   WebAssemblyTTIImpl(const WebAssemblyTargetMachine *TM, const Function &F)
      42       24631 :       : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
      43       24631 :         TLI(ST->getTargetLowering()) {}
      44             : 
      45             :   /// \name Scalar TTI Implementations
      46             :   /// @{
      47             : 
      48             :   // TODO: Implement more Scalar TTI for WebAssembly
      49             : 
      50             :   TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth) const;
      51             : 
      52             :   /// @}
      53             : 
      54             :   /// \name Vector TTI Implementations
      55             :   /// @{
      56             : 
      57             :   unsigned getNumberOfRegisters(bool Vector);
      58             :   unsigned getRegisterBitWidth(bool Vector) const;
      59             :   unsigned getArithmeticInstrCost(
      60             :       unsigned Opcode, Type *Ty,
      61             :       TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
      62             :       TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
      63             :       TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
      64             :       TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
      65             :       ArrayRef<const Value *> Args = ArrayRef<const Value *>());
      66             :   unsigned getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
      67             : 
      68             :   /// @}
      69             : };
      70             : 
      71             : } // end namespace llvm
      72             : 
      73             : #endif

Generated by: LCOV version 1.13