LLVM  15.0.0git
PPCSubtarget.cpp
Go to the documentation of this file.
1 //===-- PowerPCSubtarget.cpp - PPC Subtarget Information ------------------===//
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 PPC specific subclass of TargetSubtargetInfo.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "PPCSubtarget.h"
14 #include "GISel/PPCCallLowering.h"
15 #include "GISel/PPCLegalizerInfo.h"
17 #include "PPC.h"
18 #include "PPCRegisterInfo.h"
19 #include "PPCTargetMachine.h"
24 #include "llvm/IR/Attributes.h"
25 #include "llvm/IR/Function.h"
26 #include "llvm/IR/GlobalValue.h"
27 #include "llvm/MC/TargetRegistry.h"
30 #include <cstdlib>
31 
32 using namespace llvm;
33 
34 #define DEBUG_TYPE "ppc-subtarget"
35 
36 #define GET_SUBTARGETINFO_TARGET_DESC
37 #define GET_SUBTARGETINFO_CTOR
38 #include "PPCGenSubtargetInfo.inc"
39 
40 static cl::opt<bool> UseSubRegLiveness("ppc-track-subreg-liveness",
41 cl::desc("Enable subregister liveness tracking for PPC"), cl::Hidden);
42 
43 static cl::opt<bool>
44  EnableMachinePipeliner("ppc-enable-pipeliner",
45  cl::desc("Enable Machine Pipeliner for PPC"),
46  cl::init(false), cl::Hidden);
47 
49  StringRef FS) {
50  initializeEnvironment();
51  initSubtargetFeatures(CPU, FS);
52  return *this;
53 }
54 
55 PPCSubtarget::PPCSubtarget(const Triple &TT, const std::string &CPU,
56  const std::string &FS, const PPCTargetMachine &TM)
57  : PPCGenSubtargetInfo(TT, CPU, /*TuneCPU*/ CPU, FS), TargetTriple(TT),
58  IsPPC64(TargetTriple.getArch() == Triple::ppc64 ||
59  TargetTriple.getArch() == Triple::ppc64le),
60  TM(TM), FrameLowering(initializeSubtargetDependencies(CPU, FS)),
61  InstrInfo(*this), TLInfo(TM, *this) {
63  Legalizer.reset(new PPCLegalizerInfo(*this));
64  auto *RBI = new PPCRegisterBankInfo(*getRegisterInfo());
65  RegBankInfo.reset(RBI);
66 
68  *static_cast<const PPCTargetMachine *>(&TM), *this, *RBI));
69 }
70 
71 void PPCSubtarget::initializeEnvironment() {
72  StackAlignment = Align(16);
74  HasMFOCRF = false;
75  Has64BitSupport = false;
76  Use64BitRegs = false;
77  UseCRBits = false;
78  HasHardFloat = false;
79  HasAltivec = false;
80  HasSPE = false;
81  HasEFPU2 = false;
82  HasFPU = false;
83  HasVSX = false;
84  NeedsTwoConstNR = false;
85  HasP8Vector = false;
86  HasP8Altivec = false;
87  HasP8Crypto = false;
88  HasP9Vector = false;
89  HasP9Altivec = false;
90  HasMMA = false;
91  HasROPProtect = false;
92  HasPrivileged = false;
93  HasP10Vector = false;
94  HasPrefixInstrs = false;
95  HasPCRelativeMemops = false;
96  HasFCPSGN = false;
97  HasFSQRT = false;
98  HasFRE = false;
99  HasFRES = false;
100  HasFRSQRTE = false;
101  HasFRSQRTES = false;
102  HasRecipPrec = false;
103  HasSTFIWX = false;
104  HasLFIWAX = false;
105  HasFPRND = false;
106  HasFPCVT = false;
107  HasISEL = false;
108  HasBPERMD = false;
109  HasExtDiv = false;
110  HasCMPB = false;
111  HasLDBRX = false;
112  IsBookE = false;
113  HasOnlyMSYNC = false;
114  IsPPC4xx = false;
115  IsPPC6xx = false;
116  IsE500 = false;
117  FeatureMFTB = false;
118  AllowsUnalignedFPAccess = false;
119  DeprecatedDST = false;
120  HasICBT = false;
122  HasPartwordAtomics = false;
123  HasQuadwordAtomics = false;
124  HasDirectMove = false;
125  HasHTM = false;
126  HasFloat128 = false;
127  HasFusion = false;
128  HasStoreFusion = false;
129  HasAddiLoadFusion = false;
130  HasAddisLoadFusion = false;
131  HasArithAddFusion = false;
132  HasAddLogicalFusion = false;
133  HasLogicalAddFusion = false;
134  HasLogicalFusion = false;
135  HasSha3Fusion = false;
136  HasCompareFusion = false;
137  HasWideImmFusion = false;
138  HasZeroMoveFusion = false;
139  HasBack2BackFusion = false;
140  IsISA2_06 = false;
141  IsISA2_07 = false;
142  IsISA3_0 = false;
143  IsISA3_1 = false;
144  UseLongCalls = false;
145  SecurePlt = false;
146  VectorsUseTwoUnits = false;
147  UsePPCPreRASchedStrategy = false;
149  PairedVectorMemops = false;
151  HasModernAIXAs = false;
152  IsAIX = false;
153 
155 }
156 
157 void PPCSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
158  // Determine default and user specified characteristics
159  std::string CPUName = std::string(CPU);
160  if (CPUName.empty() || CPU == "generic") {
161  // If cross-compiling with -march=ppc64le without -mcpu
163  CPUName = "ppc64le";
165  CPUName = "e500";
166  else
167  CPUName = "generic";
168  }
169 
170  // Initialize scheduling itinerary for the specified CPU.
171  InstrItins = getInstrItineraryForCPU(CPUName);
172 
173  // Parse features string.
174  ParseSubtargetFeatures(CPUName, /*TuneCPU*/ CPUName, FS);
175 
176  // If the user requested use of 64-bit regs, but the cpu selected doesn't
177  // support it, ignore.
178  if (IsPPC64 && has64BitSupport())
179  Use64BitRegs = true;
180 
184  SecurePlt = true;
185 
186  if (HasSPE && IsPPC64)
187  report_fatal_error( "SPE is only supported for 32-bit targets.\n", false);
188  if (HasSPE && (HasAltivec || HasVSX || HasFPU))
190  "SPE and traditional floating point cannot both be enabled.\n", false);
191 
192  // If not SPE, set standard FPU
193  if (!HasSPE)
194  HasFPU = true;
195 
197 
198  // Determine endianness.
200 }
201 
202 bool PPCSubtarget::enableMachineScheduler() const { return true; }
203 
205  return getSchedModel().hasInstrSchedModel() && EnableMachinePipeliner;
206 }
207 
208 bool PPCSubtarget::useDFAforSMS() const { return false; }
209 
210 // This overrides the PostRAScheduler bit in the SchedModel for each CPU.
211 bool PPCSubtarget::enablePostRAScheduler() const { return true; }
212 
213 PPCGenSubtargetInfo::AntiDepBreakMode PPCSubtarget::getAntiDepBreakMode() const {
214  return TargetSubtargetInfo::ANTIDEP_ALL;
215 }
216 
217 void PPCSubtarget::getCriticalPathRCs(RegClassVector &CriticalPathRCs) const {
218  CriticalPathRCs.clear();
219  CriticalPathRCs.push_back(isPPC64() ?
220  &PPC::G8RCRegClass : &PPC::GPRCRegClass);
221 }
222 
224  unsigned NumRegionInstrs) const {
225  // The GenericScheduler that we use defaults to scheduling bottom up only.
226  // We want to schedule from both the top and the bottom and so we set
227  // OnlyBottomUp to false.
228  // We want to do bi-directional scheduling since it provides a more balanced
229  // schedule leading to better performance.
230  Policy.OnlyBottomUp = false;
231  // Spilling is generally expensive on all PPC cores, so always enable
232  // register-pressure tracking.
233  Policy.ShouldTrackPressure = true;
234 }
235 
236 bool PPCSubtarget::useAA() const {
237  return true;
238 }
239 
241  return UseSubRegLiveness;
242 }
243 
245  // Large code model always uses the TOC even for local symbols.
247  return true;
248  if (TM.shouldAssumeDSOLocal(*GV->getParent(), GV))
249  return false;
250  return true;
251 }
252 
253 bool PPCSubtarget::isELFv2ABI() const { return TM.isELFv2ABI(); }
254 bool PPCSubtarget::isPPC64() const { return TM.isPPC64(); }
255 
257  return isPPC64() && hasPCRelativeMemops() && isELFv2ABI() &&
259 }
260 
261 // GlobalISEL
263  return CallLoweringInfo.get();
264 }
265 
267  return RegBankInfo.get();
268 }
269 
271  return Legalizer.get();
272 }
273 
275  return InstSelector.get();
276 }
llvm::PPCSubtarget::AllowsUnalignedFPAccess
bool AllowsUnalignedFPAccess
Definition: PPCSubtarget.h:136
llvm::PPCSubtarget::PPCSubtarget
PPCSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS, const PPCTargetMachine &TM)
This constructor initializes the data members to match that of the specified triple.
Definition: PPCSubtarget.cpp:55
llvm::MachineSchedPolicy::OnlyBottomUp
bool OnlyBottomUp
Definition: MachineScheduler.h:189
llvm::PPCSubtarget::HasZeroMoveFusion
bool HasZeroMoveFusion
Definition: PPCSubtarget.h:157
llvm::PPCSubtarget::IsISA2_06
bool IsISA2_06
Definition: PPCSubtarget.h:159
llvm::PPCSubtarget::IsISA2_07
bool IsISA2_07
Definition: PPCSubtarget.h:160
llvm::PPCSubtarget::getRegisterInfo
const PPCRegisterInfo * getRegisterInfo() const override
Definition: PPCSubtarget.h:223
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:17
llvm::PPCSubtarget::getRegBankInfo
const RegisterBankInfo * getRegBankInfo() const override
Definition: PPCSubtarget.cpp:266
PPCRegisterInfo.h
llvm::PPCSubtarget::HasExtDiv
bool HasExtDiv
Definition: PPCSubtarget.h:127
PPCCallLowering.h
EnableMachinePipeliner
static cl::opt< bool > EnableMachinePipeliner("ppc-enable-pipeliner", cl::desc("Enable Machine Pipeliner for PPC"), cl::init(false), cl::Hidden)
llvm::PPCSubtarget::InstrItins
InstrItineraryData InstrItins
Selected instruction itineraries (one entry per itinerary class.)
Definition: PPCSubtarget.h:88
llvm::PPC::DIR_NONE
@ DIR_NONE
Definition: PPCSubtarget.h:41
llvm::PPCSubtarget::getPlatformStackAlignment
Align getPlatformStackAlignment() const
Definition: PPCSubtarget.h:319
llvm::PPCSubtarget::HasISEL
bool HasISEL
Definition: PPCSubtarget.h:125
llvm::PPCSubtarget::PredictableSelectIsExpensive
bool PredictableSelectIsExpensive
Definition: PPCSubtarget.h:169
llvm::PPCSubtarget::HasLFIWAX
bool HasLFIWAX
Definition: PPCSubtarget.h:122
llvm::PPCSubtarget::HasDirectMove
bool HasDirectMove
Definition: PPCSubtarget.h:143
llvm::PPCSubtarget::HasInvariantFunctionDescriptors
bool HasInvariantFunctionDescriptors
Definition: PPCSubtarget.h:140
llvm::PPCSubtarget::HasROPProtect
bool HasROPProtect
Definition: PPCSubtarget.h:115
llvm::CodeModel::Medium
@ Medium
Definition: CodeGen.h:28
llvm::Triple::getOSMajorVersion
unsigned getOSMajorVersion() const
Return just the major version number, this is specialized because it is a common query.
Definition: Triple.h:373
llvm::Triple
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
llvm::PPCTargetMachine::isLittleEndian
bool isLittleEndian() const
Definition: PPCTargetMachine.cpp:573
llvm::cl::Hidden
@ Hidden
Definition: CommandLine.h:139
llvm::PPCSubtarget::HasAltivec
bool HasAltivec
Definition: PPCSubtarget.h:100
llvm::PPCSubtarget::DeprecatedDST
bool DeprecatedDST
Definition: PPCSubtarget.h:137
llvm::PPCSubtarget::getCallLowering
const CallLowering * getCallLowering() const override
Definition: PPCSubtarget.cpp:262
llvm::PPCSubtarget::enableMachineScheduler
bool enableMachineScheduler() const override
Scheduling customization.
Definition: PPCSubtarget.cpp:202
InstructionSelect.h
llvm::PPCSubtarget::getTargetMachine
const PPCTargetMachine & getTargetMachine() const
Definition: PPCSubtarget.h:226
llvm::PPCSubtarget::HasLogicalAddFusion
bool HasLogicalAddFusion
Definition: PPCSubtarget.h:152
llvm::PPCSubtarget::getLegalizerInfo
const LegalizerInfo * getLegalizerInfo() const override
Definition: PPCSubtarget.cpp:270
llvm::PPCSubtarget::VectorsUseTwoUnits
bool VectorsUseTwoUnits
Definition: PPCSubtarget.h:165
llvm::PPCSubtarget::HasPrefixInstrs
bool HasPrefixInstrs
Definition: PPCSubtarget.h:112
llvm::PPCSubtarget::HasLDBRX
bool HasLDBRX
Definition: PPCSubtarget.h:129
llvm::PPCSubtarget::useAA
bool useAA() const override
Definition: PPCSubtarget.cpp:236
llvm::PPCSubtarget::HasFCPSGN
bool HasFCPSGN
Definition: PPCSubtarget.h:117
llvm::PPCSubtarget::hasPCRelativeMemops
bool hasPCRelativeMemops() const
Definition: PPCSubtarget.h:288
PPCRegisterBankInfo.h
llvm::PPCSubtarget::HasVSX
bool HasVSX
Definition: PPCSubtarget.h:104
llvm::PPCSubtarget::HasPCRelativeMemops
bool HasPCRelativeMemops
Definition: PPCSubtarget.h:113
llvm::PPCSubtarget::IsBookE
bool IsBookE
Definition: PPCSubtarget.h:130
PPCSubtarget.h
CommandLine.h
llvm::PPCSubtarget::TM
const PPCTargetMachine & TM
Definition: PPCSubtarget.h:175
llvm::PPCSubtarget::HasFSQRT
bool HasFSQRT
Definition: PPCSubtarget.h:118
llvm::PPCSubtarget::HasSTFIWX
bool HasSTFIWX
Definition: PPCSubtarget.h:121
GlobalValue.h
llvm::PPCSubtarget::FeatureMFTB
bool FeatureMFTB
Definition: PPCSubtarget.h:135
llvm::PPCSubtarget::CPUDirective
unsigned CPUDirective
Which cpu directive was used.
Definition: PPCSubtarget.h:91
TargetMachine.h
llvm::PPCSubtarget::TargetTriple
Triple TargetTriple
TargetTriple - What processor and OS we're targeting.
Definition: PPCSubtarget.h:81
llvm::PPCSubtarget::HasFRE
bool HasFRE
Definition: PPCSubtarget.h:119
llvm::PPCSubtarget
Definition: PPCSubtarget.h:71
llvm::PPCSubtarget::IsE500
bool IsE500
Definition: PPCSubtarget.h:132
llvm::Legalizer
Definition: Legalizer.h:36
llvm::PPCSubtarget::HasBPERMD
bool HasBPERMD
Definition: PPCSubtarget.h:126
llvm::createPPCInstructionSelector
InstructionSelector * createPPCInstructionSelector(const PPCTargetMachine &TM, const PPCSubtarget &Subtarget, const PPCRegisterBankInfo &RBI)
Definition: PPCInstructionSelector.cpp:86
llvm::PPCSubtarget::overrideSchedPolicy
void overrideSchedPolicy(MachineSchedPolicy &Policy, unsigned NumRegionInstrs) const override
Definition: PPCSubtarget.cpp:223
llvm::PPCSubtarget::HasAddisLoadFusion
bool HasAddisLoadFusion
Definition: PPCSubtarget.h:149
llvm::PPCSubtarget::HasCompareFusion
bool HasCompareFusion
Definition: PPCSubtarget.h:155
llvm::PPCSubtarget::HasFPU
bool HasFPU
Definition: PPCSubtarget.h:101
llvm::PPCSubtarget::enablePostRAScheduler
bool enablePostRAScheduler() const override
This overrides the PostRAScheduler bit in the SchedModel for each CPU.
Definition: PPCSubtarget.cpp:211
llvm::PPCSubtarget::isPPC64
bool isPPC64() const
isPPC64 - Return true if we are generating code for 64-bit pointer mode.
Definition: PPCSubtarget.cpp:254
llvm::report_fatal_error
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:143
PPC.h
llvm::PPCSubtarget::HasFPRND
bool HasFPRND
Definition: PPCSubtarget.h:123
llvm::PPCSubtarget::HasBack2BackFusion
bool HasBack2BackFusion
Definition: PPCSubtarget.h:158
llvm::PPCSubtarget::HasP8Crypto
bool HasP8Crypto
Definition: PPCSubtarget.h:108
Align
uint64_t Align
Definition: ELFObjHandler.cpp:81
llvm::PPCSubtarget::UseLongCalls
bool UseLongCalls
Definition: PPCSubtarget.h:163
llvm::PPCSubtarget::IsLittleEndian
bool IsLittleEndian
Definition: PPCSubtarget.h:138
llvm::Triple::getArch
ArchType getArch() const
Get the parsed architecture type of this triple.
Definition: Triple.h:337
llvm::PPCSubtarget::ParseSubtargetFeatures
void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS)
ParseSubtargetFeatures - Parses features string setting specified subtarget options.
llvm::PPCSubtarget::isGVIndirectSymbol
bool isGVIndirectSymbol(const GlobalValue *GV) const
True if the GV will be accessed via an indirect symbol.
Definition: PPCSubtarget.cpp:244
llvm::PPCSubtarget::HasWideImmFusion
bool HasWideImmFusion
Definition: PPCSubtarget.h:156
PPCGenSubtargetInfo
InstructionSelector.h
llvm::Triple::ppc64le
@ ppc64le
Definition: Triple.h:72
llvm::cl::opt< bool >
llvm::PPCSubtarget::UsePPCPreRASchedStrategy
bool UsePPCPreRASchedStrategy
Definition: PPCSubtarget.h:166
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:424
llvm::PPCSubtarget::HasMFOCRF
bool HasMFOCRF
Used by the ISel to turn in optimizations for POWER4-derived architectures.
Definition: PPCSubtarget.h:94
llvm::PPCSubtarget::enableSubRegLiveness
bool enableSubRegLiveness() const override
Definition: PPCSubtarget.cpp:240
llvm::PPCSubtarget::IsPPC6xx
bool IsPPC6xx
Definition: PPCSubtarget.h:134
llvm::PPCSubtarget::POPCNTD_Unavailable
@ POPCNTD_Unavailable
Definition: PPCSubtarget.h:74
llvm::PPCSubtarget::RegBankInfo
std::unique_ptr< RegisterBankInfo > RegBankInfo
Definition: PPCSubtarget.h:184
llvm::PPCSubtarget::useDFAforSMS
bool useDFAforSMS() const override
Machine Pipeliner customization.
Definition: PPCSubtarget.cpp:208
llvm::PPCSubtarget::HasFRES
bool HasFRES
Definition: PPCSubtarget.h:119
llvm::GlobalValue::getParent
Module * getParent()
Get the module that this global value is contained inside of...
Definition: GlobalValue.h:577
llvm::Triple::isOSFreeBSD
bool isOSFreeBSD() const
Definition: Triple.h:526
llvm::PPCSubtarget::HasQuadwordAtomics
bool HasQuadwordAtomics
Definition: PPCSubtarget.h:142
llvm::PPCSubtarget::IsPPC4xx
bool IsPPC4xx
Definition: PPCSubtarget.h:133
llvm::PPCSubtarget::HasFRSQRTES
bool HasFRSQRTES
Definition: PPCSubtarget.h:119
llvm::Triple::isOSOpenBSD
bool isOSOpenBSD() const
Definition: Triple.h:522
llvm::PPCSubtarget::StackAlignment
Align StackAlignment
stackAlignment - The minimum alignment known to hold of the stack frame on entry to the function and ...
Definition: PPCSubtarget.h:85
llvm::cl::init
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:432
llvm::PPCSubtarget::HasMMA
bool HasMMA
Definition: PPCSubtarget.h:114
llvm::PPCSubtarget::HasOnlyMSYNC
bool HasOnlyMSYNC
Definition: PPCSubtarget.h:131
llvm::PPCSubtarget::HasP8Vector
bool HasP8Vector
Definition: PPCSubtarget.h:106
llvm::PPCSubtarget::IsPPC64
bool IsPPC64
Definition: PPCSubtarget.h:99
llvm::PPCSubtarget::HasRecipPrec
bool HasRecipPrec
Definition: PPCSubtarget.h:120
llvm::PPCSubtarget::HasP9Altivec
bool HasP9Altivec
Definition: PPCSubtarget.h:110
llvm::PPCSubtarget::HasSha3Fusion
bool HasSha3Fusion
Definition: PPCSubtarget.h:154
llvm::PPCSubtarget::HasAddiLoadFusion
bool HasAddiLoadFusion
Definition: PPCSubtarget.h:148
llvm::Triple::isMusl
bool isMusl() const
Tests whether the environment is musl-libc.
Definition: Triple.h:708
llvm::PPCSubtarget::HasAddLogicalFusion
bool HasAddLogicalFusion
Definition: PPCSubtarget.h:151
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
this
Analysis the ScalarEvolution expression for r is this
Definition: README.txt:8
llvm::PPCSubtarget::InstSelector
std::unique_ptr< InstructionSelector > InstSelector
Definition: PPCSubtarget.h:185
llvm::PPCSubtarget::HasFPCVT
bool HasFPCVT
Definition: PPCSubtarget.h:124
llvm::PPCTargetMachine::isPPC64
bool isPPC64() const
Definition: PPCTargetMachine.h:60
llvm::PPCSubtarget::has64BitSupport
bool has64BitSupport() const
has64BitSupport - Return true if the selected CPU supports 64-bit instructions, regardless of whether...
Definition: PPCSubtarget.h:243
llvm::PPCSubtarget::IsISA3_1
bool IsISA3_1
Definition: PPCSubtarget.h:162
llvm::PPCSubtarget::HasICBT
bool HasICBT
Definition: PPCSubtarget.h:139
llvm::PPCSubtarget::Use64BitRegs
bool Use64BitRegs
Definition: PPCSubtarget.h:96
llvm::PPCSubtarget::PairedVectorMemops
bool PairedVectorMemops
Definition: PPCSubtarget.h:168
llvm::TargetMachine::shouldAssumeDSOLocal
bool shouldAssumeDSOLocal(const Module &M, const GlobalValue *GV) const
Definition: TargetMachine.cpp:92
llvm::PPCSubtarget::getAntiDepBreakMode
AntiDepBreakMode getAntiDepBreakMode() const override
Definition: PPCSubtarget.cpp:213
llvm::PPCSubtarget::HasPOPCNTD
POPCNTDKind HasPOPCNTD
Definition: PPCSubtarget.h:173
llvm::PPCSubtarget::HasPartwordAtomics
bool HasPartwordAtomics
Definition: PPCSubtarget.h:141
llvm::PPCSubtarget::Has64BitSupport
bool Has64BitSupport
Definition: PPCSubtarget.h:95
llvm::MachineSchedPolicy::ShouldTrackPressure
bool ShouldTrackPressure
Definition: MachineScheduler.h:181
llvm::PPCSubtarget::HasP9Vector
bool HasP9Vector
Definition: PPCSubtarget.h:109
llvm::PPCSubtarget::HasLogicalFusion
bool HasLogicalFusion
Definition: PPCSubtarget.h:153
llvm::PPCSubtarget::getTargetLowering
const PPCTargetLowering * getTargetLowering() const override
Definition: PPCSubtarget.h:217
Attributes.h
llvm::PPCLegalizerInfo
This class provides the information for the PowerPC target legalizer for GlobalISel.
Definition: PPCLegalizerInfo.h:23
llvm::PPCSubtarget::enableMachinePipeliner
bool enableMachinePipeliner() const override
Pipeliner customization.
Definition: PPCSubtarget.cpp:204
llvm::Triple::getSubArch
SubArchType getSubArch() const
get the parsed subarchitecture type for this triple.
Definition: Triple.h:340
PPCLegalizerInfo.h
llvm::PPCSubtarget::initializeSubtargetDependencies
PPCSubtarget & initializeSubtargetDependencies(StringRef CPU, StringRef FS)
initializeSubtargetDependencies - Initializes using a CPU and feature string so that we can use initi...
Definition: PPCSubtarget.cpp:48
llvm::PPCSubtarget::IsISA3_0
bool IsISA3_0
Definition: PPCSubtarget.h:161
Function.h
llvm::PPCSubtarget::IsAIX
bool IsAIX
Definition: PPCSubtarget.h:171
llvm::PPCSubtarget::HasSPE
bool HasSPE
Definition: PPCSubtarget.h:102
llvm::TargetMachine::getCodeModel
CodeModel::Model getCodeModel() const
Returns the code model.
Definition: TargetMachine.cpp:72
llvm::PPCTargetMachine
Common code between 32-bit and 64-bit PowerPC targets.
Definition: PPCTargetMachine.h:25
llvm::PPCSubtarget::HasModernAIXAs
bool HasModernAIXAs
Definition: PPCSubtarget.h:170
llvm::PPCSubtarget::HasArithAddFusion
bool HasArithAddFusion
Definition: PPCSubtarget.h:150
llvm::CodeModel::Large
@ Large
Definition: CodeGen.h:28
llvm::PPCSubtarget::HasHardFloat
bool HasHardFloat
Definition: PPCSubtarget.h:98
llvm::PPCSubtarget::UsePPCPostRASchedStrategy
bool UsePPCPostRASchedStrategy
Definition: PPCSubtarget.h:167
llvm::PPCSubtarget::NeedsTwoConstNR
bool NeedsTwoConstNR
Definition: PPCSubtarget.h:105
llvm::PPCSubtarget::HasStoreFusion
bool HasStoreFusion
Definition: PPCSubtarget.h:147
MachineScheduler.h
llvm::PPCSubtarget::isUsingPCRelativeCalls
bool isUsingPCRelativeCalls() const
Definition: PPCSubtarget.cpp:256
llvm::PPCSubtarget::HasFloat128
bool HasFloat128
Definition: PPCSubtarget.h:145
llvm::PPCSubtarget::HasFRSQRTE
bool HasFRSQRTE
Definition: PPCSubtarget.h:119
llvm::PPCSubtarget::getInstructionSelector
InstructionSelector * getInstructionSelector() const override
Definition: PPCSubtarget.cpp:274
llvm::PPCSubtarget::HasP10Vector
bool HasP10Vector
Definition: PPCSubtarget.h:111
llvm::Triple::isOSNetBSD
bool isOSNetBSD() const
Definition: Triple.h:518
llvm::PPCTargetMachine::isELFv2ABI
bool isELFv2ABI() const
Definition: PPCTargetMachine.h:59
llvm::PPCSubtarget::HasEFPU2
bool HasEFPU2
Definition: PPCSubtarget.h:103
llvm::PPCSubtarget::HasPrivileged
bool HasPrivileged
Definition: PPCSubtarget.h:116
llvm::PPCSubtarget::SecurePlt
bool SecurePlt
Definition: PPCSubtarget.h:164
llvm::LegalizerInfo
Definition: LegalizerInfo.h:1180
llvm::PPCCallLowering
Definition: PPCCallLowering.h:25
TM
const char LLVMTargetMachineRef TM
Definition: PassBuilderBindings.cpp:47
llvm::PPCSubtarget::getCriticalPathRCs
void getCriticalPathRCs(RegClassVector &CriticalPathRCs) const override
Definition: PPCSubtarget.cpp:217
llvm::MachineSchedPolicy
Define a generic scheduling policy for targets that don't provide their own MachineSchedStrategy.
Definition: MachineScheduler.h:179
llvm::PPCSubtarget::CallLoweringInfo
std::unique_ptr< CallLowering > CallLoweringInfo
GlobalISel related APIs.
Definition: PPCSubtarget.h:182
llvm::cl::desc
Definition: CommandLine.h:405
llvm::PPCSubtarget::HasHTM
bool HasHTM
Definition: PPCSubtarget.h:144
llvm::PPCRegisterBankInfo
Definition: PPCRegisterBankInfo.h:33
llvm::X86AS::FS
@ FS
Definition: X86.h:188
llvm::PPCSubtarget::UseCRBits
bool UseCRBits
Definition: PPCSubtarget.h:97
MachineFunction.h
llvm::PPCSubtarget::HasCMPB
bool HasCMPB
Definition: PPCSubtarget.h:128
TargetRegistry.h
llvm::CallLowering
Definition: CallLowering.h:44
PPCTargetMachine.h
llvm::PPCSubtarget::HasP8Altivec
bool HasP8Altivec
Definition: PPCSubtarget.h:107
llvm::PPCSubtarget::HasFusion
bool HasFusion
Definition: PPCSubtarget.h:146
llvm::PPCSubtarget::isELFv2ABI
bool isELFv2ABI() const
Definition: PPCSubtarget.cpp:253
UseSubRegLiveness
static cl::opt< bool > UseSubRegLiveness("ppc-track-subreg-liveness", cl::desc("Enable subregister liveness tracking for PPC"), cl::Hidden)
llvm::Triple::PPCSubArch_spe
@ PPCSubArch_spe
Definition: Triple.h:152