annotate lib/Target/ARM/ARMTargetTransformInfo.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
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
1 //===- ARMTargetTransformInfo.h - ARM specific TTI --------------*- C++ -*-===//
83
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 //===----------------------------------------------------------------------===//
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
8 //
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 /// \file
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 /// 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
11 /// ARM 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
12 /// 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
13 /// target independent and default TTI implementations handle the rest.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
14 //
83
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
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 #ifndef LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 #define LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 #include "ARM.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
21 #include "ARMSubtarget.h"
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "ARMTargetMachine.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
23 #include "llvm/ADT/ArrayRef.h"
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #include "llvm/Analysis/TargetTransformInfo.h"
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #include "llvm/CodeGen/BasicTTIImpl.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26 #include "llvm/IR/Constant.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
27 #include "llvm/IR/Function.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
28 #include "llvm/MC/SubtargetFeature.h"
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 namespace llvm {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
32 class APInt;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
33 class ARMTargetLowering;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
34 class Instruction;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
35 class Loop;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
36 class SCEV;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
37 class ScalarEvolution;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
38 class Type;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
39 class Value;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
40
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 class ARMTTIImpl : public BasicTTIImplBase<ARMTTIImpl> {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
42 using BaseT = BasicTTIImplBase<ARMTTIImpl>;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
43 using TTI = TargetTransformInfo;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
44
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 friend BaseT;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 const ARMSubtarget *ST;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 const ARMTargetLowering *TLI;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
50 // Currently the following features are excluded from InlineFeatureWhitelist.
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
51 // ModeThumb, FeatureNoARM, ModeSoftFloat, FeatureFP64, FeatureD32
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
52 // Depending on whether they are set or unset, different
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
53 // instructions/registers are available. For example, inlining a callee with
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
54 // -thumb-mode in a caller with +thumb-mode, may cause the assembler to
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
55 // fail if the callee uses ARM only instructions, e.g. in inline asm.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
56 const FeatureBitset InlineFeatureWhitelist = {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
57 ARM::FeatureVFP2, ARM::FeatureVFP3, ARM::FeatureNEON, ARM::FeatureThumb2,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
58 ARM::FeatureFP16, ARM::FeatureVFP4, ARM::FeatureFPARMv8,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
59 ARM::FeatureFullFP16, ARM::FeatureFP16FML, ARM::FeatureHWDivThumb,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
60 ARM::FeatureHWDivARM, ARM::FeatureDB, ARM::FeatureV7Clrex,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
61 ARM::FeatureAcquireRelease, ARM::FeatureSlowFPBrcc,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
62 ARM::FeaturePerfMon, ARM::FeatureTrustZone, ARM::Feature8MSecExt,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
63 ARM::FeatureCrypto, ARM::FeatureCRC, ARM::FeatureRAS,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
64 ARM::FeatureFPAO, ARM::FeatureFuseAES, ARM::FeatureZCZeroing,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
65 ARM::FeatureProfUnpredicate, ARM::FeatureSlowVGETLNi32,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 ARM::FeatureSlowVDUP32, ARM::FeaturePreferVMOVSR,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
67 ARM::FeaturePrefISHSTBarrier, ARM::FeatureMuxedUnits,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
68 ARM::FeatureSlowOddRegister, ARM::FeatureSlowLoadDSubreg,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
69 ARM::FeatureDontWidenVMOVS, ARM::FeatureExpandMLx,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
70 ARM::FeatureHasVMLxHazards, ARM::FeatureNEONForFPMovs,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
71 ARM::FeatureNEONForFP, ARM::FeatureCheckVLDnAlign,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
72 ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
73 ARM::FeaturePref32BitThumb, ARM::FeatureAvoidPartialCPSR,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
74 ARM::FeatureCheapPredicableCPSR, ARM::FeatureAvoidMOVsShOp,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
75 ARM::FeatureHasRetAddrStack, ARM::FeatureHasNoBranchPredictor,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
76 ARM::FeatureDSP, ARM::FeatureMP, ARM::FeatureVirtualization,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
77 ARM::FeatureMClass, ARM::FeatureRClass, ARM::FeatureAClass,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
78 ARM::FeatureNaClTrap, ARM::FeatureStrictAlign, ARM::FeatureLongCalls,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
79 ARM::FeatureExecuteOnly, ARM::FeatureReserveR9, ARM::FeatureNoMovt,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
80 ARM::FeatureNoNegativeImmediates
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
81 };
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 const ARMSubtarget *getST() const { return ST; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 const ARMTargetLowering *getTLI() const { return TLI; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 public:
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
87 explicit ARMTTIImpl(const ARMBaseTargetMachine *TM, const Function &F)
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
88 : 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
89 TLI(ST->getTargetLowering()) {}
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
91 bool areInlineCompatible(const Function *Caller,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
92 const Function *Callee) const;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
93
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
94 bool enableInterleavedAccessVectorization() { return true; }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
95
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
96 bool shouldFavorBackedgeIndex(const Loop *L) const {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
97 if (L->getHeader()->getParent()->hasOptSize())
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
98 return false;
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
99 return ST->isMClass() && ST->isThumb2() && L->getNumBlocks() == 1;
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
100 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
101
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
102 /// Floating-point computation using ARMv8 AArch32 Advanced
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
103 /// SIMD instructions remains unchanged from ARMv7. Only AArch64 SIMD
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
104 /// and Arm MVE are IEEE-754 compliant.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
105 bool isFPVectorizationPotentiallyUnsafe() {
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
106 return !ST->isTargetDarwin() && !ST->hasMVEFloatOps();
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
107 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 /// \name Scalar TTI Implementations
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 /// @{
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
112 int getIntImmCodeSizeCost(unsigned Opcode, unsigned Idx, const APInt &Imm,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
113 Type *Ty);
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
114
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 using BaseT::getIntImmCost;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
116 int getIntImmCost(const APInt &Imm, Type *Ty);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
118 int getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm, Type *Ty);
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
119
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 /// @}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 /// \name Vector TTI Implementations
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 /// @{
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 unsigned getNumberOfRegisters(bool Vector) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 if (Vector) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 if (ST->hasNEON())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 return 16;
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
129 if (ST->hasMVEIntegerOps())
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
130 return 8;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 return 0;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 if (ST->isThumb1Only())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 return 8;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 return 13;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
139 unsigned getRegisterBitWidth(bool Vector) const {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 if (Vector) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 if (ST->hasNEON())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 return 128;
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
143 if (ST->hasMVEIntegerOps())
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
144 return 128;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 return 0;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 return 32;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
151 unsigned getMaxInterleaveFactor(unsigned VF) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
152 return ST->getMaxInterleaveFactor();
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
155 int getMemcpyCost(const Instruction *I);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
156
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
157 int getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index, Type *SubTp);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
159 int getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
160 const Instruction *I = nullptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
162 int getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
163 const Instruction *I = nullptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
165 int getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
167 int getAddressComputationCost(Type *Val, ScalarEvolution *SE,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
168 const SCEV *Ptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
170 int getArithmeticInstrCost(
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 unsigned Opcode, Type *Ty,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 TTI::OperandValueKind Op1Info = TTI::OK_AnyValue,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 TTI::OperandValueKind Op2Info = TTI::OK_AnyValue,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
175 TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
176 ArrayRef<const Value *> Args = ArrayRef<const Value *>());
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
178 int getMemoryOpCost(unsigned Opcode, Type *Src, unsigned Alignment,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
179 unsigned AddressSpace, const Instruction *I = nullptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
181 int getInterleavedMemoryOpCost(unsigned Opcode, Type *VecTy, unsigned Factor,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
182 ArrayRef<unsigned> Indices, unsigned Alignment,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
183 unsigned AddressSpace,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
184 bool UseMaskForCond = false,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
185 bool UseMaskForGaps = false);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
186
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
187 bool isLoweredToCall(const Function *F);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
188 bool isHardwareLoopProfitable(Loop *L, ScalarEvolution &SE,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
189 AssumptionCache &AC,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
190 TargetLibraryInfo *LibInfo,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
191 HardwareLoopInfo &HWLoopInfo);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
192
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
193 void getUnrollingPreferences(Loop *L, ScalarEvolution &SE,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
194 TTI::UnrollingPreferences &UP);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
195
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
196 bool shouldBuildLookupTablesForConstant(Constant *C) const {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
197 // In the ROPI and RWPI relocation models we can't have pointers to global
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
198 // variables or functions in constant data, so don't convert switches to
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
199 // lookup tables if any of the values would need relocation.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
200 if (ST->isROPI() || ST->isRWPI())
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
201 return !C->needsRelocation();
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
202
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
203 return true;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
204 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 /// @}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 };
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 } // end namespace llvm
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
210 #endif // LLVM_LIB_TARGET_ARM_ARMTARGETTRANSFORMINFO_H