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 /// \name Scalar TTI Implementations 36 /// @{ 37 38 int getIntImmCost(const APInt &Imm, Type *Ty); 39 40 int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty); 41 int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm, 42 Type *Ty); 43 44 TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth); 45 46 void getUnrollingPreferences(Loop *L, TTI::UnrollingPreferences &UP); 47 48 /// @} 49 50 /// \name Vector TTI Implementations 51 /// @{ 52 53 unsigned getNumberOfRegisters(bool Vector); 54 unsigned getRegisterBitWidth(bool Vector); 55 56 /// @} 57 }; 58 59 } // end namespace llvm 60 61 #endif 62