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 /// Virtual method implemented by subclasses that returns a reference to that
142 /// target's TargetSubtargetInfo-derived member variable.
143 virtual const TargetSubtargetInfo *getSubtargetImpl(const Function &) const {
144 return nullptr;
145 }
147 return nullptr;
148 }
149
150 /// Create the target's instance of MachineFunctionInfo
151 virtual MachineFunctionInfo *
153 const TargetSubtargetInfo *STI) const {
154 return nullptr;
155 }
156
157 /// Create an instance of ScheduleDAGInstrs to be run within the standard
158 /// MachineScheduler pass for this function and target at the current
159 /// optimization level.
160 ///
161 /// This can also be used to plug a new MachineSchedStrategy into an instance
162 /// of the standard ScheduleDAGMI:
163 /// return new ScheduleDAGMI(C, std::make_unique<MyStrategy>(C),
164 /// /*RemoveKillFlags=*/false)
165 ///
166 /// Return NULL to select the default (generic) machine scheduler.
167 virtual ScheduleDAGInstrs *
169 return nullptr;
170 }
171
172 /// Similar to createMachineScheduler but used when postRA machine scheduling
173 /// is enabled.
174 virtual ScheduleDAGInstrs *
176 return nullptr;
177 }
178
179 /// Allocate and return a default initialized instance of the YAML
180 /// representation for the MachineFunctionInfo.
182 return nullptr;
183 }
184
185 /// Allocate and initialize an instance of the YAML representation of the
186 /// MachineFunctionInfo.
189 return nullptr;
190 }
191
192 /// Parse out the target's MachineFunctionInfo from the YAML reprsentation.
196 SMRange &SourceRange) const {
197 return false;
198 }
199
200 /// This method returns a pointer to the specified type of
201 /// TargetSubtargetInfo. In debug builds, it verifies that the object being
202 /// returned is of the correct type.
203 template <typename STC> const STC &getSubtarget(const Function &F) const {
204 return *static_cast<const STC*>(getSubtargetImpl(F));
205 }
206
207 /// Create a DataLayout.
208 const DataLayout createDataLayout() const { return DL; }
209
210 /// Test if a DataLayout if compatible with the CodeGen for this target.
211 ///
212 /// The LLVM Module owns a DataLayout that is used for the target independent
213 /// optimizations and code generation. This hook provides a target specific
214 /// check on the validity of this DataLayout.
215 bool isCompatibleDataLayout(const DataLayout &Candidate) const {
216 return DL == Candidate;
217 }
218
219 /// Get the pointer size for this target.
220 ///
221 /// This is the only time the DataLayout in the TargetMachine is used.
222 unsigned getPointerSize(unsigned AS) const {
223 return DL.getPointerSize(AS);
224 }
225
226 unsigned getPointerSizeInBits(unsigned AS) const {
227 return DL.getPointerSizeInBits(AS);
228 }
229
230 unsigned getProgramPointerSize() const {
231 return DL.getPointerSize(DL.getProgramAddressSpace());
232 }
233
234 unsigned getAllocaPointerSize() const {
235 return DL.getPointerSize(DL.getAllocaAddrSpace());
236 }
237
238 /// Return target specific asm information.
239 const MCAsmInfo &getMCAsmInfo() const { return *AsmInfo; }
240
241 const MCRegisterInfo &getMCRegisterInfo() const { return *MRI; }
242 const MCInstrInfo *getMCInstrInfo() const { return MII.get(); }
243 const MCSubtargetInfo &getMCSubtargetInfo() const { return *STI; }
244
245 /// Get the MCSubtargetInfo for the given target CPU and target features.
246 /// For use in contexts where a feature-specific MC subtarget is needed,
247 /// but no MachineFunctionis available, such as for module-level inline
248 /// assembly.
249 const MCSubtargetInfo &getMCSubtargetInfo(StringRef CPU, StringRef FS);
250
251 /// Return the ExceptionHandling to use, considering TargetOptions and the
252 /// Triple's default.
254 // FIXME: This interface fails to distinguish default from not supported.
255 return Options.ExceptionModel == ExceptionHandling::None
256 ? TargetTriple.getDefaultExceptionHandling()
257 : Options.ExceptionModel;
258 }
259
262
263 /// Returns the code generation relocation model. The choices are static, PIC,
264 /// and dynamic-no-pic, and target default.
265 Reloc::Model getRelocationModel() const;
266
267 /// Returns the code model. The choices are small, kernel, medium, large, and
268 /// target default.
270
271 /// Returns the maximum code size possible under the code model.
272 uint64_t getMaxCodeSize() const;
273
274 /// Set the code model.
276
278 bool isLargeGlobalValue(const GlobalValue *GV) const;
279
280 bool isPositionIndependent() const;
281
282 bool shouldAssumeDSOLocal(const GlobalValue *GV) const;
283
284 /// Returns true if this target uses emulated TLS.
285 bool useEmulatedTLS() const;
286
287 /// Returns true if this target uses TLS Descriptors.
288 bool useTLSDESC() const;
289
290 /// Returns the TLS model which should be used for the given global variable.
291 TLSModel::Model getTLSModel(const GlobalValue *GV) const;
292
293 /// Returns the optimization level: None, Less, Default, or Aggressive.
295
296 /// Overrides the optimization level.
297 void setOptLevel(CodeGenOptLevel Level) { OptLevel = Level; }
298
299 void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
302 void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
304 Options.GlobalISelAbort = Mode;
305 }
307 Options.EnableMachineOutliner = Enable;
308 }
310 Options.SupportsDefaultOutlining = Enable;
311 }
313 Options.SupportsDebugEntryValues = Enable;
314 }
316 Options.EnableDefaultMachineVerifier = Enable;
317 }
318
319 void setCFIFixup(bool Enable) { Options.EnableCFIFixup = Enable; }
320
322 return Options.EnableAIXExtendedAltivecABI;
323 }
324
325 bool getUniqueSectionNames() const { return Options.UniqueSectionNames; }
326
327 /// Return true if unique basic block section names must be generated.
329 return Options.UniqueBasicBlockSectionNames;
330 }
331
333 return Options.SeparateNamedSections;
334 }
335
336 /// Return true if data objects should be emitted into their own section,
337 /// corresponds to -fdata-sections.
338 bool getDataSections() const {
339 return Options.DataSections;
340 }
341
342 /// Return true if functions should be emitted into their own section,
343 /// corresponding to -ffunction-sections.
344 bool getFunctionSections() const {
345 return Options.FunctionSections;
346 }
347
349 return Options.EnableStaticDataPartitioning;
350 }
351
352 /// Return true if visibility attribute should not be emitted in XCOFF,
353 /// corresponding to -mignore-xcoff-visibility.
355 return Options.IgnoreXCOFFVisibility;
356 }
357
358 /// Return true if XCOFF traceback table should be emitted,
359 /// corresponding to -xcoff-traceback-table.
360 bool getXCOFFTracebackTable() const { return Options.XCOFFTracebackTable; }
361
362 /// If basic blocks should be emitted into their own section,
363 /// corresponding to -fbasic-block-sections.
365 return Options.BBSections;
366 }
367
368 /// Get the list of functions and basic block ids that need unique sections.
370 return Options.BBSectionsFuncListBuf.get();
371 }
372
373 /// Returns true if a cast between SrcAS and DestAS is a noop.
374 virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
375 return false;
376 }
377
378 void setPGOOption(std::optional<PGOOptions> PGOOpt) { PGOOption = PGOOpt; }
379 const std::optional<PGOOptions> &getPGOOption() const { return PGOOption; }
380
381 /// If the specified generic pointer could be assumed as a pointer to a
382 /// specific address space, return that address space.
383 ///
384 /// Under offloading programming, the offloading target may be passed with
385 /// values only prepared on the host side and could assume certain
386 /// properties.
387 virtual unsigned getAssumedAddrSpace(const Value *V) const { return -1; }
388
389 /// If the specified predicate checks whether a generic pointer falls within
390 /// a specified address space, return that generic pointer and the address
391 /// space being queried.
392 ///
393 /// Such predicates could be specified in @llvm.assume intrinsics for the
394 /// optimizer to assume that the given generic pointer always falls within
395 /// the address space based on that predicate.
396 virtual std::pair<const Value *, unsigned>
398 return std::make_pair(nullptr, -1);
399 }
400
401 /// Get a \c TargetIRAnalysis appropriate for the target.
402 ///
403 /// This is used to construct the new pass manager's target IR analysis pass,
404 /// set up appropriately for this target machine. Even the old pass manager
405 /// uses this to answer queries about the IR.
406 TargetIRAnalysis getTargetIRAnalysis() const;
407
408 /// Return a TargetTransformInfo for a given function.
409 ///
410 /// The returned TargetTransformInfo is specialized to the subtarget
411 /// corresponding to \p F.
412 virtual TargetTransformInfo getTargetTransformInfo(const Function &F) const;
413
414 /// Allow the target to modify the pass pipeline.
415 // TODO: Populate all pass names by using <Target>PassRegistry.def.
417
418 /// Allow the target to register early alias analyses (AA before BasicAA) with
419 /// the AAManager for use with the new pass manager. Only affects the
420 /// "default" AAManager.
422
423 /// Allow the target to register alias analyses with the AAManager for use
424 /// with the new pass manager. Only affects the "default" AAManager.
426
427 /// Add passes to the specified pass manager to get the specified file
428 /// emitted. Typically this will involve several steps of code generation.
429 /// This method should return true if emission of this file type is not
430 /// supported, or false on success.
431 /// \p MMIWP is an optional parameter that, if set to non-nullptr,
432 /// will be used to set the MachineModuloInfo for this PM.
433 virtual bool
436 bool /*DisableVerify*/ = true,
437 MachineModuleInfoWrapperPass *MMIWP = nullptr) {
438 return true;
439 }
440
441 /// Add passes to the specified pass manager to get machine code emitted with
442 /// the MCJIT. This method returns true if machine code is not supported. It
443 /// fills the MCContext Ctx pointer which can be used to build custom
444 /// MCStreamer.
445 ///
448 bool /*DisableVerify*/ = true) {
449 return true;
450 }
451
452 /// True if subtarget inserts the final scheduling pass on its own.
453 ///
454 /// Branch relaxation, which must happen after block placement, can
455 /// on some targets (e.g. SystemZ) expose additional post-RA
456 /// scheduling opportunities.
457 virtual bool targetSchedulesPostRAScheduling() const { return false; };
458
459 void getNameWithPrefix(SmallVectorImpl<char> &Name, const GlobalValue *GV,
460 Mangler &Mang, bool MayAlwaysUsePrivate = false) const;
461 MCSymbol *getSymbol(const GlobalValue *GV) const;
462
463 /// The integer bit size to use for SjLj based exception handling.
464 static constexpr unsigned DefaultSjLjDataSize = 32;
465 virtual unsigned getSjLjDataSize() const { return DefaultSjLjDataSize; }
466
467 static std::pair<int, int> parseBinutilsVersion(StringRef Version);
468
469 /// getAddressSpaceForPseudoSourceKind - Given the kind of memory
470 /// (e.g. stack) the target returns the corresponding address space.
471 virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const {
472 return 0;
473 }
474
475 /// Entry point for module splitting. Targets can implement custom module
476 /// splitting logic, mainly used by LTO for --lto-partitions.
477 ///
478 /// On success, this guarantees that between 1 and \p NumParts modules were
479 /// created and passed to \p ModuleCallBack.
480 ///
481 /// \returns `true` if the module was split, `false` otherwise. When `false`
482 /// is returned, it is assumed that \p ModuleCallback has never been called
483 /// and \p M has not been modified.
484 virtual bool splitModule(
485 Module &M, unsigned NumParts,
486 function_ref<void(std::unique_ptr<Module> MPart)> ModuleCallback) {
487 return false;
488 }
489
490 /// Create a pass configuration object to be used by addPassToEmitX methods
491 /// for generating a pipeline of CodeGen passes.
493 return nullptr;
494 }
495
496 virtual Error
499 CodeGenFileType FileType, const CGPassBuilderOption &Opt,
501 return make_error<StringError>("buildCodeGenPipeline is not overridden",
503 }
504
505 /// Returns true if the target is expected to pass all machine verifier
506 /// checks. This is a stopgap measure to fix targets one by one. We will
507 /// remove this at some point and always enable the verifier when
508 /// EXPENSIVE_CHECKS is enabled.
509 virtual bool isMachineVerifierClean() const { return true; }
510
511 /// Adds an AsmPrinter pass to the pipeline that prints assembly or
512 /// machine code from the MI representation.
514 raw_pwrite_stream *DwoOut,
515 CodeGenFileType FileType, MCContext &Context) {
516 return false;
517 }
518
521 CodeGenFileType FileType, MCContext &Ctx);
522
523 /// True if the target uses physical regs (as nearly all targets do). False
524 /// for stack machines such as WebAssembly and other virtual-register
525 /// machines. If true, all vregs must be allocated before PEI. If false, then
526 /// callee-save register spilling and scavenging are not needed or used. If
527 /// false, implicitly defined registers will still be assumed to be physical
528 /// registers, except that variadic defs will be allocated vregs.
529 virtual bool usesPhysRegsForValues() const { return true; }
530
531 /// True if the target wants to use interprocedural register allocation by
532 /// default. The -enable-ipra flag can be used to override this.
533 virtual bool useIPRA() const { return false; }
534
535 /// The default variant to use in unqualified `asm` instructions.
536 /// If this returns 0, `asm "$(foo$|bar$)"` will evaluate to `asm "foo"`.
537 virtual int unqualifiedInlineAsmVariant() const { return 0; }
538
539 // MachineRegisterInfo callback function
541
542 /// Remove all Linker Optimization Hints (LOH) associated with instructions in
543 /// \p MIs and \return the number of hints removed. This is useful in
544 /// transformations that cause these hints to be illegal, like in the machine
545 /// outliner.
547 const SmallPtrSetImpl<MachineInstr *> &MIs) const {
548 return 0;
549 }
550
551 /// Returns whether the backend can lower the llvm.cond.loop intrinsic. If
552 /// this function returns false, the intrinsic will be supported generically
553 /// but without loop detection support.
554 virtual bool canLowerCondLoop() const { return false; }
555};
556
557} // end namespace llvm
558
559#endif // LLVM_TARGET_TARGETMACHINE_H
This file defines the StringMap class.
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.
#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:66
Context object for machine code objects.
Definition MCContext.h:83
Interface to description of machine instruction set.
Definition MCInstrInfo.h:27
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
Streaming machine code generation interface.
Definition MCStreamer.h:222
Generic base class for all target subtargets.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
Representation of each machine instruction.
This interface provides simple read-only access to a block of memory, and provides simple methods for...
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
Manages a sequence of passes over a particular unit of IR.
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a ca...
Definition SourceMgr.h:303
Represents a range in source code.
Definition SMLoc.h:47
A ScheduleDAG for scheduling lists of MachineInstr.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:128
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Analysis pass providing the TargetTransformInfo.
CodeGenOptLevel getOptLevel() const
Returns the optimization level: None, Less, Default, or Aggressive.
void setSupportsDebugEntryValues(bool Enable)
Triple TargetTriple
Triple string, CPU name, and target feature strings the TargetMachine instance is created with.
std::unique_ptr< const MCAsmInfo > AsmInfo
Contains target specific asm information.
ExceptionHandling getExceptionModel() const
Return the ExceptionHandling to use, considering TargetOptions and the Triple's default.
virtual unsigned getAddressSpaceForPseudoSourceKind(unsigned Kind) const
getAddressSpaceForPseudoSourceKind - Given the kind of memory (e.g.
virtual void registerEarlyDefaultAliasAnalyses(AAManager &)
Allow the target to register early alias analyses (AA before BasicAA) with the AAManager for use with...
virtual bool addPassesToEmitFile(PassManagerBase &, raw_pwrite_stream &, raw_pwrite_stream *, CodeGenFileType, bool=true, MachineModuleInfoWrapperPass *MMIWP=nullptr)
Add passes to the specified pass manager to get the specified file emitted.
unsigned getAllocaPointerSize() const
virtual std::pair< const Value *, unsigned > getPredicatedAddrSpace(const Value *V) const
If the specified predicate checks whether a generic pointer falls within a specified address space,...
virtual void registerPassBuilderCallbacks(PassBuilder &)
Allow the target to modify the pass pipeline.
virtual bool usesPhysRegsForValues() const
True if the target uses physical regs (as nearly all targets do).
virtual Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC)
bool getAIXExtendedAltivecABI() const
CodeModel::Model CMModel
virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const
Returns true if a cast between SrcAS and DestAS is a noop.
virtual ScheduleDAGInstrs * createPostMachineScheduler(MachineSchedContext *C) const
Similar to createMachineScheduler but used when postRA machine scheduling is enabled.
virtual MachineFunctionInfo * createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, const TargetSubtargetInfo *STI) const
Create the target's instance of MachineFunctionInfo.
const Triple & getTargetTriple() const
virtual bool splitModule(Module &M, unsigned NumParts, function_ref< void(std::unique_ptr< Module > MPart)> ModuleCallback)
Entry point for module splitting.
const DataLayout createDataLayout() const
Create a DataLayout.
void setMachineOutliner(bool Enable)
void setFastISel(bool Enable)
const std::optional< PGOOptions > & getPGOOption() const
virtual bool addAsmPrinter(PassManagerBase &PM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, MCContext &Context)
Adds an AsmPrinter pass to the pipeline that prints assembly or machine code from the MI representati...
bool getSeparateNamedSections() const
const MemoryBuffer * getBBSectionsFuncListBuf() const
Get the list of functions and basic block ids that need unique sections.
virtual unsigned getSjLjDataSize() const
const STC & getSubtarget(const Function &F) const
This method returns a pointer to the specified type of TargetSubtargetInfo.
StringMap< std::unique_ptr< const MCSubtargetInfo > > MCSubtargetMap
MC subtarget keyed by target features and target CPU.
unsigned getPointerSizeInBits(unsigned AS) const
const MCSubtargetInfo & getMCSubtargetInfo() const
bool getIgnoreXCOFFVisibility() const
Return true if visibility attribute should not be emitted in XCOFF, corresponding to -mignore-xcoff-v...
virtual int unqualifiedInlineAsmVariant() const
The default variant to use in unqualified asm instructions.
void setCFIFixup(bool Enable)
bool getUniqueBasicBlockSectionNames() const
Return true if unique basic block section names must be generated.
bool getUniqueSectionNames() const
unsigned getPointerSize(unsigned AS) const
Get the pointer size for this target.
std::unique_ptr< const MCInstrInfo > MII
void setSupportsDefaultOutlining(bool Enable)
TargetMachine(const TargetMachine &)=delete
void setGlobalISelAbort(GlobalISelAbortMode Mode)
virtual unsigned getAssumedAddrSpace(const Value *V) const
If the specified generic pointer could be assumed as a pointer to a specific address space,...
virtual TargetLoweringObjectFile * getObjFileLowering() const
std::optional< PGOOptions > PGOOption
virtual yaml::MachineFunctionInfo * convertFuncInfoToYAML(const MachineFunction &MF) const
Allocate and initialize an instance of the YAML representation of the MachineFunctionInfo.
bool getEnableStaticDataPartitioning() const
StringRef getTargetFeatureString() const
static constexpr unsigned DefaultSjLjDataSize
The integer bit size to use for SjLj based exception handling.
virtual bool targetSchedulesPostRAScheduling() const
True if subtarget inserts the final scheduling pass on its own.
const MCAsmInfo & getMCAsmInfo() const
Return target specific asm information.
virtual bool addPassesToEmitMC(PassManagerBase &, MCContext *&, raw_pwrite_stream &, bool=true)
Add passes to the specified pass manager to get machine code emitted with the MCJIT.
const DataLayout DL
DataLayout for the target: keep ABI type size and alignment.
StringRef getTargetCPU() const
const MCInstrInfo * getMCInstrInfo() const
void setOptLevel(CodeGenOptLevel Level)
Overrides the optimization level.
virtual const TargetSubtargetInfo * getSubtargetImpl(const Function &) const
Virtual method implemented by subclasses that returns a reference to that target's TargetSubtargetInf...
virtual ScheduleDAGInstrs * createMachineScheduler(MachineSchedContext *C) const
Create an instance of ScheduleDAGInstrs to be run within the standard MachineScheduler pass for this ...
bool requiresStructuredCFG() const
void setRequiresStructuredCFG(bool Value)
virtual bool isMachineVerifierClean() const
Returns true if the target is expected to pass all machine verifier checks.
std::unique_ptr< const MCSubtargetInfo > STI
void setGlobalISel(bool Enable)
TargetOptions Options
virtual void registerDefaultAliasAnalyses(AAManager &)
Allow the target to register alias analyses with the AAManager for use with the new pass manager.
void setLargeDataThreshold(uint64_t LDT)
virtual void registerMachineRegisterInfoCallback(MachineFunction &MF) const
unsigned RequireStructuredCFG
void setO0WantsFastISel(bool Enable)
virtual bool canLowerCondLoop() const
Returns whether the backend can lower the llvm.cond.loop intrinsic.
virtual yaml::MachineFunctionInfo * createDefaultFuncInfoYAML() const
Allocate and return a default initialized instance of the YAML representation for the MachineFunction...
virtual ~TargetMachine()
virtual size_t clearLinkerOptimizationHints(const SmallPtrSetImpl< MachineInstr * > &MIs) const
Remove all Linker Optimization Hints (LOH) associated with instructions in MIs and.
virtual TargetPassConfig * createPassConfig(PassManagerBase &PM)
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
bool isCompatibleDataLayout(const DataLayout &Candidate) const
Test if a DataLayout if compatible with the CodeGen for this target.
void operator=(const TargetMachine &)=delete
unsigned getProgramPointerSize() const
bool getXCOFFTracebackTable() const
Return true if XCOFF traceback table should be emitted, corresponding to -xcoff-traceback-table.
bool getDataSections() const
Return true if data objects should be emitted into their own section, corresponds to -fdata-sections.
const Target & getTarget() const
void setTargetFeatureString(StringRef FS)
const Target & TheTarget
The Target that this machine was created for.
CodeModel::Model getCodeModel() const
Returns the code model.
virtual bool parseMachineFunctionInfo(const yaml::MachineFunctionInfo &, PerFunctionMIParsingState &PFS, SMDiagnostic &Error, SMRange &SourceRange) const
Parse out the target's MachineFunctionInfo from the YAML reprsentation.
virtual bool useIPRA() const
True if the target wants to use interprocedural register allocation by default.
void setCodeModel(CodeModel::Model CM)
Set the code model.
TargetMachine(const Target &T, StringRef DataLayoutString, const Triple &TargetTriple, StringRef CPU, StringRef FS, const TargetOptions &Options)
void setPGOOption(std::optional< PGOOptions > PGOOpt)
std::unique_ptr< const MCRegisterInfo > MRI
bool getFunctionSections() const
Return true if functions should be emitted into their own section, corresponding to -ffunction-sectio...
CodeGenOptLevel OptLevel
llvm::BasicBlockSection getBBSectionsType() const
If basic blocks should be emitted into their own section, corresponding to -fbasic-block-sections.
void setEnableDefaultMachineVerifier(bool Enable)
const MCRegisterInfo & getMCRegisterInfo() const
Target-Independent Code Generator Pass Configuration Options.
TargetSubtargetInfo - Generic base class for all target subtargets.
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:47
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.
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
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
ExceptionHandling
Definition CodeGen.h:53
@ None
No exception support.
Definition CodeGen.h:54
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
Definition CodeGen.h:111
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:82
@ Default
-O2, -Os, -Oz
Definition CodeGen.h:85
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
Definition Error.h:340
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.