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;
38class CSEConfigBase;
40
41class Function;
42class GlobalValue;
43class MachineInstr;
46class Mangler;
47class MCAsmInfo;
48class MCContext;
49class MCInstrInfo;
50class MCRegisterInfo;
51class MCStreamer;
52class MCSubtargetInfo;
53class MCSymbol;
55class PassBuilder;
59class SMDiagnostic;
60class SMRange;
61class Target;
67
68// The old pass manager infrastructure is hidden in a legacy namespace now.
69namespace legacy {
70class PassManagerBase;
71} // namespace legacy
73
75namespace yaml {
77} // namespace yaml
78
79//===----------------------------------------------------------------------===//
80///
81/// Primary interface to the complete machine description for the target
82/// machine. All target-specific information should be accessible through this
83/// interface.
84///
86protected: // Can only create subclasses.
87 TargetMachine(const Target &T, StringRef DataLayoutString,
88 const Triple &TargetTriple, StringRef CPU, StringRef FS,
89 const TargetOptions &Options);
90
91 /// The Target that this machine was created for.
93
94 /// DataLayout for the target: keep ABI type size and alignment.
95 ///
96 /// The DataLayout is created based on the string representation provided
97 /// during construction. It is kept here only to avoid reparsing the string
98 /// but should not really be used during compilation, because it has an
99 /// internal cache that is context specific.
101
102 /// Triple string, CPU name, and target feature strings the TargetMachine
103 /// instance is created with.
105 std::string TargetCPU;
106 std::string TargetFS;
107
112
113 /// Contains target specific asm information.
114 std::unique_ptr<const MCAsmInfo> AsmInfo;
115 std::unique_ptr<const MCRegisterInfo> MRI;
116 std::unique_ptr<const MCInstrInfo> MII;
117 std::unique_ptr<const MCSubtargetInfo> STI;
118
119 /// MC subtarget keyed by target features and target CPU.
121
122 /// Bit N is set if the target can lower exceptions using model N.
124
126 unsigned O0WantsFastISel : 1;
128
129 /// Set if the target supports default outlining behaviour.
131
132 /// Set if the target supports the debug entry values by default.
134
135 // PGO related tunables.
136 std::optional<PGOOptions> PGOOption;
137
138public:
140
141 TargetMachine(const TargetMachine &) = delete;
142 void operator=(const TargetMachine &) = delete;
143 virtual ~TargetMachine();
144
145 const Target &getTarget() const { return TheTarget; }
146
147 const Triple &getTargetTriple() const { return TargetTriple; }
148 StringRef getTargetCPU() const { return TargetCPU; }
150 void setTargetFeatureString(StringRef FS) { TargetFS = std::string(FS); }
151
152 /// Returns the effective target ABI name: the "target-abi" module flag if
153 /// present, otherwise the -target-abi option. This is a pure query; call
154 /// verifyOptionsConsistency once per module to diagnose a conflict.
155 StringRef getTargetABIName(const Module &M) const;
156
157 /// Diagnoses command-line codegen options that conflict with the
158 /// corresponding module flags (e.g. -target-abi vs the "target-abi" module
159 /// flag). Intended to be called once per module.
160 void verifyOptionsConsistency(const Module &M) const;
161
162 /// Virtual method implemented by subclasses that returns a reference to that
163 /// target's TargetSubtargetInfo-derived member variable.
164 virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
165 return nullptr;
166 }
168 return nullptr;
169 }
170
171 /// Create the target's instance of MachineFunctionInfo
172 virtual MachineFunctionInfo *
174 const TargetSubtargetInfo *STI) const {
175 return nullptr;
176 }
177
178 /// Create an instance of ScheduleDAGInstrs to be run within the standard
179 /// MachineScheduler pass for this function and target at the current
180 /// optimization level.
181 ///
182 /// This can also be used to plug a new MachineSchedStrategy into an instance
183 /// of the standard ScheduleDAGMI:
184 /// return new ScheduleDAGMI(C, std::make_unique<MyStrategy>(C),
185 /// /*RemoveKillFlags=*/false)
186 ///
187 /// Return NULL to select the default (generic) machine scheduler.
188 virtual ScheduleDAGInstrs *
190 return nullptr;
191 }
192
193 /// Similar to createMachineScheduler but used when postRA machine scheduling
194 /// is enabled.
195 virtual ScheduleDAGInstrs *
197 return nullptr;
198 }
199
200 /// GlobalISel CSEConfig for the new PM. Return NULL for the standard one.
201 virtual CSEConfigBase *createCSEConfig() const { return nullptr; }
202
203 /// Allocate and return a default initialized instance of the YAML
204 /// representation for the MachineFunctionInfo.
206 return nullptr;
207 }
208
209 /// Allocate and initialize an instance of the YAML representation of the
210 /// MachineFunctionInfo.
213 return nullptr;
214 }
215
216 /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
220 SMRange &SourceRange) const {
221 return false;
222 }
223
224 /// This method returns a pointer to the specified type of
225 /// TargetSubtargetInfo. In debug builds, it verifies that the object being
226 /// returned is of the correct type.
227 template <typename STC> const STC &getSubtarget(const Function &F) const {
228 return *static_cast<const STC*>(getSubtargetImpl(F));
229 }
230
231 /// Create a DataLayout.
232 const DataLayout createDataLayout() const { return DL; }
233
234 /// Test if a DataLayout if compatible with the CodeGen for this target.
235 ///
236 /// The LLVM Module owns a DataLayout that is used for the target independent
237 /// optimizations and code generation. This hook provides a target specific
238 /// check on the validity of this DataLayout.
239 bool isCompatibleDataLayout(const DataLayout &Candidate) const {
240 return DL == Candidate;
241 }
242
243 /// Get the pointer size for this target.
244 ///
245 /// This is the only time the DataLayout in the TargetMachine is used.
246 unsigned getPointerSize(unsigned AS) const {
247 return DL.getPointerSize(AS);
248 }
249
250 unsigned getPointerSizeInBits(unsigned AS) const {
251 return DL.getPointerSizeInBits(AS);
252 }
253
254 unsigned getProgramPointerSize() const {
255 return DL.getPointerSize(DL.getProgramAddressSpace());
256 }
257
258 unsigned getAllocaPointerSize() const {
259 return DL.getPointerSize(DL.getAllocaAddrSpace());
260 }
261
262 /// Return target specific asm information.
263 const MCAsmInfo &getMCAsmInfo() const { return *AsmInfo; }
264
265 const MCRegisterInfo &getMCRegisterInfo() const { return *MRI; }
266 const MCInstrInfo *getMCInstrInfo() const { return MII.get(); }
267 const MCSubtargetInfo &getMCSubtargetInfo() const { return *STI; }
268
269 /// Get the MCSubtargetInfo for the given target CPU and target features.
270 /// For use in contexts where a feature-specific MC subtarget is needed,
271 /// but no MachineFunctionis available, such as for module-level inline
272 /// assembly.
273 const MCSubtargetInfo &getMCSubtargetInfo(StringRef CPU, StringRef FS);
274
277
278 /// Return true if this target can lower exceptions using \p Model. Used to
279 /// guard scheduling of the exception-handling preparation passes.
281 assert(Model != ExceptionHandling::None && "none is trivially supported");
282 return SupportedExceptionModels & (1u << static_cast<unsigned>(Model));
283 }
284
285 /// Override whether this target can lower exceptions using \p Model. The
286 /// default is derived from the object format and architecture.
288 unsigned Bit = 1u << static_cast<unsigned>(Model);
291 }
292
297
298 /// NOTE: There are targets that still do not support the debug entry values
299 /// production.
300 bool shouldEmitDebugEntryValues() const;
301
302 /// Whether the fast register allocator lowers tied operands itself instead
303 /// of running TwoAddressInstructionPass. AMDGPU anchors passes on
304 /// TwoAddressInstructionPassID and cannot enable it.
307
308 /// Returns the code generation relocation model. The choices are static, PIC,
309 /// and dynamic-no-pic, and target default.
310 Reloc::Model getRelocationModel() const;
311
312 /// Returns the code model. The choices are small, kernel, medium, large, and
313 /// target default.
315
316 /// Returns the maximum code size possible under the code model.
317 uint64_t getMaxCodeSize() const;
318
319 /// Set the code model.
321
323 bool isLargeGlobalValue(const GlobalValue *GV) const;
324 bool isLargeDataSize(uint64_t Size) const;
325
326 bool isPositionIndependent() const;
327
328 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
329
330 /// Returns true if this target uses emulated TLS.
331 bool useEmulatedTLS() const;
332
333 /// Returns true if this target uses TLS Descriptors.
334 bool useTLSDESC() const;
335
336 /// Returns the TLS model which should be used for the given global variable.
337 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
338
339 /// Returns the optimization level: None, Less, Default, or Aggressive.
341
342 /// Overrides the optimization level.
343 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
344
345 void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
348 void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
350 Options.GlobalISelAbort = Mode;
351 }
353 Options.EnableMachineOutliner = Enable;
354 }
359 Options.EnableDefaultMachineVerifier = Enable;
360 }
361
362 void setCFIFixup(bool Enable) { Options.EnableCFIFixup = Enable; }
363
364 bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
365
366 /// Return true if unique basic block section names must be generated.
368 return Options.UniqueBasicBlockSectionNames;
369 }
370
372 return Options.SeparateNamedSections;
373 }
374
375 /// Return true if data objects should be emitted into their own section,
376 /// corresponds to -fdata-sections.
377 bool getDataSections() const {
378 return Options.DataSections;
379 }
380
381 /// Return true if functions should be emitted into their own section,
382 /// corresponding to -ffunction-sections.
383 bool getFunctionSections() const {
384 return Options.FunctionSections;
385 }
386
388 return Options.EnableStaticDataPartitioning;
389 }
390
391 /// Return true if visibility attribute should not be emitted in XCOFF,
392 /// corresponding to -mignore-xcoff-visibility.
394 return Options.IgnoreXCOFFVisibility;
395 }
396
397 /// Return true if XCOFF traceback table should be emitted,
398 /// corresponding to -xcoff-traceback-table.
399 bool getXCOFFTracebackTable() const { return Options.XCOFFTracebackTable; }
400
401 /// If basic blocks should be emitted into their own section,
402 /// corresponding to -fbasic-block-sections.
404 return Options.BBSections;
405 }
406
407 /// Get the list of functions and basic block ids that need unique sections.
409 return Options.BBSectionsFuncListBuf.get();
410 }
411
412 /// Returns true if a cast between SrcAS and DestAS is a noop.
413 virtual bool isNoopAddrSpaceCast(const DataLayout &DL, unsigned SrcAS,
414 unsigned DestAS) const {
415 return false;
416 }
417
418 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
419 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
420
421 /// If the specified generic pointer could be assumed as a pointer to a
422 /// specific address space, return that address space.
423 ///
424 /// Under offloading programming, the offloading target may be passed with
425 /// values only prepared on the host side and could assume certain
426 /// properties.
427 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
428
429 /// If the specified predicate checks whether a generic pointer falls within
430 /// a specified address space, return that generic pointer and the address
431 /// space being queried.
432 ///
433 /// Such predicates could be specified in @llvm.assume intrinsics for the
434 /// optimizer to assume that the given generic pointer always falls within
435 /// the address space based on that predicate.
436 virtual std::pair<const Value *, unsigned>
438 return std::make_pair(nullptr, -1);
439 }
440
441 /// Get a \c TargetIRAnalysis appropriate for the target.
442 ///
443 /// This is used to construct the new pass manager's target IR analysis pass,
444 /// set up appropriately for this target machine. Even the old pass manager
445 /// uses this to answer queries about the IR.
446 TargetIRAnalysis getTargetIRAnalysis() const;
447
448 /// Return a TargetTransformInfo for a given function.
449 ///
450 /// The returned TargetTransformInfo is specialized to the subtarget
451 /// corresponding to \p F.
452 virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const;
453
454 /// Allow the target to modify the pass pipeline.
455 // TODO: Populate all pass names by using <Target>PassRegistry.def.
457
458 /// Allow the target to register early alias analyses (AA before BasicAA) with
459 /// the AAManager for use with the new pass manager. Only affects the
460 /// "default" AAManager.
462
463 /// Allow the target to register alias analyses with the AAManager for use
464 /// with the new pass manager. Only affects the "default" AAManager.
466
467 /// Add passes to the specified pass manager to get the specified file
468 /// emitted. Typically this will involve several steps of code generation.
469 /// This method should return true if emission of this file type is not
470 /// supported, or false on success.
471 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
472 /// will be used to set the MachineModuloInfo for this PM.
473 virtual bool
476 bool /*DisableVerify*/ = true,
477 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
478 return true;
479 }
480
481 /// Add passes to the specified pass manager to get machine code emitted with
482 /// the MCJIT. This method returns true if machine code is not supported. It
483 /// fills the MCContext Ctx pointer which can be used to build custom
484 /// MCStreamer.
485 ///
488 bool /*DisableVerify*/ = true) {
489 return true;
490 }
491
492 /// True if subtarget inserts the final scheduling pass on its own.
493 ///
494 /// Branch relaxation, which must happen after block placement, can
495 /// on some targets (e.g. SystemZ) expose additional post-RA
496 /// scheduling opportunities.
497 virtual bool targetSchedulesPostRAScheduling() const { return false; };
498
499 void getNameWithPrefix(SmallVectorImpl<char> &Name, const GlobalValue *GV,
500 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
501 MCSymbol *getSymbol(const GlobalValue *GV) const;
502
503 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
504 /// (e.g. stack) the target returns the corresponding address space.
505 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
506 return 0;
507 }
508
509 /// Entry point for module splitting. Targets can implement custom module
510 /// splitting logic, mainly used by LTO for --lto-partitions.
511 ///
512 /// On success, this guarantees that between 1 and \p NumParts modules were
513 /// created and passed to \p ModuleCallBack.
514 ///
515 /// \returns `true` if the module was split, `false` otherwise. When `false`
516 /// is returned, it is assumed that \p ModuleCallback has never been called
517 /// and \p M has not been modified.
518 virtual bool splitModule(
519 Module &M, unsigned NumParts,
520 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
521 return false;
522 }
523
524 /// Create a pass configuration object to be used by addPassToEmitX methods
525 /// for generating a pipeline of CodeGen passes.
527 return nullptr;
528 }
529
530 virtual Error
533 CodeGenFileType FileType, const CGPassBuilderOption &Opt,
535 return make_error<StringError>("buildCodeGenPipeline is not overridden",
537 }
538
539 /// Returns true if frontends should default to using the NewPM for this
540 /// specific target.
541 virtual bool shouldDefaultToNewPM() const { return false; }
542
543 /// Returns true if the target is expected to pass all machine verifier
544 /// checks. This is a stopgap measure to fix targets one by one. We will
545 /// remove this at some point and always enable the verifier when
546 /// EXPENSIVE_CHECKS is enabled.
547 virtual bool isMachineVerifierClean() const { return true; }
548
549 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
550 /// machine code from the MI representation.
552 raw_pwrite_stream *DwoOut,
553 CodeGenFileType FileType, MCContext &Context) {
554 return false;
555 }
556
559 CodeGenFileType FileType, MCContext &Ctx);
560
561 /// True if the target uses physical regs (as nearly all targets do). False
562 /// for stack machines such as WebAssembly and other virtual-register
563 /// machines. If true, all vregs must be allocated before PEI. If false, then
564 /// callee-save register spilling and scavenging are not needed or used. If
565 /// false, implicitly defined registers will still be assumed to be physical
566 /// registers, except that variadic defs will be allocated vregs.
567 virtual bool usesPhysRegsForValues() const { return true; }
568
569 /// True if the target wants to use interprocedural register allocation by
570 /// default. The -enable-ipra flag can be used to override this.
571 virtual bool useIPRA() const { return false; }
572
573 /// The default variant to use in unqualified `asm` instructions.
574 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
575 virtual int unqualifiedInlineAsmVariant() const { return 0; }
576
577 // MachineRegisterInfo callback function
579
580 /// Remove all Linker Optimization Hints (LOH) associated with instructions in
581 /// \p MIs and \return the number of hints removed. This is useful in
582 /// transformations that cause these hints to be illegal, like in the machine
583 /// outliner.
585 const SmallPtrSetImpl<MachineInstr *> &MIs) const {
586 return 0;
587 }
588
589 /// Returns whether the backend can lower the llvm.cond.loop intrinsic. If
590 /// this function returns false, the intrinsic will be supported generically
591 /// but without loop detection support.
592 virtual bool canLowerCondLoop() const { return false; }
593};
594
595} // end namespace llvm
596
597#endif // LLVM_TARGET_TARGETMACHINE_H
unsigned NumParts
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
uint64_t 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:211
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:68
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:307
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:129
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.
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,...
void setSupportsExceptionModel(ExceptionHandling Model, bool Value=true)
Override whether this target can lower exceptions using Model.
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)
CodeModel::Model CMModel
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
unsigned SupportedExceptionModels
Bit N is set if the target can lower exceptions using model N.
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.
bool enableTiedFastRegAlloc() const
Whether the fast register allocator lowers tied operands itself instead of running TwoAddressInstruct...
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.
virtual bool isNoopAddrSpaceCast(const DataLayout &DL, unsigned SrcAS, unsigned DestAS) const
Returns true if a cast between SrcAS and DestAS is a noop.
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
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
unsigned SupportsDebugEntryValues
Set if the target supports the debug entry values by default.
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
bool supportsExceptionModel(ExceptionHandling Model) const
Return true if this target can lower exceptions using Model.
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)
void setEnableTiedFastRegAlloc(bool Value)
virtual void registerMachineRegisterInfoCallback(MachineFunction &MF) const
bool supportsDefaultOutlining() const
unsigned RequireStructuredCFG
void setO0WantsFastISel(bool Enable)
virtual bool canLowerCondLoop() const
Returns whether the backend can lower the llvm.cond.loop intrinsic.
unsigned EnableTiedFastRegAlloc
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
unsigned SupportsDefaultOutlining
Set if the target supports default outlining behaviour.
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
virtual CSEConfigBase * createCSEConfig() const
GlobalISel CSEConfig for the new PM. Return NULL for the standard one.
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:309
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:280
@ Default
-O2, -Os, -Oz
Definition CodeGen.h:283
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:56
BasicBlockSection
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:391
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.