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. A Default model resolves to the
262 /// triple's default; None means exceptions are disabled.
264 return Options.ExceptionModel == ExceptionHandling::Default
265 ? TargetTriple.getDefaultExceptionHandling()
266 : Options.ExceptionModel;
267 }
268
271
272 /// Returns the code generation relocation model. The choices are static, PIC,
273 /// and dynamic-no-pic, and target default.
274 Reloc::Model getRelocationModel() const;
275
276 /// Returns the code model. The choices are small, kernel, medium, large, and
277 /// target default.
279
280 /// Returns the maximum code size possible under the code model.
281 uint64_t getMaxCodeSize() const;
282
283 /// Set the code model.
285
287 bool isLargeGlobalValue(const GlobalValue *GV) const;
288 bool isLargeDataSize(uint64_t Size) const;
289
290 bool isPositionIndependent() const;
291
292 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
293
294 /// Returns true if this target uses emulated TLS.
295 bool useEmulatedTLS() const;
296
297 /// Returns true if this target uses TLS Descriptors.
298 bool useTLSDESC() const;
299
300 /// Returns the TLS model which should be used for the given global variable.
301 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
302
303 /// Returns the optimization level: None, Less, Default, or Aggressive.
305
306 /// Overrides the optimization level.
307 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
308
309 void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
312 void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
314 Options.GlobalISelAbort = Mode;
315 }
317 Options.EnableMachineOutliner = Enable;
318 }
320 Options.SupportsDefaultOutlining = Enable;
321 }
323 Options.SupportsDebugEntryValues = Enable;
324 }
326 Options.EnableDefaultMachineVerifier = Enable;
327 }
328
329 void setCFIFixup(bool Enable) { Options.EnableCFIFixup = Enable; }
330
331 bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
332
333 /// Return true if unique basic block section names must be generated.
335 return Options.UniqueBasicBlockSectionNames;
336 }
337
339 return Options.SeparateNamedSections;
340 }
341
342 /// Return true if data objects should be emitted into their own section,
343 /// corresponds to -fdata-sections.
344 bool getDataSections() const {
345 return Options.DataSections;
346 }
347
348 /// Return true if functions should be emitted into their own section,
349 /// corresponding to -ffunction-sections.
350 bool getFunctionSections() const {
351 return Options.FunctionSections;
352 }
353
355 return Options.EnableStaticDataPartitioning;
356 }
357
358 /// Return true if visibility attribute should not be emitted in XCOFF,
359 /// corresponding to -mignore-xcoff-visibility.
361 return Options.IgnoreXCOFFVisibility;
362 }
363
364 /// Return true if XCOFF traceback table should be emitted,
365 /// corresponding to -xcoff-traceback-table.
366 bool getXCOFFTracebackTable() const { return Options.XCOFFTracebackTable; }
367
368 /// If basic blocks should be emitted into their own section,
369 /// corresponding to -fbasic-block-sections.
371 return Options.BBSections;
372 }
373
374 /// Get the list of functions and basic block ids that need unique sections.
376 return Options.BBSectionsFuncListBuf.get();
377 }
378
379 /// Returns true if a cast between SrcAS and DestAS is a noop.
380 virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
381 return false;
382 }
383
384 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
385 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
386
387 /// If the specified generic pointer could be assumed as a pointer to a
388 /// specific address space, return that address space.
389 ///
390 /// Under offloading programming, the offloading target may be passed with
391 /// values only prepared on the host side and could assume certain
392 /// properties.
393 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
394
395 /// If the specified predicate checks whether a generic pointer falls within
396 /// a specified address space, return that generic pointer and the address
397 /// space being queried.
398 ///
399 /// Such predicates could be specified in @llvm.assume intrinsics for the
400 /// optimizer to assume that the given generic pointer always falls within
401 /// the address space based on that predicate.
402 virtual std::pair<const Value *, unsigned>
404 return std::make_pair(nullptr, -1);
405 }
406
407 /// Get a \c TargetIRAnalysis appropriate for the target.
408 ///
409 /// This is used to construct the new pass manager's target IR analysis pass,
410 /// set up appropriately for this target machine. Even the old pass manager
411 /// uses this to answer queries about the IR.
412 TargetIRAnalysis getTargetIRAnalysis() const;
413
414 /// Return a TargetTransformInfo for a given function.
415 ///
416 /// The returned TargetTransformInfo is specialized to the subtarget
417 /// corresponding to \p F.
418 virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const;
419
420 /// Allow the target to modify the pass pipeline.
421 // TODO: Populate all pass names by using <Target>PassRegistry.def.
423
424 /// Allow the target to register early alias analyses (AA before BasicAA) with
425 /// the AAManager for use with the new pass manager. Only affects the
426 /// "default" AAManager.
428
429 /// Allow the target to register alias analyses with the AAManager for use
430 /// with the new pass manager. Only affects the "default" AAManager.
432
433 /// Add passes to the specified pass manager to get the specified file
434 /// emitted. Typically this will involve several steps of code generation.
435 /// This method should return true if emission of this file type is not
436 /// supported, or false on success.
437 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
438 /// will be used to set the MachineModuloInfo for this PM.
439 virtual bool
442 bool /*DisableVerify*/ = true,
443 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
444 return true;
445 }
446
447 /// Add passes to the specified pass manager to get machine code emitted with
448 /// the MCJIT. This method returns true if machine code is not supported. It
449 /// fills the MCContext Ctx pointer which can be used to build custom
450 /// MCStreamer.
451 ///
454 bool /*DisableVerify*/ = true) {
455 return true;
456 }
457
458 /// True if subtarget inserts the final scheduling pass on its own.
459 ///
460 /// Branch relaxation, which must happen after block placement, can
461 /// on some targets (e.g. SystemZ) expose additional post-RA
462 /// scheduling opportunities.
463 virtual bool targetSchedulesPostRAScheduling() const { return false; };
464
465 void getNameWithPrefix(SmallVectorImpl<char> &Name, const GlobalValue *GV,
466 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
467 MCSymbol *getSymbol(const GlobalValue *GV) const;
468
469 /// The integer bit size to use for SjLj based exception handling.
470 static constexpr unsigned DefaultSjLjDataSize = 32;
471 virtual unsigned getSjLjDataSize() const { return DefaultSjLjDataSize; }
472
473 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
474 /// (e.g. stack) the target returns the corresponding address space.
475 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
476 return 0;
477 }
478
479 /// Entry point for module splitting. Targets can implement custom module
480 /// splitting logic, mainly used by LTO for --lto-partitions.
481 ///
482 /// On success, this guarantees that between 1 and \p NumParts modules were
483 /// created and passed to \p ModuleCallBack.
484 ///
485 /// \returns `true` if the module was split, `false` otherwise. When `false`
486 /// is returned, it is assumed that \p ModuleCallback has never been called
487 /// and \p M has not been modified.
488 virtual bool splitModule(
489 Module &M, unsigned NumParts,
490 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
491 return false;
492 }
493
494 /// Create a pass configuration object to be used by addPassToEmitX methods
495 /// for generating a pipeline of CodeGen passes.
497 return nullptr;
498 }
499
500 virtual Error
503 CodeGenFileType FileType, const CGPassBuilderOption &Opt,
505 return make_error<StringError>("buildCodeGenPipeline is not overridden",
507 }
508
509 /// Returns true if frontends should default to using the NewPM for this
510 /// specific target.
511 virtual bool shouldDefaultToNewPM() const { return false; }
512
513 /// Returns true if the target is expected to pass all machine verifier
514 /// checks. This is a stopgap measure to fix targets one by one. We will
515 /// remove this at some point and always enable the verifier when
516 /// EXPENSIVE_CHECKS is enabled.
517 virtual bool isMachineVerifierClean() const { return true; }
518
519 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
520 /// machine code from the MI representation.
522 raw_pwrite_stream *DwoOut,
523 CodeGenFileType FileType, MCContext &Context) {
524 return false;
525 }
526
529 CodeGenFileType FileType, MCContext &Ctx);
530
531 /// True if the target uses physical regs (as nearly all targets do). False
532 /// for stack machines such as WebAssembly and other virtual-register
533 /// machines. If true, all vregs must be allocated before PEI. If false, then
534 /// callee-save register spilling and scavenging are not needed or used. If
535 /// false, implicitly defined registers will still be assumed to be physical
536 /// registers, except that variadic defs will be allocated vregs.
537 virtual bool usesPhysRegsForValues() const { return true; }
538
539 /// True if the target wants to use interprocedural register allocation by
540 /// default. The -enable-ipra flag can be used to override this.
541 virtual bool useIPRA() const { return false; }
542
543 /// The default variant to use in unqualified `asm` instructions.
544 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
545 virtual int unqualifiedInlineAsmVariant() const { return 0; }
546
547 // MachineRegisterInfo callback function
549
550 /// Remove all Linker Optimization Hints (LOH) associated with instructions in
551 /// \p MIs and \return the number of hints removed. This is useful in
552 /// transformations that cause these hints to be illegal, like in the machine
553 /// outliner.
555 const SmallPtrSetImpl<MachineInstr *> &MIs) const {
556 return 0;
557 }
558
559 /// Returns whether the backend can lower the llvm.cond.loop intrinsic. If
560 /// this function returns false, the intrinsic will be supported generically
561 /// but without loop detection support.
562 virtual bool canLowerCondLoop() const { return false; }
563};
564
565} // end namespace llvm
566
567#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 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: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.