annotate lib/Target/X86/X86TargetTransformInfo.h @ 148:63bd29f05246

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 19:46:37 +0900
parents c2174574ed3a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===-- X86TargetTransformInfo.h - X86 specific TTI -------------*- C++ -*-===//
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 //
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 /// \file
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 /// This file a TargetTransformInfo::Concept conforming object specific to the
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 /// X86 target machine. It uses the target's detailed information to
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 /// provide more precise answers to certain TTI queries, while letting the
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 /// target independent and default TTI implementations handle the rest.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 ///
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 //===----------------------------------------------------------------------===//
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 #ifndef LLVM_LIB_TARGET_X86_X86TARGETTRANSFORMINFO_H
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 #define LLVM_LIB_TARGET_X86_X86TARGETTRANSFORMINFO_H
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 #include "X86.h"
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 #include "X86TargetMachine.h"
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include "llvm/Analysis/TargetTransformInfo.h"
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "llvm/CodeGen/BasicTTIImpl.h"
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
23 #include "llvm/CodeGen/TargetLowering.h"
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 namespace llvm {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 class X86TTIImpl : public BasicTTIImplBase<X86TTIImpl> {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 typedef BasicTTIImplBase<X86TTIImpl> BaseT;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 typedef TargetTransformInfo TTI;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 friend BaseT;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 const X86Subtarget *ST;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 const X86TargetLowering *TLI;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 const X86Subtarget *getST() const { return ST; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 const X86TargetLowering *getTLI() const { return TLI; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
38 const FeatureBitset InlineFeatureIgnoreList = {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
39 // This indicates the CPU is 64 bit capable not that we are in 64-bit
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
40 // mode.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
41 X86::Feature64Bit,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
42
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
43 // These features don't have any intrinsics or ABI effect.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
44 X86::FeatureNOPL,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
45 X86::FeatureCMPXCHG16B,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
46 X86::FeatureLAHFSAHF,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
47
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
48 // Codegen control options.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
49 X86::FeatureFast11ByteNOP,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
50 X86::FeatureFast15ByteNOP,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
51 X86::FeatureFastBEXTR,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
52 X86::FeatureFastHorizontalOps,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
53 X86::FeatureFastLZCNT,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
54 X86::FeatureFastPartialYMMorZMMWrite,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
55 X86::FeatureFastScalarFSQRT,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
56 X86::FeatureFastSHLDRotate,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
57 X86::FeatureFastScalarShiftMasks,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
58 X86::FeatureFastVectorShiftMasks,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
59 X86::FeatureFastVariableShuffle,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
60 X86::FeatureFastVectorFSQRT,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
61 X86::FeatureLEAForSP,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
62 X86::FeatureLEAUsesAG,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
63 X86::FeatureLZCNTFalseDeps,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
64 X86::FeatureBranchFusion,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
65 X86::FeatureMacroFusion,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
66 X86::FeatureMergeToThreeWayBranch,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
67 X86::FeaturePadShortFunctions,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
68 X86::FeaturePOPCNTFalseDeps,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
69 X86::FeatureSSEUnalignedMem,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
70 X86::FeatureSlow3OpsLEA,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
71 X86::FeatureSlowDivide32,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
72 X86::FeatureSlowDivide64,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
73 X86::FeatureSlowIncDec,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
74 X86::FeatureSlowLEA,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
75 X86::FeatureSlowPMADDWD,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
76 X86::FeatureSlowPMULLD,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
77 X86::FeatureSlowSHLD,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
78 X86::FeatureSlowTwoMemOps,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
79 X86::FeatureSlowUAMem16,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
80
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
81 // Perf-tuning flags.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
82 X86::FeatureHasFastGather,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
83 X86::FeatureSlowUAMem32,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
84
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
85 // Based on whether user set the -mprefer-vector-width command line.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
86 X86::FeaturePrefer256Bit,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
87
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
88 // CPU name enums. These just follow CPU string.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
89 X86::ProcIntelAtom,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
90 X86::ProcIntelGLM,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
91 X86::ProcIntelGLP,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
92 X86::ProcIntelSLM,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
93 X86::ProcIntelTRM,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
94 };
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
95
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 public:
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
97 explicit X86TTIImpl(const X86TargetMachine *TM, const Function &F)
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
98 : BaseT(TM, F.getParent()->getDataLayout()), ST(TM->getSubtargetImpl(F)),
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
99 TLI(ST->getTargetLowering()) {}
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 /// \name Scalar TTI Implementations
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 /// @{
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 TTI::PopcntSupportKind getPopcntSupport(unsigned TyWidth);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 /// @}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
107 /// \name Cache TTI Implementation
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
108 /// @{
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
109 llvm::Optional<unsigned> getCacheSize(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
110 TargetTransformInfo::CacheLevel Level) const;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
111 llvm::Optional<unsigned> getCacheAssociativity(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
112 TargetTransformInfo::CacheLevel Level) const;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
113 /// @}
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
114
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 /// \name Vector TTI Implementations
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 /// @{
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 unsigned getNumberOfRegisters(bool Vector);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
119 unsigned getRegisterBitWidth(bool Vector) const;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
120 unsigned getLoadStoreVecRegBitWidth(unsigned AS) const;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
121 unsigned getMaxInterleaveFactor(unsigned VF);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
122 int getArithmeticInstrCost(
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 unsigned Opcode, Type *Ty,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
127 TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
128 ArrayRef<const Value *> Args = ArrayRef<const Value *>());
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
129 int getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index, Type *SubTp);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
130 int getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
131 const Instruction *I = nullptr);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
132 int getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
133 const Instruction *I = nullptr);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
134 int getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
135 int getMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
136 unsigned AddressSpace, const Instruction *I = nullptr);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
137 int getMaskedMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
138 unsigned AddressSpace);
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
139 int getGatherScatterOpCost(unsigned Opcode, Type *DataTy, Value *Ptr,
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
140 bool VariableMask, unsigned Alignment);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
141 int getAddressComputationCost(Type *PtrTy, ScalarEvolution *SE,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
142 const SCEV *Ptr);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
143
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
144 unsigned getAtomicMemIntrinsicMaxElementSize() const;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
146 int getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
147 ArrayRef<Type *> Tys, FastMathFlags FMF,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
148 unsigned ScalarizationCostPassed = UINT_MAX);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
149 int getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
150 ArrayRef<Value *> Args, FastMathFlags FMF,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
151 unsigned VF = 1);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
152
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
153 int getArithmeticReductionCost(unsigned Opcode, Type *Ty,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
154 bool IsPairwiseForm);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
155
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
156 int getMinMaxReductionCost(Type *Ty, Type *CondTy, bool IsPairwiseForm,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
157 bool IsUnsigned);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
158
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
159 int getInterleavedMemoryOpCost(unsigned Opcode, Type *VecTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
160 unsigned Factor, ArrayRef<unsigned> Indices,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
161 unsigned Alignment, unsigned AddressSpace,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
162 bool UseMaskForCond = false,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
163 bool UseMaskForGaps = false);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
164 int getInterleavedMemoryOpCostAVX512(unsigned Opcode, Type *VecTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
165 unsigned Factor, ArrayRef<unsigned> Indices,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
166 unsigned Alignment, unsigned AddressSpace,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
167 bool UseMaskForCond = false,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
168 bool UseMaskForGaps = false);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
169 int getInterleavedMemoryOpCostAVX2(unsigned Opcode, Type *VecTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
170 unsigned Factor, ArrayRef<unsigned> Indices,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
171 unsigned Alignment, unsigned AddressSpace,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
172 bool UseMaskForCond = false,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
173 bool UseMaskForGaps = false);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
175 int getIntImmCost(int64_t);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
177 int getIntImmCost(const APInt &Imm, Type *Ty);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
179 unsigned getUserCost(const User *U, ArrayRef<const Value *> Operands);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
180
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
181 int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
182 int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
183 Type *Ty);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
184 bool isLSRCostLess(TargetTransformInfo::LSRCost &C1,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
185 TargetTransformInfo::LSRCost &C2);
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
186 bool canMacroFuseCmp();
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
187 bool isLegalMaskedLoad(Type *DataType);
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
188 bool isLegalMaskedStore(Type *DataType);
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
189 bool isLegalNTLoad(Type *DataType, unsigned Alignment);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
190 bool isLegalNTStore(Type *DataType, unsigned Alignment);
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
191 bool isLegalMaskedGather(Type *DataType);
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
192 bool isLegalMaskedScatter(Type *DataType);
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
193 bool isLegalMaskedExpandLoad(Type *DataType);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
194 bool isLegalMaskedCompressStore(Type *DataType);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
195 bool hasDivRemOp(Type *DataType, bool IsSigned);
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
196 bool isFCmpOrdCheaperThanFCmpZero(Type *Ty);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
197 bool areInlineCompatible(const Function *Caller,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
198 const Function *Callee) const;
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
199 bool areFunctionArgsABICompatible(const Function *Caller,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
200 const Function *Callee,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
201 SmallPtrSetImpl<Argument *> &Args) const;
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
202 TTI::MemCmpExpansionOptions enableMemCmpExpansion(bool OptSize,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
203 bool IsZeroCmp) const;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
204 bool enableInterleavedAccessVectorization();
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
205 private:
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
206 int getGSScalarCost(unsigned Opcode, Type *DataTy, bool VariableMask,
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
207 unsigned Alignment, unsigned AddressSpace);
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
208 int getGSVectorCost(unsigned Opcode, Type *DataTy, Value *Ptr,
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
209 unsigned Alignment, unsigned AddressSpace);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 /// @}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 };
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 } // end namespace llvm
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 #endif