Home | History | Annotate | Download | only in SystemZ
      1 //===-- SystemZTargetTransformInfo.h - SystemZ-specific TTI ---------------===//
      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 #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H
     11 #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H
     12 
     13 #include "SystemZTargetMachine.h"
     14 #include "llvm/Analysis/TargetTransformInfo.h"
     15 #include "llvm/CodeGen/BasicTTIImpl.h"
     16 
     17 namespace llvm {
     18 
     19 class SystemZTTIImpl : public BasicTTIImplBase<SystemZTTIImpl> {
     20   typedef BasicTTIImplBase<SystemZTTIImpl> BaseT;
     21   typedef TargetTransformInfo TTI;
     22   friend BaseT;
     23 
     24   const SystemZSubtarget *ST;
     25   const SystemZTargetLowering *TLI;
     26 
     27   const SystemZSubtarget *getST() const { return ST; }
     28   const SystemZTargetLowering *getTLI() const { return TLI; }
     29 
     30 public:
     31   explicit SystemZTTIImpl(const SystemZTargetMachine *TM, const Function &F)
     32       : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
     33         TLI(ST->getTargetLowering()) {}
     34 
     35   // Provide value semantics. MSVC requires that we spell all of these out.
     36   SystemZTTIImpl(const SystemZTTIImpl &Arg)
     37       : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {}
     38   SystemZTTIImpl(SystemZTTIImpl &&Arg)
     39       : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)),
     40         TLI(std::move(Arg.TLI)) {}
     41 
     42   /// \name Scalar TTI Implementations
     43   /// @{
     44 
     45   int getIntImmCost(const APInt &Imm, Type *Ty);
     46 
     47   int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty);
     48   int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm,
     49                     Type *Ty);
     50 
     51   TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth);
     52 
     53   /// @}
     54 
     55   /// \name Vector TTI Implementations
     56   /// @{
     57 
     58   unsigned getNumberOfRegisters(bool Vector);
     59   unsigned getRegisterBitWidth(bool Vector);
     60 
     61   /// @}
     62 };
     63 
     64 } // end namespace llvm
     65 
     66 #endif
     67