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;
124
125 /// Set if the target supports default outlining behaviour.
127
128 /// Set if the target supports the debug entry values by default.
130
131 // PGO related tunables.
132 std::optional<PGOOptions> PGOOption;
133
134public:
136
137 TargetMachine(const TargetMachine &) = delete;
138 void operator=(const TargetMachine &) = delete;
139 virtual ~TargetMachine();
140
141 const Target &getTarget() const { return TheTarget; }
142
143 const Triple &getTargetTriple() const { return TargetTriple; }
144 StringRef getTargetCPU() const { return TargetCPU; }
146 void setTargetFeatureString(StringRef FS) { TargetFS = std::string(FS); }
147
148 /// Returns the effective target ABI name: the "target-abi" module flag if
149 /// present, otherwise the -target-abi option. This is a pure query; call
150 /// verifyOptionsConsistency once per module to diagnose a conflict.
151 StringRef getTargetABIName(const Module &M) const;
152
153 /// Diagnoses command-line codegen options that conflict with the
154 /// corresponding module flags (e.g. -target-abi vs the "target-abi" module
155 /// flag). Intended to be called once per module.
156 void verifyOptionsConsistency(const Module &M) const;
157
158 /// Virtual method implemented by subclasses that returns a reference to that
159 /// target's TargetSubtargetInfo-derived member variable.
160 virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
161 return nullptr;
162 }
164 return nullptr;
165 }
166
167 /// Create the target's instance of MachineFunctionInfo
168 virtual MachineFunctionInfo *
170 const TargetSubtargetInfo *STI) const {
171 return nullptr;
172 }
173
174 /// Create an instance of ScheduleDAGInstrs to be run within the standard
175 /// MachineScheduler pass for this function and target at the current
176 /// optimization level.
177 ///
178 /// This can also be used to plug a new MachineSchedStrategy into an instance
179 /// of the standard ScheduleDAGMI:
180 /// return new ScheduleDAGMI(C, std::make_unique<MyStrategy>(C),
181 /// /*RemoveKillFlags=*/false)
182 ///
183 /// Return NULL to select the default (generic) machine scheduler.
184 virtual ScheduleDAGInstrs *
186 return nullptr;
187 }
188
189 /// Similar to createMachineScheduler but used when postRA machine scheduling
190 /// is enabled.
191 virtual ScheduleDAGInstrs *
193 return nullptr;
194 }
195
196 /// Allocate and return a default initialized instance of the YAML
197 /// representation for the MachineFunctionInfo.
199 return nullptr;
200 }
201
202 /// Allocate and initialize an instance of the YAML representation of the
203 /// MachineFunctionInfo.
206 return nullptr;
207 }
208
209 /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
213 SMRange &SourceRange) const {
214 return false;
215 }
216
217 /// This method returns a pointer to the specified type of
218 /// TargetSubtargetInfo. In debug builds, it verifies that the object being
219 /// returned is of the correct type.
220 template <typename STC> const STC &getSubtarget(const Function &F) const {
221 return *static_cast<const STC*>(getSubtargetImpl(F));
222 }
223
224 /// Create a DataLayout.
225 const DataLayout createDataLayout() const { return DL; }
226
227 /// Test if a DataLayout if compatible with the CodeGen for this target.
228 ///
229 /// The LLVM Module owns a DataLayout that is used for the target independent
230 /// optimizations and code generation. This hook provides a target specific
231 /// check on the validity of this DataLayout.
232 bool isCompatibleDataLayout(const DataLayout &Candidate) const {
233 return DL == Candidate;
234 }
235
236 /// Get the pointer size for this target.
237 ///
238 /// This is the only time the DataLayout in the TargetMachine is used.
239 unsigned getPointerSize(unsigned AS) const {
240 return DL.getPointerSize(AS);
241 }
242
243 unsigned getPointerSizeInBits(unsigned AS) const {
244 return DL.getPointerSizeInBits(AS);
245 }
246
247 unsigned getProgramPointerSize() const {
248 return DL.getPointerSize(DL.getProgramAddressSpace());
249 }
250
251 unsigned getAllocaPointerSize() const {
252 return DL.getPointerSize(DL.getAllocaAddrSpace());
253 }
254
255 /// Return target specific asm information.
256 const MCAsmInfo &getMCAsmInfo() const { return *AsmInfo; }
257
258 const MCRegisterInfo &getMCRegisterInfo() const { return *MRI; }
259 const MCInstrInfo *getMCInstrInfo() const { return MII.get(); }
260 const MCSubtargetInfo &getMCSubtargetInfo() const { return *STI; }
261
262 /// Get the MCSubtargetInfo for the given target CPU and target features.
263 /// For use in contexts where a feature-specific MC subtarget is needed,
264 /// but no MachineFunctionis available, such as for module-level inline
265 /// assembly.
266 const MCSubtargetInfo &getMCSubtargetInfo(StringRef CPU, StringRef FS);
267
268 /// Return the ExceptionHandling to use. A Default model resolves to the
269 /// triple's default; None means exceptions are disabled.
271 return Options.ExceptionModel == ExceptionHandling::Default
272 ? TargetTriple.getDefaultExceptionHandling()
273 : Options.ExceptionModel;
274 }
275
278
283
284 /// NOTE: There are targets that still do not support the debug entry values
285 /// production.
286 bool shouldEmitDebugEntryValues() const;
287
288 /// Whether the fast register allocator lowers tied operands itself instead
289 /// of running TwoAddressInstructionPass. AMDGPU anchors passes on
290 /// TwoAddressInstructionPassID and cannot enable it.
293
294 /// Returns the code generation relocation model. The choices are static, PIC,
295 /// and dynamic-no-pic, and target default.
296 Reloc::Model getRelocationModel() const;
297
298 /// Returns the code model. The choices are small, kernel, medium, large, and
299 /// target default.
301
302 /// Returns the maximum code size possible under the code model.
303 uint64_t getMaxCodeSize() const;
304
305 /// Set the code model.
307
309 bool isLargeGlobalValue(const GlobalValue *GV) const;
310 bool isLargeDataSize(uint64_t Size) const;
311
312 bool isPositionIndependent() const;
313
314 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
315
316 /// Returns true if this target uses emulated TLS.
317 bool useEmulatedTLS() const;
318
319 /// Returns true if this target uses TLS Descriptors.
320 bool useTLSDESC() const;
321
322 /// Returns the TLS model which should be used for the given global variable.
323 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
324
325 /// Returns the optimization level: None, Less, Default, or Aggressive.
327
328 /// Overrides the optimization level.
329 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
330
331 void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
334 void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
336 Options.GlobalISelAbort = Mode;
337 }
339 Options.EnableMachineOutliner = Enable;
340 }
345 Options.EnableDefaultMachineVerifier = Enable;
346 }
347
348 void setCFIFixup(bool Enable) { Options.EnableCFIFixup = Enable; }
349
350 bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
351
352 /// Return true if unique basic block section names must be generated.
354 return Options.UniqueBasicBlockSectionNames;
355 }
356
358 return Options.SeparateNamedSections;
359 }
360
361 /// Return true if data objects should be emitted into their own section,
362 /// corresponds to -fdata-sections.
363 bool getDataSections() const {
364 return Options.DataSections;
365 }
366
367 /// Return true if functions should be emitted into their own section,
368 /// corresponding to -ffunction-sections.
369 bool getFunctionSections() const {
370 return Options.FunctionSections;
371 }
372
374 return Options.EnableStaticDataPartitioning;
375 }
376
377 /// Return true if visibility attribute should not be emitted in XCOFF,
378 /// corresponding to -mignore-xcoff-visibility.
380 return Options.IgnoreXCOFFVisibility;
381 }
382
383 /// Return true if XCOFF traceback table should be emitted,
384 /// corresponding to -xcoff-traceback-table.
385 bool getXCOFFTracebackTable() const { return Options.XCOFFTracebackTable; }
386
387 /// If basic blocks should be emitted into their own section,
388 /// corresponding to -fbasic-block-sections.
390 return Options.BBSections;
391 }
392
393 /// Get the list of functions and basic block ids that need unique sections.
395 return Options.BBSectionsFuncListBuf.get();
396 }
397
398 /// Returns true if a cast between SrcAS and DestAS is a noop.
399 virtual bool isNoopAddrSpaceCast(const DataLayout &DL, unsigned SrcAS,
400 unsigned DestAS) const {
401 return false;
402 }
403
404 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
405 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
406
407 /// If the specified generic pointer could be assumed as a pointer to a
408 /// specific address space, return that address space.
409 ///
410 /// Under offloading programming, the offloading target may be passed with
411 /// values only prepared on the host side and could assume certain
412 /// properties.
413 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
414
415 /// If the specified predicate checks whether a generic pointer falls within
416 /// a specified address space, return that generic pointer and the address
417 /// space being queried.
418 ///
419 /// Such predicates could be specified in @llvm.assume intrinsics for the
420 /// optimizer to assume that the given generic pointer always falls within
421 /// the address space based on that predicate.
422 virtual std::pair<const Value *, unsigned>
424 return std::make_pair(nullptr, -1);
425 }
426
427 /// Get a \c TargetIRAnalysis appropriate for the target.
428 ///
429 /// This is used to construct the new pass manager's target IR analysis pass,
430 /// set up appropriately for this target machine. Even the old pass manager
431 /// uses this to answer queries about the IR.
432 TargetIRAnalysis getTargetIRAnalysis() const;
433
434 /// Return a TargetTransformInfo for a given function.
435 ///
436 /// The returned TargetTransformInfo is specialized to the subtarget
437 /// corresponding to \p F.
438 virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const;
439
440 /// Allow the target to modify the pass pipeline.
441 // TODO: Populate all pass names by using <Target>PassRegistry.def.
443
444 /// Allow the target to register early alias analyses (AA before BasicAA) with
445 /// the AAManager for use with the new pass manager. Only affects the
446 /// "default" AAManager.
448
449 /// Allow the target to register alias analyses with the AAManager for use
450 /// with the new pass manager. Only affects the "default" AAManager.
452
453 /// Add passes to the specified pass manager to get the specified file
454 /// emitted. Typically this will involve several steps of code generation.
455 /// This method should return true if emission of this file type is not
456 /// supported, or false on success.
457 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
458 /// will be used to set the MachineModuloInfo for this PM.
459 virtual bool
462 bool /*DisableVerify*/ = true,
463 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
464 return true;
465 }
466
467 /// Add passes to the specified pass manager to get machine code emitted with
468 /// the MCJIT. This method returns true if machine code is not supported. It
469 /// fills the MCContext Ctx pointer which can be used to build custom
470 /// MCStreamer.
471 ///
474 bool /*DisableVerify*/ = true) {
475 return true;
476 }
477
478 /// True if subtarget inserts the final scheduling pass on its own.
479 ///
480 /// Branch relaxation, which must happen after block placement, can
481 /// on some targets (e.g. SystemZ) expose additional post-RA
482 /// scheduling opportunities.
483 virtual bool targetSchedulesPostRAScheduling() const { return false; };
484
485 void getNameWithPrefix(SmallVectorImpl<char> &Name, const GlobalValue *GV,
486 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
487 MCSymbol *getSymbol(const GlobalValue *GV) const;
488
489 /// The integer bit size to use for SjLj based exception handling.
490 static constexpr unsigned DefaultSjLjDataSize = 32;
491 virtual unsigned getSjLjDataSize() const { return DefaultSjLjDataSize; }
492
493 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
494 /// (e.g. stack) the target returns the corresponding address space.
495 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
496 return 0;
497 }
498
499 /// Entry point for module splitting. Targets can implement custom module
500 /// splitting logic, mainly used by LTO for --lto-partitions.
501 ///
502 /// On success, this guarantees that between 1 and \p NumParts modules were
503 /// created and passed to \p ModuleCallBack.
504 ///
505 /// \returns `true` if the module was split, `false` otherwise. When `false`
506 /// is returned, it is assumed that \p ModuleCallback has never been called
507 /// and \p M has not been modified.
508 virtual bool splitModule(
509 Module &M, unsigned NumParts,
510 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
511 return false;
512 }
513
514 /// Create a pass configuration object to be used by addPassToEmitX methods
515 /// for generating a pipeline of CodeGen passes.
517 return nullptr;
518 }
519
520 virtual Error
523 CodeGenFileType FileType, const CGPassBuilderOption &Opt,
525 return make_error<StringError>("buildCodeGenPipeline is not overridden",
527 }
528
529 /// Returns true if frontends should default to using the NewPM for this
530 /// specific target.
531 virtual bool shouldDefaultToNewPM() const { return false; }
532
533 /// Returns true if the target is expected to pass all machine verifier
534 /// checks. This is a stopgap measure to fix targets one by one. We will
535 /// remove this at some point and always enable the verifier when
536 /// EXPENSIVE_CHECKS is enabled.
537 virtual bool isMachineVerifierClean() const { return true; }
538
539 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
540 /// machine code from the MI representation.
542 raw_pwrite_stream *DwoOut,
543 CodeGenFileType FileType, MCContext &Context) {
544 return false;
545 }
546
549 CodeGenFileType FileType, MCContext &Ctx);
550
551 /// True if the target uses physical regs (as nearly all targets do). False
552 /// for stack machines such as WebAssembly and other virtual-register
553 /// machines. If true, all vregs must be allocated before PEI. If false, then
554 /// callee-save register spilling and scavenging are not needed or used. If
555 /// false, implicitly defined registers will still be assumed to be physical
556 /// registers, except that variadic defs will be allocated vregs.
557 virtual bool usesPhysRegsForValues() const { return true; }
558
559 /// True if the target wants to use interprocedural register allocation by
560 /// default. The -enable-ipra flag can be used to override this.
561 virtual bool useIPRA() const { return false; }
562
563 /// The default variant to use in unqualified `asm` instructions.
564 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
565 virtual int unqualifiedInlineAsmVariant() const { return 0; }
566
567 // MachineRegisterInfo callback function
569
570 /// Remove all Linker Optimization Hints (LOH) associated with instructions in
571 /// \p MIs and \return the number of hints removed. This is useful in
572 /// transformations that cause these hints to be illegal, like in the machine
573 /// outliner.
575 const SmallPtrSetImpl<MachineInstr *> &MIs) const {
576 return 0;
577 }
578
579 /// Returns whether the backend can lower the llvm.cond.loop intrinsic. If
580 /// this function returns false, the intrinsic will be supported generically
581 /// but without loop detection support.
582 virtual bool canLowerCondLoop() const { return false; }
583};
584
585} // end namespace llvm
586
587#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: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:305
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.
ExceptionHandling getExceptionModel() const
Return the ExceptionHandling to use.
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)
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
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...
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.
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
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
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
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
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:256
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:227
@ Default
-O2, -Os, -Oz
Definition CodeGen.h:230
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
@ Default
Not specified; resolve to the target's default model.
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.