LLVM 20.0.0git
TargetMachine.h
Go to the documentation of this file.
1//===-- llvm/Target/TargetMachine.h - Target 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 defines the TargetMachine class.
10///
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_TARGET_TARGETMACHINE_H
14#define LLVM_TARGET_TARGETMACHINE_H
15
16#include "llvm/ADT/StringRef.h"
17#include "llvm/IR/DataLayout.h"
18#include "llvm/IR/PassManager.h"
19#include "llvm/MC/MCStreamer.h"
22#include "llvm/Support/Error.h"
27#include <optional>
28#include <string>
29#include <utility>
30
31namespace llvm {
32
33class AAManager;
34using ModulePassManager = PassManager<Module>;
35
36class Function;
37class GlobalValue;
38class MachineModuleInfoWrapperPass;
39class Mangler;
40class MCAsmInfo;
41class MCContext;
42class MCInstrInfo;
43class MCRegisterInfo;
44class MCSubtargetInfo;
45class MCSymbol;
46class raw_pwrite_stream;
47class PassBuilder;
48class PassInstrumentationCallbacks;
49struct PerFunctionMIParsingState;
50class SMDiagnostic;
51class SMRange;
52class Target;
53class TargetIntrinsicInfo;
54class TargetIRAnalysis;
55class TargetTransformInfo;
56class TargetLoweringObjectFile;
57class TargetPassConfig;
58class TargetSubtargetInfo;
59
60// The old pass manager infrastructure is hidden in a legacy namespace now.
61namespace legacy {
62class PassManagerBase;
63} // namespace legacy
64using legacy::PassManagerBase;
65
66struct MachineFunctionInfo;
67namespace yaml {
68struct MachineFunctionInfo;
69} // namespace yaml
70
71//===----------------------------------------------------------------------===//
72///
73/// Primary interface to the complete machine description for the target
74/// machine. All target-specific information should be accessible through this
75/// interface.
76///
78protected: // Can only create subclasses.
79 TargetMachine(const Target &T, StringRef DataLayoutString,
80 const Triple &TargetTriple, StringRef CPU, StringRef FS,
81 const TargetOptions &Options);
82
83 /// The Target that this machine was created for.
85
86 /// DataLayout for the target: keep ABI type size and alignment.
87 ///
88 /// The DataLayout is created based on the string representation provided
89 /// during construction. It is kept here only to avoid reparsing the string
90 /// but should not really be used during compilation, because it has an
91 /// internal cache that is context specific.
93
94 /// Triple string, CPU name, and target feature strings the TargetMachine
95 /// instance is created with.
97 std::string TargetCPU;
98 std::string TargetFS;
99
104
105 /// Contains target specific asm information.
106 std::unique_ptr<const MCAsmInfo> AsmInfo;
107 std::unique_ptr<const MCRegisterInfo> MRI;
108 std::unique_ptr<const MCInstrInfo> MII;
109 std::unique_ptr<const MCSubtargetInfo> STI;
110
112 unsigned O0WantsFastISel : 1;
113
114 // PGO related tunables.
115 std::optional<PGOOptions> PGOOption;
116
117public:
119
120 TargetMachine(const TargetMachine &) = delete;
121 void operator=(const TargetMachine &) = delete;
122 virtual ~TargetMachine();
123
124 const Target &getTarget() const { return TheTarget; }
125
126 const Triple &getTargetTriple() const { return TargetTriple; }
127 StringRef getTargetCPU() const { return TargetCPU; }
129 void setTargetFeatureString(StringRef FS) { TargetFS = std::string(FS); }
130
131 /// Virtual method implemented by subclasses that returns a reference to that
132 /// target's TargetSubtargetInfo-derived member variable.
133 virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
134 return nullptr;
135 }
137 return nullptr;
138 }
139
140 /// Create the target's instance of MachineFunctionInfo
141 virtual MachineFunctionInfo *
143 const TargetSubtargetInfo *STI) const {
144 return nullptr;
145 }
146
147 /// Allocate and return a default initialized instance of the YAML
148 /// representation for the MachineFunctionInfo.
150 return nullptr;
151 }
152
153 /// Allocate and initialize an instance of the YAML representation of the
154 /// MachineFunctionInfo.
157 return nullptr;
158 }
159
160 /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
164 SMRange &SourceRange) const {
165 return false;
166 }
167
168 /// This method returns a pointer to the specified type of
169 /// TargetSubtargetInfo. In debug builds, it verifies that the object being
170 /// returned is of the correct type.
171 template <typename STC> const STC &getSubtarget(const Function &F) const {
172 return *static_cast<const STC*>(getSubtargetImpl(F));
173 }
174
175 /// Create a DataLayout.
176 const DataLayout createDataLayout() const { return DL; }
177
178 /// Test if a DataLayout if compatible with the CodeGen for this target.
179 ///
180 /// The LLVM Module owns a DataLayout that is used for the target independent
181 /// optimizations and code generation. This hook provides a target specific
182 /// check on the validity of this DataLayout.
183 bool isCompatibleDataLayout(const DataLayout &Candidate) const {
184 return DL == Candidate;
185 }
186
187 /// Get the pointer size for this target.
188 ///
189 /// This is the only time the DataLayout in the TargetMachine is used.
190 unsigned getPointerSize(unsigned AS) const {
191 return DL.getPointerSize(AS);
192 }
193
194 unsigned getPointerSizeInBits(unsigned AS) const {
195 return DL.getPointerSizeInBits(AS);
196 }
197
198 unsigned getProgramPointerSize() const {
200 }
201
202 unsigned getAllocaPointerSize() const {
204 }
205
206 /// Reset the target options based on the function's attributes.
207 // FIXME: Remove TargetOptions that affect per-function code generation
208 // from TargetMachine.
209 void resetTargetOptions(const Function &F) const;
210
211 /// Return target specific asm information.
212 const MCAsmInfo *getMCAsmInfo() const { return AsmInfo.get(); }
213
214 const MCRegisterInfo *getMCRegisterInfo() const { return MRI.get(); }
215 const MCInstrInfo *getMCInstrInfo() const { return MII.get(); }
216 const MCSubtargetInfo *getMCSubtargetInfo() const { return STI.get(); }
217
218 /// If intrinsic information is available, return it. If not, return null.
219 virtual const TargetIntrinsicInfo *getIntrinsicInfo() const {
220 return nullptr;
221 }
222
225
226 /// Returns the code generation relocation model. The choices are static, PIC,
227 /// and dynamic-no-pic, and target default.
229
230 /// Returns the code model. The choices are small, kernel, medium, large, and
231 /// target default.
233
234 /// Returns the maximum code size possible under the code model.
235 uint64_t getMaxCodeSize() const;
236
237 /// Set the code model.
239
241 bool isLargeGlobalValue(const GlobalValue *GV) const;
242
243 bool isPositionIndependent() const;
244
245 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
246
247 /// Returns true if this target uses emulated TLS.
248 bool useEmulatedTLS() const;
249
250 /// Returns true if this target uses TLS Descriptors.
251 bool useTLSDESC() const;
252
253 /// Returns the TLS model which should be used for the given global variable.
254 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
255
256 /// Returns the optimization level: None, Less, Default, or Aggressive.
258
259 /// Overrides the optimization level.
260 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
261
268 }
271 }
274 }
277 }
278
280
283 }
284
286
287 /// Return true if unique basic block section names must be generated.
290 }
291
294 }
295
296 /// Return true if data objects should be emitted into their own section,
297 /// corresponds to -fdata-sections.
298 bool getDataSections() const {
299 return Options.DataSections;
300 }
301
302 /// Return true if functions should be emitted into their own section,
303 /// corresponding to -ffunction-sections.
304 bool getFunctionSections() const {
306 }
307
308 /// Return true if visibility attribute should not be emitted in XCOFF,
309 /// corresponding to -mignore-xcoff-visibility.
312 }
313
314 /// Return true if XCOFF traceback table should be emitted,
315 /// corresponding to -xcoff-traceback-table.
317
318 /// If basic blocks should be emitted into their own section,
319 /// corresponding to -fbasic-block-sections.
321 return Options.BBSections;
322 }
323
324 /// Get the list of functions and basic block ids that need unique sections.
326 return Options.BBSectionsFuncListBuf.get();
327 }
328
329 /// Returns true if a cast between SrcAS and DestAS is a noop.
330 virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
331 return false;
332 }
333
334 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
335 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
336
337 /// If the specified generic pointer could be assumed as a pointer to a
338 /// specific address space, return that address space.
339 ///
340 /// Under offloading programming, the offloading target may be passed with
341 /// values only prepared on the host side and could assume certain
342 /// properties.
343 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
344
345 /// If the specified predicate checks whether a generic pointer falls within
346 /// a specified address space, return that generic pointer and the address
347 /// space being queried.
348 ///
349 /// Such predicates could be specified in @llvm.assume intrinsics for the
350 /// optimizer to assume that the given generic pointer always falls within
351 /// the address space based on that predicate.
352 virtual std::pair<const Value *, unsigned>
354 return std::make_pair(nullptr, -1);
355 }
356
357 /// Get a \c TargetIRAnalysis appropriate for the target.
358 ///
359 /// This is used to construct the new pass manager's target IR analysis pass,
360 /// set up appropriately for this target machine. Even the old pass manager
361 /// uses this to answer queries about the IR.
363
364 /// Return a TargetTransformInfo for a given function.
365 ///
366 /// The returned TargetTransformInfo is specialized to the subtarget
367 /// corresponding to \p F.
369
370 /// Allow the target to modify the pass pipeline.
371 // TODO: Populate all pass names by using <Target>PassRegistry.def.
373
374 /// Allow the target to register alias analyses with the AAManager for use
375 /// with the new pass manager. Only affects the "default" AAManager.
377
378 /// Add passes to the specified pass manager to get the specified file
379 /// emitted. Typically this will involve several steps of code generation.
380 /// This method should return true if emission of this file type is not
381 /// supported, or false on success.
382 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
383 /// will be used to set the MachineModuloInfo for this PM.
384 virtual bool
387 bool /*DisableVerify*/ = true,
388 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
389 return true;
390 }
391
392 /// Add passes to the specified pass manager to get machine code emitted with
393 /// the MCJIT. This method returns true if machine code is not supported. It
394 /// fills the MCContext Ctx pointer which can be used to build custom
395 /// MCStreamer.
396 ///
399 bool /*DisableVerify*/ = true) {
400 return true;
401 }
402
403 /// True if subtarget inserts the final scheduling pass on its own.
404 ///
405 /// Branch relaxation, which must happen after block placement, can
406 /// on some targets (e.g. SystemZ) expose additional post-RA
407 /// scheduling opportunities.
408 virtual bool targetSchedulesPostRAScheduling() const { return false; };
409
411 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
412 MCSymbol *getSymbol(const GlobalValue *GV) const;
413
414 /// The integer bit size to use for SjLj based exception handling.
415 static constexpr unsigned DefaultSjLjDataSize = 32;
416 virtual unsigned getSjLjDataSize() const { return DefaultSjLjDataSize; }
417
418 static std::pair<int, int> parseBinutilsVersion(StringRef Version);
419
420 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
421 /// (e.g. stack) the target returns the corresponding address space.
422 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
423 return 0;
424 }
425
426 /// Entry point for module splitting. Targets can implement custom module
427 /// splitting logic, mainly used by LTO for --lto-partitions.
428 ///
429 /// \returns `true` if the module was split, `false` otherwise. When `false`
430 /// is returned, it is assumed that \p ModuleCallback has never been called
431 /// and \p M has not been modified.
432 virtual bool splitModule(
433 Module &M, unsigned NumParts,
434 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
435 return false;
436 }
437
438 /// Create a pass configuration object to be used by addPassToEmitX methods
439 /// for generating a pipeline of CodeGen passes.
441 return nullptr;
442 }
443
446 const CGPassBuilderOption &,
448 return make_error<StringError>("buildCodeGenPipeline is not overridden",
450 }
451
452 /// Returns true if the target is expected to pass all machine verifier
453 /// checks. This is a stopgap measure to fix targets one by one. We will
454 /// remove this at some point and always enable the verifier when
455 /// EXPENSIVE_CHECKS is enabled.
456 virtual bool isMachineVerifierClean() const { return true; }
457
458 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
459 /// machine code from the MI representation.
461 raw_pwrite_stream *DwoOut,
462 CodeGenFileType FileType, MCContext &Context) {
463 return false;
464 }
465
468 CodeGenFileType FileType, MCContext &Ctx) {
469 return nullptr;
470 }
471
472 /// True if the target uses physical regs (as nearly all targets do). False
473 /// for stack machines such as WebAssembly and other virtual-register
474 /// machines. If true, all vregs must be allocated before PEI. If false, then
475 /// callee-save register spilling and scavenging are not needed or used. If
476 /// false, implicitly defined registers will still be assumed to be physical
477 /// registers, except that variadic defs will be allocated vregs.
478 virtual bool usesPhysRegsForValues() const { return true; }
479
480 /// True if the target wants to use interprocedural register allocation by
481 /// default. The -enable-ipra flag can be used to override this.
482 virtual bool useIPRA() const { return false; }
483
484 /// The default variant to use in unqualified `asm` instructions.
485 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
486 virtual int unqualifiedInlineAsmVariant() const { return 0; }
487
488 // MachineRegisterInfo callback function
490};
491
492} // end namespace llvm
493
494#endif // LLVM_TARGET_TARGETMACHINE_H
This file defines the BumpPtrAllocator interface.
std::string Name
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition: MD5.cpp:55
Define option tunables for PGO.
Basic Register Allocator
static cl::opt< RegAllocEvictionAdvisorAnalysis::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysis::AdvisorMode::Development, "development", "for training")))
A manager for alias analyses.
Allocate memory in an ever growing pool, as if by bump-pointer.
Definition: Allocator.h:66
A parsed version of the target data layout string in and methods for querying it.
Definition: DataLayout.h:63
unsigned getProgramAddressSpace() const
Definition: DataLayout.h:246
unsigned getPointerSizeInBits(unsigned AS=0) const
Layout pointer size, in bits FIXME: The defaults need to be removed once all of the backends/clients ...
Definition: DataLayout.h:364
unsigned getAllocaAddrSpace() const
Definition: DataLayout.h:229
unsigned getPointerSize(unsigned AS=0) const
Layout pointer size in bytes, rounded up to a whole number of bytes.
Definition: DataLayout.cpp:739
Lightweight error class with error context and mandatory checking.
Definition: Error.h:160
Tagged union holding either a T or a Error.
Definition: Error.h:481
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
Context object for machine code objects.
Definition: MCContext.h:83
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:26
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Generic base class for all target subtargets.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
This interface provides simple read-only access to a block of memory, and provides simple methods for...
Definition: MemoryBuffer.h:51
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
This class provides access to building LLVM's passes.
Definition: PassBuilder.h:105
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a ca...
Definition: SourceMgr.h:281
Represents a range in source code.
Definition: SMLoc.h:48
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: SmallVector.h:573
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:51
Analysis pass providing the TargetTransformInfo.
TargetIntrinsicInfo - Interface to description of machine instruction set.
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:77
CodeGenOptLevel getOptLevel() const
Returns the optimization level: None, Less, Default, or Aggressive.
void setSupportsDebugEntryValues(bool Enable)
Triple TargetTriple
Triple string, CPU name, and target feature strings the TargetMachine instance is created with.
Definition: TargetMachine.h:96
std::unique_ptr< const MCAsmInfo > AsmInfo
Contains target specific asm information.
TLSModel::Model getTLSModel(const GlobalValue *GV) const
Returns the TLS model which should be used for the given global variable.
bool isPositionIndependent() const
virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const
getAddressSpaceForPseudoSourceKind - Given the kind of memory (e.g.
virtual bool addPassesToEmitFile(PassManagerBase &, raw_pwrite_stream &, raw_pwrite_stream *, CodeGenFileType, bool=true, MachineModuleInfoWrapperPass *MMIWP=nullptr)
Add passes to the specified pass manager to get the specified file emitted.
unsigned getAllocaPointerSize() const
virtual std::pair< const Value *, unsigned > getPredicatedAddrSpace(const Value *V) const
If the specified predicate checks whether a generic pointer falls within a specified address space,...
virtual Expected< std::unique_ptr< MCStreamer > > createMCStreamer(raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, MCContext &Ctx)
virtual void registerPassBuilderCallbacks(PassBuilder &)
Allow the target to modify the pass pipeline.
virtual const TargetIntrinsicInfo * getIntrinsicInfo() const
If intrinsic information is available, return it. If not, return null.
virtual bool usesPhysRegsForValues() const
True if the target uses physical regs (as nearly all targets do).
uint64_t getMaxCodeSize() const
Returns the maximum code size possible under the code model.
bool getAIXExtendedAltivecABI() const
CodeModel::Model CMModel
virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const
Returns true if a cast between SrcAS and DestAS is a noop.
virtual MachineFunctionInfo * createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, const TargetSubtargetInfo *STI) const
Create the target's instance of MachineFunctionInfo.
const Triple & getTargetTriple() const
virtual bool splitModule(Module &M, unsigned NumParts, function_ref< void(std::unique_ptr< Module > MPart)> ModuleCallback)
Entry point for module splitting.
const DataLayout createDataLayout() const
Create a DataLayout.
void setMachineOutliner(bool Enable)
void setFastISel(bool Enable)
const std::optional< PGOOptions > & getPGOOption() const
bool useTLSDESC() const
Returns true if this target uses TLS Descriptors.
uint64_t LargeDataThreshold
const MCSubtargetInfo * getMCSubtargetInfo() const
virtual bool addAsmPrinter(PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, MCContext &Context)
Adds an AsmPrinter pass to the pipeline that prints assembly or machine code from the MI representati...
bool getSeparateNamedSections() const
const MemoryBuffer * getBBSectionsFuncListBuf() const
Get the list of functions and basic block ids that need unique sections.
virtual unsigned getSjLjDataSize() const
const STC & getSubtarget(const Function &F) const
This method returns a pointer to the specified type of TargetSubtargetInfo.
unsigned getPointerSizeInBits(unsigned AS) const
bool getIgnoreXCOFFVisibility() const
Return true if visibility attribute should not be emitted in XCOFF, corresponding to -mignore-xcoff-v...
virtual int unqualifiedInlineAsmVariant() const
The default variant to use in unqualified asm instructions.
void setCFIFixup(bool Enable)
bool useEmulatedTLS() const
Returns true if this target uses emulated TLS.
bool getUniqueBasicBlockSectionNames() const
Return true if unique basic block section names must be generated.
bool getUniqueSectionNames() const
unsigned getPointerSize(unsigned AS) const
Get the pointer size for this target.
std::unique_ptr< const MCInstrInfo > MII
void setSupportsDefaultOutlining(bool Enable)
TargetMachine(const TargetMachine &)=delete
void setGlobalISelAbort(GlobalISelAbortMode Mode)
virtual unsigned getAssumedAddrSpace(const Value *V) const
If the specified generic pointer could be assumed as a pointer to a specific address space,...
virtual TargetLoweringObjectFile * getObjFileLowering() const
std::string TargetFS
Definition: TargetMachine.h:98
std::optional< PGOOptions > PGOOption
virtual yaml::MachineFunctionInfo * convertFuncInfoToYAML(const MachineFunction &MF) const
Allocate and initialize an instance of the YAML representation of the MachineFunctionInfo.
StringRef getTargetFeatureString() const
virtual Error buildCodeGenPipeline(ModulePassManager &, raw_pwrite_stream &, raw_pwrite_stream *, CodeGenFileType, const CGPassBuilderOption &, PassInstrumentationCallbacks *)
Reloc::Model getRelocationModel() const
Returns the code generation relocation model.
static constexpr unsigned DefaultSjLjDataSize
The integer bit size to use for SjLj based exception handling.
virtual bool targetSchedulesPostRAScheduling() const
True if subtarget inserts the final scheduling pass on its own.
virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const
Return a TargetTransformInfo for a given function.
virtual bool addPassesToEmitMC(PassManagerBase &, MCContext *&, raw_pwrite_stream &, bool=true)
Add passes to the specified pass manager to get machine code emitted with the MCJIT.
const DataLayout DL
DataLayout for the target: keep ABI type size and alignment.
Definition: TargetMachine.h:92
StringRef getTargetCPU() const
const MCInstrInfo * getMCInstrInfo() const
void setOptLevel(CodeGenOptLevel Level)
Overrides the optimization level.
virtual const TargetSubtargetInfo * getSubtargetImpl(const Function &) const
Virtual method implemented by subclasses that returns a reference to that target's TargetSubtargetInf...
std::string TargetCPU
Definition: TargetMachine.h:97
bool requiresStructuredCFG() const
bool shouldAssumeDSOLocal(const GlobalValue *GV) const
void setRequiresStructuredCFG(bool Value)
virtual bool isMachineVerifierClean() const
Returns true if the target is expected to pass all machine verifier checks.
static std::pair< int, int > parseBinutilsVersion(StringRef Version)
std::unique_ptr< const MCSubtargetInfo > STI
void setGlobalISel(bool Enable)
TargetIRAnalysis getTargetIRAnalysis() const
Get a TargetIRAnalysis appropriate for the target.
TargetOptions Options
virtual void registerDefaultAliasAnalyses(AAManager &)
Allow the target to register alias analyses with the AAManager for use with the new pass manager.
void setLargeDataThreshold(uint64_t LDT)
virtual void registerMachineRegisterInfoCallback(MachineFunction &MF) const
unsigned RequireStructuredCFG
void setO0WantsFastISel(bool Enable)
virtual yaml::MachineFunctionInfo * createDefaultFuncInfoYAML() const
Allocate and return a default initialized instance of the YAML representation for the MachineFunction...
virtual ~TargetMachine()
virtual TargetPassConfig * createPassConfig(PassManagerBase &PM)
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
bool isCompatibleDataLayout(const DataLayout &Candidate) const
Test if a DataLayout if compatible with the CodeGen for this target.
void operator=(const TargetMachine &)=delete
MCSymbol * getSymbol(const GlobalValue *GV) const
unsigned getProgramPointerSize() const
bool getXCOFFTracebackTable() const
Return true if XCOFF traceback table should be emitted, corresponding to -xcoff-traceback-table.
bool getDataSections() const
Return true if data objects should be emitted into their own section, corresponds to -fdata-sections.
const Target & getTarget() const
void setTargetFeatureString(StringRef FS)
const Target & TheTarget
The Target that this machine was created for.
Definition: TargetMachine.h:84
CodeModel::Model getCodeModel() const
Returns the code model.
const MCRegisterInfo * getMCRegisterInfo() const
bool isLargeGlobalValue(const GlobalValue *GV) const
virtual bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &, PerFunctionMIParsingState &PFS, SMDiagnostic &Error, SMRange &SourceRange) const
Parse out the target's MachineFunctionInfo from the YAML reprsentation.
virtual bool useIPRA() const
True if the target wants to use interprocedural register allocation by default.
void setCodeModel(CodeModel::Model CM)
Set the code model.
void resetTargetOptions(const Function &F) const
Reset the target options based on the function's attributes.
void getNameWithPrefix(SmallVectorImpl< char > &Name, const GlobalValue *GV, Mangler &Mang, bool MayAlwaysUsePrivate=false) const
void setPGOOption(std::optional< PGOOptions > PGOOpt)
std::unique_ptr< const MCRegisterInfo > MRI
bool getFunctionSections() const
Return true if functions should be emitted into their own section, corresponding to -ffunction-sectio...
CodeGenOptLevel OptLevel
llvm::BasicBlockSection getBBSectionsType() const
If basic blocks should be emitted into their own section, corresponding to -fbasic-block-sections.
const MCAsmInfo * getMCAsmInfo() const
Return target specific asm information.
unsigned EnableAIXExtendedAltivecABI
EnableAIXExtendedAltivecABI - This flag returns true when -vec-extabi is specified.
unsigned EnableMachineOutliner
Enables the MachineOutliner pass.
unsigned SeparateNamedSections
Emit named sections with the same name into different sections.
unsigned SupportsDebugEntryValues
Set if the target supports the debug entry values by default.
BasicBlockSection BBSections
Emit basic blocks into separate sections.
GlobalISelAbortMode GlobalISelAbort
EnableGlobalISelAbort - Control abort behaviour when global instruction selection fails to lower/sele...
unsigned XCOFFTracebackTable
Emit XCOFF traceback table.
unsigned IgnoreXCOFFVisibility
Do not emit visibility attribute for xcoff.
unsigned EnableCFIFixup
Enable the CFIFixup pass.
unsigned SupportsDefaultOutlining
Set if the target supports default outlining behaviour.
unsigned UniqueBasicBlockSectionNames
Use unique names for basic block sections.
unsigned UniqueSectionNames
unsigned EnableFastISel
EnableFastISel - This flag enables fast-path instruction selection which trades away generated code q...
std::shared_ptr< MemoryBuffer > BBSectionsFuncListBuf
Memory Buffer that contains information on sampled basic blocks and used to selectively generate basi...
unsigned FunctionSections
Emit functions into separate sections.
unsigned EnableGlobalISel
EnableGlobalISel - This flag enables global instruction selection.
unsigned DataSections
Emit data into separate sections.
Target-Independent Code Generator Pass Configuration Options.
TargetSubtargetInfo - Generic base class for all target subtargets.
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
LLVM Value Representation.
Definition: Value.h:74
An efficient, type-erasing, non-owning reference to a callable.
PassManagerBase - An abstract interface to allow code to add passes to a pass manager without having ...
An abstract base class for streams implementations that also support a pwrite operation.
Definition: raw_ostream.h:434
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
Definition: PassManager.h:237
std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Definition: Error.cpp:98
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
Definition: CodeGen.h:83
CodeGenOptLevel
Code generation optimization level.
Definition: CodeGen.h:54
BasicBlockSection
Definition: TargetOptions.h:61
GlobalISelAbortMode
Enable abort calls when global instruction selection fails to lower/select an instruction.
@ Enable
Enable colors.
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Targets should override this in a way that mirrors the implementation of llvm::MachineFunctionInfo.