LLVM 24.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/StringMap.h"
17#include "llvm/ADT/StringRef.h"
18#include "llvm/IR/DataLayout.h"
19#include "llvm/IR/PassManager.h"
24#include "llvm/Support/Error.h"
29#include <optional>
30#include <string>
31#include <utility>
32
33namespace llvm {
34
36
37class AAManager;
39
40class Function;
41class GlobalValue;
42class MachineInstr;
45class Mangler;
46class MCAsmInfo;
47class MCContext;
48class MCInstrInfo;
49class MCRegisterInfo;
50class MCStreamer;
51class MCSubtargetInfo;
52class MCSymbol;
54class PassBuilder;
58class SMDiagnostic;
59class SMRange;
60class Target;
66
67// The old pass manager infrastructure is hidden in a legacy namespace now.
68namespace legacy {
69class PassManagerBase;
70} // namespace legacy
72
74namespace yaml {
76} // namespace yaml
77
78//===----------------------------------------------------------------------===//
79///
80/// Primary interface to the complete machine description for the target
81/// machine. All target-specific information should be accessible through this
82/// interface.
83///
85protected: // Can only create subclasses.
86 TargetMachine(const Target &T, StringRef DataLayoutString,
87 const Triple &TargetTriple, StringRef CPU, StringRef FS,
88 const TargetOptions &Options);
89
90 /// The Target that this machine was created for.
92
93 /// DataLayout for the target: keep ABI type size and alignment.
94 ///
95 /// The DataLayout is created based on the string representation provided
96 /// during construction. It is kept here only to avoid reparsing the string
97 /// but should not really be used during compilation, because it has an
98 /// internal cache that is context specific.
100
101 /// Triple string, CPU name, and target feature strings the TargetMachine
102 /// instance is created with.
104 std::string TargetCPU;
105 std::string TargetFS;
106
111
112 /// Contains target specific asm information.
113 std::unique_ptr<const MCAsmInfo> AsmInfo;
114 std::unique_ptr<const MCRegisterInfo> MRI;
115 std::unique_ptr<const MCInstrInfo> MII;
116 std::unique_ptr<const MCSubtargetInfo> STI;
117
118 /// MC subtarget keyed by target features and target CPU.
120
122 unsigned O0WantsFastISel : 1;
123
124 // PGO related tunables.
125 std::optional<PGOOptions> PGOOption;
126
127public:
129
130 TargetMachine(const TargetMachine &) = delete;
131 void operator=(const TargetMachine &) = delete;
132 virtual ~TargetMachine();
133
134 const Target &getTarget() const { return TheTarget; }
135
136 const Triple &getTargetTriple() const { return TargetTriple; }
137 StringRef getTargetCPU() const { return TargetCPU; }
139 void setTargetFeatureString(StringRef FS) { TargetFS = std::string(FS); }
140
141 /// Returns the effective target ABI name: the "target-abi" module flag if
142 /// present, otherwise the -target-abi option. This is a pure query; call
143 /// verifyOptionsConsistency once per module to diagnose a conflict.
144 StringRef getTargetABIName(const Module &M) const;
145
146 /// Diagnoses command-line codegen options that conflict with the
147 /// corresponding module flags (e.g. -target-abi vs the "target-abi" module
148 /// flag). Intended to be called once per module.
149 void verifyOptionsConsistency(const Module &M) const;
150
151 /// Virtual method implemented by subclasses that returns a reference to that
152 /// target's TargetSubtargetInfo-derived member variable.
153 virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
154 return nullptr;
155 }
157 return nullptr;
158 }
159
160 /// Create the target's instance of MachineFunctionInfo
161 virtual MachineFunctionInfo *
163 const TargetSubtargetInfo *STI) const {
164 return nullptr;
165 }
166
167 /// Create an instance of ScheduleDAGInstrs to be run within the standard
168 /// MachineScheduler pass for this function and target at the current
169 /// optimization level.
170 ///
171 /// This can also be used to plug a new MachineSchedStrategy into an instance
172 /// of the standard ScheduleDAGMI:
173 /// return new ScheduleDAGMI(C, std::make_unique<MyStrategy>(C),
174 /// /*RemoveKillFlags=*/false)
175 ///
176 /// Return NULL to select the default (generic) machine scheduler.
177 virtual ScheduleDAGInstrs *
179 return nullptr;
180 }
181
182 /// Similar to createMachineScheduler but used when postRA machine scheduling
183 /// is enabled.
184 virtual ScheduleDAGInstrs *
186 return nullptr;
187 }
188
189 /// Allocate and return a default initialized instance of the YAML
190 /// representation for the MachineFunctionInfo.
192 return nullptr;
193 }
194
195 /// Allocate and initialize an instance of the YAML representation of the
196 /// MachineFunctionInfo.
199 return nullptr;
200 }
201
202 /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
206 SMRange &SourceRange) const {
207 return false;
208 }
209
210 /// This method returns a pointer to the specified type of
211 /// TargetSubtargetInfo. In debug builds, it verifies that the object being
212 /// returned is of the correct type.
213 template <typename STC> const STC &getSubtarget(const Function &F) const {
214 return *static_cast<const STC*>(getSubtargetImpl(F));
215 }
216
217 /// Create a DataLayout.
218 const DataLayout createDataLayout() const { return DL; }
219
220 /// Test if a DataLayout if compatible with the CodeGen for this target.
221 ///
222 /// The LLVM Module owns a DataLayout that is used for the target independent
223 /// optimizations and code generation. This hook provides a target specific
224 /// check on the validity of this DataLayout.
225 bool isCompatibleDataLayout(const DataLayout &Candidate) const {
226 return DL == Candidate;
227 }
228
229 /// Get the pointer size for this target.
230 ///
231 /// This is the only time the DataLayout in the TargetMachine is used.
232 unsigned getPointerSize(unsigned AS) const {
233 return DL.getPointerSize(AS);
234 }
235
236 unsigned getPointerSizeInBits(unsigned AS) const {
237 return DL.getPointerSizeInBits(AS);
238 }
239
240 unsigned getProgramPointerSize() const {
241 return DL.getPointerSize(DL.getProgramAddressSpace());
242 }
243
244 unsigned getAllocaPointerSize() const {
245 return DL.getPointerSize(DL.getAllocaAddrSpace());
246 }
247
248 /// Return target specific asm information.
249 const MCAsmInfo &getMCAsmInfo() const { return *AsmInfo; }
250
251 const MCRegisterInfo &getMCRegisterInfo() const { return *MRI; }
252 const MCInstrInfo *getMCInstrInfo() const { return MII.get(); }
253 const MCSubtargetInfo &getMCSubtargetInfo() const { return *STI; }
254
255 /// Get the MCSubtargetInfo for the given target CPU and target features.
256 /// For use in contexts where a feature-specific MC subtarget is needed,
257 /// but no MachineFunctionis available, such as for module-level inline
258 /// assembly.
259 const MCSubtargetInfo &getMCSubtargetInfo(StringRef CPU, StringRef FS);
260
261 /// Return the ExceptionHandling to use, considering TargetOptions and the
262 /// Triple's default.
264 // FIXME: This interface fails to distinguish default from not supported.
265 return Options.ExceptionModel == ExceptionHandling::None
266 ? TargetTriple.getDefaultExceptionHandling()
267 : Options.ExceptionModel;
268 }
269
272
273 /// Returns the code generation relocation model. The choices are static, PIC,
274 /// and dynamic-no-pic, and target default.
275 Reloc::Model getRelocationModel() const;
276
277 /// Returns the code model. The choices are small, kernel, medium, large, and
278 /// target default.
280
281 /// Returns the maximum code size possible under the code model.
282 uint64_t getMaxCodeSize() const;
283
284 /// Set the code model.
286
288 bool isLargeGlobalValue(const GlobalValue *GV) const;
289 bool isLargeDataSize(uint64_t Size) const;
290
291 bool isPositionIndependent() const;
292
293 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
294
295 /// Returns true if this target uses emulated TLS.
296 bool useEmulatedTLS() const;
297
298 /// Returns true if this target uses TLS Descriptors.
299 bool useTLSDESC() const;
300
301 /// Returns the TLS model which should be used for the given global variable.
302 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
303
304 /// Returns the optimization level: None, Less, Default, or Aggressive.
306
307 /// Overrides the optimization level.
308 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
309
310 void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
313 void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
315 Options.GlobalISelAbort = Mode;
316 }
318 Options.EnableMachineOutliner = Enable;
319 }
321 Options.SupportsDefaultOutlining = Enable;
322 }
324 Options.SupportsDebugEntryValues = Enable;
325 }
327 Options.EnableDefaultMachineVerifier = Enable;
328 }
329
330 void setCFIFixup(bool Enable) { Options.EnableCFIFixup = Enable; }
331
333 return Options.EnableAIXExtendedAltivecABI;
334 }
335
336 bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
337
338 /// Return true if unique basic block section names must be generated.
340 return Options.UniqueBasicBlockSectionNames;
341 }
342
344 return Options.SeparateNamedSections;
345 }
346
347 /// Return true if data objects should be emitted into their own section,
348 /// corresponds to -fdata-sections.
349 bool getDataSections() const {
350 return Options.DataSections;
351 }
352
353 /// Return true if functions should be emitted into their own section,
354 /// corresponding to -ffunction-sections.
355 bool getFunctionSections() const {
356 return Options.FunctionSections;
357 }
358
360 return Options.EnableStaticDataPartitioning;
361 }
362
363 /// Return true if visibility attribute should not be emitted in XCOFF,
364 /// corresponding to -mignore-xcoff-visibility.
366 return Options.IgnoreXCOFFVisibility;
367 }
368
369 /// Return true if XCOFF traceback table should be emitted,
370 /// corresponding to -xcoff-traceback-table.
371 bool getXCOFFTracebackTable() const { return Options.XCOFFTracebackTable; }
372
373 /// If basic blocks should be emitted into their own section,
374 /// corresponding to -fbasic-block-sections.
376 return Options.BBSections;
377 }
378
379 /// Get the list of functions and basic block ids that need unique sections.
381 return Options.BBSectionsFuncListBuf.get();
382 }
383
384 /// Returns true if a cast between SrcAS and DestAS is a noop.
385 virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
386 return false;
387 }
388
389 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
390 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
391
392 /// If the specified generic pointer could be assumed as a pointer to a
393 /// specific address space, return that address space.
394 ///
395 /// Under offloading programming, the offloading target may be passed with
396 /// values only prepared on the host side and could assume certain
397 /// properties.
398 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
399
400 /// If the specified predicate checks whether a generic pointer falls within
401 /// a specified address space, return that generic pointer and the address
402 /// space being queried.
403 ///
404 /// Such predicates could be specified in @llvm.assume intrinsics for the
405 /// optimizer to assume that the given generic pointer always falls within
406 /// the address space based on that predicate.
407 virtual std::pair<const Value *, unsigned>
409 return std::make_pair(nullptr, -1);
410 }
411
412 /// Get a \c TargetIRAnalysis appropriate for the target.
413 ///
414 /// This is used to construct the new pass manager's target IR analysis pass,
415 /// set up appropriately for this target machine. Even the old pass manager
416 /// uses this to answer queries about the IR.
417 TargetIRAnalysis getTargetIRAnalysis() const;
418
419 /// Return a TargetTransformInfo for a given function.
420 ///
421 /// The returned TargetTransformInfo is specialized to the subtarget
422 /// corresponding to \p F.
423 virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const;
424
425 /// Allow the target to modify the pass pipeline.
426 // TODO: Populate all pass names by using <Target>PassRegistry.def.
428
429 /// Allow the target to register early alias analyses (AA before BasicAA) with
430 /// the AAManager for use with the new pass manager. Only affects the
431 /// "default" AAManager.
433
434 /// Allow the target to register alias analyses with the AAManager for use
435 /// with the new pass manager. Only affects the "default" AAManager.
437
438 /// Add passes to the specified pass manager to get the specified file
439 /// emitted. Typically this will involve several steps of code generation.
440 /// This method should return true if emission of this file type is not
441 /// supported, or false on success.
442 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
443 /// will be used to set the MachineModuloInfo for this PM.
444 virtual bool
447 bool /*DisableVerify*/ = true,
448 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
449 return true;
450 }
451
452 /// Add passes to the specified pass manager to get machine code emitted with
453 /// the MCJIT. This method returns true if machine code is not supported. It
454 /// fills the MCContext Ctx pointer which can be used to build custom
455 /// MCStreamer.
456 ///
459 bool /*DisableVerify*/ = true) {
460 return true;
461 }
462
463 /// True if subtarget inserts the final scheduling pass on its own.
464 ///
465 /// Branch relaxation, which must happen after block placement, can
466 /// on some targets (e.g. SystemZ) expose additional post-RA
467 /// scheduling opportunities.
468 virtual bool targetSchedulesPostRAScheduling() const { return false; };
469
470 void getNameWithPrefix(SmallVectorImpl<char> &Name, const GlobalValue *GV,
471 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
472 MCSymbol *getSymbol(const GlobalValue *GV) const;
473
474 /// The integer bit size to use for SjLj based exception handling.
475 static constexpr unsigned DefaultSjLjDataSize = 32;
476 virtual unsigned getSjLjDataSize() const { return DefaultSjLjDataSize; }
477
478 static std::pair<int, int> parseBinutilsVersion(StringRef Version);
479
480 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
481 /// (e.g. stack) the target returns the corresponding address space.
482 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
483 return 0;
484 }
485
486 /// Entry point for module splitting. Targets can implement custom module
487 /// splitting logic, mainly used by LTO for --lto-partitions.
488 ///
489 /// On success, this guarantees that between 1 and \p NumParts modules were
490 /// created and passed to \p ModuleCallBack.
491 ///
492 /// \returns `true` if the module was split, `false` otherwise. When `false`
493 /// is returned, it is assumed that \p ModuleCallback has never been called
494 /// and \p M has not been modified.
495 virtual bool splitModule(
496 Module &M, unsigned NumParts,
497 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
498 return false;
499 }
500
501 /// Create a pass configuration object to be used by addPassToEmitX methods
502 /// for generating a pipeline of CodeGen passes.
504 return nullptr;
505 }
506
507 virtual Error
510 CodeGenFileType FileType, const CGPassBuilderOption &Opt,
512 return make_error<StringError>("buildCodeGenPipeline is not overridden",
514 }
515
516 /// Returns true if frontends should default to using the NewPM for this
517 /// specific target.
518 virtual bool shouldDefaultToNewPM() const { return false; }
519
520 /// Returns true if the target is expected to pass all machine verifier
521 /// checks. This is a stopgap measure to fix targets one by one. We will
522 /// remove this at some point and always enable the verifier when
523 /// EXPENSIVE_CHECKS is enabled.
524 virtual bool isMachineVerifierClean() const { return true; }
525
526 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
527 /// machine code from the MI representation.
529 raw_pwrite_stream *DwoOut,
530 CodeGenFileType FileType, MCContext &Context) {
531 return false;
532 }
533
536 CodeGenFileType FileType, MCContext &Ctx);
537
538 /// True if the target uses physical regs (as nearly all targets do). False
539 /// for stack machines such as WebAssembly and other virtual-register
540 /// machines. If true, all vregs must be allocated before PEI. If false, then
541 /// callee-save register spilling and scavenging are not needed or used. If
542 /// false, implicitly defined registers will still be assumed to be physical
543 /// registers, except that variadic defs will be allocated vregs.
544 virtual bool usesPhysRegsForValues() const { return true; }
545
546 /// True if the target wants to use interprocedural register allocation by
547 /// default. The -enable-ipra flag can be used to override this.
548 virtual bool useIPRA() const { return false; }
549
550 /// The default variant to use in unqualified `asm` instructions.
551 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
552 virtual int unqualifiedInlineAsmVariant() const { return 0; }
553
554 // MachineRegisterInfo callback function
556
557 /// Remove all Linker Optimization Hints (LOH) associated with instructions in
558 /// \p MIs and \return the number of hints removed. This is useful in
559 /// transformations that cause these hints to be illegal, like in the machine
560 /// outliner.
562 const SmallPtrSetImpl<MachineInstr *> &MIs) const {
563 return 0;
564 }
565
566 /// Returns whether the backend can lower the llvm.cond.loop intrinsic. If
567 /// this function returns false, the intrinsic will be supported generically
568 /// but without loop detection support.
569 virtual bool canLowerCondLoop() const { return false; }
570};
571
572} // end namespace llvm
573
574#endif // LLVM_TARGET_TARGETMACHINE_H
This file defines the StringMap class.
unsigned uint64_t
static MCStreamer * createMCStreamer(const Triple &T, MCContext &Context, std::unique_ptr< MCAsmBackend > &&MAB, std::unique_ptr< MCObjectWriter > &&OW, std::unique_ptr< MCCodeEmitter > &&Emitter)
This file defines the BumpPtrAllocator interface.
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
#define LLVM_ABI
Definition Compiler.h:215
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:54
#define T
Define option tunables for PGO.
ModuleAnalysisManager MAM
PassInstrumentationCallbacks PIC
Basic Register Allocator
static cl::opt< RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Development, "development", "for training")))
A manager for alias analyses.
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
Tagged union holding either a T or a Error.
Definition Error.h:485
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition MCAsmInfo.h:67
Context object for machine code objects.
Definition MCContext.h:83
Interface to description of machine instruction set.
Definition MCInstrInfo.h:27
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Streaming machine code generation interface.
Definition MCStreamer.h:222
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:42
Representation of each machine instruction.
This interface provides simple read-only access to a block of memory, and provides simple methods for...
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Manages a sequence of passes over a particular unit of IR.
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a ca...
Definition SourceMgr.h:308
Represents a range in source code.
Definition SMLoc.h:47
A ScheduleDAG for scheduling lists of MachineInstr.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:128
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Analysis pass providing the TargetTransformInfo.
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.
std::unique_ptr< const MCAsmInfo > AsmInfo
Contains target specific asm information.
virtual bool shouldDefaultToNewPM() const
Returns true if frontends should default to using the NewPM for this specific target.
ExceptionHandling getExceptionModel() const
Return the ExceptionHandling to use, considering TargetOptions and the Triple's default.
virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const
getAddressSpaceForPseudoSourceKind - Given the kind of memory (e.g.
virtual void registerEarlyDefaultAliasAnalyses(AAManager &)
Allow the target to register early alias analyses (AA before BasicAA) with the AAManager for use with...
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 void registerPassBuilderCallbacks(PassBuilder &)
Allow the target to modify the pass pipeline.
virtual bool usesPhysRegsForValues() const
True if the target uses physical regs (as nearly all targets do).
virtual Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC)
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 ScheduleDAGInstrs * createPostMachineScheduler(MachineSchedContext *C) const
Similar to createMachineScheduler but used when postRA machine scheduling is enabled.
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
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.
StringMap< std::unique_ptr< const MCSubtargetInfo > > MCSubtargetMap
MC subtarget keyed by target features and target CPU.
unsigned getPointerSizeInBits(unsigned AS) const
const MCSubtargetInfo & getMCSubtargetInfo() 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 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::optional< PGOOptions > PGOOption
virtual yaml::MachineFunctionInfo * convertFuncInfoToYAML(const MachineFunction &MF) const
Allocate and initialize an instance of the YAML representation of the MachineFunctionInfo.
bool getEnableStaticDataPartitioning() const
StringRef getTargetFeatureString() const
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.
const MCAsmInfo & getMCAsmInfo() const
Return target specific asm information.
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.
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...
virtual ScheduleDAGInstrs * createMachineScheduler(MachineSchedContext *C) const
Create an instance of ScheduleDAGInstrs to be run within the standard MachineScheduler pass for this ...
bool requiresStructuredCFG() const
void setRequiresStructuredCFG(bool Value)
virtual bool isMachineVerifierClean() const
Returns true if the target is expected to pass all machine verifier checks.
std::unique_ptr< const MCSubtargetInfo > STI
void setGlobalISel(bool Enable)
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 bool canLowerCondLoop() const
Returns whether the backend can lower the llvm.cond.loop intrinsic.
virtual yaml::MachineFunctionInfo * createDefaultFuncInfoYAML() const
Allocate and return a default initialized instance of the YAML representation for the MachineFunction...
virtual ~TargetMachine()
virtual size_t clearLinkerOptimizationHints(const SmallPtrSetImpl< MachineInstr * > &MIs) const
Remove all Linker Optimization Hints (LOH) associated with instructions in MIs and.
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
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.
CodeModel::Model getCodeModel() const
Returns the code model.
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.
TargetMachine(const Target &T, StringRef DataLayoutString, const Triple &TargetTriple, StringRef CPU, StringRef FS, const TargetOptions &Options)
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.
void setEnableDefaultMachineVerifier(bool Enable)
const MCRegisterInfo & getMCRegisterInfo() const
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:48
LLVM Value Representation.
Definition Value.h:75
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.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Definition Error.cpp:94
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
Definition CodeGen.h:178
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:149
@ Default
-O2, -Os, -Oz
Definition CodeGen.h:152
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
Definition Error.h:340
ExceptionHandling
Definition CodeGen.h:54
@ None
No exception support.
Definition CodeGen.h:55
BasicBlockSection
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:390
LLVM_ABI llvm::cl::opt< bool > NoKernelInfoEndLTO
GlobalISelAbortMode
Enable abort calls when global instruction selection fails to lower/select an instruction.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
@ Enable
Enable colors.
Definition WithColor.h:47
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...
MachineSchedContext provides enough context from the MachineScheduler pass for the target to instanti...
Targets should override this in a way that mirrors the implementation of llvm::MachineFunctionInfo.