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 getST()27 const SystemZSubtarget *getST() const { return ST; } getTLI()28 const SystemZTargetLowering *getTLI() const { return TLI; } 29 30 public: SystemZTTIImpl(const SystemZTargetMachine * TM,const Function & F)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. SystemZTTIImpl(const SystemZTTIImpl & Arg)36 SystemZTTIImpl(const SystemZTTIImpl &Arg) 37 : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {} SystemZTTIImpl(SystemZTTIImpl && Arg)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