LLVM  14.0.0git
AArch64Subtarget.cpp
Go to the documentation of this file.
1 //===-- AArch64Subtarget.cpp - AArch64 Subtarget Information ----*- C++ -*-===//
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 // This file implements the AArch64 specific subclass of TargetSubtarget.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "AArch64Subtarget.h"
14 
15 #include "AArch64.h"
16 #include "AArch64InstrInfo.h"
17 #include "AArch64PBQPRegAlloc.h"
18 #include "AArch64TargetMachine.h"
25 #include "llvm/IR/GlobalValue.h"
27 
28 using namespace llvm;
29 
30 #define DEBUG_TYPE "aarch64-subtarget"
31 
32 #define GET_SUBTARGETINFO_CTOR
33 #define GET_SUBTARGETINFO_TARGET_DESC
34 #include "AArch64GenSubtargetInfo.inc"
35 
36 static cl::opt<bool>
37 EnableEarlyIfConvert("aarch64-early-ifcvt", cl::desc("Enable the early if "
38  "converter pass"), cl::init(true), cl::Hidden);
39 
40 // If OS supports TBI, use this flag to enable it.
41 static cl::opt<bool>
42 UseAddressTopByteIgnored("aarch64-use-tbi", cl::desc("Assume that top byte of "
43  "an address is ignored"), cl::init(false), cl::Hidden);
44 
45 static cl::opt<bool>
46  UseNonLazyBind("aarch64-enable-nonlazybind",
47  cl::desc("Call nonlazybind functions via direct GOT load"),
48  cl::init(false), cl::Hidden);
49 
50 static cl::opt<bool> UseAA("aarch64-use-aa", cl::init(true),
51  cl::desc("Enable the use of AA during codegen."));
52 
53 AArch64Subtarget &AArch64Subtarget::initializeSubtargetDependencies(
54  StringRef FS, StringRef CPUString, StringRef TuneCPUString) {
55  // Determine default and user-specified characteristics
56 
57  if (CPUString.empty())
58  CPUString = "generic";
59 
60  if (TuneCPUString.empty())
61  TuneCPUString = CPUString;
62 
63  ParseSubtargetFeatures(CPUString, TuneCPUString, FS);
64  initializeProperties();
65 
66  return *this;
67 }
68 
69 void AArch64Subtarget::initializeProperties() {
70  // Initialize CPU specific properties. We should add a tablegen feature for
71  // this in the future so we can specify it together with the subtarget
72  // features.
73  switch (ARMProcFamily) {
74  case Others:
75  break;
76  case Carmel:
77  CacheLineSize = 64;
78  break;
79  case CortexA35:
80  break;
81  case CortexA53:
82  case CortexA55:
84  break;
85  case CortexA57:
88  break;
89  case CortexA65:
91  break;
92  case CortexA72:
93  case CortexA73:
94  case CortexA75:
95  case CortexA76:
96  case CortexA77:
97  case CortexA78:
98  case CortexA78C:
99  case CortexR82:
100  case CortexX1:
102  break;
103  case CortexA510:
104  case CortexA710:
105  case CortexX2:
107  VScaleForTuning = 1;
108  break;
109  case A64FX:
110  CacheLineSize = 256;
114  PrefetchDistance = 128;
115  MinPrefetchStride = 1024;
117  VScaleForTuning = 4;
118  break;
119  case AppleA7:
120  case AppleA10:
121  case AppleA11:
122  case AppleA12:
123  case AppleA13:
124  case AppleA14:
125  CacheLineSize = 64;
126  PrefetchDistance = 280;
127  MinPrefetchStride = 2048;
129  break;
130  case ExynosM3:
132  MaxJumpTableSize = 20;
135  break;
136  case Falkor:
138  // FIXME: remove this to enable 64-bit SLP if performance looks good.
140  CacheLineSize = 128;
141  PrefetchDistance = 820;
142  MinPrefetchStride = 2048;
144  break;
145  case Kryo:
148  CacheLineSize = 128;
149  PrefetchDistance = 740;
150  MinPrefetchStride = 1024;
152  // FIXME: remove this to enable 64-bit SLP if performance looks good.
154  break;
155  case NeoverseE1:
157  break;
158  case NeoverseN1:
162  break;
163  case NeoverseN2:
167  VScaleForTuning = 1;
168  break;
169  case NeoverseV1:
173  VScaleForTuning = 2;
174  break;
175  case Neoverse512TVB:
177  VScaleForTuning = 1;
179  break;
180  case Saphira:
182  // FIXME: remove this to enable 64-bit SLP if performance looks good.
184  break;
185  case ThunderX2T99:
186  CacheLineSize = 64;
190  PrefetchDistance = 128;
191  MinPrefetchStride = 1024;
193  // FIXME: remove this to enable 64-bit SLP if performance looks good.
195  break;
196  case ThunderX:
197  case ThunderXT88:
198  case ThunderXT81:
199  case ThunderXT83:
200  CacheLineSize = 128;
203  // FIXME: remove this to enable 64-bit SLP if performance looks good.
205  break;
206  case TSV110:
207  CacheLineSize = 64;
210  break;
211  case ThunderX3T110:
212  CacheLineSize = 64;
216  PrefetchDistance = 128;
217  MinPrefetchStride = 1024;
219  // FIXME: remove this to enable 64-bit SLP if performance looks good.
221  break;
222  }
223 }
224 
225 AArch64Subtarget::AArch64Subtarget(const Triple &TT, const std::string &CPU,
226  const std::string &TuneCPU,
227  const std::string &FS,
228  const TargetMachine &TM, bool LittleEndian,
229  unsigned MinSVEVectorSizeInBitsOverride,
230  unsigned MaxSVEVectorSizeInBitsOverride)
231  : AArch64GenSubtargetInfo(TT, CPU, TuneCPU, FS),
232  ReserveXRegister(AArch64::GPR64commonRegClass.getNumRegs()),
233  CustomCallSavedXRegs(AArch64::GPR64commonRegClass.getNumRegs()),
234  IsLittle(LittleEndian),
235  MinSVEVectorSizeInBits(MinSVEVectorSizeInBitsOverride),
236  MaxSVEVectorSizeInBits(MaxSVEVectorSizeInBitsOverride), TargetTriple(TT),
237  InstrInfo(initializeSubtargetDependencies(FS, CPU, TuneCPU)),
238  TLInfo(TM, *this) {
240  ReserveXRegister.set(18);
241 
244  Legalizer.reset(new AArch64LegalizerInfo(*this));
245 
246  auto *RBI = new AArch64RegisterBankInfo(*getRegisterInfo());
247 
248  // FIXME: At this point, we can't rely on Subtarget having RBI.
249  // It's awkward to mix passing RBI and the Subtarget; should we pass
250  // TII/TRI as well?
252  *static_cast<const AArch64TargetMachine *>(&TM), *this, *RBI));
253 
254  RegBankInfo.reset(RBI);
255 }
256 
258  return CallLoweringInfo.get();
259 }
260 
262  return InlineAsmLoweringInfo.get();
263 }
264 
266  return InstSelector.get();
267 }
268 
270  return Legalizer.get();
271 }
272 
274  return RegBankInfo.get();
275 }
276 
277 /// Find the target operand flags that describe how a global value should be
278 /// referenced for the current subtarget.
279 unsigned
281  const TargetMachine &TM) const {
282  // MachO large model always goes via a GOT, simply to get a single 8-byte
283  // absolute relocation on all global addresses.
284  if (TM.getCodeModel() == CodeModel::Large && isTargetMachO())
285  return AArch64II::MO_GOT;
286 
287  if (!TM.shouldAssumeDSOLocal(*GV->getParent(), GV)) {
288  if (GV->hasDLLImportStorageClass())
290  if (getTargetTriple().isOSWindows())
292  return AArch64II::MO_GOT;
293  }
294 
295  // The small code model's direct accesses use ADRP, which cannot
296  // necessarily produce the value 0 (if the code is above 4GB).
297  // Same for the tiny code model, where we have a pc relative LDR.
298  if ((useSmallAddressing() || TM.getCodeModel() == CodeModel::Tiny) &&
300  return AArch64II::MO_GOT;
301 
302  // References to tagged globals are marked with MO_NC | MO_TAGGED to indicate
303  // that their nominal addresses are tagged and outside of the code model. In
304  // AArch64ExpandPseudo::expandMI we emit an additional instruction to set the
305  // tag if necessary based on MO_TAGGED.
306  if (AllowTaggedGlobals && !isa<FunctionType>(GV->getValueType()))
308 
309  return AArch64II::MO_NO_FLAG;
310 }
311 
313  const GlobalValue *GV, const TargetMachine &TM) const {
314  // MachO large model always goes via a GOT, because we don't have the
315  // relocations available to do anything else..
316  if (TM.getCodeModel() == CodeModel::Large && isTargetMachO() &&
317  !GV->hasInternalLinkage())
318  return AArch64II::MO_GOT;
319 
320  // NonLazyBind goes via GOT unless we know it's available locally.
321  auto *F = dyn_cast<Function>(GV);
322  if (UseNonLazyBind && F && F->hasFnAttribute(Attribute::NonLazyBind) &&
323  !TM.shouldAssumeDSOLocal(*GV->getParent(), GV))
324  return AArch64II::MO_GOT;
325 
326  // Use ClassifyGlobalReference for setting MO_DLLIMPORT/MO_COFFSTUB.
327  if (getTargetTriple().isOSWindows())
328  return ClassifyGlobalReference(GV, TM);
329 
330  return AArch64II::MO_NO_FLAG;
331 }
332 
334  unsigned NumRegionInstrs) const {
335  // LNT run (at least on Cyclone) showed reasonably significant gains for
336  // bi-directional scheduling. 253.perlbmk.
337  Policy.OnlyTopDown = false;
338  Policy.OnlyBottomUp = false;
339  // Enabling or Disabling the latency heuristic is a close call: It seems to
340  // help nearly no benchmark on out-of-order architectures, on the other hand
341  // it regresses register pressure on a few benchmarking.
343 }
344 
346  return EnableEarlyIfConvert;
347 }
348 
351  return false;
352 
353  if (TargetTriple.isiOS()) {
354  return TargetTriple.getiOSVersion() >= VersionTuple(8);
355  }
356 
357  return false;
358 }
359 
360 std::unique_ptr<PBQPRAConstraint>
362  return balanceFPOps() ? std::make_unique<A57ChainingConstraint>() : nullptr;
363 }
364 
366  // We usually compute max call frame size after ISel. Do the computation now
367  // if the .mir file didn't specify it. Note that this will probably give you
368  // bogus values after PEI has eliminated the callframe setup/destroy pseudo
369  // instructions, specify explicitly if you need it to be correct.
370  MachineFrameInfo &MFI = MF.getFrameInfo();
371  if (!MFI.isMaxCallFrameSizeComputed())
372  MFI.computeMaxCallFrameSize(MF);
373 }
374 
376  // Prefer NEON unless larger SVE registers are available.
377  return hasSVE() && getMinSVEVectorSizeInBits() >= 256;
378 }
379 
380 bool AArch64Subtarget::useAA() const { return UseAA; }
AArch64LegalizerInfo.h
llvm::AArch64Subtarget::CortexA53
@ CortexA53
Definition: AArch64Subtarget.h:51
llvm::MachineSchedPolicy::OnlyBottomUp
bool OnlyBottomUp
Definition: MachineScheduler.h:189
llvm::AArch64Subtarget::AppleA11
@ AppleA11
Definition: AArch64Subtarget.h:45
llvm::MachineFrameInfo::isMaxCallFrameSizeComputed
bool isMaxCallFrameSizeComputed() const
Definition: MachineFrameInfo.h:629
llvm::AArch64Subtarget::ParseSubtargetFeatures
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
llvm::AArch64RegisterBankInfo
This class provides the information for the target register banks.
Definition: AArch64RegisterBankInfo.h:104
llvm::AArch64Subtarget::supportsAddressTopByteIgnored
bool supportsAddressTopByteIgnored() const
CPU has TBI (top byte of addresses is ignored during HW address translation) and OS enables it.
Definition: AArch64Subtarget.cpp:349
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AllocatorList.h:23
llvm::AArch64Subtarget::ARMProcFamily
ARMProcFamilyEnum ARMProcFamily
ARMProcFamily - ARM processor family: Cortex-A53, Cortex-A57, and others.
Definition: AArch64Subtarget.h:87
llvm::AArch64Subtarget::ThunderX2T99
@ ThunderX2T99
Definition: AArch64Subtarget.h:76
AArch64.h
llvm::AArch64Subtarget::MaxJumpTableSize
unsigned MaxJumpTableSize
Definition: AArch64Subtarget.h:284
llvm::AArch64Subtarget::CortexA57
@ CortexA57
Definition: AArch64Subtarget.h:54
llvm::InlineAsmLowering
Definition: InlineAsmLowering.h:28
llvm::AArch64Subtarget::ThunderXT81
@ ThunderXT81
Definition: AArch64Subtarget.h:78
AArch64RegisterBankInfo.h
llvm::AArch64Subtarget::ThunderX3T110
@ ThunderX3T110
Definition: AArch64Subtarget.h:81
llvm::AArch64Subtarget::CortexA77
@ CortexA77
Definition: AArch64Subtarget.h:60
llvm::BitVector::set
BitVector & set()
Definition: BitVector.h:343
llvm::AArch64Subtarget::getMinSVEVectorSizeInBits
unsigned getMinSVEVectorSizeInBits() const
Definition: AArch64Subtarget.h:678
llvm::AArch64Subtarget::RegBankInfo
std::unique_ptr< RegisterBankInfo > RegBankInfo
Definition: AArch64Subtarget.h:312
llvm::AArch64Subtarget::CortexA72
@ CortexA72
Definition: AArch64Subtarget.h:56
llvm::AArch64Subtarget::CallLoweringInfo
std::unique_ptr< CallLowering > CallLoweringInfo
GlobalISel related APIs.
Definition: AArch64Subtarget.h:308
llvm::AArch64Subtarget::NeoverseN2
@ NeoverseN2
Definition: AArch64Subtarget.h:72
llvm::AArch64Subtarget::DisableLatencySchedHeuristic
bool DisableLatencySchedHeuristic
Definition: AArch64Subtarget.h:265
llvm::AArch64Subtarget::hasSVE
bool hasSVE() const
Definition: AArch64Subtarget.h:498
llvm::AArch64Subtarget::AArch64Subtarget
AArch64Subtarget(const Triple &TT, const std::string &CPU, const std::string &TuneCPU, const std::string &FS, const TargetMachine &TM, bool LittleEndian, unsigned MinSVEVectorSizeInBitsOverride=0, unsigned MaxSVEVectorSizeInBitsOverride=0)
This constructor initializes the data members to match that of the specified triple.
Definition: AArch64Subtarget.cpp:225
llvm::AArch64Subtarget::CortexA76
@ CortexA76
Definition: AArch64Subtarget.h:59
llvm::AArch64Subtarget::MaxInterleaveFactor
uint8_t MaxInterleaveFactor
Definition: AArch64Subtarget.h:275
llvm::AArch64Subtarget::InstSelector
std::unique_ptr< InstructionSelector > InstSelector
Definition: AArch64Subtarget.h:310
llvm::Triple
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
llvm::cl::Hidden
@ Hidden
Definition: CommandLine.h:143
llvm::AArch64Subtarget::MinPrefetchStride
uint16_t MinPrefetchStride
Definition: AArch64Subtarget.h:279
llvm::AArch64Subtarget::VectorInsertExtractBaseCost
uint8_t VectorInsertExtractBaseCost
Definition: AArch64Subtarget.h:276
llvm::X86AS::FS
@ FS
Definition: X86.h:188
InstructionSelect.h
llvm::AArch64Subtarget::useSVEForFixedLengthVectors
bool useSVEForFixedLengthVectors() const
Definition: AArch64Subtarget.cpp:375
llvm::AArch64Subtarget::Carmel
@ Carmel
Definition: AArch64Subtarget.h:49
llvm::AArch64Subtarget::ThunderX
@ ThunderX
Definition: AArch64Subtarget.h:77
llvm::AArch64Subtarget::TSV110
@ TSV110
Definition: AArch64Subtarget.h:82
llvm::AArch64Subtarget::CortexX2
@ CortexX2
Definition: AArch64Subtarget.h:66
llvm::AArch64Subtarget::AppleA12
@ AppleA12
Definition: AArch64Subtarget.h:46
llvm::AArch64Subtarget::MaxBytesForLoopAlignment
unsigned MaxBytesForLoopAlignment
Definition: AArch64Subtarget.h:283
TargetParser.h
llvm::AArch64Subtarget::PrefLoopLogAlignment
unsigned PrefLoopLogAlignment
Definition: AArch64Subtarget.h:282
llvm::AArch64Subtarget::CortexA78
@ CortexA78
Definition: AArch64Subtarget.h:61
llvm::AArch64Subtarget::NeoverseN1
@ NeoverseN1
Definition: AArch64Subtarget.h:71
llvm::GlobalValue::hasExternalWeakLinkage
bool hasExternalWeakLinkage() const
Definition: GlobalValue.h:452
llvm::AArch64Subtarget::getTargetLowering
const AArch64TargetLowering * getTargetLowering() const override
Definition: AArch64Subtarget.h:340
F
#define F(x, y, z)
Definition: MD5.cpp:55
llvm::AArch64Subtarget::NeoverseV1
@ NeoverseV1
Definition: AArch64Subtarget.h:74
AArch64PBQPRegAlloc.h
llvm::AArch64Subtarget::getCustomPBQPConstraints
std::unique_ptr< PBQPRAConstraint > getCustomPBQPConstraints() const override
Definition: AArch64Subtarget.cpp:361
GlobalValue.h
AArch64TargetMachine.h
llvm::AArch64Subtarget::getInlineAsmLowering
const InlineAsmLowering * getInlineAsmLowering() const override
Definition: AArch64Subtarget.cpp:261
AArch64InstrInfo.h
llvm::AArch64Subtarget::getInstructionSelector
InstructionSelector * getInstructionSelector() const override
Definition: AArch64Subtarget.cpp:265
llvm::AArch64Subtarget::A64FX
@ A64FX
Definition: AArch64Subtarget.h:42
llvm::Legalizer
Definition: Legalizer.h:30
llvm::AArch64Subtarget::CacheLineSize
uint16_t CacheLineSize
Definition: AArch64Subtarget.h:277
llvm::AArch64Subtarget::enableEarlyIfConversion
bool enableEarlyIfConversion() const override
Definition: AArch64Subtarget.cpp:345
llvm::AArch64Subtarget::Neoverse512TVB
@ Neoverse512TVB
Definition: AArch64Subtarget.h:73
llvm::AArch64Subtarget::Others
@ Others
Definition: AArch64Subtarget.h:41
llvm::AArch64Subtarget::mirFileLoaded
void mirFileLoaded(MachineFunction &MF) const override
Definition: AArch64Subtarget.cpp:365
llvm::MachineSchedPolicy::DisableLatencyHeuristic
bool DisableLatencyHeuristic
Definition: MachineScheduler.h:193
AArch64GenSubtargetInfo
llvm::AArch64TargetMachine
Definition: AArch64TargetMachine.h:23
llvm::AArch64Subtarget::balanceFPOps
bool balanceFPOps() const
Definition: AArch64Subtarget.h:416
llvm::VersionTuple
Represents a version number in the form major[.minor[.subminor[.build]]].
Definition: VersionTuple.h:29
llvm::AArch64Subtarget::VScaleForTuning
unsigned VScaleForTuning
Definition: AArch64Subtarget.h:297
llvm::AArch64Subtarget::CortexA78C
@ CortexA78C
Definition: AArch64Subtarget.h:62
llvm::GlobalValue::hasInternalLinkage
bool hasInternalLinkage() const
Definition: GlobalValue.h:449
UseNonLazyBind
static cl::opt< bool > UseNonLazyBind("aarch64-enable-nonlazybind", cl::desc("Call nonlazybind functions via direct GOT load"), cl::init(false), cl::Hidden)
UseAddressTopByteIgnored
static cl::opt< bool > UseAddressTopByteIgnored("aarch64-use-tbi", cl::desc("Assume that top byte of " "an address is ignored"), cl::init(false), cl::Hidden)
llvm::Triple::getiOSVersion
VersionTuple getiOSVersion() const
Parse the version number as with getOSVersion.
Definition: Triple.cpp:1165
llvm::AArch64::isX18ReservedByDefault
bool isX18ReservedByDefault(const Triple &TT)
Definition: AArch64TargetParser.cpp:218
llvm::AArch64Subtarget::PrefFunctionLogAlignment
unsigned PrefFunctionLogAlignment
Definition: AArch64Subtarget.h:281
AArch64AddressingModes.h
llvm::AArch64Subtarget::CortexX1
@ CortexX1
Definition: AArch64Subtarget.h:65
llvm::AArch64Subtarget::ThunderXT88
@ ThunderXT88
Definition: AArch64Subtarget.h:80
llvm::cl::opt< bool >
llvm::AArch64Subtarget::getCallLowering
const CallLowering * getCallLowering() const override
Definition: AArch64Subtarget.cpp:257
llvm::RegisterBankInfo
Holds all the information related to register banks.
Definition: RegisterBankInfo.h:39
llvm::GlobalValue
Definition: GlobalValue.h:44
llvm::InstructionSelector
Provides the logic to select generic machine instructions.
Definition: InstructionSelector.h:423
llvm::AArch64Subtarget::ReserveXRegister
BitVector ReserveXRegister
Definition: AArch64Subtarget.h:288
llvm::StringRef::empty
constexpr LLVM_NODISCARD bool empty() const
empty - Check if the string is empty.
Definition: StringRef.h:152
llvm::AArch64II::MO_DLLIMPORT
@ MO_DLLIMPORT
MO_DLLIMPORT - On a symbol operand, this represents that the reference to the symbol is for an import...
Definition: AArch64BaseInfo.h:732
llvm::AArch64Subtarget::CortexA75
@ CortexA75
Definition: AArch64Subtarget.h:58
AArch64CallLowering.h
llvm::GlobalValue::getParent
Module * getParent()
Get the module that this global value is contained inside of...
Definition: GlobalValue.h:578
llvm::AArch64Subtarget::useSmallAddressing
bool useSmallAddressing() const
Definition: AArch64Subtarget.h:598
llvm::AArch64II::MO_NC
@ MO_NC
MO_NC - Indicates whether the linker is expected to check the symbol reference for overflow.
Definition: AArch64BaseInfo.h:721
llvm::MachineFrameInfo::computeMaxCallFrameSize
void computeMaxCallFrameSize(const MachineFunction &MF)
Computes the maximum size of a callframe and the AdjustsStack property.
Definition: MachineFrameInfo.cpp:187
llvm::AArch64Subtarget::AppleA14
@ AppleA14
Definition: AArch64Subtarget.h:48
llvm::cl::init
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:441
llvm::AArch64II::MO_NO_FLAG
@ MO_NO_FLAG
Definition: AArch64BaseInfo.h:673
llvm::AArch64Subtarget::AllowTaggedGlobals
bool AllowTaggedGlobals
Definition: AArch64Subtarget.h:271
llvm::AArch64Subtarget::NeoverseE1
@ NeoverseE1
Definition: AArch64Subtarget.h:70
llvm::TargetMachine
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:80
llvm::MachineFunction::getFrameInfo
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
Definition: MachineFunction.h:657
llvm::AArch64Subtarget::MinVectorRegisterBitWidth
unsigned MinVectorRegisterBitWidth
Definition: AArch64Subtarget.h:244
llvm::MachineFunction
Definition: MachineFunction.h:241
llvm::AArch64Subtarget::classifyGlobalFunctionReference
unsigned classifyGlobalFunctionReference(const GlobalValue *GV, const TargetMachine &TM) const
Definition: AArch64Subtarget.cpp:312
llvm::AArch64Subtarget::CortexA710
@ CortexA710
Definition: AArch64Subtarget.h:63
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:57
this
Analysis the ScalarEvolution expression for r is this
Definition: README.txt:8
llvm::AArch64Subtarget::getTargetTriple
const Triple & getTargetTriple() const
Definition: AArch64Subtarget.h:352
llvm::Triple::isiOS
bool isiOS() const
Is this an iOS triple.
Definition: Triple.h:447
llvm::CodeModel::Tiny
@ Tiny
Definition: CodeGen.h:28
llvm::AArch64Subtarget::AppleA7
@ AppleA7
Definition: AArch64Subtarget.h:43
llvm::AArch64Subtarget::ThunderXT83
@ ThunderXT83
Definition: AArch64Subtarget.h:79
llvm::AArch64Subtarget::CortexA35
@ CortexA35
Definition: AArch64Subtarget.h:50
llvm::AArch64Subtarget::CortexA55
@ CortexA55
Definition: AArch64Subtarget.h:52
llvm::AArch64Subtarget::getRegisterInfo
const AArch64RegisterInfo * getRegisterInfo() const override
Definition: AArch64Subtarget.h:344
llvm::AArch64CallLowering
Definition: AArch64CallLowering.h:30
llvm::AArch64Subtarget::getRegBankInfo
const RegisterBankInfo * getRegBankInfo() const override
Definition: AArch64Subtarget.cpp:273
llvm::AArch64Subtarget::ExynosM3
@ ExynosM3
Definition: AArch64Subtarget.h:67
llvm::MachineSchedPolicy::OnlyTopDown
bool OnlyTopDown
Definition: MachineScheduler.h:188
llvm::AArch64Subtarget::ClassifyGlobalReference
unsigned ClassifyGlobalReference(const GlobalValue *GV, const TargetMachine &TM) const
ClassifyGlobalReference - Find the target operand flags that describe how a global value should be re...
Definition: AArch64Subtarget.cpp:280
llvm::AArch64Subtarget::InlineAsmLoweringInfo
std::unique_ptr< InlineAsmLowering > InlineAsmLoweringInfo
Definition: AArch64Subtarget.h:309
llvm::AArch64LegalizerInfo
This class provides the information for the target register banks.
Definition: AArch64LegalizerInfo.h:27
llvm::AArch64Subtarget::Kryo
@ Kryo
Definition: AArch64Subtarget.h:69
llvm::AArch64Subtarget::PrefetchDistance
uint16_t PrefetchDistance
Definition: AArch64Subtarget.h:278
llvm::AArch64Subtarget::MaxPrefetchIterationsAhead
unsigned MaxPrefetchIterationsAhead
Definition: AArch64Subtarget.h:280
llvm::AArch64Subtarget::isTargetMachO
bool isTargetMachO() const
Definition: AArch64Subtarget.h:547
llvm::CodeModel::Large
@ Large
Definition: CodeGen.h:28
llvm::MachineFrameInfo
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.
Definition: MachineFrameInfo.h:107
MachineScheduler.h
AArch64Subtarget.h
llvm::AArch64Subtarget::CortexA73
@ CortexA73
Definition: AArch64Subtarget.h:57
UseAA
static cl::opt< bool > UseAA("aarch64-use-aa", cl::init(true), cl::desc("Enable the use of AA during codegen."))
llvm::AArch64Subtarget::Saphira
@ Saphira
Definition: AArch64Subtarget.h:75
llvm::AArch64Subtarget::TargetTriple
Triple TargetTriple
TargetTriple - What processor and OS we're targeting.
Definition: AArch64Subtarget.h:300
llvm::GlobalValue::hasDLLImportStorageClass
bool hasDLLImportStorageClass() const
Definition: GlobalValue.h:259
llvm::AArch64Subtarget::getLegalizerInfo
const LegalizerInfo * getLegalizerInfo() const override
Definition: AArch64Subtarget.cpp:269
llvm::LegalizerInfo
Definition: LegalizerInfo.h:1143
llvm::GlobalValue::getValueType
Type * getValueType() const
Definition: GlobalValue.h:273
TM
const char LLVMTargetMachineRef TM
Definition: PassBuilderBindings.cpp:47
llvm::AArch64Subtarget::CortexA510
@ CortexA510
Definition: AArch64Subtarget.h:53
llvm::AArch64Subtarget::CortexR82
@ CortexR82
Definition: AArch64Subtarget.h:64
llvm::AArch64II::MO_COFFSTUB
@ MO_COFFSTUB
MO_COFFSTUB - On a symbol operand "FOO", this indicates that the reference is actually to the "....
Definition: AArch64BaseInfo.h:711
llvm::MachineSchedPolicy
Define a generic scheduling policy for targets that don't provide their own MachineSchedStrategy.
Definition: MachineScheduler.h:179
llvm::AArch64II::MO_TAGGED
@ MO_TAGGED
MO_TAGGED - With MO_PAGE, indicates that the page includes a memory tag in bits 56-63.
Definition: AArch64BaseInfo.h:748
llvm::cl::desc
Definition: CommandLine.h:412
llvm::AArch64Subtarget
Definition: AArch64Subtarget.h:38
llvm::createAArch64InstructionSelector
InstructionSelector * createAArch64InstructionSelector(const AArch64TargetMachine &, AArch64Subtarget &, AArch64RegisterBankInfo &)
Definition: AArch64InstructionSelector.cpp:6532
llvm::AArch64Subtarget::useAA
bool useAA() const override
Definition: AArch64Subtarget.cpp:380
llvm::CallLowering
Definition: CallLowering.h:43
EnableEarlyIfConvert
static cl::opt< bool > EnableEarlyIfConvert("aarch64-early-ifcvt", cl::desc("Enable the early if " "converter pass"), cl::init(true), cl::Hidden)
llvm::AArch64II::MO_GOT
@ MO_GOT
MO_GOT - This flag indicates that a symbol operand represents the address of the GOT entry for the sy...
Definition: AArch64BaseInfo.h:716
llvm::AArch64Subtarget::Falkor
@ Falkor
Definition: AArch64Subtarget.h:68
llvm::AArch64Subtarget::overrideSchedPolicy
void overrideSchedPolicy(MachineSchedPolicy &Policy, unsigned NumRegionInstrs) const override
Definition: AArch64Subtarget.cpp:333
llvm::AArch64Subtarget::AppleA10
@ AppleA10
Definition: AArch64Subtarget.h:44
llvm::AArch64Subtarget::AppleA13
@ AppleA13
Definition: AArch64Subtarget.h:47
llvm::AArch64Subtarget::CortexA65
@ CortexA65
Definition: AArch64Subtarget.h:55