/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- SystemZTargetTransformInfo.h - SystemZ-specific TTI ---------------===// |
2 | | // |
3 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | | // See https://llvm.org/LICENSE.txt for license information. |
5 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | |
9 | | #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H |
10 | | #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETTRANSFORMINFO_H |
11 | | |
12 | | #include "SystemZTargetMachine.h" |
13 | | #include "llvm/Analysis/TargetTransformInfo.h" |
14 | | #include "llvm/CodeGen/BasicTTIImpl.h" |
15 | | |
16 | | namespace llvm { |
17 | | |
18 | | class SystemZTTIImpl : public BasicTTIImplBase<SystemZTTIImpl> { |
19 | | typedef BasicTTIImplBase<SystemZTTIImpl> BaseT; |
20 | | typedef TargetTransformInfo TTI; |
21 | | friend BaseT; |
22 | | |
23 | | const SystemZSubtarget *ST; |
24 | | const SystemZTargetLowering *TLI; |
25 | | |
26 | 0 | const SystemZSubtarget *getST() const { return ST; } |
27 | 12.6k | const SystemZTargetLowering *getTLI() const { return TLI; } |
28 | | |
29 | | unsigned const LIBCALL_COST = 30; |
30 | | |
31 | | public: |
32 | | explicit SystemZTTIImpl(const SystemZTargetMachine *TM, const Function &F) |
33 | | : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)), |
34 | 107k | TLI(ST->getTargetLowering()) {} |
35 | | |
36 | | /// \name Scalar TTI Implementations |
37 | | /// @{ |
38 | | |
39 | 0 | unsigned getInliningThresholdMultiplier() { return 3; } |
40 | | |
41 | | int getIntImmCost(const APInt &Imm, Type *Ty); |
42 | | |
43 | | int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty); |
44 | | int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm, |
45 | | Type *Ty); |
46 | | |
47 | | TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth); |
48 | | |
49 | | void getUnrollingPreferences(Loop *L, ScalarEvolution &SE, |
50 | | TTI::UnrollingPreferences &UP); |
51 | | |
52 | | bool isLSRCostLess(TargetTransformInfo::LSRCost &C1, |
53 | | TargetTransformInfo::LSRCost &C2); |
54 | | /// @} |
55 | | |
56 | | /// \name Vector TTI Implementations |
57 | | /// @{ |
58 | | |
59 | | unsigned getNumberOfRegisters(bool Vector); |
60 | | unsigned getRegisterBitWidth(bool Vector) const; |
61 | | |
62 | 36 | unsigned getCacheLineSize() { return 256; } |
63 | 8.25k | unsigned getPrefetchDistance() { return 2000; } |
64 | 37 | unsigned getMinPrefetchStride() { return 2048; } |
65 | | |
66 | | bool hasDivRemOp(Type *DataType, bool IsSigned); |
67 | 9 | bool prefersVectorizedAddressing() { return false; } |
68 | 360 | bool LSRWithInstrQueries() { return true; } |
69 | 4 | bool supportsEfficientVectorElementLoadStore() { return true; } |
70 | 4 | bool enableInterleavedAccessVectorization() { return true; } |
71 | | |
72 | | int getArithmeticInstrCost( |
73 | | unsigned Opcode, Type *Ty, |
74 | | TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue, |
75 | | TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue, |
76 | | TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None, |
77 | | TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None, |
78 | | ArrayRef<const Value *> Args = ArrayRef<const Value *>()); |
79 | | int getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index, Type *SubTp); |
80 | | unsigned getVectorTruncCost(Type *SrcTy, Type *DstTy); |
81 | | unsigned getVectorBitmaskConversionCost(Type *SrcTy, Type *DstTy); |
82 | | unsigned getBoolVecToIntConversionCost(unsigned Opcode, Type *Dst, |
83 | | const Instruction *I); |
84 | | int getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src, |
85 | | const Instruction *I = nullptr); |
86 | | int getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy, |
87 | | const Instruction *I = nullptr); |
88 | | int getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index); |
89 | | bool isFoldableLoad(const LoadInst *Ld, const Instruction *&FoldedValue); |
90 | | int getMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment, |
91 | | unsigned AddressSpace, const Instruction *I = nullptr); |
92 | | |
93 | | int getInterleavedMemoryOpCost(unsigned Opcode, Type *VecTy, |
94 | | unsigned Factor, |
95 | | ArrayRef<unsigned> Indices, |
96 | | unsigned Alignment, |
97 | | unsigned AddressSpace, |
98 | | bool UseMaskForCond = false, |
99 | | bool UseMaskForGaps = false); |
100 | | |
101 | | int getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy, |
102 | | ArrayRef<Value *> Args, FastMathFlags FMF, |
103 | | unsigned VF = 1); |
104 | | int getIntrinsicInstrCost(Intrinsic::ID ID, Type *RetTy, |
105 | | ArrayRef<Type *> Tys, FastMathFlags FMF, |
106 | | unsigned ScalarizationCostPassed = UINT_MAX); |
107 | | /// @} |
108 | | }; |
109 | | |
110 | | } // end namespace llvm |
111 | | |
112 | | #endif |