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