Top‐level LLVM library namespace.
Namespaces
Name |
Description |
Abstract Attribute helper functions. |
|
AMDGPU‐specific address‐space helpers and DWARF mappings. |
|
OpenCL uses address spaces to differentiate between various memory regions on the hardware. On the CPU all of the address spaces point to the same memory, however on the GPU, each address space points to a separate piece of memory that is unique from other memory locations. |
|
Additional APInt utility operations. |
|
Implementation details and operator overloads for bitmask enumerations. |
|
CallingConv Namespace ‐ This namespace contains an enum with a value for the well‐known calling conventions. |
|
Helpers for parsing and converting code‐generation optimization levels. |
|
Code model types. |
|
Floating‐point ABI selection. |
|
ISD namespace ‐ This namespace contains an enum which represents all of the SelectionDAG node types and value types. |
|
Internal helpers for optional tree canonicalization (digest cache and collision chains). Not part of the public interface. |
|
IntervalMapImpl ‐ Namespace used for IntervalMap implementation details. It should be considered private to the implementation. |
|
This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM. The enum values are returned by Function::getIntrinsicID(). |
|
PIC level used to map ‐fpic/‐fPIC. |
|
Position‐independent executable level. |
|
Relocation model types. |
|
Thread‐local storage models. |
|
Invariant opcodes: All instruction sets have these as their low opcodes. |
|
ThinLTOCodeGeneratorImpl ‐ Namespace used for ThinLTOCodeGenerator implementation details. It should be considered private to the implementation. |
|
Specify what type of zeroing for callee‐used registers. |
|
Helpers that invoke range algorithms via argument‐dependent lookup. |
|
Assignment Tracking (at). |
|
Implementation helpers that pack and unpack typed bitfield elements into unsigned storage words. |
|
Internal helpers for owning and invoking callables. |
|
Content‐addressable storage (CAS) APIs. |
|
This namespace contains all of the command line option processing machinery. It is intentionally a short name to make qualified usage concise. |
|
A private "module" namespace for types and utilities used by ConstantHoisting. These are implementation details and should not be used by clients. |
|
DenseMap‐specific hashing helpers. |
|
Calculates the starting offsets for various sections within the .debug_names section. |
|
@} |
|
Implementation details for hash computation. |
|
Implementation details for intrusive list node prev/next storage. |
|
A private "module" namespace for types and utilities used by JumpThreading. These are implementation details and should not be used by clients. |
|
Transitional API for extracting constants from Metadata. |
|
Mathematical constants backported from C++20 <numbers>. |
|
Add a small namespace to avoid name clashes with the classes used in the streaming interface. We want these to be short for better write/readability. |
|
Helpers for running work across a pool of worker threads. |
|
Implementation details for post‐order graph iterators. |
|
Implementation details for PointerUnion tag packing. |
|
A private "module" namespace for types and utilities used by Reassociate. These are implementation details and should not be used by clients. |
|
A private "module" namespace for types and utilities used by this pass. These are implementation details and should not be used by clients. |
|
Implementation details for formatv support helpers. |
|
Host system utilities. |
|
Types
Name |
Description |
An abstract interface for address space information. |
|
An abstract interface for all align attributes. |
|
An abstract attribute for getting assumption information. |
|
Cache key for BasicAA results. It only includes the pointer and size from MemoryLocation, as BasicAA is AATags independent. Additionally, it includes the value of MayBeCrossIteration, which may affect BasicAA results. |
|
An Iterator for call edges, creates AACallEdges attributes in a lazy way. |
|
An abstract state for querying live call edges. This interface uses the Attributor's optimistic liveness information to compute the edges that are alive. |
|
An abstract Attribute for specializing "dynamic" components of denormal_fpenv to a known denormal mode. |
|
The data structure for the dependency graph |
|
The data structure for the nodes of a dependency graph |
|
An abstract interface for all dereferenceable attribute. |
|
An abstract interface for llvm::GlobalValue information interference. |
|
An abstract interface for indirect call information interference. |
|
An abstract interface to track if a value leaves it's defining function instance. |
|
An abstract Attribute for computing reachability between functions. |
|
An abstract interface to determine reachability of point A to B. |
|
An abstract interface for identifying pointers from which loads can be marked invariant. |
|
An abstract interface for liveness abstract attribute. |
|
A collection of metadata nodes that might be associated with a memory access used by the alias‐analysis infrastructure. |
|
A manager for alias analyses. |
|
An abstract interface for memory access kind related attributes (readnone/readonly/writeonly). |
|
An abstract interface for all memory location attributes (readnone/argmemonly/inaccessiblememonly/inaccessibleorargmemonly). |
|
An abstract interface for all nonnull attributes. |
|
An abstract interface for all noalias attributes. |
|
An abstract interface for potential address space information. |
|
An abstract interface for all nocapture attributes. |
|
An AbstractAttribute for nofree. |
|
An abstract attribute for norecurse. |
|
An AbstractAttribute for noreturn. |
|
An abstract interface for all noundef attributes. |
|
Abstract attribute for the no‐unwind function attribute. Abstract Attribute Classes ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ |
|
An abstract Attribute for determining the necessity of the convergent attribute. |
|
An abstract interface for all nonnull attributes. |
|
An abstract interface for struct information. |
|
An abstract interface for potential values analysis. |
|
An abstract interface for privatizability. |
|
This class stores info we want to provide to or retain within an alias query. By default, the root query is stateless and starts with a freshly constructed info object. Specific alias analyses can use this query info to store per‐query state that is important for recursive or nested queries to avoid recomputing. To enable preserving this state across multiple queries where safe (due to the IR not changing), use a |
|
A base class to help implement the function alias analysis results concept. |
|
A wrapper pass to provide the legacy pass manager access to a suitably prepared AAResults object. |
|
An abstract attribute for undefined behavior. |
|
An abstract attribute for getting all assumption underlying objects. |
|
An abstract interface for range value analysis. |
|
An abstract interface for value simplify abstract attribute. |
|
An abstract attribute for willreturn. |
|
A DCE pass that assumes instructions are dead until proven otherwise. |
|
The APFixedPoint class works similarly to APInt/APSInt in that it is a functional replacement for a scaled integer. It supports a wide range of semantics including the one used by fixed point types proposed in ISO/IEC JTC1 SC22 WG14 N1169. The class carries the value and semantics of a fixed point, and provides different operations that would normally be performed on fixed point types. |
|
Arbitrary‐precision floating‐point value. |
|
Shared type definitions for APFloat and its internal implementation classes. |
|
Arbitrary‐precision integer. |
|
An arbitrary precision integer that knows its signedness. |
|
ARM‐specific JIT symbol flags. FIXME: This should be moved into a target‐specific header. |
|
Base struct for all "concrete attribute" deductions. |
|
AbstractCallSite |
|
This abstract builder class defines a set of high‐level steps for creating DDG‐like graphs. The client code is expected to inherit from this class and define concrete implementation for each of the pure virtual functions used in the high‐level algorithm. |
|
AbstractLatticeFunction ‐ This class is implemented by the dataflow instance to specify what the lattice values are and how they handle merges etc. This gives the client the power to compute lattice values from instructions, constants, etc. The current requirement is that lattice values must be copyable. At the moment, nothing tries to avoid copying. Additionally, lattice keys must be able to be used as keys of a mapping data structure. Internally, the generic solver currently uses a DenseMap to map lattice keys to lattice values. If the lattice key is a non‐standard type, a specialization of DenseMapInfo must be provided. |
|
Abstract interface of slot tracker storage. |
|
An interface to query the internal state of an abstract attribute. |
|
This class holds an abstract representation of an Accelerator Table, consisting of a sequence of buckets, each bucket containint a sequence of HashData entries. The class is parameterized by the type of entries it holds. The type template parameter also defines the hash function to use for hashing names. |
|
A base class holding non‐template‐dependant functionality of the AccelTable class. Clients should not use this class directly but rather instantiate AccelTable with a type derived from AccelTableData. |
|
Interface which the different types of accelerator table data have to conform. It serves as a base class for different values of the template argument of the AccelTable class template. |
|
This class represents a conversion between pointers from one address space to another. |
|
A class that represents an address range. The range is specified using a start and an end address: [Start, End).] |
|
An address range paired with an associated integer value. |
|
The AddressRanges class helps normalize address range collections. This class keeps a sorted vector of AddressRange objects and can perform insertions and searches efficiently. Intersecting([100,200), [150,300))]] and adjacent([100,200), [200,300)) address ranges are combined during]] insertion. |
|
The AddressRangesBase class presents the base functionality for the normalized address ranges collection. This class keeps a sorted vector of AddressRange‐like objects and can perform searches efficiently. The address ranges are always sorted and never contain any invalid, empty or intersected address ranges. |
|
AddressRangesMap class maps values to the address ranges. It keeps normalized address ranges and corresponding values. This class keeps a sorted vector of AddressRangeValuePair objects and can perform insertions and searches efficiently. Intersecting([100,200), [150,300)) ranges splitted into non‐conflicting]] parts([100,200), [200,300)). Adjacent([100,200), [200,300)) address]]]] ranges are not combined during insertion. |
|
Public interface to the address sanitizer module pass for instrumenting code to check for various memory errors. |
|
A synchronization primitive with weak mutual exclusion guarantees. Implementations of this interface may allow multiple threads/processes to acquire the ownership of the lock simultaneously. Typically, threads/processes waiting for the lock to be unlocked will validate that the computation was performed by the expected thread/process and re‐run the computation if not. |
|
Tablegenerated data structures needed to match alias patterns. |
|
Data for each alias pattern. Includes feature bits, string, number of operands, and a variadic list of conditions to check. |
|
The possible results of an alias query. |
|
This is a simple wrapper around an MDNode which provides a higher‐level interface by hiding the details of how alias analysis information is encoded in its operands. |
|
Alias summary information. |
|
This struct is a compact representation of a valid (non‐zero power of two) alignment. It is suitable for use as static global constants. |
|
A suitably aligned and sized character array member which can hold elements of any type. |
|
This templated class represents "all analyses that operate over <a particular IR unit>" (e.g. a Function or a Module) in instances of PreservedAnalysis. |
|
Summary of memprof metadata on allocations. |
|
Metadata about an allocation used to generate a token ID. |
|
A module pass that rewrites heap allocations to use token‐enabled allocation functions based on various source‐level properties. |
|
an instruction to allocate memory on the stack |
|
CRTP base class providing obvious overloads for the core |
|
A linked‐list with a custom, local allocator. |
|
Inlines functions marked as "always_inline". |
|
Wrapper for FunctionAnalysisManager. |
|
A CRTP mix‐in that provides informational APIs needed for analysis passes. |
|
A special type used by analysis passes to provide an address that identifies that particular analysis pass type. |
|
A container for analyses that lazily runs them and caches their results. |
|
AnalysisResolver ‐ Simple interface used by Pass objects to pull all analysis information out of pass manager that is responsible to manage the pass. |
|
A special type used to provide an address that identifies a set of related analyses. These sets are primarily used below to mark sets of analyses as preserved. |
|
Represent the analysis usage information of a pass. This tracks analyses that the pass REQUIRES (must be available when the pass runs), REQUIRES TRANSITIVE (must be available throughout the lifetime of the pass), and analyses that the pass PRESERVES (the pass does not invalidate the results of these analyses). This information is provided by a pass to the Pass infrastructure through the getAnalysisUsage virtual function. |
|
Pass to convert llvm.global.annotations to !annotation metadata. |
|
"anonymous_n" ‐ Represent an anonymous record name |
|
This class works in conjunction with the post‐RA scheduler to rename registers to break register anti‐dependencies (WAR hazards). |
|
Type‐erased holder for a single copy‐constructible value. |
|
This represents a common base class for llvm.coro.id instructions. |
|
This represents either the llvm.coro.id.retcon or llvm.coro.id.retcon.once instruction. |
|
This class represents any memcpy intrinsic i.e. llvm.element.unordered.atomic.memcpy and llvm.memcpy |
|
This class represents any memmove intrinsic i.e. llvm.element.unordered.atomic.memmove and llvm.memmove |
|
This class represents any memset intrinsic |
|
An implementation of WritableBinaryStream which can write at its end causing the underlying data to grow. This class owns the underlying data. |
|
A base class for different implementations of Data classes for Apple Accelerator Tables. The columns in the table are defined by the static Atoms variable defined on the subclasses. |
|
Accelerator table data implementation for simple Apple accelerator tables with just a DIE reference. |
|
Accelerator table data implementation for simple Apple accelerator tables with a DIE offset but no actual DIE pointer. |
|
Accelerator table data implementation for type accelerator tables with a DIE offset but no actual DIE pointer. |
|
Accelerator table data implementation for Apple type accelerator tables. |
|
This implements the Apple accelerator table format, a precursor of the DWARF 5 accelerator table format. |
|
Helper struct shared between Function Specialization and SCCP Solver. |
|
This class represents an incoming formal argument to a Function. A formal argument, since it is formal'', does not contain an actual value but instead represents the type, argument number, and attributes of an argument for a specific function. When used in the body of said function, the argument of course represents the value of the actual argument that the function was called with. |
|
Argument promotion pass. |
|
Recycle small arrays allocated from a BumpPtrAllocator. |
|
Represent a constant reference to an array (0 or more elements consecutively in memory), i.e. a start pointer and a length. It allows various APIs to take consecutive elements easily and conveniently. |
|
Class to represent array types. |
|
A callback class which is notified of each comment in an assembly file as it is lexed. |
|
AsmCond ‐ Class to support conditional assembly |
|
Registry of file location information for LLVM IR constructs. |
|
This class is intended to be used as a driving class for all asm writers. |
|
Collects and handles AsmPrinter objects required to build debug or EH information. |
|
Target independent representation for an assembler token. |
|
An SDNode that records if a register contains a value that is guaranteed to be aligned accordingly. |
|
Value handle that asserts if the Value is deleted. |
|
Convert llvm.dbg.declare intrinsics into sets of llvm.dbg.assign intrinsics by treating stores to the dbg.declare'd address as assignments to the variable. Not all kinds of variables are supported yet; those will be left with their dbg.declare intrinsics. The pass sets the debug‐info‐assignment‐tracking module flag to true to indicate assignment tracking has been enabled. |
|
This pass will try to build an llvm.assume for every instruction in the function. Its main purpose is testing. |
|
This represents the llvm.assume intrinsic. |
|
This pass attempts to minimize the number of assume without loosing any information. |
|
A function analysis which provides an |
|
A cache of @llvm.assume calls within a function. |
|
An immutable pass that tracks lazily created |
|
Printer pass for the |
|
An instruction that atomically checks whether a specified value is in a memory location, and, if it is, stores a new value there. The value returned by this instruction is a pair containing the original value as first element, and an i1 indicating success (true) or failure (false) as second element. |
|
an instruction that atomically reads a memory location, combines it with another value, and then stores the result back. Returns the old value. |
|
This is an SDNode representing atomic operations. |
|
This class is used in conjunction with the Attribute::get method to create an Attribute object. The object itself is uniquified. The Builder's value, however, is not. So this can be used as a quick way to test for equality, presence of attributes, etc. |
|
Functions, function parameters, and return types can have attributes to indicate how they should be treated by optimizations and code generation. This class represents one of those attributes. It's light‐weight and should be passed around by‐value. |
|
This class holds the attributes for a function, its return value, and its parameters. You access the attributes for each of them via an index into the AttributeList object. The function attributes are at index `AttributeList::FunctionIndex', the return value is at index `AttributeList::ReturnIndex', and the attributes for the parameters start at index `AttributeList::FirstArgIndex'. |
|
This class stores enough information to efficiently remove some attributes from an existing AttrBuilder, AttributeSet or AttributeList. |
|
This class holds the attributes for a particular argument, parameter, function, or return value. It is an immutable value type that is cheap to copy. Adding and removing enum attributes is intended to be fast, but adding and removing string or integer attributes involves a FoldingSet lookup. |
|
The fixpoint analysis framework that orchestrates the attribute deduction. |
|
Configuration for the Attributor. |
|
A more lightweight version of the Attributor which only runs attribute inference but no simplifications. |
|
A more lightweight version of the Attributor which only runs attribute inference but no simplifications. |
|
Module pass that runs the attributor analysis. |
|
Special case for ‐ftrivial‐auto‐var‐init remarks. |
|
A deterministic finite‐state automaton. The automaton is defined in TableGen; this object drives an automaton defined by tblgen‐emitted tables. |
|
Represents an array of some other type. |
|
Represents an untyped blob of bytes. |
|
RAII object to pair entering and exiting a sub‐block. |
|
Represents a character encoded in LLVM's Char6 encoding. |
|
Represents a fixed‐width value in a bitcode record. |
|
Represents a single bitcode record type. |
|
Represents a literal operand in a bitcode record. |
|
A record with a fixed record code. |
|
Represents a variable‐width value in a bitcode record. |
|
A class that wraps the BLAKE3 algorithm. |
|
A function with a set of utility nodes where it is beneficial to order two functions close together if they have similar utility nodes |
|
Simple trait class that provides a mapping between BPI passes and the corresponding BPInfo. |
|
Algorithm parameters; default values are tuned on real‐world binaries |
|
Helper struct to parse and store a memory address as base + index + offset. We ignore sign extensions when it is safe to do so. The following two expressions are not equivalent. To differentiate we need to store whether there was a sign extension involved in the index computation. (load (i64 add (i64 copyfromreg %c) (i64 signextend (add (i8 load %index) (i8 1)))) vs |
|
Analysis pass providing a never‐invalidated alias analysis result. |
|
This is the AA result object for the basic, local, and stateless alias analysis. It implements the AA query interface in an entirely stateless manner. As one consequence, it is never invalidated due to IR changes. While it does retain some storage, that is used as an optimization and not to preserve information from query to query. However it does retain handles to various other analyses and must be recomputed when those analyses are. |
|
Legacy wrapper pass to provide the BasicAAResult object. |
|
LLVM Basic Block Representation |
|
Analysis pass providing the |
|
Used to provide key value pairs for feature and CPU bit flags. |
|
Concrete BasicTTIImpl that can be used if no further customization is needed. |
|
Base class which can be used to help build a TTI implementation. |
|
Temporarily set the cross iteration mode on a BatchAA instance. |
|
This class is a wrapper over an AAResults, and it is intended to be used only when there are no IR changes inbetween queries. BatchAAResults is reusing the same |
|
!op (X, Y) ‐ Combine two inits. |
|
An implementation of BinaryStream which holds its entire data set in a single contiguous buffer. BinaryByteStream guarantees that no read operation will ever incur a copy. Note that BinaryByteStream does not own the underlying buffer. |
|
BinaryInstrProfCorrelator ‐ A child of InstrProfCorrelatorImpl that takes an object file as input to correlate profiles. |
|
BinaryItemStream represents a sequence of objects stored in some kind of external container but for which it is useful to view as a stream of contiguous bytes. An example of this might be if you have a collection of records and you serialize each one into a buffer, and store these serialized records in a container. The pointers themselves are not laid out contiguously in memory, but we may wish to read from or write to these records as if they were. |
|
This class represents an intrinsic that is based on a binary operation. This includes op.with.overflow and saturating add/sub intrinsics. |
|
An interface for accessing data in a stream‐like format, but which discourages copying. Instead of specifying a buffer in which to copy data on a read, the API returns an ArrayRef to data owned by the stream's implementation. Since implementations may not necessarily store data in a single contiguous buffer (or even in memory at all), in such cases a it may be necessary for an implementation to cache such a buffer so that it can return it. |
|
Base class for errors originating when parsing raw PDB files |
|
Provides read only access to a subclass of |
|
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array. It provides copy‐semantics and read only access to a "window" of the underlying BinaryStream. Note that BinaryStreamRef is not a BinaryStream. That is to say, it does not inherit and override the methods of BinaryStream. In general, you should not pass around pointers or references to BinaryStreams and use inheritance to achieve polymorphism. Instead, you should pass around BinaryStreamRefs by value and achieve polymorphism that way. |
|
Common stuff for mutable and immutable StreamRefs. |
|
Provides write only access to a subclass of |
|
This class represents a no‐op cast from one type to another. |
|
BitCodeAbbrev ‐ This class represents an abbreviation record. An abbreviation allows a complex record that has redundancy to be stored in a specialized format instead of the fully‐general, fully‐vbr, format. |
|
BitCodeAbbrevOp ‐ This describes one or more operands in an abbreviation. This is actually a union of two different things: 1. It could be a literal integer value ("the operand is always 17"). 2. It could be an encoding specification ("this operand encoded like so"). |
|
'true'/'false' ‐ Represent a concrete initializer for a bit. |
|
Specialization of the integer state for a bit‐wise encoding. |
|
This class encapuslates the logic to iterate over bitmask returned by the various RegClass related APIs. E.g., this class can be used to iterate over the subclasses provided by TargetRegisterClass::getSubClassMask or SuperRegClassIterator::getMask. |
|
'bit' ‐ Represent a single bit |
|
Basic information extracted from a bitcode module to be used for LTO. |
|
Represents a module in a bitcode file. |
|
Pass for writing a module of IR out to a bitcode file. |
|
Holds functions to get, set or test bitfields. |
|
'{ a, b, c }' ‐ Represents an initializer for a BitsRecTy value. It contains a vector of bits, whose size is determined by the type. |
|
'bits<n>' ‐ Represent a fixed number of bits |
|
This is a constexpr reimplementation of a subset of std::bitset. It would be nice to use std::bitset directly, but it doesn't support constant initialization. |
|
This class maintains the abbreviations read from a block info block. |
|
This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor. |
|
When advancing through a bitstream cursor, each advance can discover a few different kinds of entries: |
|
An object wrapping several components of a basic block hash. The combined (blended) hash is represented and stored as one uint64_t, while individual components are of smaller size (e.g., uint16_t or uint8_t). |
|
The address of a basic block. |
|
Analysis pass which computes |
|
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequencies. |
|
Shared implementation for block frequency analysis. |
|
Base class for BlockFrequencyInfoImpl |
|
Legacy analysis pass which computes |
|
Printer pass for the |
|
Single‐operand tags replacing a removed two‐operand form !{!"<Enable>", i1 X}: X = true selects Enable, X = false selects Disable. |
|
Simple wrapper for a single bit (boolean) state. |
|
A pass to instrument code and perform run‐time bounds checking on loads, stores, and other memory intrinsics. |
|
Analysis pass which computes |
|
Analysis providing branch probability information. |
|
Legacy analysis pass which computes |
|
Printer pass for the |
|
A "pseudo‐class" with methods for operating on BUILD_VECTORs. |
|
Allocate memory in an ever growing pool, as if by bump‐pointer. |
|
Represents known origin of an individual byte in combine pattern. The value of the byte is either constant zero, or comes from memory / some other productive instruction (e.g. arithmetic instructions). Bit manipulation instructions like shifts are not ByteProviders, rather are used to extract Bytes. |
|
Class to represent byte types. |
|
CCState ‐ This class holds information needed while lowering arguments and return values. It captures which registers are already assigned and which stack slots are used. It provides accessors to allocate these values. |
|
CCValAssign ‐ Represent assignment of one arg/retval to a location. |
|
Represents analyses that only rely on functions' control flow. |
|
An union‐find based Minimum Spanning Tree for CFG |
|
This class implements the |
|
This abstract base class is an interface for receiving DWARF function frames Call Frame Information. |
|
This class is an |
|
Helper class for creating CFI instructions and inserting them into MIR. |
|
A wrapper class to abstract writer stream with support of bytes back patching. |
|
A struct to define how the data stream should be patched. |
|
Adaptor that maps from a SCC to its functions. |
|
Support structure for SCC passes to communicate updates the call graph back to the CGSCC pass manager infrastructure. |
|
A custom std::array with 256 entries, that also has a print function. |
|
Defines a builder that does CSE of MachineInstructions using GISelCSEInfo. Eg usage. |
|
|
|
Policy for the pruneCache() function. A default constructed CachePruningPolicy provides a reasonable default policy. |
|
This class wraps an output stream for a file. Most clients should just be able to return an instance of this base class from the stream callback, but if a client needs to perform some action after the stream is written to, that can be done by deriving from this class and overriding the destructor or the commit() method. |
|
A container which contains a string, which it owns, plus a precomputed hash. |
|
A container which contains a StringRef plus a precomputed hash. |
|
Helper class for calculating the default number of inline elements for |
|
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to calling a function. |
|
CallBr instruction, tracking function calls that may not return control but instead transfer it to a third location. The SubclassData field is used to hold the calling convention of the call. |
|
The basic data container for the call graph of a |
|
An analysis pass to compute the |
|
Pass for printing the call graph to a dot file |
|
A node in the call graph for a module. |
|
Printer pass for the |
|
CallGraphSCC ‐ This is a single SCC that a CallGraphSCCPass is run on. |
|
Printer pass for the summarized |
|
Wrapper to unify "old style" CallGraph and "new style" LazyCallGraph. |
|
Pass for viewing the call graph |
|
The |
|
This class represents a function call, abstracting a target machine's calling convention. This class uses low bit of the SubClassData field to indicate whether or not this is a tail call. The rest of the bits hold the calling convention of the call. |
|
Value handle with callbacks on RAUW and destruction. |
|
Class to accumulate and hold information about a callee. |
|
The CalleeSavedInfo class tracks the information need to locate where a callee saved register is in the current frame. Callee saved reg can also be saved to a different register rather than on the stack by setting DstReg instead of FrameIdx. |
|
Summary of memprof callsite metadata. |
|
Class to represented the control flow structure of an OpenMP canonical loop. |
|
Simple pass that canonicalizes aliases. |
|
A pass that canonicalizes freeze instructions in a loop. |
|
Virtual base class for providers of capture analysis. |
|
Represents which components of the pointer may be captured in which location. This represents the captures(...) attribute in IR. |
|
Result of a PointerMayBeCaptured query, which includes the captured components for both the case where return is considered a capture, and where it isn't. |
|
This callback is used in conjunction with PointerMayBeCaptured. In addition to the interface here, you'll need to provide your own getters to see whether anything was captured. |
|
This struct provides a method for customizing the way a cast is performed. It inherits from CastIsPossible, to support the case of declaring many CastIsPossible specializations without having to specialize the full CastInfo. |
|
This is the base class for all instructions that perform data casts. It is simply provided so that instruction category testing can be performed with code like: |
|
This struct provides a way to check if a given cast is possible. It provides a static function called isPossible that is used to check if a cast can be performed. It should be overridden like this: |
|
Encapsulate the names of CFI target functions. It interfaces with ThinLTO to determine efficiently which of the names need to be exported for a particular module. |
|
This struct can be used to capture information about code being cloned, while it is being cloned. |
|
This class is the base class for the comparison instructions. Abstract base class of comparison instructions. |
|
This class represents a ucmp/scmp intrinsic |
|
An abstraction over a floating‐point predicate, and a pack of an integer predicate with samesign information. Some functions in ICmpInst construct and return this type in place of a Predicate. |
|
A bitvector that coalesces adjacent set bits into intervals. |
|
Utility class for extracting code into a new function. |
|
A cache for the CodeExtractor analysis. The operation |
|
This class provides access to building LLVM's passes. |
|
implements a set of functionality in the |
|
Utility to calculate the size and a few similar metrics for a set of basic blocks. |
|
CodeViewContext has the real knowledge about this format, so let it access our members. |
|
An analysis pass which caches information about the entire Module. Records a cache of the 'active' gc strategy objects for the current Module. |
|
Exhaustive generator of combinations across a vector‐of‐vectors choice space. |
|
Combiner implementation. This is per‐function, so passes need to recreate one of these each time they enter a new function. |
|
A helper template for defining operators for individual opcodes. |
|
Concurrent, insert‐only hash table that stores unique |
|
Default hash/equality/create policy for ConcurrentHashTableByPtr. |
|
Conditional Branch instruction. |
|
Evaluate query assuming this condition holds. |
|
!cond(condition_1: value1, ... , condition_n: value) Selects the first value for which condition is true. Otherwise reports an error. |
|
ConnectedVNInfoEqClasses ‐ Helper class that can divide VNInfos in a LiveInterval into equivalence clases of connected components. A LiveInterval that has multiple connected components can be broken into multiple LiveIntervals. |
|
ConstMIBundleOperands ‐ Iterate over all operands in a const bundle of machine instructions. |
|
Provides a cast trait that strips |
|
This is an important base class in LLVM. It provides the common facilities of all constant values in an LLVM program. A constant is a value that is immutable at runtime. Functions are constants because their address is immutable. Same with global variables. |
|
Base class for aggregate constants (with operands). |
|
All zero aggregate value |
|
ConstantArray ‐ Constant Array Declarations |
|
Class for constant bytes. |
|
Base class for constants with no operands. |
|
An array constant whose element type is a simple 1/2/4/8‐byte integer, bytes or float/double, and whose elements are just simple data values (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it stores all of the elements of the constant as densely packed data, instead of as Value*'s. |
|
Represents offset+length into a ConstantDataArray. |
|
ConstantDataSequential ‐ A vector or array constant whose element type is a simple 1/2/4/8‐byte integer/byte or half/bfloat/float/double, and whose elements are just simple data values (i.e. ConstantInt/ConstantByte/ ConstantFP). This Constant node has no operands because it stores all of the elements of the constant as densely packed data, instead of as Value*'s. |
|
A vector constant whose element type is a simple 1/2/4/8‐byte integer or float/double, and whose elements are just simple data values (i.e. ConstantInt/ConstantFP). This Constant node has no operands because it stores all of the elements of the constant as densely packed data, instead of as Value*'s. |
|
A constant value that is initialized with an expression using other constant values. |
|
ConstantFP ‐ Floating Point Values [float, double] |
|
This class represents a range of floating‐point values. |
|
ConstantFolder ‐ Create constants with minimum, target independent, folding. |
|
This is the shared class of boolean and integer constants. This class represents both boolean and integral constants. Class for constant integers. |
|
A pass that merges duplicate global constants into a single constant. |
|
A constant pointer value that points to null. This represents both scalar pointer nulls and vector splats of pointer nulls. |
|
A signed pointer, in the ptrauth sense. |
|
This class represents a range of values. |
|
This class represents a list of constant ranges. |
|
A constant target extension type default initializer |
|
A constant token which is empty |
|
Constant Vector Declarations |
|
Constrained floating point compare intrinsics. |
|
This is the common base class for constrained floating point intrinsics. |
|
Pointer to the context, with optional RAUW support. |
|
Like FoldingSetTrait, but for ContextualFoldingSets. |
|
Create a control‐flow hub that splits branches through guard blocks. |
|
Represents calls to the llvm.experimintal.convergence.* intrinsics. |
|
This represents the llvm.coro.align instruction. |
|
This represents the llvm.coro.alloc instruction. |
|
This represents the llvm.coro.alloca.alloc instruction. |
|
This represents the llvm.coro.alloca.free instruction. |
|
This represents the llvm.coro.alloca.get instruction. |
|
This represents the llvm.coro.context.alloc instruction. |
|
This represents the llvm.coro.context.dealloc instruction. |
|
This represents the llvm.coro.end instruction. |
|
This represents the llvm.coro.async.resume instruction. During lowering this is replaced by the resume function of a suspend point (the continuation function). |
|
This represents the llvm.coro.async.size.replace instruction. |
|
This represents the llvm.coro.await.suspend.{void,bool,handle} instructions. |
|
This class represents the llvm.coro.begin or llvm.coro.begin.custom.abi instructions. |
|
This represents the llvm.coro.dead instruction. |
|
This represents the llvm.coro.end instruction. |
|
This represents the llvm.end.results instruction. |
|
This represents the llvm.coro.frame instruction. |
|
This represents the llvm.coro.free instruction. |
|
This represents the llvm.coro.id.async instruction. |
|
This represents the llvm.coro.id instruction. |
|
This represents the llvm.coro.id.retcon instruction. |
|
This represents the llvm.coro.id.retcon.once instruction. |
|
This represents the llvm.coro.is_in_ramp instruction. |
|
This represents the llvm.coro.promise instruction. |
|
This represents the llvm.coro.save instruction. |
|
This represents the llvm.coro.size instruction. |
|
This class represents the llvm.coro.subfn.addr instruction. |
|
This represents the llvm.coro.suspend.async instruction. |
|
This represents the llvm.coro.suspend instruction. |
|
This represents the llvm.coro.suspend.retcon instruction. |
|
Printer pass for cost modeling results. |
|
Cost Table Entry |
|
Crash recovery helper object. |
|
Abstract base class of cleanup handlers. |
|
Base class of cleanup handler that controls recovery of resources of the given type. |
|
Helper class for managing resource cleanups. |
|
Cleanup handler that reclaims resource by calling 'delete' on it. |
|
Cleanup handler that reclaims resource by calling destructor on it. |
|
Cleanup handler that reclaims resource by calling its method 'Release'. |
|
Option class for critical edge splitting. |
|
Analysis pass which computes a |
|
Legacy analysis pass which computes a |
|
Opaque handle to a cycle within a GenericCycleInfo that wraps the cycle's preorder index. Handles remain valid as long as the cycle forest is not recomputed; addBlockToCycle() adds a block but never adds, removes, or reorders cycles, so it leaves every handle valid. |
|
Implements a "delta debugging" algorithm for minimizing directed acyclic graphs using a predicate function. |
|
Basic Dead Code Elimination pass. |
|
Analysis pass that builds the DDG for a loop. |
|
Textual printer pass for the DDG of a loop. |
|
Concrete implementation of a pure data dependence graph builder. This class provides custom implementation for the pure‐virtual functions used in the generic dependence graph build algorithm. |
|
Data Dependency Graph Edge. An edge in the DDG can represent a def‐use relationship or a memory dependence based on the result of DependenceAnalysis. A rooted edge connects the root node to one of the components of the graph. |
|
Data Dependence Graph Node The graph can represent the following types of nodes: 1. Single instruction node containing just one instruction. 2. Multiple instruction node where two or more instructions from the same basic block are merged into one node. 3. Pi‐block node which is a group of other DDG nodes that are part of a strongly‐connected component of the graph. A pi‐block node contains more than one single or multiple instruction nodes. The root node cannot be part of a pi‐block. 4. Root node is a special node that connects to all components such that there is always a path from it to any node in the graph. |
|
Represent an edge in the directed graph. The edge contains the target node it connects to. |
|
Represent a node in the directed graph. The node has a (possibly empty) list of outgoing edges. |
|
List of ValueAsMetadata, to be used as an argument to a dbg.value intrinsic. |
|
Assignment ID. Used to link stores (as an attachment) and dbg.assigns (as an operand). DIAssignID metadata is never uniqued as we compare instances using referential equality (the instance/address is the ID). |
|
Basic type, like 'int' or 'float'. |
|
Debug common block. |
|
Compile unit. |
|
Composite types. |
|
Derived types. |
|
Container for dump options that control which debug information will be dumped. |
|
A structured debug information entry. Has an abbreviation which describes its organization. |
|
Dwarf abbreviation, describes the organization of a debug information object. |
|
Dwarf abbreviation data, describes one attribute of a Dwarf abbreviation. |
|
Helps unique DIEAbbrev objects and assigns abbreviation numbers. |
|
A BaseTypeRef DIE. |
|
A BaseTypeRef DIE. |
|
DIEBlock ‐ Represents a block of values. |
|
A simple label difference DIE. |
|
A pointer to another debug information entry. An instance of this class can also be used as a proxy for a debug information entry not yet defined (ie. types.) |
|
An expression DIE. |
|
A container for inline string values. |
|
An integer value DIE. |
|
A label DIE. |
|
DIELoc ‐ Represents an expression location. |
|
Represents a pointer to a location list in the debug_loc section. |
|
A container for string pool string values. |
|
Represents a compile or type unit. |
|
A list of DIE values. |
|
Enumeration value. |
|
DWARF expression. |
|
Holds a DIExpression and keeps track of how many operands have been consumed so far. |
|
File. |
|
Fixed‐point type. |
|
Container for description of a global variable. |
|
Global variables. |
|
A pair of DIGlobalVariable and DIExpression. |
|
An imported module (C++ using directive or similar). |
|
A format‐neutral container for inlined code description. |
|
Label. |
|
Debug lexical block. |
|
A format‐neutral container for source line information. |
|
Controls which fields of DILineInfo container should be filled with data. |
|
A scope for locals. |
|
Local variable. |
|
Debug location. |
|
Macro |
|
Macro file |
|
Macro Info DWARF‐like metadata node. |
|
Represents a module in the programming language, for example, a Clang module, or a Fortran module. |
|
Debug lexical block. |
|
Tagged DWARF‐like metadata node. |
|
A property of a class or structure. |
|
Base class for scope‐like contexts. |
|
Wrapper structure that holds source language identity metadata that includes language name, optional language version, and an optional language dialect. |
|
String type, Fortran CHARACTER(n) |
|
Subprogram description. Uses SubclassData1. |
|
Array subrange. |
|
Subrange type. This is somewhat similar to DISubrange, but it is also a DIType. |
|
Type array for a subprogram. |
|
Base class for template parameters. |
|
Base class for types. |
|
Base class for variables. |
|
DOTGraphTraits ‐ Template class that can be specialized to customize how graphs are converted to 'dot' graphs. When specializing, you may inherit from DefaultDOTGraphTraits if you don't need to override everything. |
|
This class implements a trivial dead store elimination. We consider only the redundant stores that are local to a single Basic Block. |
|
Wrapper for a function that represents a value that functionally represents the original function. This can be a function, global alias to a function, or an ifunc. |
|
The Data class implementation for DWARF v5 accelerator table. Unlike the Apple Data classes, this class is just a DIE wrapper, and does not know to serialize itself. The complete serialization logic is in the emitDWARF5AccelTable function. |
|
A single DWARF abbreviation declaration (code, tag, children, attributes). |
|
A set of DWARF abbreviation declarations. |
|
The accelerator tables are designed to allow efficient random access (using a symbol name as a key) into debug info by providing an index of the debug info DIEs. This class implements the common functionality of Apple and DWARF 5 accelerator tables. TODO: Generalize the rest of the AppleAcceleratorTable interface and move it to this class. |
|
An absolute address range [LowPC, HighPC) within a section.] |
|
Encapsulates a DWARF attribute value and all of the data required to describe the attribute value. |
|
|
|
This class is used to maintain a CFI state, referred to as an unwinding row, during CFI analysis. The only way to modify the state is by updating it with a CFI directive. |
|
DWARFContext This data structure is the top level entity that deals with dwarf debug information parsing. The actual data is supplied through DWARFObj. |
|
A DWARFDataExtractor (typically for an in‐memory copy of an object‐file section) plus a relocation map for that section, if there is one. |
|
A DataExtractor suitable use for parsing dwarf from memory. Clients use Relocator::getRelocatedValueImpl to relocate values as appropriate. |
|
A class representing an address table as specified in DWARF v5. The table consists of a header followed by an array of address values from .debug_addr section. |
|
A parsed .debug_frame or .eh_frame section |
|
DWARFDebugInfoEntry ‐ A DIE with only the minimum required data. |
|
.debug_names section consists of one or more units. Each unit starts with a header, which is followed by a list of compilation units, local and foreign type units. |
|
Represents structure for holding and parsing .debug_pub* tables. |
|
A DWARF .debug_ranges range list. |
|
A class representing a single rangelist. |
|
Utility class that carries the DWARF compile/type unit and the debug info entry in an object. |
|
A base class for DWARF list entries, such as range or location list entries. |
|
A class representing a table of lists as specified in the DWARF v5 standard for location lists and range lists. The table consists of a header followed by an array of offsets into a DWARF section, followed by zero or more list entries. The list entries are kept in a map where the keys are the lists' section offsets. |
|
A class representing the header of a list table such as the range list table in the .debug_rnglists section. |
|
A base class for lists of entries that are extracted from a particular section, such as range lists or location lists. |
|
A single location within a location list. Entries are stored in the DWARF5 form even if they originally come from a DWARF<=4 location list. |
|
Represents a single DWARF expression, whose value is location‐dependent. Typically used in DW_AT_location attributes to describe the location of objects. |
|
An abstract base class for various kinds of location tables (.debug_loc, .debug_loclists, and their dwo variants). |
|
A DWARF compile or type unit and its parsed DIEs. |
|
Base class describing the header of any kind of "unit." Some information is specific to certain unit types. We separate this class out so we can parse the header before deciding what specific kind of unit to construct. |
|
Describe a collection of units. Intended to hold all units either from .debug_info and .debug_types, or from .debug_info.dwo and .debug_types.dwo. |
|
A class that verifies DWARF debug information given a DWARF Context. |
|
Direct ELF writer for DWP output. |
|
Printer pass for the |
|
Legacy pass |
|
Printer pass for the |
|
Upgrade DXIL‐style metadata into their LLVM representations |
|
(v a, b) ‐ Represent a DAG tree value. DAG inits are required to have at least one value then a (possibly empty) list of arguments. Each argument can have a name associated with it. |
|
'dag' ‐ Represent a dag fragment |
|
Data Dependency Graph |
|
A parsed version of the target data layout string in and methods for querying it. |
|
This represents the llvm.dbg.assign instruction. |
|
This represents the llvm.dbg.declare instruction. |
|
This is the common base class for debug info intrinsics. |
|
This represents the llvm.dbg.label instruction. |
|
For each inlined instance of a source‐level label, keep the corresponding DBG_LABEL instruction. The DBG_LABEL instruction could be used to generate a temporary (assembler) label before it. |
|
Records a position in IR for a source label (DILabel). Corresponds to the llvm.dbg.label intrinsic. |
|
Per‐instruction record of debug‐info. If an Instruction is the position of some debugging information, it points at a DbgMarker storing that info. Each marker points back at the instruction that owns it. Various utilities are provided for manipulating the DbgRecords contained within this marker. |
|
Base class for non‐instruction debug metadata records that have positions within IR. Features various methods copied across from the Instruction class to aid ease‐of‐use. DbgRecords should always be linked into a DbgMarker's StoredDbgRecords list. The marker connects a DbgRecord back to its position in the BasicBlock. |
|
A typed tracking MDNode reference that does not require a definition for its parameter type. Necessary to avoid including DebugInfoMetadata.h, which has a significant impact on compile times if included in this file. |
|
Thin wrapper around a block successor iterator. |
|
Thin wrapper around a block successor iterator. |
|
///////////////////////////////////// |
|
A definition of a variable; can represent either a debug. |
|
For each user variable, keep a list of instruction ranges where this variable is accessible. The variables are listed in order of appearance. |
|
This represents the llvm.dbg.value instruction. |
|
Utility class used to find and store the live debug ranges for variables in a module. |
|
This is the common base class for debug info intrinsics for variables. |
|
Represents the location at which a variable is stored. |
|
Record of a variable value‐assignment, aka a non instruction representation of the dbg.value intrinsic. |
|
Eliminate dead arguments (and return values) from functions. |
|
Empty stub of DebugEpochBase used when ABI‐breaking checks are disabled. |
|
Base class for debug information backends. Common functionality related to tracking which variables and scopes are alive at a given PC live here. |
|
Utility to find all debug info in a module. |
|
Inlining location extracted from debug info. |
|
A debug info location. |
|
Class used to determine the live ranges of debug variables in IR using SSA construction (via the SSAUpdaterImpl class), used for analysis purposes. |
|
Base class for tracking ValueAsMetadata/DIArgLists with user lookups and Owner callbacks outside of ValueAsMetadata. |
|
Identifies a unique instance of a variable. |
|
Identifies a unique instance of a whole variable (discards/ignores fragment information). |
|
DebugifyCustomPassManager wraps each pass with the debugify passes if needed. NOTE: We support legacy custom pass manager only. TODO: Add New PM support for custom pass manager. |
|
Tracks a collection of debuginfod artifacts on the local filesystem. |
|
Specialization of the integer state for a decreasing value, hence 0 is the best state and ~0u the worst. |
|
Represents the operation icmp (X & Mask) pred C, where pred can only be eq or ne. |
|
AL ‐ Represent a reference to a 'def' in the description |
|
Default traits class for extracting a graph from an analysis pass. |
|
Like DefaultFoldingSetTrait, but for ContextualFoldingSets. |
|
DefaultDOTGraphTraits ‐ This class provides the default implementations of all of the DOTGraphTraits methods. If a specialization does not need to override all methods here it should inherit so that it can get the default implementations. |
|
This cast trait just provides the default implementation of doCastIfPossible to make CastInfo specializations more declarative. The |
|
This class provides default implementations for FoldingSetTrait implementations. |
|
The default (manual heuristics) implementation of the InlineAdvisor. This implementation does not need to keep state between inliner pass runs, and is reusable as‐is for inliner pass test scenarios, as well as for regular use. |
|
Simple struct used to hold a Register value and the instruction which defines it. |
|
Implements the delta debugging algorithm (A. Zeller '99) for minimizing arbitrary sets using a predicate function. |
|
B‐tree mapping file indices to rewrite deltas with fast accumulated lookup. |
|
An analysis that produces |
|
Printer pass for DemandedBits |
|
Represents the full denormal controls for a function, including the default mode and the f32 specific override. |
|
Represent subnormal handling kind for floating point instruction inputs and outputs. |
|
An information struct used to provide DenseMap with the various necessary components for a given value type |
|
Forward iterator over occupied DenseMap / SmallDenseMap buckets. |
|
Implements a dense probed hash‐table based set. |
|
Dependence ‐ This class represents a dependence between two memory memory references in a function. It contains minimal information and is used in the very common situation where the compiler is unable to determine anything beyond the existence of a dependence; that is, it represents a confused dependence (see also FullDependence). In most cases (for output, flow, and anti dependences), the dependence implies an ordering, where the source must precede the destination; in contrast, input dependences are unordered. |
|
AnalysisPass to compute dependence information in a function |
|
Printer pass to dump DA results. |
|
Legacy pass manager pass to access dependence information |
|
Encapsulate some common data and functionality needed for different variations of data dependence graphs. |
|
DependenceInfo ‐ This class is the main dependence‐analysis driver. |
|
State for dereferenceable attribute |
|
Extension point for the Value hierarchy. All classes outside of lib/IR that wish to inherit from User should instead inherit from DerivedUser instead. Inheriting from this class is discouraged. |
|
A call site that could be devirtualized. |
|
A helper that repeats an SCC pass each time an indirect call is refined to a direct call by that pass. |
|
This is the base class for diagnostic handling in LLVM. The handleDiagnostics method must be overriden by the subclasses to handle diagnostic. The *RemarkEnabled methods can be overriden to control which remarks are enabled. |
|
This is the base abstract class for diagnostic reporting in the backend. The print method must be overloaded by the subclasses to print a user‐friendly message in the client of the backend (let us call it a frontend). |
|
Diagnostic information for debug metadata version reporting. This is basically a module and a version. |
|
Common features for diagnostics dealing with optimization remarks that are used by IR passes. |
|
Diagnostic information for ISel fallback path. |
|
Diagnostic information for stripping invalid debug metadata. |
|
Diagnostic information for inline asm reporting. This is basically a message and an optional location. |
|
Diagnostic information for IR instrumentation reporting. |
|
Common features for diagnostics dealing with optimization remarks that are used by machine passes. |
|
Diagnostic information for machine IR parser. |
|
Diagnostic information for MisExpect analysis. |
|
Common features for diagnostics dealing with optimization remarks that are used by both IR and MIR passes. |
|
Diagnostic information for optimization failures. |
|
Diagnostic information for the PGO profiler. |
|
Diagnostic information for stack size etc. reporting. This is basically a function and a size. |
|
Diagnostic information for the sample profiler. |
|
Diagnostic information for SMDiagnostic reporting. |
|
Diagnostic information for unsupported feature in backend. |
|
Diagnostic information for unsupported target intrinsics in backend. |
|
Common features for diagnostics with an associated location. |
|
Interface for custom diagnostic printing. |
|
Basic diagnostic printer that uses an underlying raw_ostream. |
|
Directed graph |
|
Options to disable Loop Idiom Recognize, which can be shared with other passes. |
|
Placeholder metadata for operands of distinct MDNodes. |
|
Hoist/decompose integer division and remainder instructions to enable CFG improvements and better codegen. |
|
Compute divergence starting with a divergent branch. |
|
A MemorySSAWalker that does no alias queries, or anything else. It simply returns the links as they were constructed by the builder. |
|
Base class for the actual dominator tree node. |
|
Default DomTreeNode traits for NodeT. The default implementation assume a Function‐like NodeT. Can be specialized to support different node types. |
|
A DomainValue is a bit like LiveIntervals' ValNo, but it also keeps track of execution domains. |
|
Analysis pass which computes a |
|
DominanceFrontierBase ‐ Common base class for computing forward and inverse dominance frontiers for a function. |
|
Printer pass for the |
|
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree. |
|
Analysis pass which computes a |
|
Core dominator tree base class. |
|
Printer pass for the |
|
Verifier pass for the |
|
Legacy analysis pass which computes a |
|
A base class to collect and print dropped debug information variable statistics. |
|
A class to collect and print dropped debug information due to LLVM IR optimization passes. After every LLVM IR pass is run, it will print how many #dbg_values were dropped due to that pass. |
|
A class to collect and print dropped debug information due to MIR optimization passes. After every MIR pass is run, it will print how many #DBG_VALUEs were dropped due to that pass. |
|
This pass is required by interprocedural register allocation. It forces codegen to follow bottom up order on call graph. |
|
Stupid priority advisor which just enqueues in virtual register number order, for debug purposes only. |
|
Duration value type. |
|
DwarfInstrProfCorrelator ‐ A child of InstrProfCorrelatorImpl that takes DWARF debug info as input to correlate profiles. |
|
Data for a string pool entry. |
|
DwarfStringPoolEntryRef: Dwarf string pool entry reference. |
|
DwarfStringPoolEntry with string keeping externally. |
|
Dynamically sized arbitrary‐precision integer. |
|
This class wraps a std::error_code in a Error. |
|
Extended Value Type. Capable of holding value types which are not native for any processor (such as the i12345 type), as well as the types an MVT can represent. |
|
Context‐sensitive CaptureAnalysis provider, which computes and caches the earliest common dominator closure of all captures. It provides a good approximation to a precise "captures before" analysis. |
|
A simple and fast domtree‐based CSE pass. |
|
A pass that transforms external global definitions into declarations. |
|
Pass embeds a copy of the module optimized with the provided pass pipeline into a global variable. |
|
ReleaseModeModelRunner ‐ production mode implementation of the MLModelRunner. It uses an AOT‐compiled SavedModel for efficient execution. |
|
The "value type" of StringSet represented as an empty struct. |
|
Builder class for ExecutionEngines. Use this by stack‐allocating a builder, chaining the various set* methods, and terminating it with a .create() call. |
|
Compact runtime entry mapping an enumeration value to name string(s). |
|
Compile‐time data representation of enum entries. Only use for constexpr variables passed to BUILD_ENUM_STRINGS, do NOT access the created variable directly in code! The idea is that this is only used at compile‐time to build a more compact and relocation‐free representation in the binary. |
|
Lookup table wrapping compact enum‐to‐string storage. |
|
Compile‐time storage packing enum string entries and character data. |
|
Fixed‐size array indexed by values of a scoped enumeration. |
|
A cache of ephemeral values within a function. |
|
Collection of equivalence classes with insert, union, and find operations. |
|
Lightweight error class with error context and mandatory checking. |
|
Helper for Errors used as out‐parameters. |
|
Helper for testing applicability of, and applying, handlers for ErrorInfo types. |
|
Base class for user error types. Users should declare their error types like: |
|
Base class for error info classes. Do not extend this directly: Extend the ErrorInfo template subclass instead. |
|
Special ErrorInfo subclass representing a list of ErrorInfos. Instances of this class are constructed by joinError. |
|
Represents either an error or a value T. |
|
Subclass of Error for the sole purpose of identifying the success path in the type system. This allows to catch invalid conversion to Expected<T> at compile time. |
|
EscapeEnumerator ‐ This is a little algorithm to find all escape points from a function so that "finally"‐style code can be inserted. In addition to finding the existing return and unwind instructions, it also (if necessary) transforms any call instructions into invokes and sends them to a landing pad. |
|
This class evaluates LLVM IR, producing the Constant representing each SSA instruction. |
|
Cost of evicting interference ‐ used by default advisor, and the eviction chain heuristic in RegAllocGreedy. |
|
Abstract interface for implementation execution of LLVM modules, designed to support both interpreter and just‐in‐time (JIT) compiler implementations. |
|
Helper class for helping synchronize access to the global address map table. Access to this class should be serialized under a mutex. |
|
!exists<type>(expr) ‐ Dynamically determine if a record of |
|
Helper for check‐and‐exit error handling. |
|
Tagged union holding either a T or a Error. |
|
Helper for Expected<T>s used as out‐parameters. |
|
A class to help implement exponential backoff. |
|
Used to describe addressing mode similar to ExtAddrMode in CodeGenPrepare. It holds the register values, the scale value and the displacement. It also holds a descriptor for the expression used to calculate the address from the operands. |
|
A wrapper pass for external alias analyses. This just squirrels away the callback used to run any analyses and register their results. |
|
A specialized pseudo source value for holding external symbol values. |
|
A pass manager to run a set of extra function passes if the ShouldRunExtraPasses marker analysis is present. This allows passes to request additional transformations on demand. An example is extra simplifications after loop‐vectorization, if runtime checks have been added. |
|
A pass manager to run a set of extra loop passes if the MarkerTy analysis is present. This allows passes to request additional transformations on demand. An example is doing additional runs of SimpleLoopUnswitch. |
|
This instruction extracts a single (scalar) element from a VectorType value |
|
This instruction extracts a struct member or array element value from an aggregate value. |
|
Owning container that stores elements in a complete binary search tree formatted in Eytzinger (breadth‐first) order. |
|
Non‐owning view of a buffer formatted as a complete binary search tree in Eytzinger (breadth‐first) order. |
|
This instruction compares its operands according to the predicate given to the constructor. It only operates on floating point values or packed vectors of floating point values. The operands must be identical types. Represents a floating point comparison operator. |
|
This provides a helper for copying FMF from an instruction or setting specified flags. |
|
Binary operators support fast‐math flags, users should not use this class directly, BinaryOperator can create instructions with correct type automatically. |
|
This class represents an extension of floating point types. |
|
Utility class for floating point operations which can have information about relaxed accuracy requirements attached to them. |
|
FPPassManager manages BBPassManagers and FunctionPasses. It batches all function passes and basic block pass managers together and sequence them to process one function at a time before processing next function. |
|
This class represents a cast from floating point to signed integer. |
|
This class represents a cast from floating point to unsigned integer |
|
This class represents a truncation of floating point types. |
|
Unary operators support fast‐math flags, users should not use this class directly, Unary can create instructions with correct type automatically. |
|
This class provides support for representing a failure result, or a valid value of type |
|
FoldingSetNode that caches a precomputed FoldingSetNodeID. |
|
This is a fast‐path instruction selection class that generates poor code and doesn't support illegal types or non‐trivial lowering, but runs quickly. |
|
Convenience struct for specifying and reasoning about fast‐math flags. |
|
Provide fast‐math flags storage, instructions that support fast‐math flags should inherit from this class. |
|
A parser for the __llvm_faultmaps section generated by the FaultMaps class declared in llvm/CodeGen/FaultMaps.h. This parser is version locked with with the __llvm_faultmaps section generated by the version of LLVM that includes it. No guarantees are made with respect to forward or backward compatibility. |
|
Class used to store the subtarget bits in the tables created by tablegen. |
|
Container class for subtarget features. This is a constexpr reimplementation of a subset of std::bitset. It would be nice to use std::bitset directly, but it doesn't support constant initialization. |
|
An instruction for ordering other memory operations. |
|
X.Y ‐ Represent a reference to a subfield of a variable |
|
An implementation of WritableBinaryStream backed by an llvm FileOutputBuffer. |
|
This type represents a file cache system that manages caching of files. It encapsulates a caching function and the directory path where the cache is stored. To request an item from the cache, pass a unique string as the Key. For hits, the cached file will be added to the link and this function will return AddStreamFn(). For misses, the cache will return a stream callback which must be called at most once to produce content for the stream. The file stream produced by the stream callback will add the file to the link after the stream is written to. ModuleName is the unique module identifier for the bitcode module the cache is being checked for. |
|
FileCheck class takes the request and exposes various methods that use information from the request. |
|
Abstract base class for recording a FileCheck diagnostic for a pattern (e.g., |
|
A |
|
Contains info about various FileCheck options. |
|
Captures file system interaction and generates data to be later replayed with the RedirectingFileSystem. |
|
This class wraps a filename and another Error. |
|
Struct holding Line:Column location |
|
Struct holding a semiopen range [Start; End)] |
|
FileOutputBuffer ‐ This interface provides simple way to create an in‐memory buffer which will be written to a file. During the lifetime of these objects, the content or existence of the specified file is undefined. That is, creating an OutputBuffer for a file may immediately remove the file. If the FileOutputBuffer is committed, the target file's content will become the buffer content at the time of the commit. If the FileOutputBuffer is not committed, the file will be deleted in the FileOutputBuffer destructor. |
|
FilePermssionsApplier helps to copy permissions from an input file to an output one. It memorizes the status of the input file and can apply permissions and dates to the output file. |
|
FileRemover ‐ This class is a simple object meant to be stack allocated. If an exception is thrown from a region, the object removes the filename specified (if deleteIt is true). |
|
Find the first index where a type appears in a list of types. |
|
FixedNumOperandTraits ‐ determine the allocation regime of the Use array when it is a prefix to the User object, and the number of Use objects is known at compile time. |
|
The fixed point semantics work similarly to fltSemantics. The width specifies the whole bit width of the underlying scaled integer (with padding if any). The scale represents the number of fractional bits in this type. When HasUnsignedPadding is true and this type is unsigned, the first bit in the value this represents is treated as padding. |
|
A specialized PseudoSourceValue for holding FixedStack values, which must include a frame index. |
|
FixedStreamArray is similar to VarStreamArray, except with each record having a fixed‐length. As with VarStreamArray, there is no upfront cost associated with building or copying a FixedStreamArray, as the memory for each element is not read from the backing stream until that element is iterated. |
|
Class to represent fixed width SIMD vectors |
|
Marker class to iterate over the elements of a Region in flat mode. |
|
A wrapper of a binary basic block. |
|
A wrapper of binary function with basic blocks and jumps. |
|
A wrapper of a jump between two basic blocks. |
|
Helper class to format to a |
|
!foldl (a, b, expr, start, lst) ‐ Fold over a list. |
|
Non‐templated base class for FoldingSet and ContextualFoldingSet, holding the memory management and probing that does not depend on the node type. |
|
An implementation detail that lets us share code between FoldingSet and ContextualFoldingSet. |
|
Forward iterator for FoldingSet and ContextualFoldingSet. |
|
Folding set node identifier. |
|
This class describes a reference to an interned FoldingSetNodeID, which can be a useful to store node id data rather than using plain FoldingSetNodeIDs, since the 32‐element SmallVector is often much larger than necessary, and the possibility of heap allocation means it requires a non‐trivial destructor call. |
|
This template class is used to "wrap" arbitrary types in an enclosing object so that they can be inserted into FoldingSets. |
|
This trait class is used to define behavior of how to "profile" (in the FoldingSet parlance) an object of a given type. The default behavior is to invoke a 'Profile' method on an object, but through template specialization the behavior can be tailored for specific types. Combined with the FoldingSetNodeWrapper class, one can add objects to FoldingSets that were not originally designed to have that behavior. |
|
FoldingSet with deterministic insertion‐order iteration. |
|
Pass which forces specific function attributes into the IR, primarily as a debugging tool. |
|
This is a helper class used for format_hex() and format_decimal(). |
|
This is a helper class for left_justify, right_justify, and center_justify. |
|
This class implements simplifications for calls to fortified library functions. |
|
Provides a cast trait that uses a defined pointer to pointer cast as a base for reference‐to‐reference casts. Note that it does not provide castFailed and doCastIfPossible because a pointer‐to‐pointer cast would likely just return |
|
Describes a register that needs to be forwarded from the prologue to a musttail call. |
|
Deleter that calls |
|
This class represents a freeze function that returns random concrete value if an operand is either a poison value or an undef value |
|
FullDependence ‐ This class represents a dependence between two memory references in a function. It contains detailed information about the dependence (direction vectors, etc.) and is used when the compiler is able to accurately analyze the interaction of the references; that is, it is not a confused dependence (see Dependence). In most cases (for output, flow, and anti dependences), the dependence implies an ordering, where the source must precede the destination; in contrast, input dependences are unordered. |
|
A proxy from a |
|
A handy container for a FunctionType+Callee‐pointer pair, which can be passed around as a single entity. This assists in replacing the use of PointerType::getElementType() to access the function's type, since that's slated for removal as part of the [opaque pointer types]project. |
|
FunctionComparator ‐ Compares two functions to determine whether or not. |
|
Class to handle necessary GlobalValue changes required by ThinLTO function importing, including linkage changes and any necessary renaming. |
|
The function importing pass |
|
The function importer is automatically importing function from other modules based on the provided summary informations. |
|
FunctionLoweringInfo ‐ This contains information that is global to a function that is used when lowering a region of the function. |
|
FunctionPass class ‐ This class is used to implement most global optimizations. Optimizations should subclass this class if they meet the following constraints: |
|
Provide suitable custom traits struct for function pointers. |
|
Printer pass for the FunctionPropertiesAnalysis results. |
|
Statistics pass for the FunctionPropertiesAnalysis results. |
|
Correctly update FunctionPropertiesInfo post‐inlining. A FunctionPropertiesUpdater keeps the state necessary for tracking the changes llvm::InlineFunction makes. The idea is that inlining will at most modify a few BBs of the Caller (maybe the entry BB and definitely the callsite BB) and potentially affect exception handling BBs in the case of invoke inlining. |
|
Function summary information to aid decisions and implementation of importing. |
|
Adaptor that maps from a function to its loops. |
|
Class to represent function types |
|
Data structure describing the variable locations in a function. Used as the result of the AssignmentTrackingAnalysis pass. Essentially read‐only outside of AssignmentTrackingAnalysis where it is built. |
|
Represents an integer addition. |
|
Represents overflowing add operations. G_UADDO, G_SADDO |
|
Represents overflowing add/sub operations that also consume a carry‐in. G_UADDE, G_SADDE, G_USUBE, G_SSUBE |
|
Represents overflowing add/sub operations. Only carry‐out: G_UADDO, G_SADDO, G_USUBO, G_SSUBO Carry‐in and carry‐out: G_UADDE, G_SADDE, G_USUBE, G_SSUBE |
|
Represents a logical and. |
|
Represent a G_ICMP or G_FCMP. |
|
Represents an any ext. |
|
Represents any generic load, including sign/zero extending variants. |
|
Represents any generic store, including truncating variants. |
|
Represents a binary operation, i.e, x = y op z. |
|
Represents overflowing binary operations. Only carry‐out: G_UADDO, G_SADDO, G_USUBO, G_SSUBO, G_UMULO, G_SMULO Carry‐in and carry‐out: G_UADDE, G_SADDE, G_USUBE, G_SSUBE |
|
Represents a G_BUILD_VECTOR. |
|
Represents a G_BUILD_VECTOR_TRUNC. |
|
An analysis pass which caches information about the Function. Records the function level information used by GCRoots. This pass depends on |
|
Garbage collection metadata for a single function. Currently, this information only applies to GCStrategies which use GCRoot. |
|
LowerIntrinsics ‐ This pass rewrites calls to the llvm.gcread or llvm.gcwrite intrinsics, replacing them with simple loads and stores as directed by the GCStrategy. It also performs automatic root initialization and custom intrinsic lowering. |
|
GCMetadataPrinter ‐ Emits GC metadata as assembly code. Instances are created, managed, and owned by the AsmPrinter. |
|
An analysis pass which caches information about the entire Module. Records both the function level information used by GCRoots and a cache of the 'active' gc strategy objects for the current Module. |
|
GCOVBlock ‐ Collects block information. |
|
Represent file of lines same with block_location_info in gcc. |
|
GCOVBuffer ‐ A wrapper around MemoryBuffer to provide GCOV specific read operations. |
|
GCOVFile ‐ Collects coverage information for one pair of coverage file (.gcno and .gcda). |
|
GCOVFunction ‐ Collects function information. |
|
The gcov‐style instrumentation pass |
|
GCPoint ‐ Metadata for a collector‐safe point in machine code. |
|
Common base class for representing values projected from a statepoint. Currently, the only projections available are gc.result and gc.relocate. |
|
Represents calls to the gc.relocate intrinsic. |
|
Represents calls to the gc.result intrinsic. |
|
GCRoot ‐ Metadata for a pointer to an object managed by the garbage collector. |
|
Represents a gc.statepoint intrinsic call. This extends directly from CallBase as the IntrinsicInst only supports calls and gc.statepoint is invokable. |
|
GCStrategy describes a garbage collector algorithm's code generation requirements, and provides overridable hooks for those needs which cannot be abstractly described. GCStrategy objects must be looked up through the Function. The objects themselves are owned by the Context and must be immutable. |
|
Represents a cast operation. It models the llvm::CastInst concept. The exception is bitcast. |
|
Represents a G_CONCAT_VECTORS. |
|
Represents a G_CONSTANT. |
|
Represents flags for the getelementptr instruction/expression. The following flags are supported: * inbounds (implies nusw) * nusw (no unsigned signed wrap) * nuw (no unsigned wrap) See LangRef for a description of their semantics. |
|
Represents either a G_SEXTLOAD, G_ZEXTLOAD, or G_FPEXTLOAD. |
|
Represents an integer‐like extending operation. |
|
Represents an integer‐like extending or truncating operation. |
|
Represents an extract subvector. |
|
Represents an extract vector element. |
|
Represents a floating point binary operation. |
|
Represent a G_FCMP. |
|
An floating‐point‐like constant. |
|
Represents a G_FPEXTLOAD. |
|
Represents a G_FPTRUNCSTORE. |
|
Represents a freeze. |
|
Represent a G_ICMP. |
|
An integer‐like constant. |
|
Provides the logic to execute GlobalISel match tables, which are used by the instruction selector and instruction combiners as their engine to match and apply MIR patterns. |
|
Simple wrapper that does the following. 1) Lazily evaluate the MachineFunction to compute CSEable instructions. 2) Allows configuration of which instructions are CSEd through CSEConfig object. Provides a method called get which takes a CSEConfig object. |
|
The actual analysis pass wrapper. |
|
The CSE Analysis object. This installs itself as a delegate to the MachineFunction to track new instructions as well as deletions. It however will not be able to track instruction mutations. In such cases, recordNewInstruction should be called (for eg inside MachineIRBuilder::recordInsertion). Also because of how just the instruction can be inserted without adding any operands to the instruction, instructions are uniqued and inserted lazily. CSEInfo should assert when trying to enter an incomplete instruction into the CSEMap. There is Opcode level granularity on which instructions can be CSE'd and for now, only Generic instructions are CSEable. |
|
Abstract class that contains various methods for clients to notify about changes. This should be the preferred way for APIs to notify changes. Typically calling erasingInstr/createdInstr multiple times should not affect the result. The observer would likely need to check if it was already notified earlier (consider using GISelWorkList). |
|
Simple wrapper observer that takes several observers, and calls each one for each event. If there are multiple observers (say CSE, Legalizer, Combiner), it's sufficient to register this to the machine function as the delegate. |
|
Eventually add other features such as caching/ser/deserializing to MIR etc. Those implementations can derive from GISelValueTracking and override computeKnownBitsImpl. |
|
Represents a G_IMPLICIT_DEF. |
|
Represents either G_INDEXED_LOAD, G_INDEXED_ZEXTLOAD or G_INDEXED_SEXTLOAD. |
|
Represents a G_INDEX_ZEXTLOAD/G_INDEXED_SEXTLOAD. |
|
Represents indexed loads. These are different enough from regular loads that they get their own class. Including them in GAnyLoad would probably make a footgun for someone. |
|
Represents a G_SEXTLOAD. |
|
Represents indexed stores. |
|
Represents a G_ZEXTLOAD. |
|
Represents a insert subvector. |
|
Represents an insert vector element. |
|
Represents an integer binary operation. |
|
Represents a call to an intrinsic. |
|
Represents a G_LOAD. |
|
Represents any type of generic load or store. G_LOAD, G_STORE, G_ZEXTLOAD, G_SEXTLOAD, G_FPEXTLOAD, G_FPTRUNCSTORE. |
|
Represents a logical binary operation. |
|
Provides common memory operand functionality. |
|
Represents a G_MERGE_VALUES. |
|
Represents G_BUILD_VECTOR, G_CONCAT_VECTORS or G_MERGE_VALUES. All these have the common property of generating a single value from multiple sources. |
|
Represents an integer multiplication. |
|
Represents a logical or. |
|
Represents a G_PHI. |
|
Represents a G_PTR_ADD. |
|
Represents a G_SEXTLOAD. |
|
Represents a threeway compare. |
|
Represents a G_SELECT. |
|
Represents a sext. |
|
Represents a shift left. |
|
Represents a G_SHUFFLE_VECTOR. |
|
Represents a splat vector. |
|
Represents a step vector. |
|
Represents a G_STORE. |
|
Represents an integer subtraction. |
|
Represents overflowing sub operations. G_USUBO, G_SSUBO |
|
Represents a trunc. |
|
Represents a G_UNMERGE_VALUES. |
|
A simple and fast domtree‐based GVN pass to hoist common expressions from sibling branches. |
|
true ‐ enabling the transformation. false ‐ disabling the transformation. None ‐ relying on a global default. Intended use is to create a default object, modify parameters with additional setters and then pass it to GVN. |
|
The core GVN pass object. |
|
Uses an "inverted" value numbering to decide the similarity of expressions and sinks similar expressions into successors. |
|
Represents a vscale. |
|
Represents a G_ZEXTLOAD. |
|
Represents a zext. |
|
Verifier for static convergence‐control token rules over IR or MIR. |
|
Cycle information for a function. |
|
Helper class for computing cycle information. |
|
Generic tagged DWARF‐like metadata node. |
|
A base class for all GenericMachineInstrs. |
|
Thin IR‐agnostic context for SSA analyses over LLVM IR or Machine IR. |
|
Traits providing IR‐specific type aliases for |
|
GenericScheduler shrinks the unscheduled zone using heuristics to balance the schedule. |
|
Base class for GenericScheduler. This class maintains information about scheduling candidates based on TargetSchedModel making it easy to implement heuristics for either preRA or postRA scheduling. |
|
Sync‐dependence analysis that finds join points and divergent cycle exits caused by divergent terminators. |
|
Analysis that identifies uniform values in a data‐parallel execution. |
|
Deleter for |
|
Computes which values and terminators are uniform vs divergent in a function. |
|
an instruction for type‐safe pointer arithmetic to access elements of arrays and structs |
|
This class implements a glob pattern matcher similar to the one found in bash, but with some key differences. Namely, that |
|
Pass to remove unused function declarations. |
|
GlobalMergeFunc is a ModulePass that implements a function merging mechanism using stable function hashes. It identifies and merges functions with matching hashes across modules to optimize binary size. |
|
Global function merging pass for new pass manager. |
|
GlobalNumberState assigns an integer to each global value in the program, which is used by the comparison routine to order references to globals. This state must be preserved throughout the pass, because Functions and other globals need to maintain their relative order. Globals are assigned a number when they are first visited. This order is deterministic, and so the assigned numbers are as well. When two functions are merged, neither number is updated. If the symbols are weak, this would be incorrect. If they are strong, then one will be replaced at all references to the other, and so direct callsites will now see one or the other symbol, and no update is necessary. Note that if we were guaranteed unique names, we could just compare those, but this would not work for stripped bitcodes or for those few symbols without a name. |
|
Optimize globals that never have their address taken. |
|
Pass to perform split of global variables. |
|
As we analyze each global or thread‐local variable, keep track of some information about it. If we find out that the address of the global is taken, none of this info will be accurate. |
|
A specialized pseudo source value for holding GlobalValue values. |
|
Function and variable summary information to aid decisions and implementation of importing. |
|
Map from global value GUID to corresponding summary structures. Use a DenseMap for O(1) lookup and a std::deque for storage. std::deque guarantees that pointers to elements are not invalidated by push_back, which is required because ValueInfo stores a raw pointer to elements of this container. |
|
Global variable summary information to aid decisions and implementation of importing. |
|
Analysis pass providing a never‐invalidated alias analysis result. |
|
An alias analysis result set for globals. |
|
Legacy wrapper pass to provide the GlobalsAAResult object. |
|
Traits for traversing a graph type without copying it. |
|
A reusable client that can perform HTTPRequests through a network socket. |
|
A stateless description of an outbound HTTP request. |
|
A handler for state updates occurring while an HTTPRequest is performed. Can trigger the client to abort the request by returning an Error from any of its methods. |
|
An HTTP server which can listen on a single TCP/IP port for HTTP requests and delgate them to the appropriate registered handler. |
|
This is a public interface to the hardware address sanitizer. |
|
This class is used to form a handle around another node that is persistent and is updated across invocations of replaceAllUsesWith on its operand. This node should be directly created by end‐users and not added to the AllNodes list. |
|
Attributes of a target dependent hardware loop. |
|
Do not resolve anything, but keep track of whether a given variable was referenced. |
|
Interface to help hash various types through a hasher type. |
|
Declares the hasher member, and functions forwarding directly to the hasher. |
|
A HashNode is an entry in an OutlinedHashTree, holding a hash value and a collection of Successors (other HashNodes). If a HashNode has a positive terminal value (Terminals > 0), it signifies the end of a hash sequence with that occurrence count. |
|
HashNodeStable is the serialized, stable, and compact representation of a HashNode. |
|
The analysis. |
|
This holds details about a histogram operation ‐‐ a load ‐> update ‐> store sequence where each lane in a vector might be updating the same element as another lane. |
|
Pass to outline cold regions. |
|
HungoffOperandTraits ‐ determine the allocation regime of the Use array when it is not a prefix to the User object, but allocated at an unrelated heap address. |
|
This implementation of LoopSafetyInfo use ImplicitControlFlowTracking to give precise answers on "may throw" queries. This implementation uses cache that should be invalidated by calling the methods insertInstructionTo and removeInstruction whenever we modify a basic block's contents by adding or removing instructions. |
|
This instruction compares its operands according to the predicate given to the constructor. It only operates on integers or pointers. The operands must be identical types. Represent an integer comparison operator. |
|
Determine the iterated dominance frontier, given a set of defining blocks, and optionally, a set of live‐in blocks. |
|
Represent the ILP of the subDAG rooted at a DAG node. |
|
A set of parameters to control various transforms performed by IPSCCP pass. |
|
Pass to perform interprocedural constant propagation. |
|
This pass prints the IR2Vec embeddings for instructions, basic blocks, and functions. |
|
This analysis provides the vocabulary for IR2Vec. The vocabulary provides a mapping between an entity of the IR (like opcode, type, argument, etc.) and its corresponding embedding. |
|
This pass prints the embeddings in the vocabulary |
|
Helper class that provides common functionality to manifest IR attributes. |
|
This provides a uniform API for creating instructions and inserting them into a basic block: either at the end of a BasicBlock, or at a specific iterator location in a block. |
|
Common base class shared among various IRBuilders. |
|
Provides an 'InsertHelper' that calls a user‐provided callback after performing the default insertion. |
|
This provides the default implementation of the IRBuilder 'InsertHelper' method that is called whenever an instruction is created by IRBuilder and needs to be inserted. |
|
IRBuilderFolder ‐ Interface for constant folding in IRBuilder. |
|
Base class for describing how to mutate a module. mutation functions for each IR unit forward to the contained unit. |
|
Entry point for configuring and running IR mutations. |
|
IRNormalizer aims to transform LLVM IR into normal form. |
|
Helper to describe and deal with positions in the LLVM‐IR. |
|
Map an IR unit type to its IRUnitKind. |
|
A type‐erased reference to the IR unit a pass or analysis is running on, together with the kind of IR unit it refers to. |
|
Struct to hold information about a partially invariant condition. |
|
IVStrideUse ‐ Keep track of one use of a strided induction variable. The Expr member keeps track of the expression, User is the actual user instruction of the operand, and 'OperandValToReplace' is the operand of the User that is the use. |
|
Analysis pass that exposes the |
|
Printer pass for the |
|
Interface for visiting interesting IV users that are recognized but not simplified by this utility. |
|
Discriminated union of Pass ID types. |
|
This class represents an immutable (functional) list. It is implemented as a smart pointer (wraps ImmutableListImpl), so it is intended to always be copied by value as if it were a pointer. This interface matches ImmutableSet and ImmutableMap. ImmutableList objects should almost never be created directly, and instead should be created by ImmutableListFactory objects that manage the lifetime of a group of lists. When the factory object is reclaimed, all lists created by that factory are released as well. |
|
Factory that allocates and uniques immutable lists of element type |
|
Cons‐cell node for an immutable list: a head element and a tail pointer. |
|
Persistent map of |
|
Factory‐backed mutable view of an immutable map. |
|
NPM analysis to provide an externally‐built ModuleSummaryIndex (e.g. the combined index from LTO). |
|
Legacy wrapper pass to provide the ModuleSummaryIndex object. |
|
ImmutablePass class ‐ This class is used to provide information that does not need to be run. This is useful for things like target information. |
|
An immutable (persistent) ordered set backed by a reference‐counted AVL tree. |
|
A factory‐backed mutable view of an immutable set. |
|
This class allows to keep track on instructions with implicit control flow. These are instructions that may not pass execution to their successors. For example, throwing calls and guards do not always do this. If we need to know for sure that some instruction is guaranteed to execute if the given block is reached, then we need to make sure that there is no implicit control flow instruction (ICFI) preceding it. For example, this check is required if we perform PRE moving non‐speculable instruction to other place. |
|
Calculate and dump ThinLTO specific inliner stats. The main statistics are: (1) Number of inlined imported functions, (2) Number of imported functions inlined into importing module (indirect), (3) Number of non imported functions inlined into importing module (indirect). The difference between first and the second is that first stat counts all performed inlines on imported functions, but the second one only the functions that have been eventually inlined to a function in the importing module (by a chain of inlines). Because llvm uses bottom‐up inliner, it is possible to e.g. import function |
|
Factory for creating and updating persistent AVL trees. |
|
A reference‐counted node in a persistent (functional) AVL tree. |
|
Bidirectional in‐order iterator over the nodes of an ImutAVLTree. |
|
Generic iterator that wraps a T::TreeTy::iterator and exposes iterator::getValue() on dereference. |
|
Generic definition of comparison operations for elements of immutable containers that defaults to using std::equal_to<> and std::less<> to perform comparison of elements. |
|
Forward declaration of a factory for interval‐keyed immutable AVL trees. Declared here so it can be a friend of |
|
Traits class used by ImmutableMap. While both the first and second elements in a pair are used to generate profile information, only the first element (the key) is used by isEqual and isLess. |
|
Generic profile template. The default behavior is to invoke the profile method of an object. Specializations for primitive integers and generic handling of pointers is done below. |
|
Profile traits for integers. |
|
Specialization of the integer state for an increasing value, hence ~0u is the best state and 0 the worst. |
|
This class represents an entry in the slot index list held in the SlotIndexes pass. It should not be used directly. See the SlotIndex & SlotIndexes classes for the public interface to this information. |
|
Reader for the indexed binary instrprof format. |
|
Dense map from keys to values, indexed through a key‐to‐index functor. |
|
Represents a memory reference as a base pointer and a set of indexing operations. For example given the array reference A[i][2j+1][3k+2]in a 3‐dim loop nest: for(i=0;i<n;++i) for(j=0;j<m;++j) for(k=0;k<o;++k) ... A[i][2j+1][3k+2]... We expect: BasePointer ‐> A Subscripts ‐> [{0,+,1}<%for.i>][{1,+,2}<%for.j>][{2,+,3}<%for.k>] Sizes ‐> [m][o][4] |
|
Indirect Branch Instruction. |
|
A struct for saving information about induction variables. |
|
A pass which infers function attributes from the names and signatures of function declarations in a module. |
|
Data structure to hold cached (LLVM‐IR) information. |
|
Strategy that injects operations into the function. |
|
Capture state between an inlining decision having had been made, and its impact being observable. When collecting model training data, this allows recording features/decisions/partial reward data sets. |
|
Interface for deciding whether to inline a call site or not. |
|
The InlineAdvisorAnalysis is a module pass because the InlineAdvisor needs to capture state right before inlining commences over a module. |
|
Printer pass for the InlineAdvisorAnalysis results. |
|
Provides context on when an inline advisor is constructed in the pipeline (e.g., link phase, inline driver). |
|
Represents the cost of inlining a function. |
|
This class captures the data input to the InlineFunction call, and records the auxiliary results produced by it. |
|
Thresholds to tune inline cost analysis. The inline cost analysis decides the condition to apply a threshold and applies it. Otherwise, DefaultThreshold is used. If a threshold is Optional, it is applied only when it has a valid value. Typically, users of inline cost analysis obtain an InlineParams object through one of the |
|
InlineResult is basically true or false. For false results the message describes a reason. |
|
The inliner pass for the new pass manager. |
|
An analysis over an "outer" IR unit that provides access to an analysis manager over an "inner" IR unit. The inner unit must be contained in the outer unit. |
|
Strategy to split a random block and insert a random CFG in between. |
|
This instruction inserts a single (scalar) element into a VectorType value |
|
Strategy that generates new function calls and inserts function signatures to the modules. If any signatures are present in the module it will be called. |
|
Strategy to insert PHI Nodes at the head of each basic block. |
|
This instruction inserts a struct field of array element value into an aggregate value. |
|
The core instruction combiner logic. |
|
Strategy that deletes instructions when the Module is too large. |
|
Strategy that modifies instruction attributes and operands. |
|
InstSimplifyFolder ‐ Use InstructionSimplify to fold operations to existing values. Also applies target‐specific constant folding when not using InstructionSimplify. |
|
Run instruction simplification across each instruction in the function. |
|
Base class for instruction visitors |
|
!instances<type>([regex]) ‐ Produces a list of records whose type is |
|
InstrInfoQuery provides an interface to query additional information for instructions like metadata or keywords like nsw, which provides conservative results if the users specified it is safe to use. |
|
An itinerary represents the scheduling information for an instruction. This includes a set of stages occupied by the instruction and the pipeline cycle in which operands are read and written. |
|
Itinerary data supplied by a subtarget to be used by a target. |
|
This represents the llvm.instrprof.callsite intrinsic. It is structurally like the increment or step counters, hence the inheritance relationship, albeit somewhat tenuous (it's not 'counting' per se) |
|
A base class for all instrprof counter intrinsics. |
|
InstrProfCorrelator ‐ A base class used to create raw instrumentation data to their functions. |
|
InstrProfCorrelatorImpl ‐ A child of InstrProfCorrelator with a template pointer type so that the ProfileData vector can be materialized. |
|
This represents the llvm.instrprof.cover intrinsic. |
|
This represents the llvm.instrprof.increment intrinsic. |
|
This represents the llvm.instrprof.increment.step intrinsic. |
|
A base class for all instrprof intrinsics. |
|
A file format agnostic iterator over profiling data. |
|
Trait for lookups into the on‐disk hash table for the binary instrprof format. |
|
A base class for instrprof mcdc intrinsics that require global bitmap bytes. |
|
This represents the llvm.instrprof.mcdc.parameters intrinsic. |
|
This represents the llvm.instrprof.mcdc.tvbitmap.update intrinsic. |
|
Options for the frontend instrumentation based profiling pass. |
|
Base class and interface for reading profiling data of any known instrprof format. Provides an iterator over NamedInstrProfRecords. |
|
Name matcher supporting fuzzy matching of symbol names to names in profiles. |
|
Profiling information for a single function. |
|
Writer for instrumentation based profile data. |
|
A symbol table used for function [IR]PGO name look‐up with keys (such as pointers, md5hash values) to the function. A function's [IR]PGO name or name's md5hash are used in retrieving the profile data of the function. See |
|
This represents the llvm.instrprof.timestamp intrinsic. |
|
This represents the llvm.instrprof.value.profile intrinsic. |
|
Instrumentation based profiling lowering pass. This pass lowers the profile instrumented code generated by FE or the IR based instrumentation pass. |
|
These values represent a non‐pipelined step in the execution of an instruction. Cycles represents the number of discrete time slots needed to complete the stage. Units represent the choice of functional units that can be used to complete the stage. Eg. IntUnit1, IntUnit2. NextCycles indicates how many cycles should elapse from the start of this stage to the start of the next stage in the itinerary. A value of ‐1 indicates that the next stage should start immediately after the current one. For example: |
|
The legacy pass manager's instcombine pass. |
|
Record instruction ordering so we can query their relative positions within a function. Meta instructions are given the same ordinal as the preceding non‐meta instruction. Class state is invalid if MF is modified after calling initialize. |
|
This pass is responsible for selecting generic machine instructions to target‐specific instructions. It relies on the InstructionSelector provided by the target. Selection is done by examining blocks in post‐order, and instructions in reverse order. |
|
InstructionWorklist ‐ This is the worklist management logic for InstCombine and other simplification passes. |
|
The Instrumentor pass. |
|
Equivalence classes over the small integers 0 .. N‐1. |
|
'7' ‐ Represent an initialization by a literal integer value. |
|
'int' ‐ Represent an integer value of no particular size |
|
This class represents a cast from an integer to a pointer. |
|
Represents an inclusive integer interval [Begin, End]where Begin <= End. |
|
State for an integer range. |
|
Simple state with integers encoding. |
|
Class to represent integer types. Note that this class is also used to represent the built‐in integer types: Int1Ty, Int8Ty, Int16Ty, Int32Ty and Int64Ty. Integer representation type |
|
A MLModelRunner that asks for advice from an external agent, or host. It uses 2 files ‐ ideally named pipes ‐ one to send data to that agent, and one to receive advice. The data exchange uses the training logger (Utils/TrainingLogger.h) format. Specifically, the compiler will send the log header, set the context, and send observations; the host is expected to reply with a tensor value after each observation as a binary buffer that's conforming to the shape of the advice. Interleaved, the data closely resembles the training log for a log where we don't capture the reward signal. |
|
The group of interleaved loads/stores sharing the same stride and close to each other. |
|
Drive the analysis of interleaved memory accesses in the loop. |
|
Format object class for interleaved ranges. Supports specifying the separator and, optionally, the prefix and suffix to be printed surrounding the range. Uses the operator '<<' of the range element type for printing. The range type itself does not have to have an '<<' operator defined. |
|
A pass that internalizes all functions and variables other than those that must be preserved according to |
|
An interval data composed by a Left and Right points and an associated Value. PointT corresponds to the interval endpoints type. ValueT corresponds to the interval value type. |
|
Coalescing map from key intervals to values, stored as a compact B+‐tree. |
|
Traits for half‐open intervals [a;b) used by IntervalMap.] |
|
Traits for closed intervals [a;b]used by IntervalMap. |
|
IntervalMapOverlaps ‐ Iterate over the overlaps of mapped intervals in two IntervalMaps. The maps may be different, but the KeyT and Traits types should be the same. |
|
RegisterPressure computed within a region of instructions delimited by TopIdx and BottomIdx. During pressure computation, the maximum pressure per register pressure set is increased. Once pressure within a region is fully computed, the live‐in and live‐out sets are recorded. |
|
Interval tree that stores closed intervals and answers point queries. |
|
A wrapper class for inspecting calls to intrinsic functions. This allows the standard isa/dyncast/cast functionality to work with calls to intrinsic functions. |
|
A smart pointer to a reference‐counted object that inherits from RefCountedBase or ThreadSafeRefCountedBase. |
|
Class you can specialize to provide custom retain/release functionality for a type. |
|
A utility pass that does nothing, but preserves no analyses. |
|
A no‐op pass template which simply forces a specific analysis result to be invalidated. |
|
Marker wrapping a graph so iterators traverse it in inverse order. |
|
Invoke instruction. The SubclassData field is used to hold the calling convention of the call. |
|
!isa<type>(expr) ‐ Dynamically determine the type of an expression. |
|
Canonicalizer for mangled names. |
|
"Partial" demangler. This supports demangling a string into an AST (typically an intermediate stage in itaniumDemangle) and querying certain properties or partially printing the demangled name. |
|
Represents a symbol that has been evaluated to an address already. |
|
JITEventListener ‐ Abstract interface for use by the JIT to notify clients about significant events during compilation. For example, to notify profilers and debuggers that need to know where functions have been emitted. |
|
Represents a symbol in the JIT. |
|
Flags for symbols in the JIT. |
|
Symbol resolution interface. |
|
A JobSlot represents a single job slot that can be acquired from or released to a jobserver pool. This class is move‐only. |
|
The public interface for a jobserver client. This client is a lazy‐initialized singleton that is created on first use. |
|
This pass performs 'jump threading', which looks at blocks that have multiple predecessors and multiple successors. If one or more of the predecessors of the block can be proven to always jump to one of the successors, we forward the edge from the predecessor to the successor by duplicating the contents of this block. |
|
Helper that allows to insert a new assumption string in the known assumption set by creating a (static) object. |
|
Converts loops into loop‐closed SSA form. |
|
Performs Loop Invariant Code Motion Pass. |
|
This is an important class for using LLVM in a threaded context. It (opaquely) owns and manages the core "global" data of LLVM's core infrastructure, including the type and constant uniquing tables. LLVMContext itself provides no locking guarantees, so you should be careful to have one context per thread. |
|
RAII handle that manages the lifetime of the ToolOutputFile used to output remarks. On destruction (or when calling releaseFile()), this handle ensures that the optimization remarks are finalized and the RemarkStreamer is correctly deregistered from the LLVMContext. |
|
Streamer for LLVM remarks which has logic for dealing with DiagnosticInfo objects. |
|
Performs LoopNest Invariant Code Motion Pass. |
|
This class provides an interface for updating the loop pass manager based on mutations to the loop nest. |
|
Base class for LoadSDNode and StoreSDNode |
|
C++ class which implements the opaque lto_code_gen_t type. |
|
C++ class which implements the opaque lto_module_t type. |
|
This structure is used to retain landing pad info for the current function. |
|
The landingpad instruction holds all of the information necessary to generate correct exception handling. The landingpad instruction cannot be moved from the top of a landing pad block, which itself is accessible only from the 'unwind' edge of an invoke. This uses the SubclassData field in Value to store whether or not the landingpad is a cleanup. |
|
A function/module analysis which provides an empty |
|
This class is used to track the last run of a set of module/function passes. Invalidation are conservatively handled by the pass manager if a pass doesn't explicitly preserve the result. If we want to skip a pass, we should define a unique ID |
|
A template for translating between LLVM Values and LatticeKeys. Clients must provide a specialization of LatticeKeyInfo for their LatticeKey type. |
|
Atomic pointer that's lock‐free, but that can coordinate concurrent writes from a lazy generator. Should be reserved for cases where concurrent uses of a generator for the same storage is unlikely. |
|
Wraps a BFI to allow lazy computation of the block frequencies. |
|
This is an alternative analysis pass to BlockFrequencyInfoWrapperPass. The difference is that with this pass the block frequencies are not computed when the analysis pass is executed but rather when the BFI result is explicitly requested by the analysis client. |
|
This is an alternative analysis pass to BranchProbabilityInfoWrapperPass. The difference is that with this pass the branch probabilities are not computed when the analysis pass is executed but rather when the BPI results is explicitly requested by the analysis client. |
|
A lazily constructed view of the call graph of a module. |
|
An analysis pass which computes the call graph for a module. |
|
A pass which prints the call graph as a DOT file to a |
|
A pass which prints the call graph to a |
|
This is an alternative analysis pass to MachineBlockFrequencyInfo. The difference is that with this pass, the block frequencies are not computed when the analysis pass is executed but rather when the BFI result is explicitly requested by the analysis client. |
|
Analysis to compute lazy value information. |
|
This pass computes, caches, and vends lazy value constraint information. |
|
Printer pass for the LazyValueAnalysis results. |
|
Wrapper around LazyValueInfo. |
|
Default traits class for extracting a graph from an analysis pass. |
|
Legacy symbol resolution interface. |
|
The LegalityQuery object bundles together all the information that's needed to decide whether a given operation is legal or not. For efficiency, it doesn't make a copy of Types so care must be taken not to free it before using the query. |
|
The result of a query. It either indicates a final answer of Legal or Unsupported or describes an action that must be taken to make an operation more legal. |
|
A single rule in a legalizer info ruleset. The specified action is chosen when the predicate is true. Where appropriate for the action (e.g. for WidenScalar) the new type is selected using the given mutator. |
|
Sorting predicate to sort record pointers by name. |
|
Sorting predicate to sort record pointers by their unique ID. If you just need a deterministic order, use this, since it just compares two |
|
Sorting predicate to sort record pointers by their Name field. |
|
This class is used to track scope information. |
|
This class provides interface to collect and use lexical scoping information from machine instruction. |
|
LibCallSimplifier ‐ This class implements a collection of optimizations that replace well formed calls to library functions with a more optimal form. For example, replacing 'printf("Hello!")' with 'puts("Hello!")'. |
|
Tracks which library functions to use for a particular subtarget or function. |
|
This is the common base class for lifetime intrinsics. |
|
This SDNode is used for LIFETIME_START/LIFETIME_END values. |
|
Linear expression BasePtr + Index * Scale + Offset. Index, Scale and Offset all have the same bit width, which matches the pointer index size of BasePtr. Index may be nullptr if Scale is 0. |
|
This class provides the core functionality of linking in LLVM. It keeps a pointer to the merged module so far. It doesn't take ownership of the module since it is assumed that the user of this class will want to do something with it after the linking. |
|
[AL, AH, CL]‐ Represent a list of defs |
|
'list<Ty>' ‐ Represent a list of element values, all of which must be of the specified type. The type is stored in ElementTy. |
|
A helper class to return the specified delimiter string after the first invocation of operator StringRef(). Used to generate a comma‐separated list from a loop like so: |
|
Manages a passive (i.e., listening) UNIX domain socket |
|
LiveInterval ‐ This class represents the liveness of a register, or stack slot. |
|
Union of live intervals that are strong candidates for coalescing into a single register (either physical or virtual depending on the context). We expect the constituent live intervals to be disjoint, although we may eventually make exceptions to handle value‐based interference. |
|
A set of physical registers with utility functions to track liveness when walking backward/forward through a basic block. |
|
Result of a LiveRange query. This class hides the implementation details of live ranges, and it should be used as the primary interface for examining live ranges around instructions. |
|
This class represents the liveness of a register, stack slot, etc. It manages an ordered list of Segment objects. The Segments are organized in a static single assignment form: At places where a new value is defined or different values reach a CFG join a new segment with a new value number is used. |
|
Helper class for performant LiveRange bulk updates. |
|
A set of live virtual registers and physical register units. |
|
A set of register units used to track register liveness. |
|
Helper class for promoting a collection of loads and stores into SSA Form using the SSAUpdater. |
|
An instruction for reading from memory. This uses the SubclassData field in Value to store whether or not the load is volatile. |
|
This class is used to represent ISD::LOAD nodes. |
|
A structure representing the properties of a load or store instruction. |
|
An inferface for inquiring the load address of a loaded object file to be used by the DIContext implementations when applying relocations on the fly. |
|
CRTP helper that implements LoadedObjectInfo::clone for Derived. |
|
This pass implements the localization mechanism described at the top of this file. One specificity of the implementation is that it will materialize one and only one instance of a constant per basic block, thus enabling reuse of that constant within that block. Moreover, it only materializes constants in blocks where they are used. PHI uses are considered happening at the end of the related predecessor. |
|
Class that manages the creation of a lock file to aid implicit coordination between different processes. |
|
Iterates through instructions in a set of blocks in reverse order from the first non‐terminator. For example (assume all blocks have size n): LockstepReverseIterator I([B1, B2, B3]); *I‐‐ = [B1[n], B2[n], B3[n]]; *I‐‐ = [B1[n‐1], B2[n‐1], B3[n‐1]]; *I‐‐ = [B1[n‐2], B2[n‐2], B3[n‐2]]; ... |
|
Logging utility ‐ given an ordered specification of features, and assuming a scalar reward, allow logging feature values and rewards. The assumption is that, for an event to be logged (i.e. a set of feature values and a reward), the user calls the log* API for each feature exactly once, providing the index matching the position in the feature spec list provided at construction. The example assumes the first feature's element type is float, the second is int64, and the reward is float: |
|
This class represents an efficient way to signal success or failure. It should be preferred over the use of |
|
Represents a single loop in the control flow graph. Note that not all SCCs in the CFG are necessarily loops. |
|
This analysis provides dependence information for the memory accesses of a loop. |
|
Drive the analysis of memory accesses in the loop |
|
Printer pass for the |
|
Analysis pass that exposes the |
|
Instances of this class are used to represent loops that are detected in the flow graph. |
|
Store the result of a depth first search within basic blocks contained by a single loop. |
|
Wrapper class to LoopBlocksDFS that provides a standard begin()/end() interface for the DFS reverse post‐order traversal of blocks in a loop body. |
|
Traverse the blocks in a loop using a depth‐first search. |
|
This pass transforms loops that contain a conditional branch with induction variable. For example, it transforms left code to right code: |
|
Printer pass for the |
|
Represents loop‐carried dependencies. Because SwingSchedulerDAG doesn't assume cycle dependencies as the name suggests, such dependencies must be handled separately. After DAG construction is finished, these dependencies are added to SwingSchedulerDDG. TODO: Also handle output‐dependencies introduced by physical registers. |
|
Constrain a loop to run within a given iteration range. |
|
An optimization pass inserting data prefetches in loops. |
|
Loop unroll pass that only does full loop unrolling and peeling. |
|
Performs Loop Idiom Recognize Pass. |
|
This class builds and contains all of the top‐level loop structures in the specified function. |
|
The legacy pass manager's analysis pass to compute loop information. |
|
Performs Loop Inst Simplify Pass. |
|
Pass to forward loads in a loop around the backedge to subsequent iterations. |
|
This class represents a loop nest and can be used to query its properties. |
|
This analysis provides information for a loop nest. The analysis runs on demand and can be initiated via AM.getResult<LoopNestAnalysis>. |
|
Printer pass for the |
|
Performs Loop Predication Pass. |
|
Printer pass for the |
|
A simple loop rotation transformation. |
|
Captures loop safety information. It keep information for loop blocks may throw exception or otherwise exit abnormally on any iteration of the loop which might actually execute at runtime. The primary way to consume this information is via isGuaranteedToExecute below, but some callers bailout or fallback to alternate reasoning if a loop contains any implicit control flow. NOTE: LoopSafetyInfo contains cached information regarding loops and their particular blocks. This information is only dropped on invocation of computeLoopSafetyInfo. If the loop or any of its block is deleted, or if any thrower instructions have been added or removed from them, or if the control flow has changed, or in case of other meaningful modifications, the LoopSafetyInfo needs to be recomputed. If a meaningful modifications to the loop were made and the info wasn't recomputed properly, the behavior of all methods except for computeLoopSafetyInfo is undefined. |
|
Performs basic CFG simplifications to assist other loop passes. |
|
This pass is responsible for loop canonicalization. |
|
A pass that does profile‐guided sinking of instructions into loops. |
|
The adaptor from a function pass to a loop pass computes these analyses and makes them available to the loop passes "for free". Each loop pass is expected to update these analyses if necessary to ensure they're valid after it runs. |
|
Performs Loop Strength Reduce Pass. |
|
This class provides the basic blocks traversal order used by passes like ReachingDefAnalysis and ExecutionDomainFix. It identifies basic blocks that are part of loops and should to be visited twice and returns efficient traversal order for all the blocks. |
|
A simple loop rotation transformation. |
|
A set of parameters used to control various transforms performed by the LoopUnroll pass. Each of the boolean parameters can be set to: true ‐ enabling the transformation. false ‐ disabling the transformation. None ‐ relying on a global default. |
|
Loop unroll pass that will support both full and partial unrolling. It is a function pass to have access to function and module analyses. It will also put loops into canonical form (simplified and LCSSA). |
|
LoopVectorizationLegality checks if it is legal to vectorize a loop, and to what vectorization factor. This class does not look at the profitability of vectorization, only the legality. This class has two main kinds of checks: * Memory checks ‐ The code in canVectorizeMemory checks if vectorization will change the order of memory accesses in a way that will change the correctness of the program. * Scalars checks ‐ The code in canVectorizeInstrs and canVectorizeMemory checks for a number of different conditions, such as the availability of a single induction variable, that all types are supported and vectorize‐able, etc. This code reflects the capabilities of InnerLoopVectorizer. This class is also used by InnerLoopVectorizer for identifying induction variable and the different reduction variables. |
|
This holds vectorization requirements that must be verified late in the process. The requirements are set by legalize and costmodel. Once vectorization has been determined to be possible and profitable the requirements can be verified by looking for metadata or compiler options. For example, some loops require FP commutativity which is only allowed if vectorization is explicitly specified or if the fast‐math compiler option has been provided. Late evaluation of these requirements allows helpful diagnostics to be composed that tells the user what need to be done to vectorize the loop. For example, by specifying #pragma clang loop vectorize or ‐ffast‐math. Late evaluation should be used only when diagnostics can generated that can be followed by a non‐expert user. |
|
Utility class for getting and setting loop vectorizer hints in the form of loop metadata. This class keeps a number of loop annotations locally (as member variables) and can, upon request, write them back as metadata on the loop. It will initially scan the loop for existing metadata, and will update the local values based on information in the loop. We cannot write all values to metadata, as the mere presence of some info, for example 'force', means a decision has been made. So, we need to be careful NOT to add them if the user hasn't specifically asked so. |
|
The LoopVectorize Pass. |
|
Storage for information about made changes. |
|
Verifier pass for the |
|
This class emits a version of the loop where run‐time checks ensure that may‐alias pointers can't overlap. |
|
Expose LoopVersioning as a pass. Currently this is only used for unit‐testing. It adds all memchecks necessary to remove all may‐aliasing array accesses from the loop. |
|
A pass that lowers atomic intrinsic into non‐atomic intrinsics. |
|
Pass to replace calls to ifuncs with indirect calls. |
|
Generic interface to target specific assembler backends. |
|
This class is intended to be used as a base class for asm properties and features specific to the target. |
|
Generic assembler parser interface, for use by target specific assembly parsers. |
|
Generic interface for extending the MCAsmParser, which is implemented by target and object file assembly parser implementations. |
|
Generic Sema callback for assembly parser. |
|
Binary assembler expressions. |
|
Represents required padding such that a particular other set of fragments does not cross a particular power‐of‐two boundary. The other fragments must follow this one within the same section. |
|
Fragment representing the .cv_def_range directive. |
|
Information describing a function or inlined call site introduced by .cv_func_id or .cv_inline_site_id. Accumulates information from .cv_loc directives used with this function's id or the id of an inlined call site within this function or inlined call site. |
|
Fragment representing the binary annotations produced by the .cv_inline_linetable directive. |
|
Instances of this class represent the information from a .cv_loc directive. |
|
MCCodeEmitter ‐ Generic instruction encoding interface. |
|
/ Represent a constant integer expression. |
|
Context object for machine code objects. This class owns all of the sections that it creates. |
|
Superclass for all disassemblers. Consumes a memory region and provides an array of assembly instructions. |
|
Instances of this class represent the name of the dwarf .file directive and its associated dwarf file number in the MC file. MCDwarfFile's are created and uniqued by the MCContext class. In Dwarf 4 file numbers start from 1; i.e. the entry with file number 1 is the first element in the vector of DwarfFiles and there is no MCDwarfFile with file number 0. In Dwarf 5 file numbers start from 0, with the MCDwarfFile with file number 0 being the primary source file, and file numbers correspond to their index in the vector. |
|
Instances of this class represent the line information for the dwarf line table entries. Which is created after a machine instruction is assembled and uses an address from a temporary label created at the current address in the current section and the info from the last .loc directive seen as stored in the context. |
|
Manage the .debug_line_str section contents, if we use it. |
|
Instances of this class represent the information from a dwarf .loc directive. |
|
Base class for the full range of assembler expressions which are needed for parsing. |
|
Symbolize using user‐provided, C API, callbacks. |
|
Provide extra details about the machine processor. |
|
Encode information on a single operation to perform on a byte sequence (e.g., an encoded instruction) which requires assemble‐ or run‐ time patching. |
|
Target independent information on a fixup kind. |
|
Instances of this class represent a single low‐level machine instruction. |
|
This is an instance of a target assembly language printer that converts an MCInst to valid target assembly syntax. |
|
Describe properties that are true of each instruction in the target description file. This captures information about side effects, register use and many other things. There is one instance of this struct for each target instruction class, and the MachineInstr class points to this struct directly to describe itself. |
|
Interface to description of machine instruction set. |
|
Store Linker Optimization Hint information (LOH). |
|
Instances of this class represent a label name in the MC file, and MCLabel are created and uniqued by the MCContext class. MCLabel should only be constructed for valid instances in the object file. |
|
Instances of this class represent the line information for a compile unit where machine instructions have been assembled after seeing .loc directives. This is the information used to build the dwarf line table for a section. |
|
Streaming object file generation interface. |
|
Base class for classes that define behaviour that is specific to both the target and the object format. |
|
Defines the object file and target independent interfaces used by the assembler backend to write native file format object files. |
|
Instances of this class represent operands of the MCInst class. This is a simple discriminated union. |
|
This holds information about one operand of a machine instruction, indicating the register class for register operands, etc. |
|
MCParsedAsmOperand ‐ This abstract class represents a source‐level assembly instruction operand. It should be subclassed by target‐specific code. This base class is used by target‐independent clients and is the interface between parsing an asm instruction and recognizing it. |
|
Define a kind of processor resource that will be modeled by the scheduler. |
|
Instances of this class represent a pseudo probe instance for a pseudo probe table entry, which is created during a machine instruction is assembled and uses an address from a temporary label created at the current address in the current section. |
|
Instances of this class represent the pseudo probes inserted into a compile unit. |
|
Specify the number of cycles allowed after instruction issue before a particular use operand reads its registers. This effectively reduces the write's latency. Here we allow negative cycles for corner cases where latency increases. This rule only applies when the entry's WriteResource matches the write's WriteResource. |
|
MCRegAliasIterator enumerates all registers aliasing Reg. |
|
MCRegUnitMaskIterator enumerates a list of register units and their associated lane masks for Reg. The register units are in ascending numerical order. |
|
MCRegUnitRootIterator enumerates the root registers of a register unit. |
|
Wrapper class representing physical registers. Should be passed by value. |
|
MCRegisterClass ‐ Base class of TargetRegisterClass. |
|
Specify the cost of a register definition in terms of number of physical register allocated at register renaming stage. For example, AMD Jaguar. natively supports 128‐bit data types, and operations on 256‐bit registers (i.e. YMM registers) are internally split into two COPs (complex operations) and each COP updates a physical register. Basically, on Jaguar, a YMM register write effectively consumes two physical registers. That means, the cost of a YMM write in the BtVer2 model is 2. |
|
MCRegisterDesc ‐ This record contains information about a particular register. The SubRegs field is a zero terminated array of registers that are sub‐registers of the specific register, e.g. AL, AH are sub‐registers of AX. The SuperRegs field is a zero terminated array of registers that are super‐registers of the specific register, e.g. RAX, EAX, are super‐registers of AX. |
|
A register file descriptor. |
|
MCRegisterInfo base class ‐ We assume that the target defines a static array of MCRegisterDesc objects that represent all of the machine registers that the target has. As such, we simply have to track a pointer to this array so that we can turn register number into a register descriptor. |
|
Create MCExprs from relocations found in an object file. |
|
Summarize the scheduling resources required for an instruction of a particular scheduling class. |
|
Machine model for scheduling, bundling, and heuristics. |
|
Instances of this class represent a uniqued identifier for a section in the current translation unit. The MCContext class uniques and creates these. |
|
This represents a section on Windows |
|
This represents a section on linux, lots of unix variants and some bare metal systems. |
|
This represents a section on a Mach‐O system (used by Mac OS X). On a Mac system, these are also described in /usr/include/mach‐o/loader.h. |
|
This represents a section on wasm. |
|
Extension point for target‐specific MCExpr subclasses with a relocation specifier, serving as a replacement for MCSymbolRefExpr::VariantKind. Limit this to top‐level use, avoiding its inclusion as a subexpression. |
|
Streaming machine code generation interface. |
|
Iterator that enumerates the sub‐registers of a Reg and the associated sub‐register indices. |
|
MCSubRegIterator enumerates all sub‐registers of Reg. If IncludeSelf is set, Reg itself is included in the list. |
|
Generic base class for all target subtargets. |
|
MCSuperRegIterator enumerates all super‐registers of Reg. If IncludeSelf is set, Reg itself is included in the list. |
|
MCSymbol ‐ Instances of this class represent a symbol name in the MC file, and MCSymbols are created and uniqued by the MCContext class. MCSymbols should only be constructed with valid names for the object file. |
|
Represents a symbol table index fragment. |
|
Represent a reference to a symbol from inside an expression. |
|
The value for an entry in the symbol table of an MCContext. |
|
Symbolize and annotate disassembled instructions. |
|
MCTargetAsmParser ‐ Generic interface to target specific assembly parsers. |
|
Extension point for target‐specific MCExpr subclasses to implement. This can encode a relocation operator, serving as a replacement for MCSymbolRefExpr::VariantKind. Ideally, limit this to top‐level use, avoiding its inclusion as a subexpression. |
|
Target specific streamer interface. This is used so that targets can implement support for target specific assembly directives. |
|
Unary assembler expressions. |
|
Specify the latency in cpu cycles for a particular scheduling class and def index. ‐1 indicates an invalid latency. Heuristics would typically consider an instruction with invalid latency to have infinite latency. Also identify the WriteResources of this def. When the operand expands to a sequence of writes, this ID is the last write in the sequence. |
|
Identify one of the processor resource kinds consumed by a particular scheduling class for the specified number of cycles. |
|
Incremental MD5 message‐digest computation. |
|
Metadata node. |
|
Tracking metadata reference owned by Metadata. |
|
A single uniqued string. |
|
Tuple of metadata. |
|
Typed, array‐like tuple of metadata. |
|
An RAII based helper class to modify MachineFunctionProperties when running pass. Define a MFPropsModifier in PassT::run to set MachineFunctionProperties properly. |
|
Summary of a single MIB in a memprof metadata on allocations. |
|
Helper class for constructing bundles of MachineInstrs. |
|
MIBundleOperandIteratorBase ‐ Iterator that visits all operands in a bundle of MachineInstrs. This class is not intended to be used directly, use one of the sub‐classes instead. |
|
MIBundleOperands ‐ Iterate over all operands in a bundle of machine instructions. |
|
Set of metadata that should be preserved when using BuildMI(). This provides a more convenient way of preserving certain data from the original instruction. |
|
This pass prints the MIR2Vec embeddings for machine functions, basic blocks, and instructions |
|
Pass to analyze and populate MIR2Vec vocabulary from a module |
|
This pass prints the embeddings in the MIR2Vec vocabulary |
|
MIR2Vec vocabulary provider used by pass managers and standalone tools. This class encapsulates the core vocabulary loading logic and can be used independently of the pass manager infrastructure. For pass‐based usage, see MIR2VecVocabLegacyAnalysis. |
|
MIRFormater ‐ Interface to format MIR operand based on target |
|
This class initializes machine functions by applying the state loaded from a MIR file. |
|
InlineAdvice that tracks changes post inlining. For that reason, it only overrides the "successful inlining" extension points. |
|
MLModelRunner interface: abstraction of a mechanism for evaluating a ML model. More abstractly, evaluating a function that has as tensors as arguments, described via TensorSpecs, and returns a tensor. Currently, the latter is assumed to be a scalar, in absence of more elaborate scenarios. NOTE: feature indices are expected to be consistent all accross MLModelRunners (pertaining to the same model), and also Loggers (see TFUtils.h) |
|
LLVM IR metadata carried by a MachineMemOperand. |
|
Helper class to manipulate |
|
Machine Value Type. Every type that is supported natively by some processor targeted by LLVM occurs here. This means that any legal value type can be represented by an MVT. |
|
MachORelocation ‐ This struct contains information about each relocation that needs to be emitted to the file. see <mach‐o/reloc.h> |
|
MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate machine basic block frequencies. |
|
Printer pass for the |
|
Legacy MachineFunctionPass for MachineBlockHashInfo. |
|
Printer pass for the |
|
Result object for MachineBlockHashInfo. |
|
The MachineConstantPool class keeps track of constants referenced by a function which must be spilled to memory. This is used for constants which are unable to be used directly as operands to instructions, which typically include floating point and large integer constants. |
|
This class is a data container for one entry in a MachineConstantPool. It contains a pointer to the value and an offset from the start of the constant pool. An entry in a MachineConstantPool |
|
Abstract base class for all machine specific constantpool value subclasses. |
|
Legacy analysis pass which computes a |
|
DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterators. |
|
DominatorTree Class ‐ Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree. |
|
Analysis pass which computes a |
|
Machine function pass which print |
|
Analysis pass which computes a |
|
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted. This class is key to allowing stack frame representation optimizations, such as frame pointer elimination. It also allows more mundane (but still important) optimizations, such as reordering of abstract objects on the stack frame. |
|
This analysis create MachineFunction for given Function. To release the MachineFunction, users should invalidate it explicitly. |
|
MachineFunctionInfo ‐ This class can be derived from and used by targets to hold private target‐specific information for each MachineFunction. Objects of type are accessed/created with MF::getInfo and destroyed when the MachineFunction is destroyed. |
|
MachineFunctionPass ‐ This class adapts the FunctionPass interface to allow convenient creation of passes that operate on the MachineFunction representation. Instead of overriding runOnFunction, subclasses override runOnMachineFunction. |
|
Properties which a MachineFunction may have at a given point in time. Each of these has checking code in the MachineVerifier, and passes can require that a property be set. |
|
Helper class to build MachineInstr. It keeps internally the insertion point and debug location for all the new instructions we want to create. This information can be modified via the related setters. |
|
Class which stores all the state required in a MachineIRBuilder. Since MachineIRBuilders will only store state in this object, it allows to transfer BuilderState between different kinds of MachineIRBuilders. |
|
Representation of each machine instruction. |
|
MachineBasicBlock iterator that automatically skips over MIs that are inside bundles (i.e. walk top level MIs only). |
|
Special DenseMapInfo traits to compare MachineInstr* by value of the instruction rather than by pointer value. The hashing and equality testing functions ignore definitions so this is useful for CSE, etc. |
|
MachineInstrSpan provides an interface to get an iteration range containing the instruction it was initialized with, along with all those instructions inserted prior to or following that instruction at some point after the MachineInstrSpan is constructed. |
|
MachineJumpTableEntry ‐ One jump table in the jump table info. |
|
Analysis pass that exposes the |
|
Printer pass for the |
|
A description of a memory reference used in the backend. Instead of holding a StoreInst or LoadInst, this class holds the address Value of the reference along with a byte size and offset. This allows it to describe lowered loads and stores. Also, the special PseudoSourceValue objects can be used to represent loads and stores to memory locations that aren't explicit in the regular LLVM IR. |
|
An analysis that produces |
|
This class contains meta information specific to a module. Queries can be made by different debugging and exception handling schemes and reformated for specific use. |
|
MachineModuleInfoCOFF ‐ This is a MachineModuleInfoImpl implementation for COFF targets. |
|
MachineModuleInfoELF ‐ This is a MachineModuleInfoImpl implementation for ELF targets. |
|
This class can be derived from and used by targets to hold private target‐specific information for each Module. Objects of type are accessed/created with MachineModuleInfo::getObjFileInfo and destroyed when the MachineModuleInfo is destroyed. |
|
MachineModuleInfoMachO ‐ This is a MachineModuleInfoImpl implementation for MachO targets. |
|
MachineModuleInfoWasm ‐ This is a MachineModuleInfoImpl implementation for Wasm targets. |
|
MachineOperand class ‐ Representation of each machine instruction operand. |
|
Diagnostic information for applied optimization remarks. |
|
Diagnostic information for optimization analysis remarks. |
|
The optimization diagnostic interface. |
|
The analysis pass |
|
The analysis pass |
|
Diagnostic information for missed‐optimization remarks. |
|
MachinePassRegistry ‐ Track the registration of machine passes. |
|
MachinePassRegistryListener ‐ Listener to adds and removals of nodes in registration list. |
|
MachinePassRegistryNode ‐ Machine pass node stored in registration list. |
|
The main class in the implementation of the target independent software pipeliner pass. |
|
Software pipelining policy for a loop, which a target can customize by implementing TargetSubtargetInfo::overridePipelinerPolicy. |
|
This class contains a discriminated union of information about pointers in memory operands, relating them back to LLVM IR or to virtual locations (such as frame indices) that are exposed during codegen. |
|
MachinePostDominatorTree ‐ an analysis pass wrapper for DominatorTree used to compute the post‐dominator tree for MachineFunctions. |
|
MachineRegisterInfo ‐ Keep track of information for virtual and physical registers, including vreg register classes, use/def chains for registers, etc. |
|
An SDNode that represents everything that will be needed to construct a MachineInstr. These nodes are created during the instruction selection proper phase. |
|
MachineSSAUpdater ‐ This class updates SSA form for a set of virtual registers defined in multiple blocks. This is used when code duplication or another unstructured transformation wants to rewrite a set of uses of one vreg with uses of a set of vregs. |
|
MachineSchedContext provides enough context from the MachineScheduler pass for the target to instantiate a scheduler. |
|
Define a generic scheduling policy for targets that don't provide their own MachineSchedStrategy. This can be overriden for each scheduling region before building the DAG. |
|
MachineSchedRegistry provides a selection of available machine instruction schedulers. |
|
MachineSchedStrategy ‐ Interface to the scheduling algorithm used by ScheduleDAGMI. |
|
Verifier pass for |
|
Legacy analysis pass which computes a |
|
Allocator that obtains memory from malloc/free (or aligned variants). |
|
ManagedStatic ‐ This transparently changes the behavior of global statics to be lazily constructed on demand (good for reducing startup times of dynamic libraries that link in LLVM components) and for making destruction be explicit through the llvm_shutdown() function call. |
|
ManagedStaticBase ‐ Common base class for ManagedStatic instances. |
|
Resolve arbitrary mappings. |
|
This class implements a map that also provides access to all stored values in a deterministic order. |
|
This class is used to represent an MGATHER node |
|
This is a base class used to represent MGATHER and MSCATTER nodes |
|
This class is used to represent an MLOAD node |
|
This base class is used to represent MLOAD and MSTORE nodes |
|
This class is used to represent an MSCATTER node |
|
This class is used to represent an MSTORE node |
|
|
|
|
|
|
|
|
|
Abstract base class for recording a FileCheck diagnostic that provides an additional note (possibly a new error) about the most recent |
|
Abstract base class for recording a FileCheck diagnostic that reports a match result for a pattern. |
|
This struct is a compact representation of a valid (power of two) or undefined (0) alignment. |
|
This class wraps the llvm.memcpy intrinsic. |
|
A memory dependence query can return one of three different answers. |
|
This is the common base class for memset/memcpy/memmove. |
|
Common base class for all memory intrinsics. Simply provides common methods. Written as CRTP to avoid a common base class amongst the three atomicity hierarchies. |
|
Information for memory intrinsic cost model. |
|
Information about a load/store intrinsic defined by the target. |
|
This SDNode is used for target intrinsics that touch memory and need an associated MachineMemOperand. Its opcode may be INTRINSIC_VOID, INTRINSIC_W_CHAIN, PREFETCH, or a target‐specific memory‐referencing opcode (see |
|
This class wraps the llvm.memmove intrinsic. |
|
Strips MemProf attributes and metadata. |
|
Public interface to the memory profiler pass for instrumenting code to profile memory accesses. |
|
This is an abstract virtual class for memory operations. |
|
Common base class for all memset intrinsics. Simply provides common methods. |
|
This class wraps the llvm.memset and llvm.memset.inline intrinsics. |
|
This class wraps the llvm.experimental.memset.pattern intrinsic. Note that despite the inheritance, this is not part of the MemIntrinsic hierachy in terms of isa/cast. |
|
Common base class for all memory transfer intrinsics. Simply provides common methods. |
|
This class wraps the llvm.memcpy/memmove intrinsics. |
|
This interface provides simple read‐only access to a block of memory, and provides simple methods for reading files and standard input into a memory buffer. In addition to basic access to the characters in the file, this interface guarantees you can read one character past the end of the file, and that this character will read as '0'. |
|
An implementation of BinaryStream whose data is backed by an llvm MemoryBuffer object. MemoryBufferByteStream owns the MemoryBuffer in question. As with BinaryByteStream, reading from a MemoryBufferByteStream will never cause a copy. |
|
Represents a read‐write access to memory, whether it is a must‐alias, or a may‐alias. |
|
Checks memory dependences among accesses to the same underlying object to determine whether there vectorization is legal or not (and at which vectorization factor). |
|
An analysis that produces |
|
Provides a lazy, caching interface for making common memory aliasing information queries, backed by LLVM's alias analysis passes. |
|
A wrapper analysis pass for the legacy pass manager that exposes a |
|
Representation for a specific memory location. |
|
Represents phi nodes for memory accesses. |
|
Encapsulates MemorySSA, including all data associated with memory accesses. |
|
An analysis that produces |
|
Printer pass for |
|
Verifier pass for |
|
This is the generic walker interface for walkers of MemorySSA. Walkers are used to be able to further disambiguate the def‐use chains MemorySSA gives you, or otherwise produce better info than MemorySSA gives you. In particular, while the def‐use chains provide basic information, and are guaranteed to give, for example, the nearest may‐aliasing MemoryDef for a MemoryUse as AliasAnalysis considers it, a user mant want better or other information. In particular, they may want to use SCEV info to further disambiguate memory accesses, or they may want the nearest dominating may‐aliasing MemoryDef for a call or a store. This API enables a standardized interface to getting and using that info. |
|
Printer pass for |
|
Legacy analysis pass which computes |
|
A module pass for msan instrumentation. |
|
Represents read‐only accesses to memory |
|
Class that has the common methods + fields of memory uses/defs. It's a little awkward to have, but there are many cases where we want either a use or def, and there are many cases where uses are needed (defs aren't acceptable), and vice‐versa. |
|
Merge identical functions. |
|
Root of the metadata hierarchy. |
|
Metadata wrapper in the Value hierarchy. |
|
API for tracking metadata references through RAUW and deletion. |
|
This class represents min/max intrinsics. |
|
Construct a specially modified post‐order traversal of cycles. |
|
A Module instance is used to store all the information related to an LLVM module. Modules are the top level container of all other LLVM Intermediate Representation (IR) objects. Each module directly contains a list of globals variables, a list of functions, a list of libraries (or other modules) this module depends on, a symbol table, and various data about the target's characteristics. |
|
The module inliner pass for the new pass manager. |
|
Module pass, wrapping the inliner pass. This works in conjunction with the InlineAdvisorAnalysis to facilitate inlining decisions taking into account module‐wide state, that need to keep track of inter‐inliner pass runs, for a given module. An InlineAdvisor is configured and kept alive for the duration of the ModuleInlinerWrapperPass::run. |
|
Records a mapping from an opaque lowering context to its LibcallLoweringInfo. |
|
Public interface to the memory profiler module pass for instrumenting code to profile memory allocations and accesses. |
|
ModulePass class ‐ This class is used to implement unstructured interprocedural optimizations and analyses. ModulePasses may do anything they want to the program. |
|
Manage lifetime of a slot tracker for printing IR. |
|
Class to hold module path string table and global value map, and encapsulate methods for operating on them. |
|
Analysis pass to provide the ModuleSummaryIndex object. |
|
Legacy wrapper pass to provide the ModuleSummaryIndex object. |
|
A module pass for tsan instrumentation. |
|
Trivial adaptor that maps from a module to its functions. |
|
The core module pass which does a post‐order walk of the SCCs and runs a CGSCC pass over each one. |
|
Represents a schedule for a single‐block loop. For every instruction we maintain a Cycle and Stage. |
|
The ModuloScheduleExpander takes a ModuloSchedule and expands it in‐place, rewriting the old loop and inserting prologs and epilogs as required. |
|
Expand the kernel using modulo variable expansion algorithm (MVE). It unrolls the kernel enough to avoid overlap of register lifetime. |
|
Expander that simply annotates each scheduled instruction with a post‐instr symbol that can be consumed by the ModuloScheduleTest pass. |
|
A "must be executed context" for a given program point PP is the set of instructions, potentially before and after PP, that are executed always when PP is reached. The MustBeExecutedContextExplorer an interface to explore "must be executed contexts" in a module through the use of MustBeExecutedIterator. |
|
Must be executed iterators visit stretches of instructions that are guaranteed to be executed together, potentially with other instruction executed in‐between. |
|
Represent a mutable reference to an array (0 or more elements consecutively in memory), i.e. a start pointer and a length. It allows various APIs to take and modify consecutive elements easily and conveniently. |
|
An implementation of BinaryStream which holds its entire data set in a single contiguous buffer. As with BinaryByteStream, the mutable version also guarantees that no read operation will ever incur a copy, and similarly it does not own the underlying buffer. |
|
Simple pass that provides a name to every anonymous globals. |
|
A tuple of MDNodes. |
|
This class is basically a combination of TimeRegion and Timer. It allows you to declare a new timer, AND specify the region to time, all in one statement. All timers with the same name are merged. This is primarily used for debugging and for hunting performance problems. |
|
Forward define the pair type used by the automata transition info tables. |
|
Wrapper for a value that won't be replaced with a CFI jump table pointer in LowerTypeTestsModule. |
|
NoFolder ‐ Create "constants" (actually, instructions) with no folding. |
|
A pseudo model runner. We use it to store feature values when collecting logs for the default policy, in 'development' mode, but never ask it to 'run'. |
|
No‐op CGSCC analysis. |
|
No‐op CGSCC pass which does nothing. |
|
No‐op function analysis. |
|
No‐op function pass which does nothing. |
|
No‐op loop analysis. |
|
No‐op loop nest pass which does nothing. |
|
No‐op loop pass which does nothing. |
|
No‐op machine function pass which does nothing. |
|
No‐op module analysis. |
|
No‐op module pass which does nothing. |
|
Additional 'norecurse' attribute deduction during postlink LTO phase. |
|
A NodeSet contains a set of SUnit DAG nodes with additional information that assigns a priority to the set. |
|
This is an entry in the NonLocalDepInfo cache. |
|
This is a result from a NonLocal dependence query. |
|
A string table that doesn't need relocations. |
|
A mock class satisfying the interface expected by ReleaseModeModelRunner for its |
|
No‐op statistic used when LLVM_ENABLE_STATS is off. |
|
This cast trait just provides castFailed for the specified |
|
Mapping from value ID to value, which also remembers what the next unused ID is. |
|
A function pass for nsan instrumentation. |
|
This is the base ObjectCache type which can be provided to an ExecutionEngine for the purpose of avoiding compilation for Modules that have already been compiled and an object file is available. |
|
Evaluate the size and offset of an object pointed to by a Value*. May create code to compute the result at run‐time. |
|
Evaluate the size and offset of an object pointed to by a Value* statically. Fails if size or offset are not known at compile time. |
|
Various options to control the behavior of getObjectSize. |
|
Class that manages information about offload code regions and data |
|
Helper class to identify an entry in DWARF5AccelTable based on their DIE offset and UnitID. |
|
OffsetSpan ‐ Used internally by |
|
Provides lookup on an on disk hash table. |
|
Generates an on disk hash table. |
|
Provides lookup and iteration over an on disk hash table. |
|
Base class for operators |
|
An interface to create LLVM‐IR for OpenMP directives. |
|
Captures attributes that affect generating LLVM‐IR using the OpenMPIRBuilder and related classes. Note that not all attributes are required for all classes or functions. In some use cases the configuration is not necessary at all, because because the only functions that are called are ones that are not dependent on the configuration. |
|
OpenMP optimizations pass. |
|
A container for an operand bundle being viewed as a set of values rather than a set of uses. |
|
A lightweight accessor for an operand bundle meant to be passed around by value. |
|
Compile‐time customization of User operands. |
|
This is a utility class that provides an abstraction for the common functionality between Instructions and ConstantExprs. |
|
This class implements a mechanism to disable passes and individual optimizations at compile time based on two command line options (‐opt‐bisect and ‐opt‐disable) in order to perform a bisecting search for optimization‐related problems, and/or disable individual passes or combinations thereof. |
|
Extensions to this class implement mechanisms to disable passes and individual optimizations at compile time. |
|
Diagnostic information for applied optimization remarks. |
|
Diagnostic information for optimization analysis remarks. |
|
Diagnostic information for optimization analysis remarks related to pointer aliasing. |
|
Diagnostic information for optimization analysis remarks related to floating‐point non‐commutativity. |
|
The optimization diagnostic interface. |
|
OptimizationRemarkEmitter legacy analysis pass |
|
Diagnostic information for missed‐optimization remarks. |
|
A field in a structure. |
|
OptionalOperandTraits ‐ when the number of operands may change at runtime. Naturally it may only decrease, because the allocations may not change. |
|
A CRTP mix‐in for passes that can be skipped. |
|
This cast trait provides std::optional<T> casting. This means that if you have a value type, you can cast it to another value type and have dyn_cast return an std::optional<T>. |
|
This proxy doesn't manage invalidation in any way ‐‐ that is handled by the recursive return path of each layer of the pass manager. A consequence of this is the outer analyses may be stale. We invalidate the outer analyses only when we're done running passes over the inner IR units. |
|
Utility class for integer operators which may exhibit overflow ‐ Add, Sub, Mul, and Shl. It does not include SDiv, despite that operator having the potential for overflow. |
|
Abstract base for classes implementing PBQP register allocation constraints (e.g. Spill‐costs, interference, coalescing). |
|
PBQP register allocation constraint composer. |
|
The instrumented contextual profile, produced by the CtxProfAnalysis. |
|
A node (context) in the loaded contextual profile, suitable for mutation during IPO passes. We generally expect a fraction of counters and callsites to be populated. We continue to model counters as vectors, but callsites are modeled as a map of a map. The expectation is that, typically, there is a small number of indirect targets (usually, 1 for direct calls); but potentially a large number of callsites, and, as inlining progresses, the callsite count of a caller will grow. |
|
Write one or more ContextNodes to the provided raw_fd_stream. The caller must destroy the PGOCtxProfileWriter object before closing the stream. The design allows serializing a bunch of contexts embedded in some other file. The overall format is: |
|
The indirect function call promotion pass. |
|
The instrumentation (profile‐instr‐gen) pass for IR based PGO. |
|
The instrumentation (profile‐instr‐gen) pass for IR based PGO. |
|
The profile annotation (profile‐instr‐use) pass for IR based PGO. |
|
The profile size based optimization pass for memory intrinsics. |
|
A struct capturing PGO tunables. |
|
PHITransAddr ‐ An address value which tracks and handles phi translation. As we walk "up" the CFG through predecessors, we need to ensure that the address we're tracking is kept up to date. For example, if we're analyzing an address of "&A[i]" and walk through the definition of 'i' which is a PHI node, we must phi translate i to get "&A[j]" or else we will analyze an incorrect pointer in the predecessor block. |
|
PMDataManager provides the common place to manage the analysis data used by pass managers. |
|
PMStack ‐ This class implements a stack data structure of PMDataManager pointers. |
|
PMTopLevelManager manages LastUser info and collects common APIs used by top level pass managers. |
|
Iterate over the pressure sets affected by the given physical or virtual register. If Reg is physical, it must be a register unit (from MCRegUnitIterator). |
|
Store a vector of values using a specific number of bits for each value. Both signed and unsigned types can be used, e.g |
|
A vector that allocates memory in pages. |
|
This class represents success/failure for parsing‐like operations that find it important to chain together failable operations with |
|
Ternary parse status returned by various parse* methods. |
|
Holds the Module and ModuleSummaryIndex returned by the interfaces that parse both. |
|
Pass to remove unused function declarations. |
|
Pass interface ‐ Implemented by all 'passes'. Subclass this if you are an interprocedural optimization or you do not fit into any of the more constrained passes described below. |
|
This class provides access to building LLVM's passes. |
|
PassInfo class ‐ An instance of this class exists for every pass known by the system, and can be obtained from a live Pass by calling its getPassInfo() method. These objects are set up by the RegisterPass<> template. |
|
This class provides instrumentation entry points for the Pass Manager, doing calls to callbacks registered in PassInstrumentationCallbacks. |
|
Pseudo‐analysis pass that exposes the |
|
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass control to the registered callbacks. |
|
Manages a sequence of passes over a particular unit of IR. |
|
PassManagerPrettyStackEntry ‐ This is used to print informative information about what pass is running when/if a stack trace is generated. |
|
A loaded pass plugin. |
|
Information about the plugin required to load its passes |
|
PassRegistry ‐ This class manages the registration and intitialization of the pass subsystem as application startup, and assists the PassManager in resolving pass dependencies. NOTE: PassRegistry is NOT thread‐safe. If you want to use LLVM on multiple threads simultaneously, you will need to use a separate PassRegistry on each thread. |
|
MI‐level patchpoint operands. |
|
Map from opcode to pattern list by binary search. |
|
A reimplementation of ModuloScheduleExpander. It works by generating a standalone kernel loop and peeling out the prologs and epilogs. |
|
Class for calculating and caching the underlying values of phis in a function. |
|
The analysis pass which yields a PhiValues |
|
A pass for printing the PhiValues for a function. |
|
Wrapper pass for the legacy pass manager |
|
Information about how a physical register Reg is used by a set of operands. |
|
Record a physical register access. For non‐data‐dependent uses, OpIdx == ‐1. |
|
Subclass of DDGNode representing a pi‐block. A pi‐block represents a group of DDG nodes that are part of a strongly‐connected component of the graph. Replacing all the SCCs with pi‐blocks results in an acyclic representation of the DDG. For example if we have: {a ‐> b}, {b ‐> c, d}, {c ‐> a} the cycle a ‐> b ‐> c ‐> a is abstracted into a pi‐block "p" as follows: {p ‐> d} with "p" containing: {a ‐> b}, {b ‐> c}, {c ‐> a} |
|
Tunable parameters for passes in the default pipelines. |
|
Used for dynamically registering InlineAdvisors as plugins |
|
Used for dynamically loading instances of InlineOrder as plugins |
|
Utility to embed an integer into a pointer‐like type. This is specifically intended to allow embedding integers where fewer bits are required than exist in a pointer, and the integer can participate in abstractions along side other pointer‐like types. For example it can be placed into a |
|
PointerIntPair ‐ This class implements a pair of a pointer and small integer. It is designed to represent this in the space required by one pointer by bitmangling the integer into the low part of the pointer. This can only be done for small integers: typically up to 3 bits, but it depends on the number of bits available according to PointerLikeTypeTraits for the type. |
|
Helpers that pack and unpack pointer/integer bits for PointerIntPair. |
|
A traits type that is used to handle pointer types and things that are just wrappers for pointers as a uniform entity. |
|
A sum type over pointer‐like types. |
|
A compile time pair of an integer tag and the pointer‐like type which it indexes within a sum type. Also allows the user to specify a particular traits class for pointer types with custom behavior such as over‐aligned allocation. |
|
Class to represent pointers. |
|
A discriminated union of two or more pointer types, with the discriminator in the low bits of the pointer. |
|
In order to facilitate speculative execution, many instructions do not invoke immediate undefined behavior when provided with illegal operands, and return a poison value instead. |
|
Value handle that poisons itself if the Value is deleted. |
|
The structure that is returned when a polynomial algorithm was recognized by the analysis. Currently, only the CRC algorithm is recognized. |
|
An or instruction, which can be marked as "disjoint", indicating that the inputs don't have a 1 in the same bit position. Meaning this instruction can also be treated as an add. |
|
A udiv, sdiv, lshr, or ashr instruction, which can be marked as "exact", indicating that no bits are destroyed. |
|
Instruction that can have a nneg flag (zext/uitofp). |
|
PostDominatorTree Class ‐ Concrete subclass of DominatorTree that is used to compute the post‐dominator tree. |
|
Analysis pass which computes a |
|
Printer pass for the |
|
PostGenericScheduler ‐ Interface to the scheduling algorithm used by ScheduleDAGMI. |
|
Post‐order traversal using an external visited set. |
|
Computes function attributes in post‐order over the call graph. |
|
Post‐order traversal of a graph. |
|
CRTP base for a single post‐order graph walk. |
|
A class for a set state. |
|
PredIteratorCache ‐ This class is an extremely trivial cache for predecessor iterator queries. This is useful for code that repeatedly wants the predecessor list for the same blocks. |
|
Constraint for a predicate of the form "cmp Pred Op, OtherOp", where Op is the value the constraint applies to (the bitcast result). |
|
Encapsulates PredicateInfo, including all data associated with memory accesses. |
|
Printer pass for |
|
Verifier pass for |
|
An interface layer with SCEV used to manage how we see SCEV expressions for values in the context of existing predicates. We can add new predicates, but we cannot remove them. |
|
A set of analyses that are preserved following a run of a transformation pass. |
|
Capture a change in pressure for a single pressure set. UnitInc may be expressed in terms of upward or downward pressure depending on the client and will be dynamically adjusted for current liveness. |
|
List of PressureChanges in order of increasing, unique PSetID. |
|
Array of PressureDiffs. |
|
PrettyStackTraceEntry ‐ This class is used to represent a frame of the "pretty" stack trace that is dumped when a program crashes. You can define subclasses of this and declare them on the program stack: when they are constructed and destructed, they will add their symbolic frames to a virtual stack trace. This gets dumped out if the program crashes. |
|
PrettyStackTraceFormat ‐ This object prints a string (which may use printf‐style formatting but should not contain newlines) to the stream as the stack trace when a crash occurs. |
|
PrettyStackTraceProgram ‐ This object prints a specified program arguments to the stream as the stack trace when a crash occurs. |
|
PrettyStackTraceString ‐ This object prints a specified string (which should not contain newlines) to the stream as the stack trace when a crash occurs. |
|
Pass (for the new pass manager) for printing a Function as LLVM's text IR assembly. |
|
Instrumentation to print IR before/after passes. |
|
Pass for printing a loop's contents as textual IR. |
|
Pass (for the new pass manager) for printing a Module as LLVM's text IR assembly. |
|
Simple wrapper around std::function<void(raw_ostream&)>. This class is useful to construct print helpers for raw_ostream. |
|
PriorityQueue ‐ This class behaves like std::priority_queue and provides a few additional convenience functions. |
|
A FILO worklist that prioritizes on re‐insertion without duplication. |
|
Various thresholds and options controlling the behavior of the profile inference algorithm. Default values are tuned for several large‐scale applications, and can be modified via corresponding command‐line flags. |
|
Utility that propagates counter values to each basic block and to each edge when a basic block has more than one outgoing edge, using an adaptation of PGOUseFunc::populateCounters. |
|
Inject MD_prof metadata where it's missing. Used for testing that passes don't accidentally drop this metadata. |
|
An analysis pass based on the new PM to deliver ProfileSummaryInfo. |
|
Analysis providing profile information. |
|
An analysis pass based on legacy pass manager to deliver ProfileSummaryInfo. |
|
Printer pass that uses |
|
Checks that MD_prof is present on every instruction that supports it. Used in conjunction with the ProfileInjectorPass. MD_prof "unknown" is considered valid (i.e. !{!"unknown"}) |
|
This SDNode is used for PSEUDO_PROBE values, which are the function guid and the index of the basic block being probed. A pseudo probe serves as a place holder and will be removed at the end of compilation. It does not have any operand because we do not want the instruction selection to deal with any. |
|
Special value supplied for machine level alias analysis. It indicates that a memory access references the functions stack frame (e.g., a spill slot), below the stack frame (e.g., argument space), or constant pool. |
|
Manages creation of pseudo source values. |
|
This class represents a cast from a pointer to an address (non‐capturing ptrtoint). |
|
This class represents a cast from a pointer to an integer. |
|
A base class for visitors over the uses of a pointer value. |
|
Interface to the eviction advisor, which is responsible for making a decision as to which live ranges should be evicted (if any). |
|
A simple RAII based Delegate installer. Use this in a scope to install a delegate to the MachineFunction and reset it at the end of the scope. |
|
Class to install both of the above. |
|
A simple RAII based Observer installer. Use this in a scope to install the Observer to the MachineFunction and reset it at the end of the scope. |
|
A simple RAII based Observer installer. Use this in a scope to install the Observer to the MachineFunction and reset it at the end of the scope. |
|
The pass manager to schedule RegionPasses. |
|
Hierarchical RegionNode successor iterator. |
|
Inheritance utility for extensible RTTI. |
|
Base class for the extensible RTTI hierarchy. |
|
A Radix Tree implementation. |
|
A random number generator. |
|
A class representing a single range list entry. |
|
Reader for the raw instrprof binary format from runtime. |
|
Lightweight class that wraps the location operand metadata of a debug intrinsic. The raw location may be a ValueAsMetadata, an empty MDTuple, or a DIArgList. |
|
Thin wrapper around "int" used to store reaching definitions, using an encoding that makes it compatible with TinyPtrVector. The 0th LSB is forced zero (and will be used for pointer union tagging), The 1st LSB is forced one (to make sure the value is non‐zero). |
|
This class provides the reaching def analysis. |
|
Printer pass for the |
|
ReadyQueue encapsulates vector of "ready" SUnits with basic convenience methods for pushing and removing nodes. ReadyQueue's are uniquely identified by an ID. SUnit::NodeQueueId is a mask of the ReadyQueues the SUnit is in. |
|
Create ctor and init functions. |
|
Reassociate commutative expressions. |
|
'[classname]' ‐ Type of record values that have zero or more superclasses. |
|
Resolve all variables from a record except for unset variables. |
|
This class represents a field in a record, including its name, type, value, and source location. |
|
This struct holds information about recurrence variables. |
|
Recycler ‐ This class manages a linked‐list of deallocated nodes and facilitates reusing deallocated memory in place of allocating new memory. |
|
RecyclingAllocator ‐ This class wraps an Allocator, adding the functionality of recycling deleted objects. |
|
A CRTP mixin class that adds reference counting to a type. |
|
A MachineFunction analysis for fetching the Eviction Advisor. This sets up the Provider lazily and caches it. ‐ in the ML implementation case, the evaluator is stateless but (especially in the development mode) expensive to set up. With a Module Analysis, we |
|
ImmutableAnalysis abstraction for fetching the Eviction Advisor. We model it as an analysis to decouple the user from the implementation insofar as dependencies on other analyses goes. The motivation for it being an immutable pass is twofold: ‐ in the ML implementation case, the evaluator is stateless but (especially in the development mode) expensive to set up. With an immutable pass, we set it up once. ‐ in the 'development' mode ML case, we want to capture the training log during allocation (this is a log of features encountered and decisions made), and then measure a score, potentially a few steps after allocation completes. So we need the properties of an immutable pass to keep the logger state around until we can make that measurement. |
|
Common provider for legacy and new pass managers. This keeps the state for logging, and sets up and holds the provider. The legacy pass itself used to keep the logging state and provider, so this extraction helps the NPM analysis to reuse the logic. TODO: Coalesce this with the NPM analysis when legacy PM is removed. |
|
Interface to the priority advisor, which is responsible for prioritizing live ranges. |
|
Common provider for getting the priority advisor and logging rewards. Legacy analysis forwards all calls to this provider. New analysis serves the provider as the analysis result. Expensive setup is done in the constructor, so that the advisor can be created quickly for every machine function. TODO: Remove once legacy PM support is dropped. |
|
This pass implements the reg bank selector pass used in the GlobalISel pipeline. At the end of this pass, all register operands have been assigned |
|
Each TargetRegisterClass has a per register weight, and weight limit which must be less than the limits of its pressure sets. |
|
Used to describe a register and immediate addition. |
|
Represents a value which can be a Register or a constant. |
|
Store the effects of a change in pressure on things that MI scheduler cares about. |
|
Track the current register pressure at some position in the instruction stream, and remember the high water mark within the region traversed. This does not automatically consider live‐through ranges. The client may independently adjust for global liveness. |
|
A single entry single exit Region. |
|
Analysis pass that exposes the |
|
Analysis that detects all canonical Regions. |
|
Printer pass for the |
|
Verifier pass for the |
|
A RegionNode represents a subregion or a BasicBlock that is part of a Region. |
|
A pass that runs on each Region in a function. |
|
RegisterPressure computed within a region of instructions delimited by TopPos and BottomPos. This is a less precise version of IntervalPressure for use when LiveIntervals are unavailable. |
|
Wrapper class representing virtual and physical registers. Should be passed by value. |
|
RegisterAsmPrinter ‐ Helper template for registering a target specific assembly printer, for use in the target machine initialization function. Usage: |
|
This class implements the register bank concept. Two instances of RegisterBank must have different ID. This property is enforced by the RegisterBankInfo class. |
|
Only the RegisterBankInfo can initialize RegisterBank properly. |
|
RegisterMCAsmBackend ‐ Helper template for registering a target specific assembler backend. Usage: |
|
RegisterMCAsmInfo ‐ Helper template for registering a target assembly info implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
RegisterMCAsmInfoFn ‐ Helper template for registering a target assembly info implementation. This invokes the specified function to do the construction. Usage: |
|
RegisterMCAsmParser ‐ Helper template for registering a target specific assembly parser, for use in the target machine initialization function. Usage: |
|
RegisterMCCodeEmitter ‐ Helper template for registering a target specific machine code emitter, for use in the target initialization function. Usage: |
|
RegisterMCInstrAnalysis ‐ Helper template for registering a target instruction analyzer implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
RegisterMCInstrAnalysisFn ‐ Helper template for registering a target instruction analyzer implementation. This invokes the specified function to do the construction. Usage: |
|
RegisterMCInstrInfo ‐ Helper template for registering a target instruction info implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
RegisterMCInstrInfoFn ‐ Helper template for registering a target instruction info implementation. This invokes the specified function to do the construction. Usage: |
|
Helper template for registering a target object file info implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
Helper template for registering a target object file info implementation. This invokes the specified function to do the construction. Usage: |
|
RegisterMCRegInfo ‐ Helper template for registering a target register info implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
RegisterMCRegInfoFn ‐ Helper template for registering a target register info implementation. This invokes the specified function to do the construction. Usage: |
|
RegisterMCSubtargetInfo ‐ Helper template for registering a target subtarget info implementation. This invokes the static "Create" method on the class to actually do the construction. Usage: |
|
RegisterMCSubtargetInfoFn ‐ Helper template for registering a target subtarget info implementation. This invokes the specified function to do the construction. Usage: |
|
List of registers defined and used by a machine instruction. |
|
RegisterPassParser class ‐ Handle the addition of new machine passes. |
|
Base class for register pressure results. |
|
RegisterRegAllocBase class ‐ Track the registration of register allocators. |
|
RegisterTarget ‐ Helper template for registering a target, for use in the target's initialization function. Usage: |
|
RegisterTargetMachine ‐ Helper template for registering a target machine implementation, for use in the target machine initialization function. Usage: |
|
A global registry used in conjunction with static constructors to make pluggable components (like targets or garbage collectors) "just work" when linked with an executable. |
|
RelocAddrEntry contains relocated value and section index. Section index is ‐1LL if relocation points to absolute symbol. |
|
MIR‐level target‐independent rematerializer. Provides an API to identify and rematerialize registers within a machine function. |
|
A memory‐efficient immutable range with a single value repeated N times. The value is owned by the range. |
|
A random‐access iterator that always dereferences to the same value. |
|
Shared implementation of use‐lists for replaceable metadata. |
|
Replay inline advisor that uses optimization remarks from inlining of previous build to guide current inlining. This is useful for inliner tuning. |
|
Replay Inliner Setup |
|
A utility pass template to force an analysis result to be available. |
|
A CRTP mix‐in for passes that should not be skipped. |
|
Randomly selects an item by sampling into a set with an unknown number of elements, which may each be weighted to be more likely choices. |
|
Interface for looking up the initializer for a variable name, used by Init::resolveReferences. |
|
ResourceSegments are a collection of intervals closed on the left and opened on the right: |
|
Resume the propagation of an exception. |
|
Represent one information held inside an operand bundle of an llvm.assume. AttrKind is the property that holds. WasOn if not null is that Value for which AttrKind holds. ArgValue is optionally an argument of the attribute. For example if we know that %P has an alignment of at least four: ‐ AttrKind will be Attribute::Alignment. ‐ WasOn will be %P. ‐ ArgValue will be 4. |
|
Return a value (possibly void), from a function. Execution does not continue in this function any longer. |
|
A pass to do RPO deduction and propagation of function attributes. |
|
Precomputed reverse‐post‐order walk of a graph. |
|
Buffer holding rewritten source text and original‐to‐rewritten offset maps. |
|
Rope that supports efficient mid‐string insert and erase. |
|
Rematerializer listener with the ability to re‐create deleted registers and rollback rematerializations. Starts recording register deletions and rematerializations as soon as it is attached to the rematerializer. |
|
Subclass of DDGNode representing the root node of the graph. There should only be one such node in a given graph. |
|
View into a shared RopeRefCountString slice. |
|
B+ tree of RopePiece chunks that stores a rope as ordered byte ranges. |
|
Forward iterator over bytes stored in a RopePieceBTree. |
|
Reference‐counted character buffer for rope pieces. |
|
A grouping of pointers. A single memcheck is required between two groups. |
|
RuntimeDyld invariant checker for verifying that RuntimeDyld has correctly applied relocations. |
|
Base class for errors originating in RuntimeDyld, e.g. missing relocation support. |
|
Holds information about the memory runtime legality checks to verify that a group of pointers do not overlap. |
|
This pass performs function‐level constant propagation and merging. |
|
SCCPSolver ‐ This interface class is a general purpose solver for Sparse Conditional Constant Propagation (SCCP). |
|
This class represents an analyzed expression in the program. These are opaque objects that the client is not allowed to do much with directly. |
|
Analysis pass providing a never‐invalidated alias analysis result. |
|
A simple alias analysis implementation that uses ScalarEvolution to answer queries. |
|
Legacy wrapper pass to provide the SCEVAAResult object. |
|
This node represents an addition of some number of SCEVs. |
|
This node represents a polynomial recurrence on the trip count of the specified loop. This is the primary focus of the ScalarEvolution framework; all the other SCEV subclasses are mostly just supporting infrastructure to allow SCEVAddRecExpr expressions to be created and analyzed. |
|
This is the base class for unary cast operator classes. |
|
This node is the base class for n'ary commutative operators. |
|
This class represents an assumption that the expression LHS Pred RHS evaluates to true, and this can be checked at run‐time. |
|
This class represents a constant integer value. |
|
An object of this class is returned by queries that could not be answered. For example, if you ask for the number of iterations of a linked‐list traversal loop, you will get one of these. None of the standard SCEV operations are valid on this class, it is just a marker. |
|
This class uses information about analyze scalars to rewrite expressions in canonical form. |
|
Helper to remove instructions inserted during SCEV expansion, unless they are marked as used. |
|
This is the base class for unary integral cast operator classes. |
|
The SCEVLoopAddRecRewriter takes a scalar evolution expression and applies the Map (Loop ‐> SCEV) to all AddRecExprs. |
|
This node is the base class min/max selections. |
|
This node represents multiplication of some number of SCEVs. |
|
This node is a base class providing common functionality for n'ary operators. |
|
struct for holding enough information to help calculate the cost of the given SCEV when expanded into IR. |
|
The SCEVParameterRewriter takes a scalar evolution expression and updates the SCEVUnknown components following the Map (Value ‐> SCEV). |
|
This class represents an assumption made using SCEV expressions which can be checked at run‐time. |
|
This class represents a cast from a pointer to a pointer‐sized integer value, without capturing the provenance of the pointer. |
|
This visitor recursively visits a SCEV expression and re‐writes it. The result from each visit is cached, so it will return the same SCEV for the same input. |
|
This class represents a signed maximum selection. |
|
This class represents a signed minimum selection. |
|
This node is the base class for sequential/in‐order min/max selections. Note that their fundamental difference from SCEVMinMaxExpr's is that they are early‐returning upon reaching saturation point. I.e. given |
|
This class represents a sequential/in‐order unsigned minimum selection. |
|
This class represents a sign extension of a small integer value to a larger integer value. |
|
Visit all nodes in the expression tree using worklist traversal. |
|
This class represents a truncation of an integer value to a smaller integer value. |
|
This class represents a binary unsigned division operation. |
|
This class represents an unsigned maximum selection. |
|
This class represents an unsigned minimum selection. |
|
This class represents a composition of other SCEV predicates, and is the class that most clients will interact with. This is equivalent to a logical "AND" of all the predicates in the union. |
|
This means that we are dealing with an entirely unknown SCEV value, and only represent it as its LLVM Value. This is the "bottom" value for the analysis. |
|
A visitor class for SCEVUse. |
|
This class represents the value of vscale, as used when defining the length of a scalable vector or returned by the llvm.vscale() intrinsic. |
|
This class defines a simple visitor class that may be used for various SCEV analysis purposes. |
|
This class represents an assumption made on an AddRec expression. Given an affine AddRec expression {a,+,b}, we assume that it has the nssw or nusw flags (defined below) in the first X iterations of the loop, where X is a SCEV expression returned by getPredicatedBackedgeTakenCount). |
|
This class represents a zero extension of a small integer value to a larger integer value. |
|
Keeps track of dbg_value information through SDISel. We do not build SDNodes for these so as not to perturb the generated code; instead the info is kept off to the side in this structure. Each SDNode may have one or more associated dbg_value entries. This information is kept in DbgValMap. Byval parameters are handled separately because they don't use alloca's, which busts the normal mechanism. There is good reason for handling all parameters separately: they may not have code generated for them, they should always go at the beginning of the function regardless of other code motion, and debug info for them is potentially useful even if the parameter is unused. Right now only byval parameters are handled separately. |
|
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation functions. When an SDNode is created from the DAGBuilder, the DebugLoc is extracted from the original Instruction, and IROrder is the ordinal position of the instruction. When an SDNode is created after the DAG is being built, both DebugLoc and the IROrder are propagated from the original SDNode. So SDLoc class provides two constructors besides the default one, one to be used by the DAGBuilder, the other to be used by others. |
|
Represents one node in the SelectionDAG. |
|
These are IR‐level optimization flags that may be propagated to SDNodes. TODO: This data structure should be shared by the IR optimizer and the the backend. |
|
Represents a use of a SDNode. This class holds an SDValue, which records the SDNode being used and the result number, a pointer to the SDNode using the value, and Next and Prev pointers, which link together all the uses of an SDNode. |
|
This represents a list of ValueType's that has been intern'd by a SelectionDAG. Instances of this simple value class are returned by SelectionDAG::getVTList(...). |
|
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation. Many nodes return multiple values, from loads (which define a token and a return value) to ADDC (which returns a result and a carry value), to calls (which may return an arbitrary number of values). |
|
Scheduling dependency. This represents one direction of an edge in the scheduling DAG. |
|
Similar to CxxUnwindMapEntry, but supports SEH filters. |
|
This class represents a sign extension of integer types. |
|
A class that wrap the SHA1 algorithm. |
|
This class represents a cast from signed integer to floating point. |
|
Instances of this class encapsulate one diagnostic report, allowing printing to a raw_ostream as a caret diagnostic. |
|
Represents a single fixit, a replacement of one range of text with another. |
|
Represents a location in source code. |
|
Represents a range in source code. |
|
This class represents the scheduled code. The main data structure is a map from scheduled cycle to instructions. During scheduling, the data structure explicitly represents all stages/iterations. When the algorithm finshes, the schedule is collapsed into a single stage, which represents instructions from different loop iterations. |
|
Generic base class for SMT exprs |
|
Generic base class for SMT Solvers |
|
Generic base class for SMT sorts |
|
Helper class for SSA formation on a set of values defined in multiple blocks. |
|
Helper class for SSA formation on a set of values defined in multiple blocks. |
|
Utility class used to store the names of SSA values after their owning modules have been destroyed. |
|
Scheduling unit. This is a node in the scheduling DAG. |
|
Create an instance of the safepoint verifier pass which can be added to a pass pipeline to check for relocation bugs. |
|
SFINAE helper that is only defined when both template arguments match. |
|
Sample profile inference pass. |
|
The sample profiler data loader pass. |
|
Sample profile pseudo prober. |
|
The pass should be inserted after optimizations. |
|
This is the ModuleSanitizerCoverage pass used in the new pass manager. The pass instruments functions for coverage, adds initialization calls to the module for trace PC guards and 8bit counters if they are requested, and appends globals to llvm.compiler.used. |
|
Represents a saturating add/sub intrinsic. |
|
A utility class that uses RAII to save and restore the value of a variable. |
|
Class to represent scalable SIMD vectors |
|
The main scalar evolution driver. Because client code (intentionally) can't do much with the SCEV objects directly, they must ask this class for services. |
|
Analysis pass that exposes the |
|
Printer pass for the |
|
Verifier pass for the |
|
Simple representation of a scaled number. |
|
ScanInfo holds the information to assist in lowering of Scan reduction. Before lowering, the body of the for loop specifying scan reduction is expected to have the following structure |
|
Each Scheduling boundary is associated with ready queues. It tracks the current cycle in the direction of movement, and maintains the state of "hazards" and other interlocks at the current cycle. |
|
Compute the values of each DAG node for various metrics during DFS. |
|
A region of an MBB for scheduling. |
|
Summarize the unscheduled region. |
|
A ScheduleDAG for scheduling lists of MachineInstr. |
|
ScheduleDAGMI is an implementation of ScheduleDAGInstrs that simply schedules machine instructions according to the given MachineSchedStrategy without much extra book‐keeping. This is the common functionality between PreRA and PostRA MachineScheduler. |
|
ScheduleDAGMILive is an implementation of ScheduleDAGInstrs that schedules machine instructions while updating LiveIntervals and tracking regpressure. |
|
Mutate the DAG as a postpass after normal DAG building. |
|
RegisterScheduler class ‐ Track the registration of instruction schedulers. |
|
This class can compute a topological ordering for SUnits and provides methods for dynamically updating the ordering as new edges are added. |
|
HazardRecognizer ‐ This determines whether or not an instruction can be issued this cycle, and whether or not a noop needs to be inserted to handle the hazard. |
|
This interface is used to plug different priorities computation algorithms into the list scheduler. It implements the interface of a standard priority queue, where nodes are inserted in arbitrary order and returned in priority order. The computation of the priority and the representation of the queue are totally up to the implementation to decide. |
|
Installs and removes a fatal error handler for a scope. |
|
Hash table whose mappings are nested in RAII scopes and restored when those scopes end. |
|
Iterator over successive shadowed values for a single key. |
|
RAII scope that shadows an outer ScopedHashTable and pops its bindings on destruction. |
|
One key/value binding stored in a ScopedHashTable scope. |
|
Analysis pass providing a never‐invalidated alias analysis result. |
|
A simple AA result which uses scoped‐noalias metadata to answer queries. |
|
Legacy wrapper pass to provide the ScopedNoAliasAAResult object. |
|
SectionKind ‐ This is a simple POD value that classifies the properties of a section. A section is classified into the deepest possible classification, and then the target maps them onto their sections based on what capabilities they have. |
|
This is a simple memory manager which implements the methods called by the RuntimeDyld class to allocate memory for section‐based loading of objects, usually those generated by the MCJIT execution engine. |
|
Storage of either a normal Value address, or a select condition together with a pair of addresses for the "true" and "false" variant of a select‐dependent address. If the addresses are not present (both null), V is a normal address; otherwise V is a select condition and the pair holds the "true" and "false" addresses. |
|
This class represents the LLVM 'select' instruction. |
|
This is used to represent a portion of an LLVM function in a low‐level Data Dependence DAG representation suitable for instruction selection. This DAG is constructed as the first step of instruction selection in order to allow implementation of machine specific optimizations and code simplifications. |
|
Proxy class that targets should inherit from if they wish to use the generated node descriptions. |
|
SelectionDAGISel ‐ This is the common base class used for SelectionDAG‐based pattern‐matching instruction selectors. |
|
Targets can subclass this to parameterize the SelectionDAG lowering and instruction selection process. |
|
Simple state for a set. |
|
A vector that has set insertion semantics. |
|
Delegate resolving to a sub‐resolver, but shadow some variable names. |
|
A marker analysis to determine if extra passes should be run on demand. |
|
A marker analysis to determine if SimpleLoopUnswitch should run again on a given loop. |
|
A marker analysis to determine if extra passes should be run after loop vectorization. |
|
Strategy to randomly select a block and shuffle the operations without affecting data dependency. |
|
This instruction constructs a fixed permutation of two input vectors. |
|
This SDNode is used to implement the code generator support for the llvm IR shufflevector instruction. It combines elements from two input vectors into a new input vector, with the selection and ordering of elements determined by an array of integers, referred to as the shuffle mask. For input vectors of width N, mask indices of 0..N‐1 refer to elements from the LHS input, and indices from N to 2N‐1 the RHS. An index of ‐1 is treated as undef, such that the code generator may put any value in the corresponding element of the result. |
|
Magic data for optimising signed division by a constant. |
|
Manages the emission of signposts into the recording method supported by the OS. |
|
AAQueryInfo that uses SimpleCaptureAnalysis. |
|
This represents a position within a bitstream. There may be multiple independent cursors reading within one bitstream, each maintaining their own local state. |
|
Context‐free CaptureAnalysis provider, which computes and caches whether an object is captured in the function at all, but does not distinguish whether it was captured before or after the context instruction. |
|
Subclass of DDGNode representing single or multi‐instruction nodes. |
|
Simple and conservative implementation of LoopSafetyInfo that can give false‐positive answers to its queries in order to avoid complicated analysis. |
|
This pass transforms loops that contain branches or switches on loop‐ invariant conditions to have multiple loops. For example, it turns the left into the right code: |
|
A simple registry entry which provides only a name, description, and an |
|
A pass to simplify and canonicalize the CFG of a function. |
|
A non‐threaded implementation. |
|
Flags controlling how much is checked when sinking or hoisting instructions. The number of memory access in the loop (and whether there are too many) is determined in the constructors when using MemorySSA. |
|
Strategy to select a random instruction and add a new sink (user) to it to increate data dependency. |
|
Move instructions into successor blocks when possible. |
|
SizeOffsetAPInt ‐ Used by |
|
SizeOffsetType ‐ A base template class for the object size visitors. Used here as a self‐documenting way to handle the values rather than using a |
|
SizeOffsetValue ‐ Used by |
|
SlotIndex ‐ An opaque wrapper around machine indexes. |
|
SlotIndexes pass. |
|
This struct contains the mappings from the slot numbers to unnamed metadata nodes, global values and types. It also contains the mapping for the named types. It can be used to save the parsing state of an LLVM IR module so that the textual references to the values in the module can be parsed outside of the module's source. |
|
Variable‐sized bit array optimized for small bit counts. |
|
Implements a dense probed hash‐table based set with some number of buckets stored inline. |
|
A MapVector that performs no allocations if smaller than a certain size. |
|
A version of |
|
SmallPtrSet ‐ This class implements a set which is optimized for holding SmallSize or less elements. This internally rounds up SmallSize to the next power of two if it is not already a power of two. See the comments above SmallPtrSetImplBase for details of the algorithm. |
|
A templated base class for |
|
SmallPtrSetImplBase ‐ This is the common code shared among all the SmallPtrSet<>'s, which is almost everything. SmallPtrSet has two modes, one for small and one for large sets. |
|
SmallPtrSetIterator ‐ This implements a const_iterator for SmallPtrSet. |
|
SmallPtrSetIteratorImpl ‐ This is the common base class shared between all instances of SmallPtrSetIterator. |
|
SmallSet ‐ This maintains a set of unique values, optimizing for the case when the set is small (less than N). In this case, the set can be maintained with no mallocs. If the set gets large, we expand to using an std::set to maintain reasonable lookup times. |
|
SmallSetIterator ‐ This class implements a const_iterator for SmallSet by delegating to the underlying SmallVector or Set iterators. |
|
A SetVector that performs no allocations if smaller than a certain size. |
|
SmallString ‐ A SmallString is just a SmallVector with methods and accessors that make it work better as a string (e.g. operator+ etc). |
|
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference |
|
Figure out the offset of the first element. |
|
This is all the stuff common to all SmallVectors. |
|
This class consists of common code factored out of the SmallVector class to reduce code duplication based on the SmallVector 'N' template parameter. |
|
SmallVector‐backed MemoryBuffer instance. |
|
Storage for the SmallVector elements. This is specialized for the N=0 case to avoid allocating unnecessary storage. |
|
SmallVectorTemplateBase<TriviallyCopyable = false> ‐ This is where we put method implementations that are designed to work with non‐trivial T's. |
|
This is the part of SmallVectorTemplateBase which does not depend on whether the type T is a POD. The extra dummy template argument is used by ArrayRef to avoid unnecessarily requiring T to be complete. |
|
A map implementation backed by a sorted SmallVector. Key‐value pairs are stored in contiguous memory ordered by |
|
This owns the files read by a parser, handles include stacks, and handles diagnostic wrangling. |
|
Sparse bit vector that stores only elements containing set bits. |
|
Fixed‐size block of bits stored as a contiguous array of BitWords. |
|
Fast multiset implementation for objects that can be identified by small unsigned keys. |
|
SparseSet ‐ Fast set implementation for objects that can be identified by small unsigned keys. |
|
SparseSetValFunctor ‐ Helper class for getting a value's index. |
|
SparseSetValTraits ‐ Objects in a SparseSet are identified by keys that can be uniquely converted to a small integer less than the set's universe. This class allows the set to hold values that differ from the set's key type as long as an index can still be derived from the value. SparseSet never directly compares ValueT, only their indices, so it can map keys to arbitrary values. SparseSetValTraits computes the index from the value object. To compute the index from a key, SparseSet uses a separate KeyFunctorT template argument. |
|
SparseSolver ‐ This class is a general purpose solver for Sparse Conditional Propagation with a programmable lattice function. |
|
This is a utility class used to parse user‐provided text files with "special case lists" for code sanitizers. |
|
A BumpPtrAllocator that allows only elements of a specific type to be allocated. |
|
Spiller interface. |
|
A forward iterator over partitions of string over a separator. |
|
An SDNode that holds an arbitrary LLVM IR Value. This is used when the SelectionDAG needs to make a simple reference to something in the LLVM IR representation. |
|
A stable function is a function with a stable hash while tracking the locations of ignored operands and their hashes. |
|
The structure of the serialized stable function map is as follows: ‐ Number of unique function/module names ‐ Total size of unique function/module names for opt‐in skipping ‐ Unique function/module names ‐ Padding to align to 4 bytes ‐ Number of StableFunctionEntries ‐ Hashes of each StableFunctionEntry ‐ Fixed‐size fields for each StableFunctionEntry (the order is consistent with the hashes above): ‐ FunctionNameId ‐ ModuleNameId ‐ InstCount ‐ Relative offset to the beginning of IndexOperandHashes for this entry ‐ Total size of variable‐sized IndexOperandHashes for lazy‐loading support ‐ Variable‐sized IndexOperandHashes for each StableFunctionEntry: ‐ Number of IndexOperandHashes ‐ Contents of each IndexOperandHashes ‐ InstIndex ‐ OpndIndex ‐ OpndHash |
|
Compute live ranges of allocas. Live ranges are represented as sets of "interesting" instructions, which are defined as instructions that may start or end an alloca's lifetime. These are: * lifetime.start and lifetime.end intrinsics * first instruction of any basic block Interesting instructions are numbered in the depth‐first walk of the CFG, and in the program order inside each basic block. |
|
Printer pass for testing. |
|
MI‐level stackmap operands. |
|
A parser for the latest stackmap format. At the moment, latest=V3. |
|
StackOffset holds a fixed and a scalable offset in bytes. |
|
Encapsulates all of the information needed to generate a stack protector check, and signals to isel when initialized that one needs to be generated. |
|
StackSafetyInfo wrapper for the new pass manager. |
|
This pass performs the global (interprocedural) stack safety analysis (new pass manager). |
|
This pass performs the global (interprocedural) stack safety analysis (legacy pass manager). |
|
Printer pass for the |
|
Interface to access stack safety analysis results for single function. |
|
StackSafetyInfo wrapper for the legacy pass manager |
|
Printer pass for the |
|
This class provides an interface to register all the standard pass instrumentations and manages their state (if any). |
|
Helper to tie a abstract state implementation to an abstract attribute. |
|
Call sites that get wrapped by a gc.statepoint (currently only in RewriteStatepointsForGC and potentially in other passes in the future) can have attributes that describe properties of gc.statepoint call they will be eventually be wrapped in. This struct is used represent such directives. |
|
MI‐level Statepoint operands |
|
A class that holds the constants that represent static data and their profile information and provides methods to operate on them. |
|
This wraps the StaticDataProfileInfo object as an immutable pass, for a backend pass to operate on. |
|
A ThreadPool implementation using std::threads. |
|
An instruction for storing to memory. |
|
This class is used to represent ISD::STORE nodes. |
|
Represents base address of the CU. Represents a unit's contribution to the string offsets table. |
|
A handler which streams the returned data to a CachedFileStream. The cache file is only created if a 200 OK status is observed. |
|
Wraps the content provider with HTTP Status code and headers. |
|
This class wraps a string in an Error. |
|
"foo" ‐ Represent an initialization by a string value. |
|
A wrapper around a string literal that serves as a proxy for constructing global tables of StringRefs with the length computed at compile time. In order to avoid the invocation of a global constructor, StringLiteral should only be used in a constexpr context, as such: |
|
StringMap ‐ This is an unconventional map that is specialized for handling keys that are "strings", which are basically ranges of bytes. This does some funky memory allocation and hashing things to make it extremely efficient, storing the string data after the value in the map. |
|
StringMapEntry ‐ This is used to represent one value that is inserted into a StringMap. It contains the Value itself and the key: the string length and data. |
|
StringMapEntryBase ‐ Shared base class of StringMapEntry instances. |
|
StringMapEntryStorage ‐ Holds the value in a StringMapEntry. |
|
StringMapImpl ‐ This is the base class of StringMap that is shared among all of its instantiations. |
|
Forward iterator over StringMap entries. |
|
Adapter that yields StringRef keys from a StringMap iterator. |
|
Given a list of strings and code to execute when they match, output a simple switch tree to classify the input string. |
|
'string' ‐ Represent an string value |
|
Represent a constant reference to a string, i.e. a character array and a length, which need not be null terminated. |
|
Saves strings in the provided stable storage and returns a StringRef with a stable character pointer. |
|
StringSet ‐ A wrapper for StringMap that provides set‐like functionality. |
|
A switch()‐like statement whose cases are string literals. |
|
A table of densely packed, null‐terminated strings indexed by offset. |
|
Utility for building string tables with deduplicated suffixes. |
|
StringToOffsetTable ‐ This class uniques a bunch of nul‐terminated strings and keeps track of their offset in a massive contiguous string allocation. It can then output this string blob and use indexes into the string to reference each piece. |
|
Pass to remove unused function declarations. |
|
Helper for making strong types. |
|
Used to lazily calculate structure layout information for a target machine, based on the DataLayout structure. |
|
Class to represent struct types. There are two different kinds of struct types: Literal structs and Identified structs. |
|
Printer pass for StructuralHashes |
|
A visitor class for IR positions. |
|
Used to provide key value pairs for feature and CPU bit flags. |
|
Manages the enabling and disabling of subtarget specific features. |
|
Maps a CPU alias name to the index of the processor it resolves to. |
|
Used to provide key value pairs for feature and CPU bit flags. |
|
A node in a suffix tree which represents a substring or suffix. |
|
This class builds the dependence graph for the instructions in a loop, and attempts to schedule the instructions using the SMS algorithm. |
|
This class provides APIs to retrieve edges from/to an SUnit node, with a particular focus on loop‐carried dependencies. Since SUnit is not designed to represent such edges, handling them directly using its APIs has required non‐trivial logic in the past. This class serves as a wrapper around SUnit, offering a simpler interface for managing these dependencies. |
|
Represents a dependence between two instruction. |
|
Multiway switch |
|
A wrapper class to simplify modification of SwitchInst cases along with their prof branch_weights metadata. |
|
Reader for symbol remapping files. |
|
List that automatically updates parent links and symbol tables. |
|
Template metafunction to get the parent type for a symbol table list. |
|
Class with methods to propagate synthetic entry counts. |
|
Verify that the TBAA Metadatas are valid. |
|
Utility class to perform tail duplication. |
|
Target ‐ Wrapper for Target specific information. |
|
Class to represent target extensions types, which are generally unintrospectable from target‐independent optimizations. |
|
TargetFolder ‐ Create constants with target dependent folding. |
|
Information about stack frame layout on the target. It holds the direction of stack growth, the known stack alignment on entry to each function, and the offset to the locals area. |
|
Analysis pass providing the |
|
Completely target‐dependent object reference. |
|
TargetInstrInfo ‐ Interface to description of machine instruction set |
|
Analysis pass providing the |
|
Provides information about what library functions are available for the current target. |
|
Implementation of the target library information. |
|
This class defines information used to lower LLVM code to legal SelectionDAG operators that the target instruction selector can accept natively. |
|
This base class for TargetLowering contains the SelectionDAG‐independent parts that can be used from the rest of CodeGen. |
|
Primary interface to the complete machine description for the target machine. All target‐specific information should be accessible through this interface. |
|
Target‐Independent Code Generator Pass Configuration Options. |
|
Data structure to contain the information needed to uniquely identify a target entry. |
|
TargetRegisterInfo base class ‐ We assume that the target defines a static array of TargetRegisterDesc objects that represent all of the machine registers that the target has. As such, we simply have to track a pointer to this array so that we can turn register number into a register descriptor. |
|
Extra information, not in MCRegisterDesc, about registers. These are used by codegen, not by MC. |
|
TargetRegistry ‐ Generic interface to target specific features. |
|
Provide an instruction scheduling machine model to CodeGen passes. |
|
TargetSubtargetInfo ‐ Generic base class for all target subtargets. All Target‐specific options that control code generation and printing should be exposed through a TargetSubtargetInfo‐derived class. |
|
This pass provides access to the codegen interfaces that are needed for IR‐level transformations. |
|
Base class for use as a mix‐in that aids implementing a TargetTransformInfo‐compatible class. |
|
CRTP base class for use as a mix‐in that aids implementing a TargetTransformInfo‐compatible class. |
|
Wrapper pass for TargetTransformInfo. |
|
An ordered list of functions identified by their NameRef found in INSTR_PROF_DATA |
|
!op (X, Y, Z) ‐ Combine two inits. |
|
This format is a simple text format that's suitable for test data. The header is a custom format starting with |
|
Utility class to convert between different character encodings. |
|
Reader for the simple text based instrprof format. |
|
This class define an interface similar to the LTOCodeGenerator, but adapted for ThinLTO processing. The ThinLTOCodeGenerator is not intended to be reuse for multiple compilation: the model is that the client adds modules to the generator and ask to perform the ThinLTO optimizations / codegen, and finally destroys the codegenerator. |
|
This defines the abstract base interface for a ThreadPool allowing asynchronous parallel execution on a defined number of threads. |
|
This tells how a thread pool will be used |
|
A group of tasks to be run on a thread pool. Thread pool tasks in different groups can run on the same threadpool but can be waited for separately. It is even possible for tasks of one group to submit and wait for tasks of another group, as long as this does not form a loop. |
|
Thread‐safe allocator adaptor. Uses a spin lock on the assumption that contention here is extremely rare. |
|
A thread‐safe version of |
|
Lock‐free thread‐safe hash‐mapped trie. |
|
Base class for a lock‐free thread‐safe hash‐mapped trie. |
|
A function pass for tsan instrumentation. |
|
This class assists in inserting MI thunk functions into the module and rewriting the existing machine functions to call these thunks. |
|
Basic implementation of MachineFunctionPass wrapping one or more `ThunkInserter`s passed as type parameters. |
|
A helper struct to create IR loop nests for tiling in IR of the following form: for ColumnLoop.Index = 0..NumColumns for RowLoop.Index = 0..NumRows for KLoop.Index = 0..NumInner |
|
This class implements ‐time‐passes functionality for new pass manager. It provides the pass‐instrumentation callbacks that measure the pass execution time. They collect timing info into individual timers as passes are being run. |
|
This class implements ‐‐time‐trace functionality for new pass manager. It provides the pass‐instrumentation callbacks that measure the pass execution time. They collect time tracing info by TimeProfiler. |
|
The TimeRegion class is used as a helper class to call the startTimer() and stopTimer() methods of the Timer class. When the object is constructed, it starts the timer specified as its argument. When it is destroyed, it stops the relevant timer. This makes it easy to time a region of code. |
|
The TimeTraceScope is a helper class to call the begin and end functions of the time trace profiler. When the object is constructed, it begins the section; and when it is destroyed, it stops it. If the time profiler is not initialized, the overhead is a single branch. |
|
This class is used to track the amount of time spent between invocations of its startTimer()/stopTimer() methods. Given appropriate OS support it can also keep track of the RSS of the program at various points. By default, the Timer will print the amount of time it has captured to standard error when the last timer is destroyed, otherwise it is printed when its TimerGroup is destroyed. Timers do not print their information if they are never started. |
|
The TimerGroup class is used to group together related timers into a single report that is printed when the TimerGroup is destroyed. It is illegal to destroy a TimerGroup object before all of the Timers in it are gone. A TimerGroup can be specified for a newly created timer in its constructor. |
|
TinyPtrVector ‐ This class is specialized for cases where there are normally 0 or 1 element in a vector, but is general enough to go beyond that when required. |
|
This class contains a raw_fd_ostream and adds a few extra features commonly needed for compiler‐like tool output files: ‐ The file is automatically deleted if the process is killed. ‐ The file is automatically deleted when the ToolOutputFile object is destroyed unless the client calls keep(). |
|
(Optionally) delegate resolving to a sub‐resolver, and keep track whether there were unresolved references. |
|
Tracking metadata reference. |
|
Atomic counter used when statistics collection is enabled. |
|
Value handle that tracks a Value across RAUW. |
|
See the file comment for details on the usage of the TrailingObjects type. |
|
The utility class that helps computing the index of the object inside trie from its hash. The generator can be configured with the number of bits used for each level of trie structure with |
|
Helper used by unit tests to inspect ThreadSafeTrieRawHashMapBase internals. |
|
Triple ‐ Helper class for working with autoconf configuration names. For historical reasons, we also call these 'triples' (they used to contain exactly three fields). |
|
This class represents a truncation of integer types. |
|
Like |
|
Twine ‐ A lightweight data structure for efficiently representing the concatenation of temporary values as strings. |
|
The instances of the Type class are immutable: once they are created, they are never changed. Also note that only one instance of a particular type is ever created. Thus seeing if two types are equal is a matter of doing a trivial pointer comparison. To enforce that no two equal instances are created, Type instances can only be created via static factory methods in class Type and in derived classes. Once allocated, Types are never free'd. |
|
Analysis pass providing a never‐invalidated alias analysis result. |
|
A simple AA result that uses TBAA metadata to answer queries. |
|
Legacy wrapper pass to provide the TypeBasedAAResult object. |
|
Type Conversion Cost Table |
|
TypeFinder ‐ Walk over a module, identifying all of the types that are used by the module. |
|
The following data structures summarize type metadata information. For type metadata overview see https://llvm.org/docs/TypeMetadata.html. Each type metadata includes both the type identifier and the offset of the address point of the type (the address held by objects of that type which may not be the beginning of the virtual table). Vtable definitions are decorated with type metadata for the types they are compatible with. |
|
This class implements a switch‐like dispatch statement for a value of 'T' using dyn_cast functionality. Each |
|
This is the common superclass of types that have a specific, explicit type, stored in ValueTy. |
|
Typed iterator through MDNode operands. |
|
A few GPU targets, such as DXIL and SPIR‐V, have typed pointers. This pointer type abstraction is used for tracking the types of these pointers. It is not legal to use this type, or derived types containing this type, in LLVM IR. |
|
Typed tracking ref. |
|
Determine if all types in Ts are distinct. |
|
This class represents a cast unsigned integer to floating point. |
|
An auxiliary type to facilitate extraction of 3‐byte entities. |
|
!op (X) ‐ Transform an init. |
|
Unconditional Branch instruction. |
|
'undef' values are things that do not have specified contents. These are used for a variety of purposes, including global variable initializers and operands to instructions. 'undef' values can occur with any first‐class type. |
|
Analysis pass which computes |
|
Printer pass for the |
|
Legacy analysis pass which computes a |
|
A class that wraps MachineInstrs and derives from FoldingSetNode in order to be uniqued in a CSEMap. The tradeoff here is extra memory allocations for UniqueMachineInstr vs making MachineInstr bigger. |
|
This cast trait provides std::unique_ptr casting. It has the semantics of moving the contents of the input unique_ptr into the output unique_ptr during the cast. It's also a good example of how to implement a move‐only cast. |
|
Saves strings in the provided stable storage and returns a StringRef with a stable character pointer. Saving the same string yields the same StringRef. |
|
It's very easy to introduce bugs by passing the wrong string pool. By using strong types the interface enforces that the right kind of pool is used. |
|
UniqueVector ‐ This class produces a sequential ID number (base 1) for each unique entry that is added. T is the type of entries in the vector. This class should have an implementation of operator== and of operator<. Entries can be fetched using operator[]with the entry ID. |
|
This function has undefined behavior. In particular, the presence of this instruction indicates some higher level knowledge that the end of the block cannot be reached. |
|
Produce an estimate of the unrolled cost of the specified loop. |
|
'?' ‐ Represents an uninitialized value. |
|
Magic data for optimising unsigned division by a constant. |
|
A Use represents the edge between a Value definition and its users. |
|
Capture information for a specific Use. |
|
Structure to hold a use‐list order. |
|
This class represents the va_arg llvm instruction, which returns an argument of the specified type given a va_list and increments that list |
|
This represents the llvm.va_copy intrinsic. |
|
This represents the llvm.va_end intrinsic. |
|
This represents the llvm.va_start intrinsic. |
|
The Vector Function Database. |
|
Holds the VFShape for a specific scalar to vector function mapping. |
|
Encapsulates information needed to describe a parameter. |
|
Contains the information about the kind of vectorization available. |
|
Extend the standard ScheduleDAGMILive to provide more context and override the top‐level schedule() driver. |
|
VNInfo ‐ Value Number Information. This class holds information about a machine level values, including definition and use points. |
|
This base class is used to represent VP_LOAD, VP_STORE, EXPERIMENTAL_VP_STRIDED_LOAD and EXPERIMENTAL_VP_STRIDED_STORE nodes |
|
This class is used to represent an VP_GATHER node |
|
This is a base class used to represent VP_GATHER and VP_SCATTER nodes |
|
This is the common base class for vector predication intrinsics. |
|
This class is used to represent a VP_LOAD node |
|
This represents vector predication reduction intrinsics. |
|
This class is used to represent an VP_SCATTER node |
|
This class is used to represent a VP_STORE node |
|
This class is used to represent an EXPERIMENTAL_VP_STRIDED_LOAD node. |
|
This class is used to represent an EXPERIMENTAL_VP_STRIDED_STORE node. |
|
An individual mapping from virtual register number to SUnit. |
|
Mapping from virtual register to SUnit including an operand index. |
|
This class is used to represent EVT's, which are used to parameterize some operations. |
|
ValID ‐ Represents a reference of a definition of some sort with no type. There are several cases where we have to parse the value but where the type can depend on later context. This may either be a numeric reference or a symbolic (%var) reference. This is just a discriminated union. |
|
LLVM Value Representation |
|
Simple struct used to hold a constant integer value and a virtual register. |
|
Value wrapper in the Metadata hierarchy. |
|
This cast trait provides casting for the specific case of casting to a value‐typed object from a pointer‐typed object. Note that |
|
Befriended by DenseMapBase so it can use bucket‐relocation erase callbacks. ValueHandleBase is the only caller that caches pointers into bucket arrays. |
|
Struct that holds a reference to a particular GUID in a global value summary. |
|
ValueIsPresent provides a way to check if a value is, well, present. For pointers, this is the equivalent of checking against nullptr, for Optionals this is the equivalent of checking hasValue(). It also provides a method for unwrapping a value (think calling .value() on an optional). |
|
This class represents lattice values for constants. |
|
See the file comment. |
|
This class defines the default behavior for configurable aspects of ValueMap<>. User Configs should inherit from this class to be as compatible as possible with future versions of ValueMap. |
|
This is a class that can be implemented by clients to remap types when cloning constants and instructions. |
|
Context for (re‐)mapping values (and metadata). |
|
This is a class that can be implemented by clients to materialize Values on demand. |
|
This class provides a symbol table of name/value pairs. It is essentially a std::map<std::string,Value*> but has a controlled interface provided by LLVM as well as ensuring uniqueness of names. |
|
Opcode{0} ‐ Represent access to one bit of a variable or field. |
|
classname<targs...> ‐ Represent an uninstantiated anonymous class instantiation. |
|
'Opcode' ‐ Represent a reference to an entire variable object. |
|
Variable location definition used by FunctionVarLocs. |
|
VarStreamArrayExtractor is intended to be specialized to provide customized extraction logic. On input it receives a BinaryStreamRef pointing to the beginning of the next record, but where the length of the record is not yet known. Upon completion, it should return an appropriate Error instance if a record could not be extracted, or if one could be extracted it should return success and set Len to the number of bytes this record occupied in the underlying stream, and it should fill out the fields of the value type Item appropriately to represent the current record. |
|
VarStreamArray represents an array of variable length records backed by a stream. This could be a contiguous sequence of bytes in memory, it could be a file on disk, or it could be a PDB stream where bytes are stored as discontiguous blocks in a file. Usually it is desirable to treat arrays as contiguous blocks of memory, but doing so with large PDB files, for example, could mean allocating huge amounts of memory just to allow re‐ordering of stream data to be contiguous before iterating over it. By abstracting this out, we need not duplicate this memory, and we can iterate over arrays in arbitrarily formatted streams. Elements are parsed lazily on iteration, so there is no upfront cost associated with building or copying a VarStreamArray, no matter how large it may be. |
|
VariadicOperandTraits ‐ determine the allocation regime of the Use array when it is a prefix to the User object, and the number of Use objects is only known at allocation time. |
|
Provides info so a possible vectorization of a function can be computed. Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized by a factor 'VectorizationFactor'. The VABIPrefix string holds information about isa, mask, vlen, and vparams so a scalar‐to‐vector mapping of the form: ZGV<isa><mask><vlen><vparams><scalarname>(<vectorname>) can be constructed where: |
|
Optimize scalar/vector interactions in IR using target cost models. |
|
Base class of all SIMD vector types |
|
Collection of parameters shared beetween the Loop Vectorizer and the Loop Access Analysis. |
|
Check a module for errors, and report separate error states for IR and debug info errors. |
|
Create a verifier pass. |
|
Represents a version number in the form major[.minor[.subminor[.build]]]. |
|
The ValueInfo and offset for a function within a vtable definition initializer array. |
|
Calculate auxiliary information for a virtual register such as its spill weight and allocation hint. |
|
VirtRegInfo ‐ Information about a virtual register used by a set of operands. |
|
Wrapper class representing a virtual register or register unit. |
|
Value handle that is nullable, but tries to track the Value. |
|
A nullable Value handle that is nullable. |
|
Collect information about induction variables that are used by sign/zero extend operations. This information is recorded by CollectExtend and provides the input to WidenIV. |
|
The main class in the implementation of the target independent window scheduler. |
|
An RAII object that temporarily switches an output stream to a specific color. |
|
Represents an op.with.overflow intrinsic. |
|
A BinaryStream which can be read from as well as written to. Note that writing to a BinaryStream always necessitates copying from the input buffer to the stream's backing store. Streams are assumed to be buffered so that to be portable it is necessary to call commit() on the stream when all data has been written. |
|
MemoryBuffer with copy‐on‐write access to a writable backing store. |
|
MemoryBuffer that maps a file writable and can commit changes back. |
|
The return value from 128‐bit hashes. |
|
This class represents zero extension of integer types. |
|
If T is a pointer to X, return a pointer to const X. If it is not, return const T. |
|
|
If T is a pointer, just return it. If it is not, return T&. |
Generic breadth‐first search iterator over a graph. |
|
Storage for the visited‐node set used by breadth‐first iterators. |
|
Performs the actual cast after simplifying non‐simple source values. |
|
Computes the return type of |
|
Implementation detail that computes the return type of cast for |
|
Selects cast return type after optionally simplifying |
|
circular_raw_ostream ‐ A raw_ostream which can save its data to a circular buffer, or can pass it through directly to an underlying stream if specified with a buffer of zero. |
|
Iterator wrapper that concatenates sequences together. |
|
Choose const pointer or const reference based on whether |
|
ForwardIterator for the bits that are set. Iterators get invalidated when resize / reserve is called. |
|
Walks the defining accesses of MemoryDefs. Stops after we hit something that has no defining use (e.g. a MemoryPhi or liveOnEntry). Note that, when comparing against a null def_chain_iterator, this will compare equal only after walking said Phi/liveOnEntry. |
|
Binary functor that adapts to any other binary functor after dereferencing operands. |
|
Depth‐first iterator that stores its visited set externally. |
|
Generic depth‐first search iterator over a graph. |
|
Storage for the visited‐node set used by depth‐first iterators. |
|
A pseudo‐iterator adaptor that is designed to implement "early increment" style loops. |
|
Traits marking whether |
|
A wrapper class for fallible iterators. |
|
file_magic ‐ An "enum class" enumeration of file types based on magic (the first N bytes of the file). |
|
An iterator adaptor that filters the elements of given inner iterators. |
|
Specialization of filter_iterator_base for forward iteration only. |
|
Describes the parameters of a floating‐point format used by APFloat. |
|
|
Tag type that opts into iterating enums without enum_iteration_traits. |
Trait that formats values of type |
|
formatted_raw_ostream ‐ A raw_ostream that wraps another one and keeps track of line and column position, allowing padding out to specific column boundaries and querying the number of lines written to the stream. This assumes that the contents of the stream is valid UTF‐8 encoded text. This doesn't attempt to handle everything Unicode can do (combining characters, right‐to‐left markers, etc), but should cover the cases likely to appear in source code or diagnostic messages. |
|
Base class for formatv objects used by Twine. |
|
Tag type indicating that a constructor should initialize from a range. |
|
An efficient, type‐erasing, non‐owning reference to a callable. This is intended for use as the type of a function parameter that is not used after the function in question returns. |
|
This class provides various trait information about a callable object. * To access the number of arguments: Traits::num_args * To access the type of an argument: Traits::arg_t<Index> * To access the type of the result: Traits::result_t |
|
An opaque object representing a hash code. |
|
Function object that returns its argument unchanged. |
|
Inverse depth‐first iterator that stores its visited set externally. |
|
Depth‐first iterator over the inverse of graph |
|
Use delete by default for iplist and ilist. |
|
Implementations of list algorithms using ilist_node_base. |
|
Callbacks do nothing by default in iplist and ilist. |
|
Iterator for intrusive lists based on ilist_node. |
|
Option to add extra bits to the ilist_iterator. |
|
Iterator for intrusive lists based on ilist_node. Much like ilist_iterator, but with the addition of two bits recording whether this position (when in a range) is half or fully open. |
|
Custom traits to do nothing on deletion. |
|
An intrusive list node. |
|
Base class for ilist nodes. |
|
Implementation for an ilist node. |
|
A fragment for template traits for intrusive list that provides default node related operations. |
|
An ilist node that can access its parent list. |
|
Option to add a pointer to this list's owner in every node. |
|
Sentinel node that marks the end of an intrusive list. |
|
Option to choose whether to track sentinels. |
|
Option to specify a tag for the node type. |
|
Template traits for intrusive list. |
|
Value that inserts spaces when streamed into a raw_ostream. |
|
Increasing range of |
|
A utility class used to implement an iterator that contains some base object and an index. The iterator moves the index but keeps the base constant. |
|
Range of indexed accessor iterators over a non‐indexable base. |
|
Half‐open or closed integer/enum range yielding successive values of type |
|
An intrusive list with ownership and callbacks specified/controlled by ilist_traits, only with API safe for polymorphic types. |
|
A wrapper around an intrusive list with callbacks and non‐intrusive ownership. |
|
Mark |
|
Partial specialization that is true when |
|
Metafunction that determines whether the given type is either an integral type or an enumeration type, including enum classes. |
|
Trait that is true when |
|
Core implementation of |
|
Const‐aware wrapper that forwards |
|
Recursively simplifies |
|
CRTP base class for adapting an iterator to a different type. |
|
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of the interface. |
|
A range adaptor for a pair of iterators. |
|
Largest individual bit value used by |
|
Partial specialization providing the largest bit value of bitmask enum |
|
Sorting functions for the Available queue. |
|
Function object to check whether the first component of a container supported by std::get (like std::pair and std::tuple) compares less than the first component of another container. |
|
Function object to check whether the second component of a container supported by std::get (like std::pair and std::tuple) compares less than the second component of another container. |
|
A forward iterator which reads text lines from a buffer. |
|
llvm_shutdown_obj ‐ This is a simple helper class that calls llvm_shutdown() when it is destroyed. |
|
Trait that yields a pointer to const |
|
Trait that yields a const lvalue reference to |
|
Iterator adapter that applies a function when dereferenced. |
|
Base class for mapped iterators without stored function objects. |
|
Iterator base class used to implement const and non‐const iterators over the defining accesses of a MemoryAccess. |
|
object_creator ‐ Helper method for ManagedStatic. |
|
object_deleter ‐ Helper method for ManagedStatic. |
|
Function object to apply a binary function to the first component of a std::pair. |
|
Hash functor for |
|
An iterator type that allows iterating over the pointees via some other iterator. |
|
Utility type to build an inheritance chain that makes it easy to rank overload candidates. |
|
A raw_ostream that writes to a file descriptor. |
|
A raw_ostream of a file for reading/writing/seeking. |
|
A raw_ostream that discards all output. |
|
raw_os_ostream ‐ A raw_ostream that writes to an std::ostream. This is a simple adaptor class. It does not check for output errors; clients should use the underlying stream to detect errors. |
|
This class implements an extremely fast bulk output stream that can only output to a stream. It does not support seeking, reopening, rewinding, line buffered disciplines etc. It is a simple buffer that outputs a chunk at a time. |
|
Non‐owning proxy for a raw_ostream. Enables passing a stream into an API that takes ownership. |
|
Adaptor to create a stream class that proxies another raw_ostream. |
|
An abstract base class for streams implementations that also support a pwrite operation. This is useful for code that can mostly stream out data, but needs to patch in a header that needs to know the output size. |
|
Non‐owning proxy for a raw_pwrite_stream. Enables passing a stream into an API that takes ownership. |
|
Adaptor for creating a stream that proxies a raw_pwrite_stream. |
|
A raw_ostream that hash the content using the sha1 algorithm. |
|
A raw_ostream that writes to an std::string. |
|
A raw_ostream that writes to an SmallVector or SmallString. This is a simple adaptor class. This class does not encounter output errors. raw_svector_ostream operates without a buffer, delegating all memory management to the SmallString. Thus the SmallString is always up‐to‐date, may be used directly and there is no need to call flush(). |
|
Remove cv‐qualifiers and references from |
|
Sorting functions for the Available queue. |
|
Enumerate the SCCs of a directed graph in reverse topological order of the SCC DAG. |
|
Sort the nodes of a directed SCC in the decreasing order of the edge weights. The instantiating GraphT type should have weighted edge type declared in its graph traits in order to use this iterator. |
|
RAII guard that invokes a callable when leaving the current scope. |
|
A simple intrusive list implementation. |
|
Define a template that can be specialized by smart pointers to reflect the fact that they are automatically dereferenced, and are not involved with the template selection process... the default implementation is a noop. |
|
LLVM thread following std::thread interface with added constructor to specify stack size. |
|
Backport of C++20 |
|
unique_function is a type‐erasing functor similar to std::function. |
|
Provide an iterator that walks defs, giving both the memory access, and the current pointer location, updating the pointer location as it changes due to phi node translation. |
Type Aliases
Name |
Description |
This type defines the callback to add a pre‐existing file (e.g. in a cache). |
|
This type defines the callback to add a file that is generated on the fly. |
|
Temporary typedef for legacy code that uses a generic |
|
A mapping from intrinsics (=`llvm.assume` calls) to a value range (=knowledge) that is encoded in them. How the value range is interpreted depends on the RetainedKnowledgeKey that was used to get this out of the RetainedKnowledgeMap. |
|
The constant |
|
A sequence of basic blocks. |
|
The standard BumpPtrAllocator which just uses the default template parameters. |
|
AllocatorList specialized to allocate nodes from a bump‐pointer allocator. |
|
CCAssignFn ‐ This function assigns a location for Val, updating State to reflect the change. It returns 'true' if it failed to handle Val. |
|
CCCustomFn ‐ This function assigns a location for Val, possibly updating all args to reflect changes and indicates if it handled it. It must set isCustom if it handles the arg and returns true. |
|
The CGSCC analysis manager. |
|
A proxy from a |
|
A proxy from a |
|
The CGSCC pass manager. |
|
Keep record of which SUnit are in the same cluster group. |
|
This template class is a further refinement of FoldingSet which provides a context argument when calling Profile on its nodes. Currently, that argument is fixed at initialization time. |
|
DWARFAddressRangesVector ‐ represents a set of absolute address ranges. |
|
Represents a set of absolute location expressions. |
|
SFINAE helper that is valid when |
|
This is a callable that manages file caching operations. It accepts a task ID |
|
This template class is used to instantiate a specialized implementation of the folding set to the node class T. T must be a subclass of FoldingSetNode and implement a Profile function. |
|
Convenience alias for the base node type stored in a folding set. |
|
Convenience typedef for the Function analysis manager. |
|
A proxy from a |
|
Provide the |
|
Convenience typedef for a pass manager over functions. |
|
GCMetadataPrinterRegistry ‐ The GC assembly printer registry uses all the defaults from Registry. |
|
Subclasses of GCStrategy are made available for use during compilation by adding them to the global GCRegistry. This can done either within the LLVM source tree or via a loadable plugin. An example registeration would be: static GCRegistry::Add<CustomGC> X("custom‐name", "my custom supper fancy gc strategy"); |
|
Map of global value GUID to its summary, used to identify values defined in a particular module, and provide efficient access to their summary. |
|
A set of global value summary pointers. |
|
Apply 'Fn' to the list of global ctors of module M and replace contructor record with the one returned by |
|
An HTTPContentProvider is called by the HTTPServer to obtain chunks of the streaming response body. The returned chunk should be located at Offset bytes and have Length bytes. |
|
True if |
|
A function that takes an instruction and an operand index and returns true if the operand should be ignored in the function hash computation. |
|
A map from an instruction index to an instruction pointer. |
|
A map from an IndexPair to a stable hash. |
|
The pair of an instruction index and a operand index. |
|
This is used to track range of instructions with identical lexical scope. |
|
Represents an address in the target process's address space. |
|
A representation of the largest SDNode, for use in sizeof(). |
|
The loop analysis manager. |
|
A proxy from a |
|
The Loop pass manager. |
|
Extensible enumeration to represent the type of a fixup. |
|
An unsigned integer type large enough to represent all physical registers, but not necessarily virtual registers. |
|
MCContext stores MCSymbolTableValue in a string map (see MCSymbol::operator new). To avoid redundant storage of the name, MCSymbol stores a pointer (8 bytes ‐‐ half the size of a StringRef) to the entry to access it. |
|
Convenience typedef for a pass manager over functions. |
|
Check if the instr pair, FirstMI and SecondMI, should be fused together, based on the dependency between them, Dep. Given SecondMI, when FirstMI is unspecified, then check if SecondMI may be part of a fused pair at all. |
|
Summary of how a function affects memory in the program. |
|
Convenience typedef for the Module analysis manager. |
|
A proxy from a |
|
Provide the |
|
Provide the |
|
160 bits SHA1 |
|
Convenience typedef for a pass manager over modules. |
|
String table to hold/own module path strings, as well as a hash of the module. The StringMap makes a copy of and owns inserted strings. |
|
Map of a module name to the GUIDs and summaries we will import from that module. |
|
The SDNode class with the greatest alignment requirement. |
|
Perform the action using Records, and store output in OutFiles. Returns true on error, false otherwise. |
|
Trait that is true when |
|
A reference group represents a set of memory references that exhibit temporal or spacial reuse. Two references belong to the same reference group with respect to a inner loop L iff: 1. they have a loop independent dependency, or 2. they have a loop carried dependence with a small dependence distance (e.g. less than 2) carried by the inner loop, or 3. they refer to the same array, and the subscript in their innermost dimension is less than or equal to 'd' (where 'd' is less than the cache line size) |
|
Filter function for register classes during regalloc. Default register class filter is nullptr, where all registers should be allocated. |
|
Convenient type to represent either a register class or a register bank. |
|
Use a SparseMultiSet to track physical registers. Storage is only allocated once for the pass. It can be cleared in constant time and reused without any frees. |
|
In place of applying the relocations to the data we've read from disk we use a separate mapping table to the side and checking that at locations in the dwarf where we expect relocated values. This adds a bit of complexity to the dwarf parsing/extraction at the benefit of not allocating memory for the entire size of the debug info sections. |
|
An alias template to easily name a require analysis loop pass. |
|
The map Key contains the Value on for which the attribute is valid and the Attribute that is valid for that value. If the Attribute is not on any value, the Value is nullptr. |
|
A memcheck which made up of a pair of grouped pointers. |
|
Shared pointer for SMTExprs, used by SMTSolver API. |
|
Shared pointer for SMTSolvers. |
|
Shared pointer for SMTSorts, used by SMTSolver API. |
|
Unsigned size/capacity type used by SmallVector for element type |
|
Statistic type that actually tracks values when stats are enabled. |
|
Returns true on error, false otherwise. |
|
Holds target‐specific properties for a symbol. |
|
Find the type at a given index in a list of types. |
|
List of vtable definitions decorated by a particular type identifier, and their corresponding offsets in that type identifier's metadata. Note that each type identifier may be compatible with multiple vtables, due to inheritance, which is why this is a vector. |
|
Map of a type GUID to type id string and summary (multimap used in case of GUID conflicts). |
|
Track local uses of virtual registers. These uses are gathered by the DAG builder and may be consulted by the scheduler to avoid iterating an entire vreg use list. |
|
List of functions referenced by a particular vtable definition. |
|
Element type of |
|
Trait that is true when |
|
A unique key that represents a debug variable. First const DIScope *: Represents the scope of the debug variable. Second const DIScope *: Represents the InlinedAt scope of the debug variable. const DILocalVariable *: It is a pointer to the debug variable itself. |
|
traits class for checking whether type |
|
traits class for checking whether type T is a base class for all the given types in the variadic list. |
|
Default visited‐node set type for breadth‐first iteration. |
|
Common signed type of two integral types. |
|
Common unsigned type of two integral types. |
|
Type used for iterating through the global value summary map. |
|
Some template parameter helpers to optimize for bitwidth, for functions that take multiple arguments. |
|
An error handler callback. |
|
Defines filter_iterator to a suitable specialization of filter_iterator_impl, based on the underlying iterator's category. |
|
Intrusive list alias equivalent to |
|
Iterator type for |
|
Detects if a given trait holds for some set of arguments 'Args'. For example, the given trait could be used to detect if a given type has a copy assignment operator: template<class T> using has_copy_assign_t = decltype(std::declval<T&>() = std::declval<const T&>()); bool fooHasCopyAssign = is_detected<has_copy_assign_t, FooClass>::value; |
|
traits class for checking whether type T is one of any of the given types in the variadic list. |
|
Alias of |
|
Iterator adapter that dereferences twice to obtain a raw pointer. |
|
Alias for |
|
An opaque object representing a stable hash code. It can be serialized, deserialized, and is stable across processes and executions. |
|
Stack‐forced float type on non‐x86 hosts. |
|
Alias for |
|
Use this instead of std::unique_ptr<Value> or std::unique_ptr<Instruction>. Those don't work because Value and Instruction's destructors are protected, aren't virtual, and won't destroy the complete object. |
Enums
Name |
Description |
The MatchTable is encoded as an array of bytes. Thus, opcodes are expected to be <255. |
|
This is a llvm local version of __cxa_demangle. Other than the name and being in the llvm namespace it is identical. |
|
Modes for generating allocation token IDs. |
|
Types of ASan module constructors supported |
|
Mode of ASan detect stack use after return |
|
Types of ASan module destructors supported |
|
Index of elements in the operand bundle. If the element exist it is guaranteed to be what is specified in this enum but it may not exist. |
|
Atomic ordering for LLVM's memory model. |
|
Atomic ordering for C11 / C++11's memory models. |
|
Target‐neutral memory synchronization scopes. |
|
Run options, used by the pass manager. |
|
Offsets of the 32‐bit fields of bitstream wrapper header. |
|
Components of the pointer that may be captured. |
|
The type of CFI jumptable needed for a function. |
|
Tracks whether abstract attribute state changed. |
|
Output kind requested from or returned by addPassesToEmitFile. |
|
Code generation optimization level. |
|
Enumeration value for AMDGPU code object version, which is the code object version times 100. |
|
Controls whether WithColor applies ANSI colors to a stream. |
|
The combiner's goal may differ based on which pattern it is attempting to optimize. |
|
Control Flow Guard check mechanism. |
|
Control Flow Guard enablement mode. |
|
CurStreamTypeType ‐ A type for CurStreamType |
|
Selects which debug sections get dumped. |
|
This is just a helper to programmatically construct DIDumpType. |
|
A DINameKind is passed to name search methods to specify a preference regarding the type of name resolution the caller wants. |
|
The enum of section identifiers to be used in internal interfaces. |
|
Section identifiers for DWP output. |
|
Identify a debugger for "tuning" the debug info. |
|
Defines the different supported kind of a diagnostic. This enum should be extended with a new ID for each added concrete subclass. |
|
Defines the different supported severity of a diagnostic. |
|
Embedded ABI version selection. |
|
Enum that allows us to spell out the direction. |
|
Floating‐point class tests, supported by 'is_fpclass' intrinsic. Actual test may be an OR combination of basic tests. |
|
Floating‐point formatting style for native writers. |
|
Specify which functions should keep the frame pointer. |
|
Function return thunk generation mode. |
|
Enable abort calls when global instruction selection fails to lower/select an instruction. |
|
Hexadecimal formatting style for native writers. |
|
Symbolic highlight roles used when coloring diagnostic and dump output. |
|
IR2Vec computes two kinds of embeddings: Symbolic and Flow‐aware. Symbolic embeddings capture the "syntactic" and "statistical correlation" of the IR entities. Flow‐aware embeddings build on top of symbolic embeddings and additionally capture the flow information in the IR. IR2VecKind is used to specify the type of embeddings to generate. Note: Implementation of FlowAware embeddings is not same as the one described in the paper. The current implementation is a simplified version that captures the flow information (SSA‐based use‐defs) without tracing through memory level use‐defs in the embedding computation described in the paper. |
|
The locations at which a function might access memory. |
|
The IR units a pass can run on. |
|
There are 4 scenarios we can use the InlineAdvisor: ‐ Default ‐ use manual heuristics. |
|
An enum describing the attributes of an instrumented profile. |
|
Integer formatting style for native writers. |
|
The floating‐point format used for the target's "long double" type. |
|
Represents the result of a |
|
Linker Optimization Hint Type. |
|
Register units are used to compute register aliasing. Every register has at least one register unit, but it can have more. Two registers overlap if and only if they have a common register unit. |
|
These are instruction patterns matched by the machine combiner pass. |
|
Strategies for selecting traces. |
|
Flags indicating whether a memory access modifies or references memory. |
|
Different types of internal pass managers. External pass managers (PassManager and FunctionPassManager) are not represented here. Ordering of pass manager types is important here. |
|
What to do with the summary when running passes that operate on it. |
|
PrevailingType enum used as a return type of callback passed to computeDeadSymbolsAndUpdateIndirectCalls. Yes and No values used when status explicitly set by symbols resolution, otherwise status is Unknown. |
|
These are the kinds of recurrences that we support. |
|
List of the modes supported by the RegBankSelect pass. |
|
Flags to represent properties of register accesses. |
|
These are flags that the value mapping APIs allow. |
|
Rounding mode. |
|
NoWrapFlags are bitfield indices into SCEV's SubclassData. |
|
Specific patterns of select instructions we can match. |
|
Behavior when a floating point min/max is given one NaN and one non‐NaN as input. |
|
Outcome of attempting to change the current thread's priority. |
|
The statepoint intrinsic accepts a set of flags as its third argument. Valid values come out of this set. |
|
Indicates when and how the Swift async frame pointer bit should be set. |
|
This enumerates the LLVM full LTO or ThinLTO optimization phases. |
|
Scheduling priority hint for |
|
The mode sets how eager a transformation should be applied. |
|
Indicates the characteristics of a loop with an uncountable exit. * None ‐‐ No uncountable exit present. * ReadOnly ‐‐ At least one uncountable exit in a readonly loop. * ReadWrite ‐‐ At least one uncountable exit in a loop with side effects that may require masking. |
|
Enumeration to track whether we are interested in Undef, Poison, or both. |
|
Describes the type of Instruction Set Architecture |
|
Describes the type of Parameters |
|
Represents the details the expansion of a VP intrinsic. |
|
Enum describing how values behave with respect to uniformity and divergence, to answer the question: if the same instruction is executed by two threads in a convergent set of threads, will its result value be uniform, i.e. the same on both threads? |
|
Type wrapper for integer ID for Variables. 0 is reserved. |
|
Represents a hint about the context in which a vector instruction or intrinsic is used. |
|
List of known vector‐functions libraries. |
|
Describes the result of waiting for the owner to release the lock. |
|
Windows x64 exception‐handling unwind info version. |
|
Byte order of multi‐byte values. |
|
How NaN values are represented. |
|
How the nonfinite values Inf and NaN are represented. |
|
Enum that represents what fraction of the LSB truncated bits of an fp number represent. |
|
Functions
Name |
Description |
Subtract two unsigned integers, X and Y, of type T and return the absolute value of the result. |
|
Return the absolute value of a signed integer, converted to the corresponding unsigned integer type. Avoids undefined behavior in std::abs when you pass it INT_MIN or similar. |
|
|
|
AnalyzePhysRegInBundle ‐ Analyze how the current instruction or bundle uses a physical register. This function should not be called after operator++(), it expects a fresh iterator. |
|
AnalyzeVirtRegInBundle ‐ Analyze how the current instruction or bundle uses a virtual register. This function should not be called after operator++(), it expects a fresh iterator. |
|
Return a pair of lane masks (reads, writes) indicating which lanes this instruction uses with Reg. |
|
Check if statistics are enabled. |
|
|
|
Check if it is legal to perform inlining of the function called by |
|
Determine if the raw_ostream provided is connected to a terminal. If so, generate a warning message to errs() advising against display of bitcode and return true. Otherwise just return false. Check for output written to a console |
|
This works exactly like CloneFunctionInto, except that it does some simple constant prop and DCE on the fly. The effect of this is to copy significantly less code in cases where (for example) a function call with constant arguments is inlined, and those constant arguments cause a significant amount of code in the callee to be dead. Since this doesn't produce an exactly copy of the input, it can't be used for things like CloneFunction or CloneModule. |
|
Return a copy of the specified basic block, but without embedding the block into a particular function. The block returned is an exact copy of the specified basic block, without any remapping having been performed. Because of this, this is only suitable for applications where the basic block will be inserted into the same function that it was cloned from (loop unrolling would use this, for example). |
|
Return a copy of the specified function and add it to that function's module. Also, any references specified in the VMap are changed to refer to their mapped value instead of the original one. If any of the arguments to the function are in the VMap, the arguments are deleted from the resultant function. The VMap is updated to include mappings from all of the instructions and basicblocks in the function from their old to new values. The final argument captures information about the cloned code if non‐null. |
|
Clone OldFunc's attributes into NewFunc, transforming values based on the mappings in VMap. |
|
Clone OldFunc's body into NewFunc. |
|
Clone OldFunc into NewFunc, transforming the old arguments into references to VMap values. Note that if NewFunc already has basic blocks, the ones cloned into it will be added to the end of the function. This function fills in a list of return instructions, and can optionally remap types and/or append the specified suffix to all values cloned. |
|
Clone OldFunc's metadata into NewFunc. |
|
|
|
Compute all the imports and exports for every module in the Index. |
|
Determine the edit distance between two sequences. |
|
Compute the linearized index of a member in a nested aggregate/struct/array. |
|
Determine the edit distance between two sequences. |
|
Get the upper bound on bit size for this Value |
|
Return the number of times the sign bit of the register is replicated into the other bits. We know that at least 1 bit is always equal to the sign bit (itself), but other cases can give us information. For example, immediately after an "ashr X, 2", we know that the top 3 bits are all equal to each other, so we return 3. For vectors, return the number of sign bits for the vector element with the mininum number of known sign bits. |
|
Given an LLVM IR type, compute non‐aggregate subtypes. Optionally also compute their offsets. |
|
ComputeValueVTs ‐ Given an LLVM IR type, compute a sequence of EVTs that represent all the individual underlying non‐aggregate types that comprise it. |
|
Attempt to constant fold a binary operation with the specified operands. Returns null or a constant expression of the specified operands on failure. |
|
ConstantFoldCall ‐ Attempt to constant fold a call to the specified function with the specified arguments, returning null if unsuccessful. |
|
Attempt to constant fold a cast with the specified operand. If it fails, it returns a constant expression of the specified operand. |
|
Attempt to constant fold a compare instruction (icmp/fcmp) with the specified operands. Returns null or a constant expression of the specified operands on failure. Denormal inputs may be flushed based on the denormal handling mode. |
|
ConstantFoldConstant ‐ Fold the constant using the specified DataLayout. This function always returns a non‐null constant: Either the folding result, or the original constant if further folding is not possible. |
|
Attempt to constant fold an extractelement instruction with the specified operands and indices. The constant result is returned if successful; if not, null is returned. |
|
Attempt to constant fold an extractvalue instruction with the specified operands and indices. The constant result is returned if successful; if not, null is returned. |
|
Attempt to constant fold a floating point binary operation with the specified operands, applying the denormal handling mod to the operands. Returns null or a constant expression of the specified operands on failure. |
|
Attempt to constant fold an insertelement instruction with the specified operands and indices. The constant result is returned if successful; if not, null is returned. |
|
Attempt to constant fold an insertvalue instruction with the specified operands and indices. The constant result is returned if successful; if not, null is returned. |
|
ConstantFoldInstOperands ‐ Attempt to constant fold an instruction with the specified operands. If successful, the constant result is returned, if not, null is returned. Note that this function can fail when attempting to fold instructions like loads and stores, which have no constant expression form. |
|
ConstantFoldInstruction ‐ Try to constant fold the specified instruction. If successful, the constant result is returned, if not, null is returned. Note that this fails if not all of the operands are constant. Otherwise, this function can only fail when attempting to fold instructions like loads and stores, which have no constant expression form. |
|
Constant fold a zext, sext or trunc, depending on IsSigned and whether the DestTy is wider or narrower than C. Returns nullptr on failure. |
|
|
|
|
|
If C is a uniform value where all bits are the same (either all zero, all ones, all undef or all poison), return the corresponding uniform value in the new type. If the value is not uniform or the result cannot be represented, return null. |
|
ConstantFoldLoadThroughBitcast ‐ try to cast constant to destination type returning null if unsuccessful. Can cast pointer to pointer or pointer to integer and vice versa if their sizes are equal. |
|
Attempt to constant fold a select instruction with the specified operands. The constant result is returned if successful; if not, null is returned. |
|
Attempt to constant fold a shufflevector instruction with the specified operands and mask. See class ShuffleVectorInst for a description of the mask representation. The constant result is returned if successful; if not, null is returned. |
|
If a terminator instruction is predicated on a constant value, convert it into an unconditional branch to the constant destination. This is a nontrivial operation because the successors of this basic block must have their PHI nodes updated. Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch conditions and indirectbr addresses this might make dead if DeleteDeadConditions is true. |
|
Tries to constant fold a unary integer operation (G_CTLZ, G_CTTZ, G_CTPOP and their _ZERO_POISON variants, G_ABS, G_BSWAP, G_BITREVERSE) on |
|
Attempt to constant fold a unary operation with the specified operand. Returns null on failure. |
|
Tries to constant fold a vector binop with sources |
|
Compile time Log2. Valid only for positive powers of two. |
|
Convert an Unicode code point to UTF8 sequence. |
|
Find in type conversion cost table. |
|
|
|
Convert a partial UTF8 sequence to UTF32. If the sequence ends in an incomplete code unit sequence, returns |
|
Convert a partial UTF8 sequence to UTF32. If the sequence ends in an incomplete code unit sequence, returns |
|
|
|
Find in cost table. |
|
Return a stream to print our output on. |
|
Convenience method to create and Z3Solver object |
|
|
|
Delete the specified block, which must have no predecessors. |
|
Delete the specified blocks from |
|
Examine each PHI in the given block and delete it if it is dead. Also recursively delete any operands that become dead as a result. This includes tracing the def‐use list from the PHI to see if it is ultimately unused or if it reaches an unused cycle. Return true if any PHIs were deleted. |
|
This function takes a virtual register computed by a phi node and replaces it with a slot in the stack frame, allocated via alloca. The phi node is deleted and it returns the pointer to the alloca inserted. |
|
This function takes a virtual register computed by an Instruction and replaces it with a slot in the stack frame, allocated via alloca. This allows the CFG to be changed around without fear of invalidating the SSA information for the value. It returns the pointer to the alloca inserted to create a stack slot for X. |
|
Determine what kind of capture behaviour |
|
DiffFilesWithTolerance ‐ Compare the two files specified, returning 0 if the files match, 1 if they are different, and 2 if there is a file error. This function allows you to specify an absolute and relative FP error that is allowed to exist. If you specify a string to fill in for the error option, it will set the string to an error message if an error occurs, or if the files are different. |
|
Split edge between BB and PredBB and duplicate all non‐Phi instructions from BB between its beginning and the StopAt instruction into the split block. Phi nodes are not duplicated, but their uses are handled correctly: we replace them with the uses of corresponding Phi inputs. ValueMapping is used to map the original instructions from BB to their newly‐created copies. Returns the split block. |
|
Check for and eliminate duplicate PHI nodes in this block. This doesn't try to be clever about PHI nodes which differ only in the order of the incoming values, but instcombine orders them so it usually won't matter. |
|
Delete all basic blocks from |
|
Emit into |
|
Enables dumping a "pretty" stack trace when the program crashes. |
|
Enables (or disables) dumping a "pretty" stack trace when the user sends SIGINFO or SIGUSR1 to the current process. |
|
Enable the collection and printing of statistics. |
|
ExtractTypeInfo ‐ Returns the type info, possibly bitcast, encoded in V. |
|
|
|
Analyze the specified function to find all of the loop backedges in the function and return them. This is a relatively cheap (compared to computing dominators and loop info) analysis. |
|
Given an aggregate and an sequence of indices, see if the scalar value indexed is already around as a register, for example if it were inserted directly into the aggregate. |
|
This function is used to flatten a CFG. For example, it uses parallel‐and and parallel‐or mode to collapse if‐conditions and merge if‐regions with identical statements. |
|
Attempt to flush float point constant according to denormal mode set in the instruction's parent function attributes. If so, return a zero with the correct sign, otherwise return the original constant. Inputs and outputs to floating point instructions can have their mode set separately, so the direction is also needed. |
|
This method duplicates the specified return instruction into a predecessor which ends in an unconditional branch. If the return instruction returns a value defined by a PHI, propagate the right value into the return. It returns the new return instruction in the predecessor. |
|
We know that BB has one predecessor. If there are any single‐entry PHI nodes in it, fold them away. This handles the case when all entries to the PHI nodes in a block are guaranteed equal, such as when the block has exactly one predecessor. |
|
Check whether BB is the merge point of a if‐region. If so, return the branch instruction that determines which entry into BB will be taken. Also, return by references the block that will be entered from if the condition is true, and the block that will be entered if the condition is false. |
|
Analyze the specified pointer to see if it can be expressed as a base pointer plus a constant offset. Return the base and offset to the caller. |
|
Given an LLVM IR type and return type attributes, compute the return value EVTs and flags, and optionally also the offsets, if the return value is being lowered to memory. |
|
Get the statistics. This can be used to look up the value of statistics without needing to parse JSON. |
|
If we can compute the length of the string pointed to by the specified pointer, return 'len+1'. If we can't, return 0. |
|
Search for the specified successor of basic block BB and return its position in the terminator instruction's list of successors. It is an error to call this with a block that is not a successor. |
|
Check if the given basic block contains any loop or entry convergent intrinsic instructions. |
|
Return the high 32 bits of a 64 bit value. |
|
|
|
This should generally not be used, use InlineFunction instead. |
|
Creates and inserts a dbg_value record intrinsic before a store that has an associated llvm.dbg.value intrinsic. |
|
Check if we can prove that all paths starting from this block converge to a block that either has a llvm.experimental.deoptimize call prior to its terminating return instruction or is terminated by unreachable. All blocks in the traversed sequence must have an unique successor, maybe except for the last one. |
|
If this constant is a constant offset from a global, return the global and the constant. Because of constantexprs, this function is recursive. If the global is part of a dso_local_equivalent constant, return it through |
|
Return the low 32 bits of a 64 bit value. |
|
Loads the integer stored in the LoadBytes bytes starting from Src into IntVal, which is assumed to be wide enough and to hold zero. |
|
Returns the log2 of the alignment. |
|
Return the floor log base 2 of the specified value, ‐1 if the value is zero. (32 bit edition.) Ex. Log2_32(32) == 5, Log2_32(1) == 0, Log2_32(0) == ‐1, Log2_32(6) == 2 |
|
Return the ceil log base 2 of the specified value, 32 if the value is zero. (32 bit edition). Ex. Log2_32_Ceil(32) == 5, Log2_32_Ceil(1) == 0, Log2_32_Ceil(6) == 3 |
|
Return the floor log base 2 of the specified value, ‐1 if the value is zero. (64 bit edition.) |
|
Return the ceil log base 2 of the specified value, 64 if the value is zero. (64 bit edition.) |
|
Convert a loop into a loop with bottom test. It may perform loop latch simplication as well if the flag RotationOnly is false. The flag Threshold represents the size threshold of the loop header. If the loop header's size exceeds the threshold, the loop rotation will give up. The flag IsUtilMode controls the heuristic used in the LoopRotation. If it is true, the profitability heuristic will be ignored. |
|
Lowers dbg.declare records into appropriate set of dbg.value records. |
|
Helper to compute and return lower 64 bits of the given string's MD5 hash. |
|
Make a 64‐bit integer from a high / low pair of 32‐bit integers. |
|
|
|
|
|
Return true if 'V & Mask' is known to be zero. We use this predicate to simplify operations downstream. Mask is known to be zero for bits that V cannot have. |
|
BB is a block with one predecessor and its predecessor is known to have one successor (BB!). Eliminate the edge between them, moving the instructions in the predecessor into BB. This deletes the predecessor block. |
|
Attempts to merge a block into its predecessor, if possible. The return value indicates success or failure. By default do not merge blocks if BB's predecessor has multiple successors. If PredecessorWithTwoSuccessors = true, the blocks can only be merged if BB's Pred has a branch to BB and to AnotherBB, and BB has a single successor Sing. In this case the branch will be updated with Sing instead of BB, and BB will still be merged into its predecessor and removed. If |
|
Merge block(s) sucessors, if possible. Return true if at least two of the blocks were merged together. In order to merge, each block must be terminated by an unconditional branch. If L is provided, then the blocks merged into their predecessors must be in L. In addition, This utility calls on another utility: MergeBlockIntoPredecessor. Blocks are successfully merged when the call to MergeBlockIntoPredecessor returns true. |
|
|
|
|
|
Returns the next power of two (in 64‐bits) that is strictly greater than A. Returns zero on overflow. |
|
Check whether null pointer dereferencing is considered undefined behavior for a given function or an address space. Null pointer access in non‐zero address space is not considered undefined. Return value: false => null pointer dereference is undefined. Return value: true => null pointer dereference is not undefined. |
|
Returns the number of digits in the given integer. |
|
Peels a single block loop. Loop must have two successors, one of which must be itself. Similarly it must have two predecessors, one of which must be itself. |
|
|
|
|
|
Returns the power of two which is greater than or equal to the given value. Essentially, it is a ceil operation across the domain of powers of two. |
|
Instrumentation passes often insert conditional checks into entry blocks. Call this function before splitting the entry block to move instructions that must remain in the entry block up before the split point. Static allocas and llvm.localescape calls, for example, must remain in the entry block. |
|
|
|
|
|
Create Printable object to print LaneBitmasks on a |
|
PrintRecyclingAllocatorStats ‐ Helper for RecyclingAllocator for printing statistics. |
|
|
|
Print statistics in JSON format. This does include all global timers ( |
|
Promote the specified list of alloca instructions into scalar registers, inserting PHI nodes as appropriate. |
|
If the specified value is an effectively dead PHI node, due to being a def‐use chain of single‐use nodes that either forms a cycle or is terminated by a trivially dead instruction, delete it. If that makes any of its operands trivially dead, delete them too, recursively. Return true if a change was made. |
|
|
|
Same functionality as RecursivelyDeleteTriviallyDeadInstructions, but allow instructions that are not trivially dead. These will be ignored. Returns true if any changes were made, i.e. any instructions trivially dead were found and deleted. |
|
Remap the Values used in the DbgRecord DR using the value map VM. |
|
Remap the Values used in the DbgRecords Range using the value map VM. |
|
Remap the operands, metadata, arguments, and instructions of a function. |
|
Convert the instruction operands from referencing the current values into those specified by VM. |
|
Remap source location atom. Called by RemapInstruction. This updates the instruction's atom group number if it has been mapped (e.g. with llvm::mapAtomInstance), which is necessary to distinguish source code atoms on duplicated code paths. |
|
Try to remove redundant dbg.value instructions from given basic block. Returns true if at least one instruction was removed. Remove redundant pseudo ops when RemovePseudoOp is true. |
|
|
|
Replace all uses of an instruction (specified by BI) with a value, then remove and delete the original instruction. |
|
Reset the statistics. This can be used to zero and de‐register the statistics in order to measure a compilation. |
|
Restores the topmost element of the "pretty" stack state to State, which should come from a previous call to SavePrettyStackState(). This is useful when using a CrashRecoveryContext in code that also uses PrettyStackTraceEntries, to make sure the stack that's printed if a crash happens after a crash that's been recovered by CrashRecoveryContext doesn't have frames on it that were added in code unwound by the CrashRecoveryContext. |
|
Return true if any node in |
|
|
|
Multiply two unsigned integers, X and Y, of type T. Clamp the result to the maximum representable value of T on overflow. ResultOverflowed indicates if the result is larger than the maximum representable value of type T. |
|
Multiply two unsigned integers, X and Y, and add the unsigned integer, A to the product. Clamp the result to the maximum representable value of T on overflow. ResultOverflowed indicates if the result is larger than the maximum representable value of type T. |
|
Returns the topmost element of the "pretty" stack state. |
|
Sign‐extend the number in the bottom B bits of X to a 32‐bit integer. Requires B <= 32. |
|
Sign‐extend the number in the bottom B bits of X to a 64‐bit integer. Requires B <= 64. |
|
Scan the specified basic block and try to simplify any instructions in it and recursively delete dead instructions. |
|
SkipBitcodeWrapperHeader ‐ Some systems wrap bc files with a special header for padding or other reasons. The format of this header is: |
|
Loop over all of the edges in the CFG, breaking critical edges as they are found. Returns the number of broken edges. |
|
Split the specified block at the specified instruction. |
|
|
|
Similar to SplitBlockAndInsertIfThen, but the inserted block is on the false path of the branch. |
|
Split the containing block at the specified instruction ‐ everything before SplitBefore stays in the old basic block, and the rest of the instructions in the BB are moved to a new block. The two blocks are connected by a conditional branch (with value of Cmp being the condition). Before: Head SplitBefore Tail After: Head if (Cond) ThenBlock SplitBefore Tail |
|
|
|
Insert a for (int i = 0; i < End; i++) loop structure (with the exception that |
|
This method introduces at least one new basic block into the function and moves some of the predecessors of BB to be predecessors of the new block. The new predecessors are indicated by the Preds array. The new block is given a suffix of 'Suffix'. Returns new basic block to which predecessors from Preds are now pointing. |
|
|
|
Split the edge connecting the specified blocks, and return the newly created basic block between |
|
If it is known that an edge is critical, SplitKnownCriticalEdge can be called directly, rather than calling SplitCriticalEdge first. |
|
This method transforms the landing pad, OrigBB, by introducing two new basic blocks into the function. One of those new basic blocks gets the predecessors listed in Preds. The other basic block gets the remaining predecessors of OrigBB. The landingpad instruction OrigBB is clone into both of the new basic blocks. The new blocks are given the suffixes 'Suffix1' and 'Suffix2', and are returned in the NewBBs vector. |
|
Splits the module M into N linkable partitions. The function ModuleCallback is called N times passing each individual partition as the MPart argument. PreserveLocals: Split without externalizing locals. RoundRobin: Use round‐robin distribution of functions to modules instead of the default name‐hash‐based one. |
|
Create a new intermediate target block for a callbr or switch edge. |
|
SplitString ‐ Split up the specified string according to the specified delimiters, appending the result fragments to the output list. |
|
Fills the StoreBytes bytes of memory starting from Dst with the integer held in IntVal. |
|
Strip debug info in the module if it exists. |
|
If |
|
|
|
Computes a structural hash of a given function, considering the structure and content of the function's instructions while allowing for selective ignoring of certain operands based on custom criteria. This hash can be used to identify functions that are structurally similar or identical, which is useful in optimizations, deduplication, or analysis tasks. |
|
|
|
Parse the TableGen file defined within the main buffer of the given SourceMgr. On success, populates the provided RecordKeeper with the parsed records and returns false. On failure, returns true. |
|
BB is known to contain an unconditional branch, and contains no instructions other than PHI nodes, potential debug intrinsics and the branch. If possible, eliminate BB by rewriting all the predecessors to branch to the successor block and return true. If we can't transform, return false. |
|
Convert calls to ARC runtime functions to intrinsic calls and upgrade the old retain release marker to new module flag format. |
|
Upgrade attributes that changed format or kind. |
|
This is an auto‐upgrade for bitcast constant expression between pointers with different address spaces: the instruction is replaced by a pair ptrtoint+inttoptr. |
|
This is an auto‐upgrade for bitcast between pointers with different address spaces: the instruction is replaced by a pair ptrtoint+inttoptr. |
|
Upgrade the cfi.functions metadata node by calculating and inserting the GUID for each function entry if it's missing. |
|
This is an auto‐upgrade hook for any old intrinsic function syntaxes which need to have both the function updated as well as all calls updated to the new function. This should only be run in a post‐processing fashion so that it can update all calls to the old function. |
|
Upgrade the datalayout string by adding a section for address space pointers. |
|
Check the debug info version number, if it is out‐dated, drop the debug info. Return true if module is modified. |
|
Correct any IR that is relying on old function attribute behavior. |
|
This checks for global variables which should be upgraded. If it requires upgrading, returns a pointer to the upgraded variable. |
|
This is the complement to the above, replacing a specific call to an intrinsic function with a call to the specified new function. |
|
This is a more granular function that simply checks an intrinsic function for upgrading, and returns true if it requires upgrading. It may return null in NewFn if the all calls to the original intrinsic function should be transformed to non‐function‐call instructions. |
|
This checks for module flags which should be upgraded. It returns true if module is modified. |
|
Convert legacy nvvm.annotations metadata to appropriate function attributes. |
|
Upgrade operand bundles (without knowing about their user instruction). |
|
If the given TBAA tag uses the scalar TBAA format, create a new node corresponding to the upgrade to the struct‐path aware TBAA format. Otherwise return the |
|
ViewGraph ‐ Emit a dot graph, run 'dot', run gv on the postscript file, then cleanup. For use from the debugger. |
|
Write the specified module to the specified raw output stream. |
|
Writes graph into a provided |
|
|
|
|
|
Adapt the metadata for the specified instruction according to the provided mapping. This is normally used after cloning an instruction, when some noalias scopes needed to be cloned. |
|
|
|
@} |
|
Helper which adds two underlying types of enumeration type. Implicit conversion to a common type is accepted. |
|
Feed version components of |
|
Adds registers contained in |
|
Add location info to ORE message. |
|
Add code that checks at runtime if the accessed arrays in |
|
|
|
|
|
Adjust |
|
Adjust |
|
Returns the begin iterator to |
|
Returns the end iterator to |
|
Returns the reverse‐begin iterator to |
|
Returns the reverse‐end iterator to |
|
Returns the size of |
|
Swaps |
|
Aligns |
|
Returns the largest unsigned integer less than or equal to |
|
|
|
|
|
|
|
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly. |
|
Compare two zipped ranges using the provided predicate (as last argument). Return true if all elements satisfy the predicate and false otherwise. |
|
Allocate a buffer of memory with the given size and alignment. |
|
Using KnownBits LHS/RHS produce the known bits for logic op (and/xor/or). |
|
|
|
|
|
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly. |
|
|
|
Utility that implements appending of loops onto a worklist given a range. It has the same behavior as appendLoopsToWorklist, but assumes the range of loops has already been reversed, so it processes loops in the given order. |
|
Adds global values to the llvm.compiler.used list. |
|
Append F to the list of global ctors of module M with the given Priority. This wraps the function in the appropriate structure and stores it along side other global constructors. For details see https://llvm.org/docs/LangRef.html#the‐llvm‐global‐ctors‐global‐variable |
|
Same as appendToGlobalCtors(), but for global dtors. |
|
Adds global values to the llvm.used list. |
|
Wrapper function to append range |
|
Appends all |
|
Add synthesized debug information to a module. |
|
Construct an array ref of bytes from a string ref. |
|
|
|
Adapt std::less<T> for array_pod_sort. |
|
Treats the value 0 as a 1, so Align is always at least 1. |
|
Test if given that the input instruction is in the tail call position, if there is an attribute mismatch between the caller and the callee that will inhibit tail call optimizations. |
|
Return a breadth‐first iterator at the entry of |
|
Return a past‐the‐end breadth‐first iterator for |
|
|
|
|
|
|
|
Reinterpret the object representation of |
|
Returns the smallest integral power of two no smaller than Value if Value is nonzero. Returns 1 otherwise. |
|
Returns the smallest integral power of two no smaller than Value if Value is nonzero. Returns 1 otherwise. |
|
Returns the largest integral power of two no greater than Value if Value is nonzero. Returns 0 otherwise. |
|
Returns the number of bits needed to represent Value if Value is nonzero. Returns 0 otherwise. |
|
Returns the number of bits needed to represent Value if Value is nonzero. Returns 0 otherwise. |
|
Return a range that visits |
|
Remove the backedge of the specified loop. Handles loop nests and general loop structures subject to the precondition that the loop has no parent loop and has a single latch block. Preserves all listed analyses. |
|
Build a call to llvm.assume to preserve informations that can be derived from the given instruction. If no information derived from |
|
Emit IR to implement the given atomicrmw operation on values in registers, returning the new value. |
|
Emit IR to implement the given cmpxchg operation on values in registers, returning the new value. |
|
Clone a DBG_VALUE whose value has been spilled to FrameIndex. |
|
Direct function to compute a |
|
This optimization identifies DIV instructions in a BB that can be profitably bypassed and carried out with a shorter, faster divide. |
|
Reverses the bytes in the given integer value V. |
|
Calculate what to divide by to scale counts. |
|
Analyze the IR in ParentFn and it's handlers to build WinEHFuncInfo, which describes the state numbers and tables used by __CxxFrameHandler3. This analysis assumes that WinEHPrepare has already been run. |
|
|
|
Execute the function specified as a parameter once. |
|
Return true if this call calls a gc leaf function. |
|
canConstantFoldCallTo ‐ Return true if its even possible to fold a call to the specified function. |
|
Check if the values in |
|
Returns true if |
|
|
|
Returns true if it is legal to hoist |
|
Returns true if the possibility of a signaling NaN can be safely ignored. |
|
Return true if the sign bit of the FP value can be ignored by the user when the value is NaN. |
|
Return true if the sign bit of the FP value can be ignored by the user when the value is zero. |
|
Matcher for memcpy‐like instructions. For non‐zero lengths, |
|
Returns true if the last iteration of |
|
Check if we can safely rename this Comdat function. Instances of the same comdat function may have different control flows thus can not share the same counter variable. |
|
Given an instruction, is it legal to set operand OpIdx to a non‐constant value? |
|
Returns true if a pointer value |
|
Check if DstReg can be replaced with SrcReg depending on the register constraints. |
|
Return true if there is at least a path through which F can return, false if there is no such path. |
|
Returns true if the rounding mode RM may be QRM at compile time or at run time. |
|
Returns true if is legal to hoist or sink this instruction disregarding the possible introduction of faults. Reasoning about potential faulting instructions is the responsibility of the caller since it is challenging to do efficiently from within this routine. |
|
Determine if the values of the given function's arguments can be tracked interprocedurally. The value of an argument can be tracked if the function has local linkage and its address is not taken. |
|
Determine if the value maintained in the given global variable can be tracked interprocedurally. A value can be tracked if the global variable has local linkage and is only used by non‐volatile loads and stores. |
|
Determine if the values of the given function's returns can be tracked interprocedurally. Return values can be tracked if the function has an exact definition and it doesn't have the "naked" attribute. Naked functions may contain assembly code that returns untrackable values. |
|
Returns false if a debuginfod lookup can be determined to have no chance of succeeding. |
|
Returns true if |
|
Returns true if |
|
Returns true if |
|
Returns true if |
|
Return true if we can prove that the specified FP value is never equal to ‐0.0. Users should use caution when considering PreserveSign denormal‐fp‐math. |
|
Return true if we can prove that the specified FP value is either NaN or never less than ‐0.0. |
|
Returns true if all values in |
|
Returns true if all values in |
|
Returns true if all values in |
|
Returns true if all values in |
|
|
|
|
|
Computes the Bernstein hash after folding the input according to the Dwarf 5 standard case folding rules. |
|
|
|
|
|
|
|
Returns the ceiling of |
|
center_justify ‐ add spaces before and after string so total output is |
|
This function converts the specified invoke into a normal call. |
|
Convert the CallInst to InvokeInst with the specified unwind edge basic block. This also splits the basic block where CI is located, because InvokeInst is a terminator instruction. Returns the newly split basic block. |
|
Insert an unreachable instruction before the specified instruction, making it and the rest of the code in the block dead. |
|
Check original debug information after a pass. |
|
Check if module has flag attached, if not add the flag. |
|
Calls llvm_unreachable if Pointer is null, otherwise returns the pointer as is. |
|
Add two signed integers |
|
Add two unsigned integers |
|
Multiply two signed integers |
|
Multiply A and B, and add C to the resulting product. |
|
Multiply unsigned integers A and B, and add C to the resulting product. |
|
Multiply two unsigned integers |
|
Subtract two signed integers |
|
Return a range over the children of node |
|
Return a range over the outgoing child edges of node |
|
Helper function to clamp a state |
|
See if the given exception handling personality function is one that we understand. If so, return a description of it; otherwise return Unknown. |
|
|
|
Recursively clone the specified loop and all of its children, mapping the blocks with the specified map. |
|
Clones a loop |
|
Duplicate the specified list of noalias decl scopes. The 'Ext' string is added as an extension to the name. Afterwards, the ClonedScopes contains the mapping of the original scope MDNode onto the cloned scope. Be aware that the cloned scopes are still part of the original scope domain. |
|
Does a BFS from a given node to all of its children inside a given loop. The returned vector of basic blocks includes the starting point. |
|
Collect original debug information before a pass. |
|
Given a vector of strings (names of global objects like functions or, virtual tables) |
|
Produce |
|
Collect parametric terms occurring in step expressions (first step of delinearization). |
|
Enumerates all possible immediate values of V and inserts them into the set |
|
Given "llvm.used" or "llvm.compiler.used" as a global name, collect the initializer elements of that global in a SmallVector and return the global itself. |
|
If an EH funclet personality is in use (see isFuncletEHPersonality), this will recompute which blocks are in which funclet. It is possible that some blocks are in multiple funclets. Consider this analysis to be expensive. |
|
Combine metadata of two instructions, where instruction J is a memory access that has been merged into K. This will intersect alias‐analysis metadata, while preserving other known metadata. |
|
Combine the metadata of two instructions so that K can replace J. This specifically handles the case of CSE‐like transformations. Some metadata can only be kept if K dominates J. For this to be correct, K cannot be hoisted. |
|
Returns the alignment that satisfies both alignments. Same semantic as MinAlign. |
|
Return in Subscripts the access functions for each dimension in Sizes (third step of delinearization). |
|
Convenience function combining computeLiveIns() and addLiveIns(). |
|
Determine the possible constant range of an integer or vector of integer value. This is intended as a cheap, non‐recursive check. |
|
Combine constant ranges from computeConstantRange() and computeKnownBits(). |
|
Compute all the symbols that are "dead": i.e these that can't be reached in the graph from any of the given symbols listed in |
|
Compute dead symbols and run constant propagation in combined index after that. |
|
Compute a list of blocks that are only reachable via EH paths. |
|
Returns the memory access properties of this copy of the function. |
|
|
|
Merge bits known from context‐dependent facts into Known. |
|
Compute known bits from the range metadata. |
|
|
|
Return false if we can prove that the specified FP value's sign bit is 0. Return true if we can prove that the specified FP value's sign bit is 1. Otherwise return std::nullopt. |
|
Computes a unique hash for the Module considering the current list of export/import and other global analysis results. |
|
Computes registers live‐in to |
|
Compute uniformity information for a Machine IR function. |
|
Compute a map of integer instructions to their minimum legal type size. |
|
This version also leverages the sign bit of Add if known. |
|
computeValueLLTs ‐ Given an LLVM IR type, compute a sequence of LLTs that represent all the individual underlying non‐aggregate types that comprise it. |
|
Returns a concatenated range across two or more ranges. Does not modify the ranges. |
|
Concatenate a list of vectors. |
|
|
|
Try to constrain Reg to the specified register class. If this fails, create a new virtual register in the correct class. |
|
Mutate the newly‐selected instruction |
|
Consume a Error without doing anything. This method should be used only where an error can be considered a reasonable and expected return value. |
|
Parse a signed integer from the front of |
|
Parse an unsigned integer from the front of |
|
target CFG with begin()/end() iterator interfaces. 3) |
|
For any ExceptionBehavior enumerator, returns a string valid as input in constrained intrinsic exception behavior metadata. |
|
For any RoundingMode enumerator, returns a string valid as input in constrained intrinsic rounding mode metadata. |
|
Returns a valid ExceptionBehavior enumerator when given a string valid as input in constrained intrinsic exception behavior metadata. |
|
Returns a valid RoundingMode enumerator when given a string that is valid as input in constrained intrinsic rounding mode metadata. |
|
Converts a string from snake‐case to camel‐case by replacing all occurrences of '_' followed by a lowercase letter with the letter in uppercase. Optionally allow capitalization of the first letter (if it is a lowercase letter) |
|
Converts value |
|
Converts a string from camel‐case to snake‐case by replacing all uppercase letters with '_' followed by the letter in lowercase, except if the uppercase letter is the first character of the string. |
|
|
|
|
|
Convert the first UTF8 sequence in the given source buffer to a UTF32 code point. |
|
Converts a UTF‐8 string into a UTF‐16 string with native endianness. |
|
Replace constant expressions users of the given constants with instructions. Return whether anything was changed. |
|
Converts a wide string view to a UTF‐8 encoded std::string. |
|
Copy the elements of |
|
Copy the metadata from the source instruction to the destination (the replacement for the source instruction). |
|
Copies module attributes to the functions in the module. Currently only effects ARM, Thumb and AArch64 targets. Supported attributes: ‐ branch‐target‐enforcement ‐ branch‐protection‐pauth‐lr ‐ guarded‐control‐stack ‐ sign‐return‐address ‐ sign‐return‐address‐with‐bkey |
|
Copy a nonnull metadata node to a new load instruction. |
|
Copy a range metadata node to a new load instruction. |
|
Provide wrappers to std::copy_if which take ranges instead of having to pass begin/end explicitly. |
|
Wrapper function around std::count to count the number of times an element |
|
Wrapper function around std::count_if to count the number of times an element satisfying a given predicate occurs in a range. |
|
Count the number of ones from the most significant bit to the first zero bit. |
|
Count number of 0's from the most significant bit to the least stopping at the first 1. |
|
Count number of 0's from the most significant bit to the least stopping at the first 1. |
|
Count the number of ones from the least significant bit to the first zero bit. |
|
Count number of 0's from the least significant bit to the most stopping at the first 1. |
|
Count number of 0's from the least significant bit to the most stopping at the first 1. |
|
Create a legacy pass manager instance of a pass to inline and remove functions marked as "always_inline". |
|
Create a reduction of the given vector |
|
Create a machine code streamer which will print out assembly for the native target, suitable for compiling with a native assembler. |
|
AtomicExpandPass ‐ At IR level this pass replace atomic instructions with __atomic_* library calls, or target specific instruction which implement the same semantics in a way which better fits the target backend. |
|
createBURRListDAGScheduler ‐ This creates a bottom up register usage reduction list scheduler. |
|
createBarrierNoopPass ‐ This pass is purely a module pass barrier in a pass manager. |
|
createBasicBlockMatchingAndInferencePass ‐ This pass enables matching and inference when using propeller. |
|
createBasicBlockSections Pass ‐ This pass assigns sections to machine basic blocks and is enabled with ‐fbasic‐block‐sections. |
|
BasicRegisterAllocation Pass ‐ This pass implements a degenerate global register allocator using the basic regalloc framework. |
|
Create a mask that filters the members of an interleave group where there are gaps. |
|
Create and return a pass that writes the module to the specified ostream. Note that this pass is designed for use with the legacy pass manager. |
|
createBranchFolder ‐ Create the BranchFolder pass, optionally disabling the common‐code hoisting and/or basic‐block reordering sub‐phases. Default enables both (full BranchFolding behavior). |
|
Creates Break False Dependencies pass. |
|
Creates CFGuard longjmp target identification pass. |
|
Insert Control Flow Guard checks on indirect function calls. |
|
Creates CFI Fixup pass. |
|
Creates CFI Instruction Inserter pass. |
|
A function to deduce a function pass type and wrap it in the templated adaptor. |
|
Create a call that matches the invoke |
|
Creates MIR Check Debug pass. |
|
createCodeGenPrepareLegacyPass ‐ Transform the code to expose more pattern matching during instruction selection. |
|
This pass implements generation of target‐specific intrinsics to support handling of complex number arithmetic |
|
createDAGLinearizer ‐ This creates a "no‐scheduling" scheduler which linearize the DAG using topological order. |
|
createDeadArgEliminationPass ‐ This pass removes arguments from functions which are not used by the body of the function. |
|
Creates MIR Debugify pass. |
|
PBQPRegisterAllocation Pass ‐ This pass implements the Partitioned Boolean Quadratic Prograaming (PBQP) based register allocator. |
|
createDefaultScheduler ‐ This creates an instruction scheduler appropriate for the target. |
|
createDependenceAnalysisPass ‐ This creates an instance of the DependenceAnalysis wrapper pass. |
|
A function to deduce a function pass type and wrap it in the templated adaptor. |
|
createDwarfEHPass ‐ This pass mulches exception handling code into a form adapted to code generation. Required if using dwarf exception handling. |
|
Creates Windows EH Continuation Guard target identification pass. |
|
This pass expands the reduction intrinsics into sequences of shuffles. |
|
A wrapper pass around a callback which can be used to populate the AAResults in the AAResultsWrapperPass from an external AA. |
|
createFastDAGScheduler ‐ This creates a "fast" scheduler. |
|
FastRegisterAllocation Pass ‐ This pass register allocates as fast as possible. It is best suited for debug code where live ranges are short. |
|
|
|
This pass frees the memory occupied by the MachineFunction. |
|
|
|
createGCEmptyBasicblocksPass ‐ Empty basic blocks (basic blocks without real code) appear as the result of optimization passes removing instructions. These blocks confuscate profile analysis (e.g., basic block sections) since they will share the address of their fallthrough blocks. This pass garbage‐collects such basic blocks. |
|
GCLowering Pass ‐ Used by gc.root to perform its default lowering operations. |
|
Construct a new GOFF writer instance. |
|
Create a legacy GVN pass. |
|
This pass performs merging similar functions globally. |
|
GlobalMerge ‐ This pass merges internal (by default) globals into structs to enable reuse of a base pointer by indexed addressing modes. It can also be configured to focus on size optimizations only. |
|
Greedy register allocation pass ‐ This pass implements a global register allocator for optimized builds. |
|
Create Hardware Loop pass. |
|
createHybridListDAGScheduler ‐ This creates a bottom up register pressure aware list scheduler that make use of latency information to avoid stalls for long latency instructions in low register pressure mode. In high register pressure mode it schedules to reduce register pressure. |
|
createILPListDAGScheduler ‐ This creates a bottom up register pressure aware list scheduler that tries to increase instruction level parallelism in low register pressure mode. In high register pressure mode it schedules to reduce register pressure. |
|
Create and return a spiller that will insert spill code directly instead of deferring though VirtRegMap. |
|
createInsertCodePrefetchPass ‐ This pass enables inserting code prefetch hints based on the basic block section profile. |
|
Create an interleave shuffle mask. |
|
InterleavedAccess Pass ‐ This pass identifies and matches interleaved memory accesses to target specific intrinsics. |
|
InterleavedLoadCombines Pass ‐ This pass identifies interleaved loads and combines them into wide loads detectable by InterleavedAccessPass |
|
JMC instrument pass. |
|
Lowers KCFI operand bundles for indirect calls. |
|
createLazyValueInfoPass ‐ This creates an instance of the LazyValueInfo pass. |
|
If ReorderWhileClustering is set to true, no attempt will be made to reduce reordering due to store clustering. |
|
Create a legacy pass manager instance of the LoadStoreVectorizer pass |
|
LowerEmuTLS ‐ This pass generates __emutls_[vt].xyz variables for all TLS variables for the emulated TLS model. |
|
Create an MCAsmParser instance for parsing assembly similar to gas syntax |
|
Create an MCAsmParser instance for parsing Microsoft MASM‐style assembly |
|
MIR2VecPrinter pass ‐ This pass prints out the MIR2Vec embeddings for machine functions, basic blocks and instructions. |
|
MIR2VecVocabPrinter pass ‐ This pass prints out the MIR2Vec vocabulary contents to the given stream as a debugging tool. |
|
Add Flow Sensitive Discriminators. PassNum specifies the sequence number of this pass (starting from 1). |
|
This function is another interface to the MIR serialization format parser. |
|
This function is the main interface to the MIR serialization format parser. |
|
Read Flow Sensitive Profile. |
|
createMachineBlockHashInfoPass ‐ This pass computes basic block hashes. |
|
MachineFunctionPrinter pass ‐ This pass prints out the machine function to the given stream as a debugging tool. |
|
createMachineFunctionSplitterPass ‐ This pass splits machine functions using profile information. |
|
This pass performs outlining on machine instructions directly before printing assembly. |
|
createMachineVerifierPass ‐ This pass verifies cenerated machine code instructions for correctness. |
|
Create a DAG scheduling mutation to pair instructions back to back for instructions that benefit according to the target‐specific predicate functions. shouldScheduleAdjacent will be true if any of the provided predicates are true. If BranchOnly is true, only branch instructions with one of their predecessors will be fused. |
|
Emit a loop implementing the semantics of an llvm.memcpy whose size is a compile time constant. Loop is inserted at |
|
Emit a loop implementing the semantics of llvm.memcpy where the size is not a compile‐time constant. Loop will be inserted at |
|
Returns a Min/Max operation corresponding to MinMaxRecurrenceKind. The Builder's fast‐math‐flags must be set to propagate the expected values. |
|
A function to deduce a function pass type and wrap it in the templated adaptor. |
|
A function to deduce a function pass type and wrap it in the templated adaptor. |
|
Create a dummy machine code streamer, which does nothing. This is useful for timing the assembler front end. |
|
|
|
Create a PBQP register allocator instance. |
|
Create the PGOFuncName meta data if PGOFuncName is different from function's raw name. This should only apply to internal linkage functions declared by users only. TODO: Update all callers to 'createPGONameMetadata' and deprecate this function. |
|
Create and return the global variable for function name used in PGO instrumentation. |
|
Create the PGOName metadata if a global object's PGO name is different from its mangled name. This should apply to local‐linkage global objects only. |
|
When a loop exit edge is split, LCSSA form may require new PHIs in the new exit block. This function inserts the new PHIs, as needed. Preds is a list of preds inside the loop, SplitBB is the new loop exit block, and DestBB is the old loop exit, now the successor of SplitBB. |
|
This pass lowers the @llvm.load.relative and @llvm.objc.* intrinsics to instructions. This is unsafe to do earlier because a pass may combine the constant initializer into the load, which may result in an overflowing evaluation. |
|
Create and return a pass that prints functions to the specified |
|
MIRPrinting pass ‐ this pass prints out the LLVM IR into the given stream using the MIR serialization format. |
|
Create and return a pass that writes the module to the specified |
|
This pass inserts pseudo probe annotation for callsite profiling. |
|
When learning an eviction policy, extract score(reward) information, otherwise this does nothing |
|
This pass is executed POST‐RA to collect which physical registers are preserved by given machine function. |
|
Return a MachineFunction pass that identifies call sites and propagates register usage information of callee to caller if available with PysicalRegisterUsageInfo pass. |
|
Helper to construct the appropriate MLModelRunner in release mode: 1. InteractiveModelRunner if an interactive channel is specified. 2. EmitCModelRunner if MLIR lowering is enabled. 3. ReleaseModeModelRunner<CompiledModelType> otherwise. |
|
Create a mask with replicated elements. |
|
This pass resets a MachineFunction when it has the FailedISel property as if it was just created. If EmitFallbackDiag is true, the pass will emit a DiagnosticInfoISelFallback for every MachineFunction it resets. If AbortOnFailedISel is true, abort compilation instead of resetting. |
|
Creates an instance of |
|
Construct a new SPIR‐V writer instance. |
|
This pass splits the stack into a safe stack and an unsafe stack to protect against stack‐based overflow vulnerabilities. |
|
Create an instance of the safepoint verifier pass which can be added to a pass pipeline to check for relocation bugs. |
|
Creates sanitizer constructor function. |
|
Creates sanitizer constructor function, and calls sanitizer's init function from it. |
|
Create a legacy pass manager instance of the Scalarizer pass |
|
Create the standard converging machine scheduler. This will be used as the default scheduler if the target does not set a default. Adds default DAG mutations. |
|
Create a generic scheduler with no vreg liveness or DAG mutation passes. |
|
This pass converts conditional moves to conditional jumps when profitable. |
|
Create a sequential shuffle mask. |
|
ShadowStackGCLowering ‐ Implements the custom lowering mechanism used by the shadow stack GC. Only runs on functions which opt in to the shadow stack collector. |
|
|
|
createSjLjEHPreparePass ‐ This pass adapts exception handling code to use the GCC‐style builtin setjmp/longjmp (sjlj) to handling EH control flow. |
|
createSourceListDAGScheduler ‐ This creates a bottom up list scheduler that schedules nodes in source code order when possible. |
|
StackFramePrinter pass ‐ This pass prints out the machine function's stack frame to the given stream as a debugging tool. |
|
createStackProtectorPass ‐ This pass adds stack protectors to functions. |
|
createStaticDataAnnotatorPASS ‐ This is a module pass that reads from StaticDataProfileInfoWrapperPass and annotates the section prefix of global variables. |
|
createStaticDataSplitterPass ‐ This is a machine‐function pass that categorizes static data hotness using profile information. |
|
If ReorderWhileClustering is set to true, no attempt will be made to reduce reordering due to store clustering. |
|
Create a stride shuffle mask. |
|
|
|
Creates MIR Strip Debug pass. |
|
When |
|
Create an analysis pass wrapper around a TTI object. |
|
Create IR Type Promotion pass. |
|
Given a shuffle mask for a binary shuffle, create the equivalent shuffle mask assuming both operands are identical. This assumes that the unary shuffle will use elements from operand 0 (operand 1 will be unused). |
|
createUnreachableBlockEliminationPass ‐ The LLVM code generator does not work well with unreachable basic blocks (what live ranges make sense for a block that cannot be reached?). As such, a code generator should either not instruction select unreachable blocks, or run this pass as its last LLVM modifying pass to clean up blocks that are not reachable from the entry block. |
|
createVLIWDAGScheduler ‐ Scheduler for VLIW targets. This creates top down DFA driven list scheduler with clustering heuristic to control register pressure. |
|
createWasmEHPass ‐ This pass adapts exception handling code to use WebAssembly's exception handling scheme. |
|
Construct a new Wasm writer instance. |
|
Widen Induction Variables ‐ Extend the width of an IV to cover its widest uses. |
|
Construct a new Win COFF writer instance. |
|
createWinEHPass ‐ Prepares personality functions used by MSVC on Windows, in addition to the Itanium LSDA based personalities. |
|
Creates Windows Secure Hot Patch pass. |
|
dbgs() ‐ This returns a reference to a raw_ostream for debugging messages. If debugging is disabled it returns errs(). Use it like: dbgs() << "foo" << "bar"; |
|
Deallocate a buffer of memory with the given size and alignment. |
|
Dual operation of the encode function above. |
|
Utility function to decode a SLEB128 value. |
|
Utility function to decode a ULEB128 value. |
|
Decompose an icmp into the form ((X & Mask) pred C) if possible. Unless |
|
Decompose an icmp into the form ((X & Mask) pred C) if possible. Unless |
|
Decompose a pointer into a linear expression. This may look through multiple GEPs. |
|
This function deletes dead loops. The caller of this function needs to guarantee that the loop is infact dead. The function requires a bunch or prerequisites to be present: ‐ The loop needs to be in LCSSA form ‐ The loop needs to have a Preheader ‐ A unique dedicated exit block must exist |
|
Split this SCEVAddRecExpr into two vectors of SCEVs representing the subscripts and sizes of an array access. |
|
Split this SCEVAddRecExpr into two vectors of SCEVs representing the subscripts and sizes of an access to a fixed size array. This is a special case of delinearization for fixed size arrays. |
|
Attempt to demangle a string using different demangling schemes. The function uses heuristics to determine which demangling scheme to use. |
|
Return the name used for the denormal handling mode used by the expected names from the denormal‐fp‐math attribute. |
|
Denormalize |
|
Return a range that visits |
|
Return a range that visits |
|
Getters for the default sets of operations, per general category. @{ |
|
Convert a value read from an index section to the internal representation. |
|
Replace contents of every block in |
|
Return a depth‐first iterator at the entry of |
|
Return a past‐the‐end depth‐first iterator for |
|
Return an external‐storage depth‐first iterator at the entry of |
|
Return a past‐the‐end external‐storage depth‐first iterator for |
|
|
|
Returns the integer ceil(Numerator / Denominator). Signed version. Overflow is explicitly forbidden with an assert. |
|
Returns the integer floor(Numerator / Denominator). Signed version. Overflow is explicitly forbidden with an assert. |
|
Returns (Numerator / Denominator) rounded by round‐half‐up. Guaranteed to never overflow. |
|
Return true if signed ceil/floor division would overflow. |
|
The Bernstein hash function used by the DWARF accelerator tables. |
|
downscale the given weights preserving the ratio. If the maximum value is not already known and not provided via |
|
Remove the debug intrinsic instructions for the given instruction. |
|
Return a range covering |
|
Return a range covering |
|
Write the set‐bit indices of |
|
Convert `Bytes' to a hex string and output to `OS' |
|
Dump the qualified type name of |
|
|
|
|
|
|
|
Constructs a DynamicAPInt from an |
|
Split the edge connect the specficed blocks in the case that |
|
If EmbedBitcode is set, save a copy of the llvm IR as data in the __LLVM,__bitcode section (.llvmbc on non‐MacOS). If available, pass the serialized module via the Buf parameter. If not, pass an empty (default‐initialized) MemoryBufferRef, and the serialization will be handled by this API. The same behavior happens if the provided Buf is not bitcode (i.e. if it's invalid data or even textual LLVM assembly). If EmbedCmdline is set, the command line is also exported in the corresponding section (__LLVM,_cmdline / .llvmcmd) ‐ even if CmdArgs were empty. |
|
Embed the memory buffer |
|
Emit an Apple Accelerator Table consisting of entries in the specified AccelTable. The DataT template parameter should be derived from AppleAccelTableData. |
|
Emit a call to the bcmp function. |
|
|
|
Emit a call to the calloc function. |
|
Emit a DWARFv5 Accelerator Table consisting of entries in the specified AccelTable. The |
|
Emit a call to the fputc function. This assumes that Char is an 'int', and File is a pointer to FILE. |
|
Emit a call to the fputs function. Str is required to be a pointer and File is a pointer to FILE. |
|
Emit a call to the fwrite function. This assumes that Ptr is a pointer, Size is an 'size_t', and File is a pointer to FILE. |
|
Given a getelementptr instruction/constantexpr, emit the code necessary to compute the offset from the base pointer (without adding in the base pointer). Return the result as a signed integer of intptr size. When NoAssumptions is true, no assumptions about index computation not overflowing is made. |
|
Emit a call to the hot/cold operator new function. |
|
Emit ORE message. |
|
Emit ORE message based in cost (default heuristic). |
|
Emit a call to the malloc function. |
|
Emit a call to the memccpy function. |
|
Emit a call to the memchr function. This assumes that Ptr is a pointer, Val is an 'int' value, and Len is an 'size_t' value. |
|
Emit a call to the memcmp function. |
|
Emit a call to the __memcpy_chk function to the builder. This expects that the Len and ObjSize have type 'size_t' and Dst/Src are pointers. |
|
Emit a call to the mempcpy function. |
|
Emit a call to the memrchr function, analogously to emitMemChr. |
|
Emit a call to the putchar function. This assumes that Char is an 'int'. |
|
Emit a call to the puts function. This assumes that Str is some pointer. |
|
Emit a call to the snprintf function. |
|
Emit a call to the sprintf function. |
|
emitSourceFileHeader ‐ Output an LLVM style file header to the specified raw_ostream. |
|
Emit a call to the stpcpy function to the builder, for the specified pointer arguments. |
|
Emit a call to the stpncpy function to the builder, for the specified pointer arguments and length. |
|
Emit a call to the strcat function. |
|
Emit a call to the strchr function to the builder, for the specified pointer and character. Ptr is required to be some pointer type, and the return value has 'i8*' type. |
|
Emit a call to the strcpy function to the builder, for the specified pointer arguments. |
|
Emit a call to the strdup function to the builder, for the specified pointer. Ptr is required to be some pointer type, and the return value has 'i8*' type. |
|
Emit a call to the strlcat function. |
|
Emit a call to the strlcpy function. |
|
Emit a call to the strlen function to the builder, for the specified pointer. Ptr is required to be some pointer type, and the return value has 'size_t' type. |
|
Emit a call to the strncat function. |
|
Emit a call to the strncmp function to the builder. |
|
Emit a call to the strncpy function to the builder, for the specified pointer arguments and length. |
|
|
|
Emit a call to the vsnprintf function. |
|
Emit a call to the vsprintf function. |
|
Emit a call to the wcslen function to the builder, for the specified pointer. Ptr is required to be some pointer type, and the return value has 'size_t' type. |
|
|
|
|
|
|
|
|
|
|
|
Given two or more input ranges, returns a new range whose values are tuples (A, B, C, ...), such that A is the 0‐based index of the item in the sequence, and B, C, ..., are the values from the original input ranges. All input ranges are required to have equal lengths. Note that the returned iterator allows for the values (B, C, ...) to be modified. Example: |
|
|
|
Functor variant of std::equal_to that can be used as a UnaryPredicate in functional algorithms like all_of. |
|
Wrapper function to remove a value from a container: |
|
Provide a container algorithm similar to C++ Library Fundamentals v2's |
|
Helper to get errno as an std::error_code. |
|
Helper for converting an std::error_code to a Error. |
|
Convert an ErrorOr<T> to an Expected<T>. |
|
Helper for converting an Error to a bool. |
|
Helper for converting an ECError to a std::error_code. |
|
This returns a reference to a raw_ostream for standard error. Use it like: errs() << "foo" << "bar"; By default, the stream is tied to stdout to ensure stdout is flushed before stderr is written, to ensure the error messages are written in their expected place. |
|
Implement IEEE 754‐2019 exp functions |
|
Expand |
|
Generate code to divide two integers, replacing Div with the generated code. This currently generates code similarly to compiler‐rt's implementations, but future work includes generating more specialized code when more information about the operands are known. Implements both 32bit and 64bit scalar division. |
|
Generate code to divide two integers, replacing Div with the generated code. Uses ExpandDivision with a 32bit Div which makes it useful for targets with little or no support for less than 32 bit arithmetic. |
|
Generate code to divide two integers, replacing Div with the generated code. Uses ExpandDivision with a 64bit Div. |
|
Expand |
|
Expand |
|
|
|
|
|
Expand a scalable vector reduction into a runtime loop that applies |
|
Generate code to calculate the remainder of two integers, replacing Rem with the generated code. This currently generates code using the udiv expansion, but future work includes generating more specialized code, e.g. when more information about the operands are known. Implements both 32bit and 64bit scalar division. |
|
Generate code to calculate the remainder of two integers, replacing Rem with the generated code. Uses ExpandReminder with a 32bit Rem which makes it useful for targets with little or no support for less than 32 bit arithmetic. |
|
Generate code to calculate the remainder of two integers, replacing Rem with the generated code. Uses ExpandReminder with a 64bit Rem. |
|
Expand a vector predication intrinsic. Returns the kind of expansion that was applied to the intrinsic. |
|
Convert an Expected<T> to an ErrorOr<T>. |
|
Convert an Expected to an std::optional without doing anything. This method should be used only where an error can be considered a reasonable and expected return value. |
|
|
|
Faster version of extractBranchWeights() that skips checks and must only be called with "branch_weights" metadata nodes. Supports uint32_t. |
|
Faster version of extractBranchWeights() that skips checks and must only be called with "branch_weights" metadata nodes. Supports uint64_t. |
|
|
|
|
|
Version which handles irregular sub‐vector splits. |
|
Utility function that returns true if the provided LogicalResult corresponds to a failure value. |
|
Utility function to generate a LogicalResult. If isFailure is true a |
|
Compute the possible floating‐point classes that |
|
Returns a pair of values, which if passed to llvm.is.fpclass, returns the same result as an fcmp with the given operands. |
|
fdbgs() ‐ This returns a reference to a formatted_raw_ostream for debug output. Use it like: fdbgs() << "foo" << "bar"; |
|
ferrs() ‐ This returns a reference to a formatted_raw_ostream for standard error. Use it like: ferrs() << "foo" << "bar"; |
|
Provide wrappers to std::fill which take ranges instead of having to pass begin/end explicitly. |
|
Insert into the map all the informations contained in the operand bundles of the llvm.assume. This should be used when many queries are going to be made on the same llvm.assume. String attributes are not inserted in the map. If the IR changes the map will be outdated. |
|
Filter out potentially dead comdat functions where other entries keep the entire comdat group alive. |
|
Filter a range to a SmallVector with the element types deduced. |
|
|
|
finalizeBundles ‐ Finalize instruction bundles in the specified MachineFunction. Return true if any bundles are finalized. |
|
Finalize optimization remarks and deregister the RemarkStreamer from the |
|
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly. |
|
Returns unique alloca where the value comes from, or nullptr. If OffsetZero is true check that V points to the begining of the alloca. |
|
Compute the array dimensions Sizes from the set of Terms extracted from the memory access function of this SCEVAddRecExpr (second step of delinearization). |
|
Scan backwards to see if we have the value of the given pointer available locally within a small number of instructions. |
|
Return the replacement tags for the enable tag |
|
As above, for DVRDeclareValues. |
|
Finds dbg.declare records declaring local variables as living in the memory that 'V' points to. |
|
As above, for DVRValues. |
|
Finds the debug info records describing a value. |
|
Finds the dbg.values describing a value. |
|
Returns the instructions that use values defined in the loop. |
|
Given a call to the intrinsic @llvm.type.checked.load, find all devirtualizable call sites based on the call and return them in DevirtCalls. |
|
Given a call to the intrinsic @llvm.type.test, find all devirtualizable call sites based on the call and return them in DevirtCalls. |
|
Compute the dimensions of fixed size array from Expr and save the results in |
|
Find string metadata for a loop. |
|
Find and return the loop attribute node for the attribute |
|
Given a vector and an element number, see if the scalar value is already around as a register, for example if it were inserted then extracted from the vector. |
|
Find the split point at which to splice the end of BB into its success stack protector check machine basic block. |
|
Find string metadata for loop |
|
Call |
|
Provide wrappers to std::find_if which take ranges instead of having to pass begin/end explicitly. |
|
Return an iterator to the first element of |
|
Return the single value in |
|
Return a pair consisting of the single value in |
|
Push the weights right to fit in uint32_t. |
|
Returns the floor of |
|
Return the test mask which returns true if the value's sign bit is flipped. |
|
If this basic block is ONLY a setcc and a branch, and if a predecessor branches to us and one of our successors, fold the setcc into the predecessor and use logical operations to pick the right destination. |
|
Apply function Func to each CB's callback call site. |
|
Apply function Func to each CB's callback function. |
|
Provide wrappers to std::for_each which take ranges instead of having to pass begin/end explicitly. |
|
Ensure that all exit blocks of the loop are dedicated exits. |
|
Put loop into LCSSA form. |
|
Ensures LCSSA form for every instruction from the Worklist in the scope of innermost containing loop. |
|
Put a loop nest into LCSSA form. |
|
These are helper functions used to produce formatted output. They use template type deduction to construct the appropriate instance of the format_object class to simplify their construction. |
|
Get call site location as a string with the given format |
|
Format |
|
Format |
|
format_decimal ‐ Output |
|
format_hex ‐ Output |
|
format_hex_no_prefix ‐ Output |
|
fouts() ‐ This returns a reference to a formatted_raw_ostream for standard output. Use it like: fouts() << "foo" << "bar"; |
|
Equivalent of C standard library function. |
|
Convert hexadecimal string |
|
Convenience function for recomputing live‐in's for a set of MBBs until the computation converges. |
|
Returns true if the parent of |
|
Create an artificial edge between FirstSU and SecondSU. Make data dependencies from the FirstSU also dependent on the SecondSU to prevent them from being scheduled between the FirstSU and the SecondSU and vice‐versa. Fusing more than 2 instructions is not currently supported. |
|
|
|
Returns the greatest common divisor of |
|
|
|
Gets the alignment argument for an aligned_alloc‐like function, using either built‐in knowledge based on fuction names/signatures or allocalign attributes. Note: the Value returned may not indicate a valid alignment, per the definition of the allocalign attribute. |
|
Return the size of the requested allocation. With a trivial mapper, this is similar to calling getObjectSize(..., Exact), but without looking through calls that return their argument. A mapper function can be used to replace one Value* (operand to the allocation) with another. This is useful when doing abstract interpretation. |
|
Calculates stable allocation token ID. Returns std::nullopt for stateful modes that are only available in the AllocToken pass. |
|
Returns the canonical string name for the given AllocTokenMode. |
|
Returns the AllocTokenMode from its canonical string name; if an invalid name was provided returns nullopt. |
|
If a function is part of an allocation family (e.g. malloc/realloc/calloc/free), return the identifier for its family of functions. |
|
If |
|
This function returns call pointer argument that is considered the same by aliasing rules. You CAN'T use it to replace one value with another. If |
|
Returns the arithmetic instruction opcode used when expanding a reduction. |
|
Returns the ARM64EC demangled function name, unless the input is not mangled. |
|
Returns the ARM64EC mangled function name unless the input is already mangled. |
|
Parse a signed integer from |
|
Helper functions for StringRef::getAsInteger. |
|
|
|
Returns the LLVM IR syncscope string that |
|
A helper function that returns an atomic operation's sync scope; returns std::nullopt if it is not an atomic operation. |
|
Returns InlineResult::success() if the call site should be always inlined because of user directives, and the inlining is viable. Returns InlineResult::failure() if the inlining may never happen because of user directives or incompatibilities detectable without needing callee traversal. Otherwise returns std::nullopt, meaning that inlining should be decided based on other criteria (e.g. cost modeling). |
|
Detect and strip a radix prefix from |
|
Like getObjectSize(), but only returns the size of base objects (like allocas, global variables and allocator calls) and std::nullopt otherwise. Requires ExactSizeFromOffset mode. |
|
Returns the contents of a bitcode file. This includes the raw contents of the symbol table embedded in the bitcode file. Clients which require a symbol table should prefer to use irsymtab::read instead of this function because it creates a reader for the irsymtab and handles upgrading bitcode files without a symbol table or with an old symbol table. |
|
Returns LTO information for the specified bitcode file. |
|
Returns a list of modules in the specified bitcode buffer. |
|
Read the header of the specified bitcode buffer and extract just the producer string information. If successful, this returns a string. On error, this returns "". |
|
Read the header of the specified bitcode buffer and extract just the triple information. If successful, this returns a string. On error, this returns "". |
|
If |
|
Returns true if Name is applied to TheLoop and enabled. |
|
|
|
Get the branch weights metadata node |
|
Return the offset to the first branch weight data |
|
Get the bug report message that will be output upon a crash. |
|
Returns an iterator pointing beyond the bundle containing |
|
Returns an iterator to the first instruction in the bundle containing |
|
|
|
Fetches a debug binary by searching the default local cache directory and server URLs. |
|
Fetches an executable by searching the default local cache directory and server URLs. |
|
Fetches a specified source file by searching the default local cache directory and server URLs. |
|
Return the cost associated with a callsite, including parameter passing and the call/return instruction. |
|
Return the command‐line option category for color‐related flags. |
|
Returns true if the value |
|
Parse out a conservative ConstantRange from !range metadata. |
|
This function computes the length of a null‐terminated C string pointed to by V. If successful, it returns true and returns the string in Str. If unsuccessful, it returns false. This does not include the trailing null character by default. If TrimAtNul is set to false, then this returns any trailing null characters as well as any other characters that come after it. |
|
Returns constrained intrinsic id to represent the given instruction in strictfp function. If the instruction is already a constrained intrinsic or does not have a constrained intrinsic counterpart, the function returns zero. |
|
Returns the types contained in |
|
Return smallest type that covers both |
|
Return the name of a covarage mapping variable (internal linkage) for each instrumented source module. Such variables are allocated in the __llvm_covmap section. |
|
Return the name of the internal variable recording the array of PGO name vars referenced by the coverage mapping. The owning functions of those names are not emitted by FE (e.g, unused inline functions.) |
|
Find subprogram that is enclosing this scope. |
|
Return the CU or TU index table for section kind |
|
Inline helper to return a range of DbgRecords attached to a marker. It needs to be inlined as it's frequently called, but also come after the declaration of DbgMarker. Thus: it's pre‐declared by users like Instruction, then an inlineable body defined here. |
|
Return Debug Info Metadata Version by checking module flags. |
|
Produce a DebugLoc to use for each dbg.declare that is promoted to a dbg.value. |
|
Returns the cache key for a given debuginfod URL path. |
|
Get the full URL path for a debug binary request of a given BuildID. |
|
Get the full URL path for an executable request of a given BuildID. |
|
Get the full URL path for a source request of a given BuildID and file path. |
|
Find the def instruction for |
|
Find the def instruction for |
|
Finds a default local file caching directory for the debuginfod client, first checking DEBUGINFOD_CACHE_PATH. |
|
Finds a default timeout for debuginfod HTTP requests. Checks DEBUGINFOD_TIMEOUT environment variable, default is 90 seconds (90000 ms). |
|
Finds default array of Debuginfod server URLs by checking DEBUGINFOD_URLS environment variable. |
|
getDefaultMaxUsesToExploreForCaptureTracking ‐ Return default value of the maximal number of uses to explore before giving up. It is used by PointerMayBeCaptured family analysis. |
|
Return the default digit precision for float formatting style |
|
Based on |
|
Returns the corresponding factor of llvm.vector.deinterleaveN intrinsics. |
|
Given a deinterleaveN intrinsic, return the (narrow) vector type of each factor. |
|
Get the branch weights of a branch conditioned on b1 || b2, where b1 and b2 are 2 booleans that are the conditions of 2 branches for which we have the branch weights B1 and B2, respectively. In both B1 and B2, the first position (index 0) is for the 'true' branch, and the second position (index 1) is for the 'false' branch. |
|
Helper method for getting the code model, returning Default if CM does not have a value. The tiny and kernel models will produce an error, so targets that support them or require more complex codemodel selection logic should implement and call their own getEffectiveCodeModel. |
|
getExitBlock ‐ If getExitBlocks would return exactly one block, return that block. Otherwise return null. |
|
Returns a metadata node containing unknown branch weights if the function has an entry count, otherwise returns nullptr. |
|
Given a constant, create a debug information expression. |
|
Return the outermost cycle made divergent by branch outside it. |
|
Similar to getICmpCode but for FCmpInst. This encodes a fcmp predicate into a four bit mask. |
|
getFCmpCodeWithoutNaN ‐ Given an ISD condition code comparing floats, return the equivalent code if we're allowed to assume that NaNs won't occur. |
|
getFCmpCondCode ‐ Return the ISD condition code corresponding to the given LLVM IR floating‐point condition code. This includes consideration of global floating‐point math flags. |
|
Returns a floating point scalar constant of a build vector splat if it exists. When |
|
If |
|
Convert an integer comparison with a constant RHS into an equivalent form with the strictness flipped predicate. Return the new predicate and corresponding constant RHS if possible. Otherwise return std::nullopt. E.g., (icmp sgt X, 0) ‐> (icmp sle X, 1). For a samesign predicate, fail if adjusting the constant would change its sign bit, because that would change the comparison's poison domain. |
|
Get the name of the overloaded floating point function corresponding to Ty. Return the LibFunc in TheLibFunc. |
|
Get the appropriate floating point arithmetic semantic based on the bit size of the given scalar LLT. |
|
If this if a call to a free function, return the freed operand. |
|
Given a PGO function name, remove the filename prefix and return the original (static) function name. |
|
Given a vtable and a specified offset, returns the function and the trivial pointer at the specified offset in pair iff the pointer at the specified offset is a function or an alias to a function. Returns a pair of nullptr otherwise. |
|
Return a virtual register corresponding to the incoming argument register |
|
Return a type where the total size is the greatest common divisor of |
|
Lookup the GCStrategy object associated with the given gc name. |
|
Get the deprecated global context for use by the C API. |
|
Singleton instance of the OptPassGate class, so multiple pass managers don't need to coordinate their uses of OptBisect and OptDisable. |
|
Compute the demanded elements mask of horizontal binary operations. A horizontal operation combines two adjacent elements in a vector operand. This function returns a mask for the elements that correspond to the first operand of this horizontal combination. For example, for two vectors [X1, X2, X3, X4]and [Y1, Y2, Y3, Y4], the resulting mask can include the elements X1, X3, Y1, and Y3. To get the other operands, simply shift the result of this function to the left by 1. |
|
Encode a icmp predicate into a three bit mask. These bits are carefully arranged to allow folding of expressions such as: |
|
|
|
Returns an integer representing true, as defined by the TargetBooleanContents. |
|
|
|
If |
|
If |
|
If |
|
Gathers the individual index expressions from a GEP instruction. |
|
If this is a call to an allocation function that initializes memory to a fixed value, return said value in the requested type. Otherwise, return nullptr. |
|
|
|
|
|
Generate the parameters to tune the inline cost analysis based on command line options. If ‐inline‐threshold option is not explicitly passed, the default threshold is computed from |
|
Get the cost estimate ignoring thresholds. This is similar to getInlineCost when passed InlineParams::ComputeFullInlineCost, or a non‐null ORE. It uses default InlineParams otherwise. Contrary to getInlineCost, which makes a threshold‐based final evaluation of should/shouldn't inline, captured in InlineResult, getInliningCostEstimate returns: ‐ std::nullopt, if the inlining cannot happen (is illegal) ‐ an integer, representing the cost. |
|
Get the expanded cost features. The features are returned unconditionally, even if inlining is impossible. |
|
Return the max count value. We reserver a few large values for special use. |
|
Return the name prefix of profile bitmap variables. |
|
Return the name prefix of profile counter variables. |
|
Return the name prefix of variables containing per‐function control data. |
|
Return the name of the runtime initialization method that is generated by the compiler. The function calls __llvm_profile_register_functions and __llvm_profile_override_default_filename functions if needed. This function has internal linkage and invoked at startup time via init_array. |
|
Return the name of the GPU wave‐cooperative counter increment helper. |
|
Return the marker used to separate PGO names during serialization. |
|
Return the name prefix of variables containing instrumented function names. |
|
Return the name of the runtime interface that registers the PGO name strings. |
|
Return the name of the variable holding the strings (possibly compressed) of all function's PGO names. |
|
Return the name of the runtime interface that registers per‐function control data for one instrumented function. |
|
Return the name of function that registers all the per‐function control data at program startup time by calling __llvm_register_function. This function has internal linkage and is called by __llvm_profile_init runtime method. This function is not generated for these platforms: Darwin, Linux, and FreeBSD. |
|
Return the name of the hook variable defined in profile runtime library. A reference to the variable causes the linker to link in the runtime initialization module (which defines the hook variable). |
|
Return the name of the compiler generated function that references the runtime hook variable. The function is a weak global. |
|
Return the name of the profile section corresponding to |
|
Return the name of value profile node array variables: |
|
Return the name prefix of variables containing virtual table profile data. |
|
Return the name profile runtime entry point to do value profiling for a given site. |
|
Return the name profile runtime entry point to do memop size value profiling. |
|
Return the name prefix of value profile variables. |
|
Return the prefix of the name of the variables to function as a filter. |
|
Return the outermost cycle made divergent by branch inside it. |
|
Find named metadata for a loop with an integer value. Return |
|
Returns the corresponding factor of llvm.vector.interleaveN intrinsics. |
|
Map a call instruction to an intrinsic ID. Libcalls which have equivalent intrinsics are treated as‐if they were intrinsics. |
|
Returns the inverse opcode of |
|
Return the inverse minimum/maximum flavor of the specified flavor. For example, signed minimum is the inverse of signed maximum. |
|
Compute KCFI type ID from mangled type name. The algorithm can be xxHash64 or FNV‐1a. |
|
Return a valid Knowledge associated to the Value V if its Attribute kind is in AttrKinds and it matches the Filter. |
|
This extracts the Knowledge from an element of an operand bundle. This is mostly for use in the assume builder. |
|
Return a valid Knowledge associated to the Use U if its Attribute kind is in AttrKinds. |
|
Return a valid Knowledge associated to the Value V if its Attribute kind is in AttrKinds and the knowledge is suitable to be used in the context of CtxI. |
|
Try to infer an alignment for the specified pointer. |
|
A set of known assumption strings that are accepted without warning and which can be recommended as typo correction. |
|
Return the least common multiple type of |
|
Get a rough equivalent of an LLT for a given MVT. LLT does not yet support scalarable vector types, and will assert if used. |
|
Construct a low‐level type based on an LLVM type. |
|
Read the header of the specified bitcode buffer and prepare for lazy deserialization of function bodies. If ShouldLazyLoadMetadata is true, lazily load metadata as well. If IsImporting is true, this module is being parsed for ThinLTO importing into another module. |
|
If the given file holds a bitcode image, return a Module for it which does lazy deserialization of function bodies. Otherwise, attempt to parse it as LLVM Assembly and return a fully populated Module. The ShouldLazyLoadMetadata flag is passed down to the bitcode reader to optionally enable lazy metadata loading. |
|
If the given MemoryBuffer holds a bitcode image, return a Module for it which does lazy deserialization of function bodies. Otherwise, attempt to parse it as LLVM Assembly and return a fully populated Module. The ShouldLazyLoadMetadata flag is passed down to the bitcode reader to optionally enable lazy metadata loading. This takes ownership of |
|
Resolve the LibcallLoweringInfo for |
|
A helper function that returns the address space of the pointer operand of load or store instruction. |
|
A helper function that returns the alignment of load or store instruction. |
|
A helper function that returns the pointer operand of a load or store instruction. Returns nullptr if not load or store. |
|
A helper function that returns the type of a load or store instruction. |
|
Returns the IR floating‐point type name for a LongDoubleFormat. |
|
Helper to consistently add the set of standard passes to a loop pass's |
|
Find the convergence heart of the loop. |
|
Return either: ‐ |
|
Returns the minimum set of Analyses that all loop passes must preserve. |
|
Based on branch weight metadata, return either: ‐ An unknown probability if the implementation is unable to handle the loop form of |
|
Return a short prefix describing the loop's vectorizer origin based on the |
|
Try to cast C to InvC losslessly, satisfying CastOp(InvC) equals C, or CastOp(InvC) is a refined value of undefined C. Will try best to preserve the flags. |
|
Get a rough equivalent of an MVT for a given LLT. MVT can't distinguish pointers, so these will convert to a plain integer. |
|
Returns the minimum set of Analyses that all machine function passes must preserve. |
|
Return the cache hint metadata node for memory operand |
|
Return a single atomic ordering that is at least as strong as both the |
|
Add metadata from |
|
Convert given |
|
Return the minimum or maximum constant value for the specified integer min/max flavor and type. |
|
Return the canonical comparison predicate for the specified minimum/maximum flavor. |
|
Returns the llvm.vector.reduce min/max intrinsic that corresponds to the intrinsic op. |
|
Returns the min/max intrinsic used when expanding a min/max reduction. |
|
Returns the comparison predicate used when expanding a min/max reduction. |
|
Returns the recurence kind used when expanding a min/max reduction. |
|
Parse the specified bitcode buffer, returning the module summary index. |
|
Parse the module summary index out of an IR file and return the module summary index object if found, or an empty summary if not. If Path refers to an empty file and IgnoreEmptyThinLTOIndexFile is true, then this function will return nullptr. |
|
Get the next available kind ID for a plugin diagnostic. Each time this function is called, it returns a different number. Therefore, a plugin that wants to "identify" its own classes with a dynamic identifier, just have to use this method to get a new ID and assign it to each of its classes. The returned ID will be greater than or equal to DK_FirstPluginKind. Thus, the plugin identifiers will not conflict with the DiagnosticKind values. |
|
Return how strongly LHS and RHS are known to have no common set bits. |
|
If |
|
Compute the size of the object pointed by Ptr. Returns true and the object size in Size if successful, and false otherwise. In this context, by object we mean the region of memory starting at Ptr to the end of the underlying object pointed to by Ptr. |
|
|
|
Find a combination of metadata ("llvm.loop.vectorize.width" and "llvm.loop.vectorize.scalable.enable") for a loop and use it to construct a ElementCount. If scalable.enable is present the count is scalable; if scalable.disable is present or the tag is absent, it is fixed‐width. If the metadata "llvm.loop.vectorize.width" cannot be found then std::nullopt is returned. |
|
Find named metadata for a loop with an integer value. |
|
Creates sanitizer constructor function lazily. If a constructor and init function already exist, this function returns it. Otherwise it calls |
|
Try to ensure that the alignment of |
|
|
|
Generates an ordered vector reduction using extracts to reduce the value. |
|
Returns the English suffix for an ordinal integer (‐st, ‐nd, ‐rd, ‐th). |
|
Return the outermost cycle made divergent by a join of paths from |
|
Like getLazyBitcodeModule, except that the module takes ownership of the memory buffer if successful. If successful, this moves Buffer. On error, this does not move Buffer. If IsImporting is true, this module is being parsed for ThinLTO importing into another module. |
|
|
|
Return the PGOFuncName meta data associated with a function. |
|
Return the initializer in string of the PGO name var |
|
Return the name of the global variable used to store a function name in PGO instrumentation. |
|
Request the timer for this legacy‐pass‐manager's pass instance. |
|
Processes a Constant recursively looking into elements of arrays, structs and expressions to find a trivial pointer element that is located at the given offset (relative to the beginning of the whole outer Constant). |
|
Compute a stable non‐zero 16‐bit hash of the given string. |
|
A helper function that returns the pointer operand of a load, store or GEP instruction. Returns nullptr if not load, store, or GEP. |
|
Returns the distance between the pointers |
|
This is the complement of getFCmpCode. It turns a predicate code into either a constant true or false or the predicate for a new FCmp. Non‐NULL return value will be a true or false constant. NULL return means a new ICmp is needed. The predicate is output in Pred. |
|
This is the complement of getICmpCode. It turns a predicate code into either a constant true or false or the predicate for a new ICmp. The sign is passed in to determine which kind of predicate to use in the new ICmp instruction. Non‐NULL return value will be a true or false constant. NULL return means a new ICmp is needed. The predicate is output in Pred. |
|
|
|
If this is a call to a realloc function, return the reallocated operand. |
|
Given information about an recurrence kind, return the identity for the llvm.vector.reduce.* used to generate it. |
|
Returns the reduction intrinsic id corresponding to the binary operation. |
|
Given information about an llvm.vector.reduce.* intrinsic, return the identity value for the reduction. |
|
Returns the llvm.vector.reduce intrinsic that corresponds to the recurrence kind. |
|
Get all register state flags from machine operand |
|
Utility function to get the size of the SLEB128‐encoded value. |
|
Determine the pattern for predicate |
|
Modify analysis usage so it preserves passes required for the SelectionDAG fallback. |
|
Transform a shuffle mask's output demanded element mask into demanded element masks for the 2 operands, returns false if the mask isn't valid. Both |
|
Repetitively apply |
|
Generates a vector reduction using shufflevectors to reduce the value. Fast‐math‐flags are propagated using the IRBuilder's setting. |
|
Asserts that the given container has a single element and returns that element. |
|
Computes a SipHash‐2‐4 128‐bit result. |
|
Computes a SipHash‐2‐4 64‐bit result. |
|
If all non‐negative |
|
Get splat value if the input is a splat vector or return nullptr. The value may be extracted from a splat constants vector or from a sequence of instructions that broadcast a single value into a vector. |
|
Find the source register for |
|
Compute a stable 64‐bit hash of the given string. |
|
The value is not guaranteed to point to anything specific. It can be used to estimate how much stack space has been used since the previous call. |
|
Calculate Start and End points of memory access using exact backedge taken count |
|
If |
|
Needed by swapByteOrder(). |
|
Get ModRefInfo for a synchronizing operation, such as a fence or stronger than monotonic atomic load/store. |
|
Construct a TensorSpec from a JSON dictionary of the form: { "name": <string>, "port": <int>, "type": <string. Use LLVM's types, e.g. float, double, int64_t>, "shape": <array of ints> } For the "type" field, see the C++ primitive types used in TFUTILS_SUPPORTED_TYPES. |
|
getToken ‐ This function extracts one token from source, ignoring any leading characters that appear in the Delimiters string, and ending the token at any of the characters that appear in the Delimiters string. If there are no tokens in the source string, an empty string is returned. The function returns a pair containing the extracted token and the remaining tail string. |
|
Get the type back from LLT. It won't be 100 percent accurate but returns an estimate of the type. |
|
We provide a function which tries to compute the (demangled) name of a type statically. |
|
Utility function to get the size of the ULEB128‐encoded value. |
|
This method strips off any GEP address adjustments, pointer casts or |
|
Like getUnderlyingObject(), but will try harder to find a single underlying object. In particular, this function also looks through selects and phis. |
|
This method is similar to getUnderlyingObject except that it can look through phi and select instructions and return multiple objects. |
|
This is a wrapper around getUnderlyingObjects and adds support for basic ptrtoint+arithmetic+inttoptr sequences. |
|
Produce a unique identifier for this module by taking the MD5 sum of the names of the module's strong external symbols that are not comdat members. |
|
Determine the possible constant range of vscale with the given bit width, based on the vscale_range function attribute. |
|
Get the valid branch weights metadata node |
|
Extract the value profile data from |
|
Returns intrinsic ID for call. For the input call instruction it finds mapping intrinsic and returns its intrinsic ID, in case it does not found it return not_intrinsic. |
|
Examples: |
|
Returns the number of vector elements for a vectorized type. |
|
get_array_pod_sort_comparator ‐ This is an internal helper function used to get type deduction of T right. |
|
Returns how many physical CPUs or NUMA groups the system has. |
|
Get the maximum length of a thread name on this platform. A value of 0 means there is no limit. |
|
Returns how many physical cores (as opposed to logical cores returned from thread::hardware_concurrency(), which includes hyperthreads). Returns ‐1 if unknown for the current host system. |
|
Strip LLVM‐introduced suffixes so the name is stable across builds. |
|
Returns a mask that represents on which hardware thread, core, CPU, NUMA group, the calling thread can be executed. On Windows, threads cannot cross CPU sockets boundaries. |
|
Get the name of the current thread. The level of support for getting a thread's name varies wildly across operating systems, and it is not even guaranteed that if you can successfully set a thread's name that you can later get it back. This function is intended for diagnostic purposes, and as with setting a thread's name no indication of whether the operation succeeded or failed is returned. |
|
Return the current thread id, as used in various OS system calls. Note that not all platforms guarantee that the value returned will be unique across the entire system, so portable code should not assume this. |
|
Build a strategy from a number of threads as a string provided in |
|
Determine a possible list of successors of a basic block based on the basic block machine operand being used inside the block. This should give you the correct list of successor blocks in most cases except for things like jump tables where the basic block references can't easily be found. The MIRPRinter will skip printing successors if they match the result of this function and the parser will use this function to construct a list if it is missing. |
|
|
|
|
|
Pass the ErrorInfo(s) contained in E to their respective handlers. Any unhandled errors (or Errors returned by handlers) are re‐concatenated and returned. Because this function returns an error, its result must also be checked or returned. If you intend to handle all errors use handleAllErrors (which returns void, and will abort() on unhandled errors) instead. |
|
Handle backend options that are encoded in the executable name. |
|
Handle optimizer options which are encoded in the executable name. Same semantics as in 'handleExecNameEncodedBEOpts'. |
|
Handle any errors (if present) in an Expected<T>, then try a recovery path. |
|
If a terminator in an unreachable basic block has an operand of type Instruction, transform it into poison. Return true if any operands are changed to poison. Original Values prior to being changed to poison are returned in |
|
|
|
|
|
Checks if an instructions has Branch Weight Metadata |
|
Check if Branch Weight Metadata has an "expected" field from an llvm.expect* intrinsic |
|
Look for the loop attribute that disables all transformation heuristic. |
|
Look for the loop attribute that disables the LICM transformation heuristics. |
|
Check whether the overloaded floating point function corresponding to Ty is available. |
|
This checks if the source of this function has drifted since this binary was profiled previously. For now, we are piggy backing on what PGO does to detect this with instrumented profiles. PGO emits an hash of the IR and checks if the hash has changed. Advanced basic block layout is usually done on top of PGO optimized binaries and hence this check works well in practice. |
|
Check inner loop (L) backedge count is known to be invariant on all iterations of its outer loop. If the loop has no parent, this is trivially true. |
|
Checks if the number of cluster edges between SU and its predecessors is less than FuseLimit |
|
Look for the loop attribute that requires progress within the loop. Note: Most consumers probably want "isMustProgress" which checks the containing function attribute too. |
|
|
|
|
|
|
|
Check if the loop header has a conditional branch that is not loop‐invariant, because it involves load instructions. If all paths from either the true or false successor to the header or loop exists do not modify the memory feeding the condition, perform 'partial unswitching'. That is, duplicate the instructions feeding the condition in the pre‐header. Then unswitch on the duplicated condition. The condition is now known in the unswitched version for the 'invariant' path through the original loop. |
|
Checks if an Instruction has MD_prof Metadata |
|
Returns true if the given container only contains a single element. |
|
Returns true if a blob of text starts with a UTF‐16 big or little endian byte order mark. |
|
@{ Get the mode for LLVM's supported loop transformations. |
|
Checks if an instructions has valid Branch Weight Metadata |
|
Return true if |
|
Combine values into a single hash_code. |
|
|
|
|
|
Return true if LHS and RHS have no common bits set. |
|
|
|
Interpret the given character |
|
Return the binary representation of the two provided values, |
|
hexdigit ‐ Return the hexadecimal character for the given number |
|
Hoist all of the instructions in the |
|
Walk the specified region of the CFG (defined by all blocks dominated by the specified block, and that are in the current loop) in depth first order w.r.t the DominatorTree. This allows us to visit definitions before uses, allowing us to hoist a loop body in one pass without iteration. Takes DomTreeNode, AAResults, LoopInfo, DominatorTree, TargetLibraryInfo, Loop, AliasSet information for all instructions of the loop and loop safety information as arguments. Diagnostics is emitted via |
|
|
|
|
|
Return an inverse depth‐first iterator at the entry of |
|
Return a past‐the‐end inverse depth‐first iterator for |
|
Return an external inverse depth‐first iterator at the entry of |
|
Return a past‐the‐end external inverse depth‐first iterator for |
|
Returns the exponent of the internal representation of the APFloat. |
|
Return true if V is poison given that ValAssumedPoison is already poison. For example, if ValAssumedPoison is |
|
|
|
Returns true if |
|
Returns true if |
|
The value returned by this function can be returned from convertToErrorCode for Error values where no sensible translation to std::error_code exists. It should only be used in this situation, and should never be used where a sensible conversion to std::error_code is available, as attempts to convert to/from this error will result in a fatal error. (i.e. it is a programmatic error to try to convert such a value). |
|
If we can infer one attribute from another on the declaration of a function, explicitly materialize the maximal set in the IR. |
|
Analyze the name and prototype of the given function and set any applicable attributes. Note that this merely helps optimizations on an already existing function but does not consider mandatory attributes. |
|
Initialize all passes linked into the Analysis library. |
|
Initialize all passes linked into the CodeGen library. |
|
Initialize all passes linked into the Core library. |
|
Initialize all passes linked into the GlobalISel library. |
|
Initialize all passes linked into the IPO library. |
|
Initialize all passes linked into the InstCombine library. |
|
Helper for client passes to initialize dependent passes for LBPI. |
|
Initialize all passes linked into the ScalarOpts library. |
|
Initialize all passes linked into the CodeGen library. |
|
Initialize all passes linked into the TransformUtils library. |
|
Initialize all passes linked into the Vectorize library. |
|
Utility for extracting the inline cost message to a string. |
|
Propagate dbg.value intrinsics through the newly inserted PHIs. |
|
Add |
|
Installs a new bad alloc error handler that should be used whenever a bad alloc error, e.g. failing malloc/calloc, is encountered by LLVM. |
|
install_fatal_error_handler ‐ Installs a new error handler to be used whenever a serious (non‐recoverable) error is encountered by LLVM. |
|
|
Install a new‐handler that reports out‐of‐memory as a fatal LLVM error. |
Construct a range iterator which begins at |
|
|
|
|
|
Output range |
|
Output range |
|
Helper function to internalize functions and variables in a Module. |
|
Compute the access‐group list of access groups that |
|
Return whether this intrinsic propagates poison for all operands. |
|
Return a range over the inverse‐order children of node |
|
Return a range that visits the inverse of |
|
Return a range that visits the inverse of |
|
Return the test mask which returns true after fabs is applied to the value. |
|
Return a range over all nodes of |
|
Post‐order traversal of the inverse of |
|
Invert the given true/false value, possibly reusing an existing copy. |
|
Evaluates if the specified FP class test is better performed as the inverse (i.e. fewer instructions should be required to lower it). An example is the test "inf|normal|subnormal|zero", which is an inversion of "nan". |
|
C++20 constexpr invoke. This uses |
|
|
|
Checks that Addr is a multiple of the alignment. |
|
Checks that SizeInBytes is a multiple of the alignment. |
|
Returns true if |
|
|
|
Tests if a value is a call or invoke to a library function that allocates memory (either malloc, calloc, or strdup like). |
|
Return true if this alloca is legal for promotion. |
|
Tests if a value is a call or invoke to a library function that allocates or reallocates memory (either malloc, calloc, realloc, or strdup like). |
|
Return true if the induction variable |
|
Checks whether character |
|
Checks if character |
|
Check if an ARM64EC function name is mangled. |
|
Returns true if the instruction |
|
Return true if assignment tracking is enabled for module |
|
Return true if it is an intrinsic that cannot be speculated but also cannot trap. |
|
Return true iff the operand bundles of the provided llvm.assume doesn't contain any valuable information. This is true when: ‐ The operand bundle is empty ‐ The operand bundle only contains information about dropped values or constant folded values. |
|
Returns true if this personality function catches asynchronous exceptions. |
|
Return true if we know V to the base address of the corresponding memory object. This implies that any address less than V must be out of bounds for the underlying object. Note that just being isIdentifiedObject() is not enough ‐ For example, a negative offset from a noalias argument or call can be inbounds w.r.t the actual underlying object. |
|
isBitcode ‐ Return true if the given bytes are the magic bytes for LLVM IR bitcode, either with or without a wrapper. |
|
Return true if |
|
isBitcodeWrapper ‐ Return true if the given bytes are the magic bytes for an LLVM IR bitcode wrapper. |
|
Check whether a pass is a BitcodeWriterPass. |
|
Returns true if |
|
Checks if an MDNode contains Branch Weight Metadata |
|
Return true if the specified instruction is a G_BUILD_VECTOR or G_BUILD_VECTOR_TRUNC where all of the elements are ~0 or undef. |
|
Return true if the specified instruction is a G_BUILD_VECTOR or G_BUILD_VECTOR_TRUNC where all of the elements are 0 or undef. |
|
|
|
If the specified value can be set by repeating the same byte in memory, return the i8 value that it is represented with. This is true for all i8 values obviously, but is also true for i32 0, i32 ‐1, i16 0xF0F0, double 0.0 etc. If the value can't be handled with a repeated byte store (e.g. i16 0x1234), return null. If the value is entirely undef and padding, return undef. |
|
Match one of the patterns up to the select/logic op: %Op0 = icmp ne i4 %X, 0 %Agg = call { i4, i1 } llvm.[us]mul.with.overflow.i4(i4 %X, i4 %Y) %Op1 = extractvalue { i4, i1 } %Agg, 1 %ret = select i1 %Op0, i1 %Op1, i1 false / %ret = and i1 %Op0, %Op1 |
|
Returns true if the memory operations |
|
|
|
|
|
Returns true if given the TargetLowering's boolean contents information, the value |
|
Determines if |
|
Determines if |
|
|
|
Return true if the specified edge is a critical edge. Critical edges are edges from a block with multiple successors to a block with multiple predecessors. |
|
isCurrentDebugType ‐ Return true if the specified string is the debug type specified on the command line, or if none was specified on the command line with the ‐debug‐only=X option. An optional level can be provided to control the verbosity of the output. If the provided level is not 0 and user specified a level below the provided level, return false. |
|
Returns true if the exception handling behavior and rounding mode match what is used in the default floating point environment. |
|
|
|
|
|
Equivalent to isDereferenceableAndAlignedPointer with an alignment of 1. |
|
Checks if character |
|
Returns true if the pointer is one which would have been considered an escape by isNotCapturedBefore. |
|
Return true if this loop can be assumed to run for a finite number of iterations. |
|
Returns true if this is a personality function that invokes handler funclets (which must return to it). |
|
Determines whether module targets a GPU eligable for PGO instrumentation |
|
|
|
|
|
|
|
Return true if this function can prove that the instruction I is executed for every iteration of the loop L. |
|
|
|
Returns true iff |
|
Returns true iff |
|
Checks if character |
|
Check if INSTR_PROF_RAW_VERSION_VAR is defined. This global is only being set in IR PGO compilation. |
|
Return true if a pass is for IR printing. |
|
Return true if V is umabigously identified at the function‐level. Different IdentifiedFunctionLocals can't alias. Further, an IdentifiedFunctionLocal can not alias with any function arguments other than itself, which is not necessarily true for IdentifiedObjects. |
|
Return true if this pointer refers to a distinct and identifiable object. This returns true for: Global Variables and Functions (but not Global Aliases) Allocas ByVal and NoAlias Arguments NoAlias returns (e.g. calls to malloc) |
|
Return the boolean condition value in the context of the given instruction if it is known based on dominating conditions. |
|
Return true if RHS is known to be implied true by LHS. Return false if RHS is known to be implied false by LHS. Otherwise, return std::nullopt if no implication can be made. A & B must be i1 (boolean) values or a vector of such values. Note that the truth table for implication is the same as <=u on i1 values (but not <=s!). The truth table for both is: | T | F (B) T | T | F F | T | T (A) |
|
Test if the given instruction is in a position to be optimized with a tail‐call. This roughly means that it's in a block with a return and there's nothing that needs to be scheduled between it and the return. |
|
Check if it is mechanically possible to inline the function |
|
Return true if the result produced by the instruction is not used, and the instruction will return. Certain side‐effecting instructions are also considered dead if there are no uses of the instruction. |
|
Checks if an integer fits into the given bit width. |
|
Checks if an signed integer fits into the given (dynamic) bit width. |
|
Return true if |
|
{launder,strip}.invariant.group returns pointer that aliases its argument, and it only captures pointer by returning it. These intrinsics are not marked as nocapture, because returning is considered as capture. The arguments are not marked as returned neither, because it would make it useless. If |
|
Return true if the floating‐point value |
|
Return true iff: 1. X is poison implies Y is poison. 2. X is true implies Y is false. 3. X is false implies Y is true. Otherwise, return false. |
|
Return true if the two given values are negation. Currently can recoginze Value pair: 1: <X, Y> if X = sub (0, Y) or Y = sub (0, X) 2: <X, Y> if X = sub (A, B) and Y = sub (B, A) |
|
Returns true if the given value is known be negative (i.e. non‐positive and non‐zero). |
|
Returns true if we can prove that |
|
Return true if the floating‐point value can never contain a NaN or infinity. |
|
Return true if the floating‐point scalar value is not an infinity or if the floating‐point vector value has no infinities. Return false if a value could ever be infinity. |
|
Return true if the floating‐point scalar value is not a NaN or if the floating‐point vector value has no NaN elements. Return false if a value could ever be NaN. |
|
Return true if the given values are known to be non‐equal when defined. Supports scalar integer types only. |
|
Returns true if the give value is known to be non‐negative. |
|
Returns true if we can prove that |
|
Returns true if we can prove that |
|
Return true if the given value is known to be non‐zero when defined. For vectors, return true if every element is known to be non‐zero when defined. For pointers, if the context instruction and dominator tree are specified, perform context‐sensitive analysis and return true if the pointer couldn't possibly be null at the specified instruction. Supports values with integer or pointer type and vectors of integers. |
|
Returns true if the given value is known be positive (i.e. non‐negative and non‐zero). |
|
Returns true if we can prove that |
|
|
|
Return true if the given indirect call site can be made to call |
|
isLibFreeFunction ‐ Returns true if the function is a builtin free() |
|
Check whether the library function is available on target and also that it in the current Module is a Function with the right type. |
|
Checks if character |
|
Determine whether there is a potentially a path from at least one block in 'Worklist' to at least one block in 'StopSet' within a single function without passing through any of the blocks in 'ExclusionSet'. Returns false only if we can prove that once any block in 'Worklist' has been reached then no blocks in 'StopSet' can be executed without passing through any blocks in 'ExclusionSet'. Conservatively returns true. |
|
Return true if the argument is a non‐empty sequence of ones starting at the least significant bit with the remainder zero (32 bit version). Ex. isMask_32(0x0000FFFFU) == true. |
|
Return true if the argument is a non‐empty sequence of ones starting at the least significant bit with the remainder zero (64 bit version). |
|
Does this shuffle mask represent either one slide shuffle or a pair of two slide shuffles, combined with a select on some constant vector mask? A slide is a shuffle mask which shifts some set of elements up or down the vector, with all other elements being undefined. An identity shuffle will be matched a slide by 0. The output parameter provides the source (‐1 means no source), and slide direction for each slide. |
|
Check whether the given call has no side‐effects. Specifically checks for math routimes which sometimes set errno. |
|
Returns true if |
|
Return true if this loop can be assumed to make progress. (i.e. can't be infinite without side effects without also being undefined) |
|
Return true if this pointer is returned by a noalias function. |
|
Return true if this personality may be safely removed if there are no invoke instructions remaining in the current function. |
|
Returns true if |
|
Return true if the instruction doesn't potentially cross vector lanes. This condition is weaker than checking that the instruction is lanewise: lanewise means that the same operation is splatted across all lanes, but we also include the case where there is a different operation on each lane, as long as the operation only uses data from that lane. An example of an operation that is not lanewise, but doesn't cross vector lanes is insertelement. |
|
Return true if Object memory is not visible after an unwind, in the sense that program semantics cannot depend on Object containing any particular value on unwind. If the RequiresNoCaptureBeforeUnwind out parameter is set to true, then the memory is only not visible if the object has not been captured prior to the unwind. Otherwise it is not visible even if captured. |
|
Returns true if |
|
Returns true if |
|
Returns true if |
|
|
|
Returns true if |
|
Return true if the value is a constant 1 integer or a splatted vector of a constant 1 integer (with no undefs). Build vector implicit truncation is allowed, but the truncated bits need to be zero. |
|
Return true if the value is a constant floating‐point value, or a splatted vector of a constant floating‐point value, of 1.0 (with no undefs). |
|
Return true if the value is a constant 1 integer or a splatted vector of a constant 1 integer (with no undefs). Does not permit build vector implicit truncation. |
|
Returns true if the arithmetic part of the |
|
Check if physical register |
|
|
|
Determine whether there is at least one path from a block in 'Worklist' to 'StopBB' without passing through any blocks in 'ExclusionSet', returning true if uncertain. |
|
Return true if the argument is a power of two > 0. Ex. isPowerOf2_32(0x00100000U) == true (32 bit edition.) |
|
Return true if the argument is a power of two > 0 (64 bit edition.) |
|
Returns whether opcode |
|
Check whether the given Opcode is a generic opcode that is not supposed to appear after ISel. |
|
Return true if hex style |
|
Checks whether character |
|
Checks whether character |
|
isRawBitcode ‐ Return true if the given bytes are the magic bytes for raw LLVM IR bitcode (without a wrapper). |
|
Returns true if the loop contains read‐only memory accesses and doesn't throw. Puts loads that may fault into |
|
Tests if a function is a call or invoke to a library function that reallocates memory (e.g., realloc). |
|
|
|
Return true if this is a call to an allocation function that does not have side effects that we are required to preserve beyond the effect of allocating a new object. Ex: If our allocation routine has a counter for the number of objects allocated, and the program prints it on exit, can the value change due to optimization? Answer is highly language dependent. Note: Removable really does mean removable; it does not mean observable. A language (e.g. C++) can allow removing allocations without allowing insertion or speculative execution of allocation routines. |
|
It is safe to destroy a constant iff it is only used by constants itself. Note that constants cannot be cyclic, so this test is pretty easy to implement recursively. |
|
Return true if we know that executing a load from this value cannot trap. |
|
|
|
Return true if the instruction does not have any effects besides calculating the result and does not have undefined behavior. |
|
This returns the same result as isSafeToSpeculativelyExecute if Opcode is the actual opcode of Inst. If the provided and actual opcode differ, the function (virtually) overrides the opcode of Inst with the provided Opcode. There are come constraints in this case: * If Opcode has a fixed number of operands (eg, as binary operators do), then Inst has to have at least as many leading operands. The function will ignore all trailing operands beyond that number. * If Opcode allows for an arbitrary number of operands (eg, as CallInsts do), then all operands are considered. * The virtual instruction has to satisfy all typing rules of the provided Opcode. * This function is pessimistic in the following sense: If one actually materialized the virtual instruction, then isSafeToSpeculativelyExecute may say that the materialized instruction is speculatable whereas this function may have said that the instruction wouldn't be speculatable. This behavior is a shortcoming in the current implementation and not intentional. |
|
Don't use information from its non‐constant operands. This helper is used when its operands are going to be replaced. |
|
Returns true if this personality uses scope‐style EH IR instructions: catchswitch, catchpad/ret, and cleanuppad/ret. |
|
Checks if a signed integer is an N bit number shifted left by S. |
|
|
|
|
|
Checks if a unsigned integer is an N bit number shifted left by S. |
|
Given an exploded icmp instruction, return true if the comparison only checks the sign bit. If it only checks the sign bit, set TrueIfSigned if the result of the comparison is true when the input value is signed. |
|
Checks whether character |
|
Return true if each element of the vector value |
|
Return |
|
Returns true if ao is stronger than other as defined by the AtomicOrdering lattice, which is based on C++'s definition. |
|
Check whether the given Opcode is a target‐specific opcode. |
|
Return whether the input cluster ID's are the same and valid. |
|
Check whether an instruction |
|
Note: There are intrinsics where implementing vectorization for the intrinsic is redundant, but we want to implement scalarization of the vector. To prevent the requirement that an intrinsic also implements vectorization we provide this separate function. |
|
Identify if the intrinsic is trivially vectorizable. This method returns true if the intrinsic's argument types are all scalars for the scalar form of the intrinsic and all vectors (or scalars handled by isVectorIntrinsicWithScalarOpAtArg) for the vector form of the intrinsic. |
|
Checks if an unsigned integer fits into the given bit width. |
|
Checks if an unsigned integer fits into the given (dynamic) bit width. |
|
Checks if character |
|
Return whether an MDNode might represent an access group. |
|
Return true if it is valid to use the assumptions provided by an assume intrinsic, I, at the point in the control‐flow identified by the context instruction, CxtI. By default, ephemeral values of the assumption are treated as an invalid context, to prevent the assumption from being used to optimize away its argument. If the caller can ensure that this won't happen, it can call with AllowEphemerals set to true to get more valid assumptions. |
|
Checks if an MDNode contains value profiling Metadata |
|
Identifies if the vector form of the intrinsic is overloaded on the type of the operand at index |
|
Identifies if the vector form of the intrinsic has a scalar operand. |
|
Identifies if the vector form of the intrinsic that returns a struct is overloaded at the struct element index |
|
Returns true if |
|
Returns true if |
|
Returns true iff |
|
Returns true iff |
|
Return true if the Object is writable, in the sense that any location based on this pointer that can be loaded can also be stored to without trapping. Additionally, at the point Object is declared, stores can be introduced without data races. At later points, this is only the case if the pointer can not escape to a different thread. |
|
Return true if the value is a constant 0 integer or a splatted vector of a constant 0 integer (with no undefs). Build vector implicit truncation is allowed. |
|
Return true if the value is a constant (+/‐)0.0 floating‐point value or a splatted vector thereof (with no undefs). |
|
|
|
|
|
|
|
isa<X> ‐ Return true if the parameter to the template is an instance of one of the template type arguments. Used like this: |
|
Return true if |
|
isa_and_present<X> ‐ Functionally identical to isa, except that a null value is accepted. |
|
Returns a non‐NULL pointer to a NUL‐terminated C style string that should be explicitly freed, if successful. Otherwise, may return nullptr if mangled_name is not a valid mangling or is nullptr. |
|
Convert a signed integer to a decimal string. |
|
Convert a JITTargetAddress to a callable function pointer. |
|
Convert a JITTargetAddress to a pointer. |
|
Coordinate with a GNU Make jobserver when one is present. |
|
|
|
Concatenate errors. The resulting Error is unchecked, and contains the ErrorInfo(s), if any, contained in E1, followed by the ErrorInfo(s), if any, contained in E2. |
|
Joins the strings in the parameter pack |
|
Returns the least common multiple of A and B. |
|
left_justify ‐ append spaces after string so total output is |
|
Ensure the definition of the builtin GCs gets linked in |
|
Creates an erlang‐compatible metadata printer. |
|
Creates an ocaml‐compatible metadata printer. |
|
Lint a module. |
|
Returns true if LLVM is compiled with support for multi‐threading, and false otherwise. |
|
llvm_shutdown ‐ Deallocate and destroy all ManagedStatic variables. |
|
|
|
|
This function calls abort(), and prints the optional message to stderr. Use the llvm_unreachable macro (that adds location info), instead of calling this function directly. |
Create a local file system cache which uses the given cache name, temporary file prefix, cache directory and file callback. This function does not immediately create the cache directory if it does not yet exist; this is done lazily the first time a file is added. The cache name appears in error messages for errors during caching. The temporary file prefix is used in the temporary file naming scheme used when writing files atomically. |
|
Log all errors (if any) in E to OS. If there are any errors, ErrorBanner will be printed before the first one is logged. A newline will be printed after each error. |
|
Convert the given Cmpxchg into primitive load and compare. |
|
Convert the given RMWI into primitive load and stores, assuming that doing so is legal. Return true if the lowering succeeds. |
|
Lower all calls to ifuncs by replacing uses with indirect calls loaded out of a global table initialized in a global constructor. This will introduce one constructor function and adds it to llvm.global_ctors. The constructor will call the resolver function once for each ifunc. |
|
Try to turn a call to @llvm.objectsize into an integer value of the given Type. Returns null on failure. If MustSucceed is true, this function will not return null, and may return conservative values governed by the second argument of the call to objectsize. |
|
Lower |
|
|
|
Checks that MIR is fully legal, returns an illegal instruction if it's not, nullptr otherwise |
|
Create a new loop identifier for a loop created from a loop transformation. |
|
Splits control flow at point of |
|
Factory function for creating intrusive ref counted pointers. |
|
Create a new LoopID after the loop has been transformed. |
|
Returns an opaquely‐typed Callable object whose operator() overload set is the sum of the operator() overload sets of each CallableT in CallableTs. |
|
Make a range that does early increment to allow mutation of the underlying range without disrupting iteration. |
|
Make a Error instance representing failure using the given error info type. |
|
Convert an |
|
Convenience wrapper to make a fallible_iterator end value from an instance of an underlying iterator. |
|
Convenience wrapper to make a fallible_iterator value from an instance of an underlying iterator and an Error reference. |
|
Build an iterator range whose increments report failure through |
|
Convenience function that takes a range of elements and a predicate, and return a new filter_iterator range. |
|
Given a container of pairs, return a range over the first elements. |
|
Return a range that iterates over the pointees of |
|
Return a range whose iterators expose addresses of pointees in |
|
|
|
Given a container of pairs, return a range over the second elements. |
|
Mark a cloned instruction as a new instance so that its source loc can be updated when remapped. |
|
Create a mapped iterator over |
|
Return a range that applies |
|
Map a range to a SmallVector with element types deduced from the mapping. |
|
Given a mask vector of i1, Return true if any of the elements of this predicate mask are known to be true or undef. That is, return true if at least one lane can be assumed active. |
|
Create a bitmask with the N left‐most bits set to 1, and all other bits set to 0. Only unsigned types are allowed. |
|
Create a bitmask with the N left‐most bits set to 0, and all other bits set to 1. Only unsigned types are allowed. |
|
Create a bitmask with the N right‐most bits set to 1, and all other bits set to 0. Only unsigned types are allowed. |
|
Create a bitmask with the N right‐most bits set to 0, and all other bits set to 1. Only unsigned types are allowed. |
|
Determine the pattern that a select with the given compare as its predicate and given values as its true/false operands would match. |
|
Pattern match integer [SU]MIN, [SU]MAX and ABS idioms, returning the kind and providing the out parameter results if we successfully match. |
|
Attempt to match a simple value‐accumulating recurrence of the form: %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%OtherOp, %llvm.intrinsic.acc) OR %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%llvm.intrinsic.acc, %OtherOp) |
|
|
|
Attempt to match a simple value‐accumulating recurrence of the form: %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%OtherOp0, %OtherOp1, %llvm.intrinsic.acc) OR %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%llvm.intrinsic.acc, %OtherOp0, %OtherOp1) |
|
Attempt to match a unary predicate against a scalar/splat constant or every element of a constant G_BUILD_VECTOR. If |
|
Gets the maximum value for a N‐bit signed integer. |
|
Gets the maximum value for a N‐bit unsigned integer. |
|
|
|
Implements IEEE 754‐2019 maximum semantics. Returns the larger of 2 arguments, returning a quiet NaN if an argument is a NaN and treating ‐0 as less than +0. |
|
Implements IEEE 754‐2019 maximumNumber semantics. Returns the larger of 2 arguments, not propagating NaNs and treating ‐0 as less than +0. |
|
Implements IEEE‐754 2008 maxNum semantics. Returns the larger of the 2 arguments if both are not NaN. If either argument is a qNaN, returns the other argument. If either argument is sNaN, return a qNaN. +0 is treated as ordered greater than ‐0. |
|
Check whether a string looks like an old loop attachment tag. |
|
Returns true if the instruction could have memprof metadata, used to ensure consistency between summary analysis and the ThinLTO backend processing. |
|
Returns true if the result or effects of the given instructions |
|
Given a CallInst, check if it calls a string function known to CodeGen, and mark it with NoBuiltin if so. To be used by sanitizers that intend to intercept string functions and want to avoid converting them to target specific instructions. |
|
Demangles the Microsoft symbol pointed at by mangled_name and returns it. Returns a pointer to the start of a null‐terminated demangled string on success, or nullptr on error. If n_read is non‐null and demangling was successful, it receives how many bytes of the input string were consumed. status receives one of the demangle_ enum entries above if it's not nullptr. Flags controls various details of the demangled representation. |
|
Gets the minimum value for a N‐bit signed integer. |
|
|
|
Implements IEEE 754‐2019 minimum semantics. Returns the smaller of 2 arguments, returning a quiet NaN if an argument is a NaN and treating ‐0 as less than +0. |
|
Implements IEEE 754‐2019 minimumNumber semantics. Returns the smaller of 2 arguments, not propagating NaNs and treating ‐0 as less than +0. |
|
Implements IEEE‐754 2008 minNum semantics. Returns the smaller of the 2 arguments if both are not NaN. If either argument is a qNaN, returns the other argument. If either argument is sNaN, return a qNaN. ‐0 is treated as ordered less than +0. |
|
Provide wrappers to std::mismatch which take ranges instead of having to pass begin/end explicitly. This function returns a pair of iterators for the first mismatching elements from |
|
|
|
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly. |
|
Move instructions, in an order‐preserving manner, from |
|
Move instructions, in an order‐preserving manner, from |
|
Return true if undefined behavior would provable be executed on the path to OnPathTo if Root produced a posion result. Note that this doesn't say anything about whether OnPathTo is actually executed or whether Root is actually poison. This can be used to assess whether a new use of Root can be added at a location which is control equivalent with OnPathTo (such as immediately before it) without introducing UB which didn't previously exist. Note that a false result conveys no information. |
|
Return true if speculation of the given load must be suppressed to avoid ordering or interfering with an active sanitizer. If not suppressed, dereferenceability and alignment must be proven separately. Note: This is only needed for raw reasoning; if you use the interface below (isSafeToSpeculativelyExecute), this is handled internally. |
|
Return true if the given instruction must trigger undefined behavior when I is executed with any operands which appear in KnownPoison holding a poison value at the point of execution. |
|
Rename all the anon globals in the module using a hash computed from the list of public globals in the module. |
|
Replace each shuffle mask index with the scaled sequential indices for an equivalent mask of narrowed elements. Mask elements that are less than 0 (sentinel values) are repeated in the output mask. |
|
Check if we can use Comdat for profile variables. This will eliminate the duplicated profile variables for Comdat functions. |
|
Returns the negated value of the argument. |
|
Increment |
|
Return a range over all nodes of graph |
|
In case that two BBs |
|
Provide wrappers to std::none_of which take ranges instead of having to pass begin/end explicitly. |
|
Normalize |
|
Normalize |
|
Functor variant of std::not_equal_to that can be used as a UnaryPredicate in functional algorithms like all_of. |
|
This returns a reference to a raw_ostream which simply discards output. |
|
Returns the necessary adjustment for aligning |
|
Returns the offset to the next integer (mod 2**64) that is greater than or equal to |
|
Return true if the only users of this pointer are lifetime markers. |
|
Return true if the only users of this pointer are lifetime markers or droppable instructions. |
|
Returns the remainder of |
|
Stores the remainder of |
|
Bitwise conjunction operators |
|
Bitwise conjunction assignment operators |
|
Multiplication operators |
|
Multiplies |
|
Addition operators |
|
Addition assignment operators |
|
Unary minus operators |
|
Subtracts |
|
Returns |
|
Divides |
|
Right shift operator |
|
Bitwise exclusive‐or operators |
|
Bitwise disjunction operators |
|
Bitwise disjunction assignment operators |
|
Unary bitwise complement operator. |
|
Limit threads to about |
|
Call "ShouldRemove" for every entry in M's global_ctor list and remove the entries for which it returns true. Return true if anything changed. |
|
Returns all FPClasses which are greater than all values in |
|
Returns all FPClasses which are less than all values in |
|
This returns a reference to a raw_fd_ostream for standard output. Use it like: outs() << "foo" << "bar"; |
|
Overwrite a ULEB128 value and keep the original length. |
|
Invoke |
|
|
|
Apply |
|
|
|
|
|
This utility template takes care of adding require<> and invalidate<> passes for an analysis to a given |
|
Try to parse module and verify it. May output verification errors to the errs(). |
|
parseAssemblyFile and parseAssemblyString are wrappers around this function. Parse LLVM Assembly from a MemoryBuffer. |
|
This function is a main interface to the LLVM Assembly Parser. It parses an ASCII file that (presumably) contains LLVM Assembly code. It returns a Module (intermediate representation) with the corresponding features. Note that this does not verify that the generated Module is valid, so you should run the verifier after parsing the file to check that it is okay. Parse LLVM Assembly from a file |
|
This function is a main interface to the LLVM Assembly Parser. It parses an ASCII file that (presumably) contains LLVM Assembly code, including a module summary. It returns a Module (intermediate representation) and a ModuleSummaryIndex with the corresponding features. Note that this does not verify that the generated Module or Index are valid, so you should run the verifier after parsing the file to check that they are okay. Parse LLVM Assembly from a file |
|
Only for use in llvm‐as for testing; this does not produce a valid module. |
|
This function is the low‐level interface to the LLVM Assembly Parser. This is kept as an independent function instead of being inlined into parseAssembly for the convenience of interactive users that want to add recently parsed bits to an existing module. |
|
The function is a secondary interface to the LLVM Assembly Parser. It parses an ASCII string that (presumably) contains LLVM Assembly code. It returns a Module (intermediate representation) with the corresponding features. Note that this does not verify that the generated Module is valid, so you should run the verifier after parsing the file to check that it is okay. Parse LLVM Assembly from a string |
|
Parse LLVM Assembly including the summary index from a MemoryBuffer. |
|
Parses a target syncscope string into its abstract scope, the inverse of getAtomicScopeIRString. Returns the scope and whether it is the single address space variant. |
|
Read the specified bitcode file, returning the module. |
|
Parse the given string as a cache pruning policy. Defaults are taken from a default constructed CachePruningPolicy object. For example: "prune_interval=30s:prune_after=24h:cache_size=50%" which means a pruning interval of 30 seconds, expiration time of 24 hours and maximum cache size of 50% of available disk space. |
|
A convenience function that calls cl::ParseCommandLineOptions on the given set of options. |
|
Parse a type and a constant value in the given string. |
|
Returns the denormal mode to use for inputs and outputs. |
|
Parse the expected names from the denormal‐fp‐math attribute. |
|
Parse cl::opts from a fuzz target commandline. |
|
If the given MemoryBuffer holds a bitcode image, return a Module for it. Otherwise, attempt to parse it as LLVM Assembly and return a Module for it. |
|
If the given file holds a bitcode image, return a Module for it. Otherwise, attempt to parse it as LLVM Assembly and return a Module for it. |
|
Parse a KCFI hash algorithm name. Returns xxHash64 if the name is not recognized. |
|
Parses an IR floating‐point type name into a LongDoubleFormat, returning std::nullopt if it does not name a supported long double format. |
|
Parse the machine basic block definitions, and skip the machine instructions. |
|
Parse the machine instructions. |
|
Fuzzer friendly interface for the llvm bitcode parser. |
|
Parse out statepoint directives from the function attributes present in |
|
Parse LLVM Assembly for summary index from a MemoryBuffer. |
|
This function is a main interface to the LLVM Assembly Parser. It parses an ASCII file that (presumably) contains LLVM Assembly code for a module summary. It returns a ModuleSummaryIndex with the corresponding features. Note that this does not verify that the generated Index is valid, so you should run the verifier after parsing the file to check that it is okay. Parse LLVM Assembly Index from a file |
|
The function is a secondary interface to the LLVM Assembly Parser. It parses an ASCII string that (presumably) contains LLVM Assembly code for a module summary. It returns a a ModuleSummaryIndex with the corresponding features. Note that this does not verify that the generated Index is valid, so you should run the verifier after parsing the file to check that it is okay. Parse LLVM Assembly from a string |
|
Parse a type in the given string. |
|
Parse a string |
|
|
|
Provide wrappers to std::partition which take ranges instead of having to pass begin/end explicitly. |
|
Binary search for the first iterator in a range where a predicate is false. Requires that C is always true below some limit, and always false above it. |
|
Patch the replacement so that it is not more restrictive than the value being replaced. It assumes that the replacement does not get moved from its original position. |
|
Return the non‐bitcasted source operand of |
|
Return the non‐extracted vector source operand of |
|
Return the non‐frozen source operand of |
|
Recursively peek through INSERT_VECTOR_ELT nodes, returning the source vector operand of |
|
Return the non‐bitcasted and one‐use source operand of |
|
Return the non‐frozen source operand of |
|
Return the non‐truncated source operand of |
|
VMap is the value‐map that maps instructions from the original loop to instructions in the last peeled‐off iteration. If |
|
Compute a layout for a struct containing the given fields, making a best‐effort attempt to minimize the amount of space required. |
|
Returns an iterator range over all physical register and mask operands for |
|
Convert a pointer to a JITTargetAddress. |
|
Count the number of set bits in a value. Ex. popcount(0xF000F000) = 8 Returns 0 if Value is zero. |
|
Given a mask vector of the form <Y x i1>, return an APInt (of bitwidth Y) for each lane which may be active. |
|
Post‐order traversal of a graph. Note: this returns a PostOrderTraversal, not an iterator range; |
|
Post‐order traversal of |
|
Get the number of predecessors of |
|
Return true if both predicates match sign or if at least one of them is an equality comparison (which is signless). |
|
Modify |
|
Pretty print a register opcode and operands. |
|
Decrement |
|
Print BasicBlock |
|
|
|
If EnableDebugBuffering is true, this flushes the debug stream with the banner displayed, the same way it is printed automatically on program termination. |
|
Print a Dwarf expression/ |
|
Print the expression in a format intended to be compact and useful to a user, but not perfectly unambiguous, or capable of representing every valid DWARF expression. Returns true if the expression was sucessfully printed. |
|
Print each character of the specified string, escaping it if it is not printable or if it is an escape char. |
|
Print each character of the specified string, escaping HTML special characters. |
|
Prints a jump table entry reference. |
|
Print out a name of an LLVM value without any prefixes. |
|
Function to print a loop's contents as LLVM's text IR assembly. |
|
printLowerCase ‐ Print each character as lowercase if it is uppercase. |
|
Prints a machine basic block reference. |
|
|
|
Print each character of |
|
Prints virtual and physical registers with or without a TRI instance. |
|
Create Printable object to print register classes or register banks on a |
|
Create Printable object to print register units on a |
|
Create Printable object to print virtual registers and physical registers on a |
|
Call |
|
Splits and processes shuffle mask depending on the number of input and output registers. The function does 2 main things: 1) splits the source/destination vectors into real registers; 2) do the mask analysis to identify which real registers are permuted. Then the function processes resulting registers mask using provided action items. If no input register is defined, |
|
Returns the product of all values in |
|
Return true if this function can prove that if Inst is executed and yields a poison value or undef bits, then that will trigger undefined behavior. |
|
Promote the given indirect call site to unconditionally call |
|
Promote the given indirect call site to conditionally call |
|
This is similar to |
|
Try to promote memory values to scalars by sinking stores out of the loop and moving loads to before the loop. We do this by looping over the stores in the loop, looking for stores to Must pointers which are loop invariant. It takes a set of must‐alias values, Loop exit blocks vector, loop exit blocks insertion point vector, PredIteratorCache, LoopInfo, DominatorTree, Loop, AliasSet information for all instructions of the loop and loop safety information as arguments. Diagnostics is emitted via |
|
Get the intersection (logical and) of all of the potential IR flags of each scalar operation (VL) that will be converted into a vector (I). If OpValue is non‐null, we only consider operations similar to OpValue when intersecting. Flag set: NSW, NUW (if IncludeWrapFlags is true), exact, and all of fast‐math. |
|
Specifically, let Kinds = [MD_tbaa, MD_alias_scope, MD_noalias, MD_fpmath,] MD_nontemporal, MD_access_group, MD_mmra]. For K in Kinds, we get the MDNode for K from each of the elements of VL, compute their "intersection" (i.e., the most generic metadata value that covers all of the individual values), and set I's metadata for M equal to the intersection value. |
|
Return true if |
|
Perform pruning using the supplied policy, returns true if pruning occurred, i.e. if Policy.Interval was expired. |
|
Returns the size of the |
|
Read the next (attribute, form) specification from an abbreviation declaration at |
|
|
|
Parse the specified bitcode buffer and merge the index into CombinedIndex. |
|
Try to match a bswap or bitreverse idiom. |
|
Recomputes the LTO cache key for a given key with an extra identifier. |
|
Recomputes dead and kill flags in |
|
Remap the operands of the debug records attached to |
|
Remaps instructions in |
|
Remove memory attributes that are incompatible with the instrumentation added by AddressSanitizer and HWAddressSanitizer. |
|
Remove all instructions from a basic block other than its terminator and any present EH pad instructions. Returns the number of instructions that have been removed. |
|
Removes global values from the llvm.used and llvm.compiler.used arrays. |
|
Remove all blocks that can not be reached from the function's entry. When |
|
Replace 'BB's terminator with one that does not have an unwind successor block. Rewrites |
|
Restores default bad alloc error handling behavior. |
|
Restores default error handling behaviour. |
|
Provide wrappers to std::remove_if which take ranges instead of having to pass begin/end explicitly. |
|
Perform in‐place global value handling on the given Module for exported local functions renamed and promoted for ThinLTO. |
|
|
|
Point debug users of |
|
Replace all uses of 'I' with 'SimpleV' and simplify the uses recursively. |
|
Replaces dbg.declare record when the address it describes is replaced with a new value. If Deref is true, an additional DW_OP_deref is prepended to the expression. If Offset is non‐zero, a constant displacement is added to the expression (between the optional Deref operations). Offset can be negative. |
|
Replaces multiple dbg.value records when the alloca it describes is replaced with a new value. If Offset is non‐zero, a constant displacement is added to the expression (after the mandatory Deref). Offset can be negative. New dbg.value records are inserted at the locations of the instructions they replace. |
|
|
|
|
|
Finds the same "relative pointer" pattern as described above, where the target is |
|
Return the SCEV corresponding to a pointer with the symbolic stride replaced with constant one, assuming the SCEV predicate associated with |
|
Provide wrappers to std::replace_copy which take ranges instead of having to pass begin/end explicitly. |
|
Provide wrappers to std::replace_copy_if which take ranges instead of having to pass begin/end explicitly. |
|
If ‐time‐passes has been specified, report the timings immediately and then reset the timers to zero. By default it uses the stream created by CreateInfoOutputFile(). |
|
|
|
|
|
Report an ISel error as a missed optimization remark to the LLVMContext's diagnostic stream. Set the FailedISel MachineFunction property. |
|
Report an ISel warning as a missed optimization remark to the LLVMContext's diagnostic stream. |
|
|
Reports a bad alloc error, calling any user defined bad alloc error handler. In contrast to the generic 'report_fatal_error' functions, this function might not terminate, e.g. the user defined error handler throws an exception, but it won't return. |
|
|
Find a common type that T1 and T2 convert to. Return 0 if no such type exists. |
|
Test if given that the input instruction is in the tail call position if the return type or any attributes of the function will inhibit tail call optimization. |
|
Return a reverse view over |
|
Reverse the bits in |
|
Return a range that conditionally reverses |
|
If the final value of any expressions that are recurrent in the loop can be computed, substitute the exit values from the loop into any instructions outside of the loop that use the final values of the current expressions. Return the number of loop exit values that have been replaced, and the corresponding phi node will be added to DeadInsts. |
|
right_justify ‐ add spaces before string so total output is |
|
Rotate |
|
Rotate |
|
Runs a fuzz target on the inputs specified on the command line. |
|
Runs Fn on a new stack of at least the given size. |
|
Perform index‐based whole program devirtualization on the |
|
Allocate and zero |
|
Allocate |
|
Reallocate |
|
|
|
Assuming the instruction |
|
Salvage only the records in |
|
Given an instruction |
|
Calls BuildAssumeFromInst and if the resulting llvm.assume is valid insert if before I. This is usually what need to be done to salvage the knowledge contained in the instruction I. The AssumptionCache must be provided if it is available or the cache may become silently be invalid. The DominatorTree can optionally be provided to enable cross‐block reasoning. This returns if a change was made. |
|
Returns: X * 2ˆExp for integral exponents. |
|
Scale an individual branch count. |
|
Scaling the profile data attached to 'I' using the ratio of S/T. |
|
Attempt to narrow/widen the |
|
Replaces all frame index virtual registers with physical registers. Uses the register scavenger to find an appropriate register to use. |
|
Construct the begin iterator for a deduced graph type T. |
|
Construct the end iterator for a deduced graph type T. |
|
|
|
|
|
Iterate over an integral type from Begin to End inclusive. Note: Begin and End values have to be within [INTMAX_MIN, INTMAX_MAX ‐ 1] for forward iteration (resp. [INTMAX_MIN + 1, INTMAX_MAX ‐ 1]for reverse iteration). |
|
Convert the internal value for a section kind to an on‐disk value. |
|
A helper function that sets an atomic operation's sync scope. |
|
Set branch weight metadata for |
|
Create a new |
|
Replaces the generic bug report message that is output upon a crash. |
|
setCurrentDebugType ‐ Set the current debug type, as if the ‐debug‐only=X option were specified. Note that DebugFlag also needs to be set to true for debug output to be produced. The debug type format is "type[:level]", where the level is an optional integer. If a level is provided, the debug output is enabled only if the user specified a level at least as high as the provided level. 0 is a special level that acts as an opt‐out for this specific debug type without affecting the other debug output. |
|
setCurrentDebugTypes ‐ Set the current debug type, as if the ‐debug‐only=X,Y,Z option were specified. Note that DebugFlag also needs to be set to true for debug output to be produced. |
|
Sets the list of debuginfod server URLs to query. This overrides the environment variable DEBUGINFOD_URLS. |
|
Specify that the branch weights for this terminator cannot be known at compile time. This should only be called by passes, and never as a default behavior in e.g. MDBuilder. The goal is to use this info to validate passes do not accidentally drop profile info, and this API is called in cases where the pass explicitly cannot provide that info. Defaulting it in would hide bugs where the pass forgets to transfer over or otherwise specify profile info. Use |
|
Like setExplicitlyUnknownBranchWeights(...), but only sets unknown branch weights in the new instruction if the parent function of the original instruction has an entry count. This is to not confuse users by injecting profile data into non‐profiled functions. If |
|
Analogous to setExplicitlyUnknownBranchWeights, but for functions and their entry counts. |
|
Variant of |
|
Set the inline‐remark attribute. |
|
Sets the KCFI type for the function. Used for compiler‐generated functions that are indirectly called in instrumented code. |
|
A helper function that set the alignment of load or store instruction. |
|
Set |
|
Set branch weight metadata for the latch of |
|
Sets the unwind edge of an instruction to a particular successor. |
|
Given a branch we know is widenable (defined per Analysis/GuardUtils.h), set it's condition such that (only) 'Cond' is known to hold on the taken path and that the branch remains widenable after transform. |
|
set_difference(A, B) ‐ Return A ‐ B |
|
set_intersect(A, B) ‐ Compute A := A ˆ B Identical to set_intersection, except that it works on set<>'s and is nicer to use. Functionally, this iterates through S1, removing elements that are not contained in S2. |
|
set_intersection(A, B) ‐ Return A ˆ B |
|
Build a new set containing the elements present in both |
|
set_intersects(A, B) ‐ Return true iff A ˆ B is non empty |
|
set_is_subset(A, B) ‐ Return true iff A in B |
|
|
|
Set the name of the current thread. Setting a thread's name can be helpful for enabling useful diagnostics under a debugger or when logging. The level of support for setting a thread's name varies wildly across operating systems, and we only make a best effort to perform the operation on supported platforms. No indication of success or failure is returned. |
|
Set the calling thread's priority to |
|
set_union(A, B) ‐ Compute A := A u B, return whether A changed. |
|
|
|
Return the cost only if the inliner should attempt to inline at the given CallSite. If we return the cost, we will emit an optimisation remark later using that cost, so we won't do so from this function. Return std::nullopt if inlining should not be attempted. |
|
|
|
Return true if containers of |
|
Randomly shuffle the elements in []`first,` |
|
Given operands for a AShr, fold the result or return nulll. |
|
Given operands for an Add, fold the result or return null. |
|
Given operands for an And, fold the result or return null. |
|
|
|
Given a callsite, callee, and arguments, fold the result or return null. |
|
Given operands for a CastInst, fold the result or return null. |
|
Given operands for a CmpInst, fold the result or return null. |
|
Given a constrained FP intrinsic call, tries to compute its simplified version. Returns a simplified result or null. |
|
Given operands for an ExtractElementInst, fold the result or return null. |
|
Given operands for an ExtractValueInst, fold the result or return null. |
|
Given operands for an FAdd, fold the result or return null. |
|
Given operands for an FCmpInst, fold the result or return null. |
|
Given operands for an FDiv, fold the result or return null. |
|
Given operands for the multiplication of a FMA, fold the result or return null. In contrast to simplifyFMulInst, this function will not perform simplifications whose unrounded results differ when rounded to the argument type. |
|
Given operands for an FMul, fold the result or return null. |
|
Given operand for an FNeg, fold the result or return null. |
|
Given operands for an FRem, fold the result or return null. |
|
Given operands for an FSub, fold the result or return null. |
|
Given an operand for a Freeze, see if we can fold the result. If not, this returns null. |
|
Given operands for a GetElementPtrInst, fold the result or return null. |
|
Given operands for an ICmpInst, fold the result or return null. |
|
Given operands for an InsertElement, fold the result or return null. |
|
Given operands for an InsertValueInst, fold the result or return null. |
|
See if we can compute a simplified version of this instruction. If not, return null. |
|
Like |
|
Given operands for an intrinsic, fold the result or return null. Context Function is passed as |
|
Given operands for a LShr, fold the result or return null. |
|
Given a load instruction and its pointer operand, fold the result or return null. |
|
Simplify each loop in a loop nest recursively. |
|
SimplifyLoopIVs ‐ Simplify users of induction variables within this loop. This does not actually change or add IVs. |
|
Given operands for a Mul, fold the result or return null. |
|
Given operands for an Or, fold the result or return null. |
|
Given operands for an SDiv, fold the result or return null. |
|
Given operands for an SRem, fold the result or return null. |
|
Given operands for a SelectInst, fold the result or return null. |
|
Given operands for a Shl, fold the result or return null. |
|
Given operands for a ShuffleVectorInst, fold the result or return null. See class ShuffleVectorInst for a description of the mask representation. |
|
Given operands for a Sub, fold the result or return null. |
|
Given operands for a UDiv, fold the result or return null. |
|
Given operands for a URem, fold the result or return null. |
|
|
|
simplifyUsersOfIV ‐ Simplify instructions that use this induction variable by using ScalarEvolution to analyze the IV's recurrence. Returns a pair where the first entry indicates that the function makes changes and the second entry indicates that it introduced new opportunities for loop unswitching. |
|
See if V simplifies when its operand Op is replaced with RepOp. If not, return null. AllowRefinement specifies whether the simplification can be a refinement (e.g. 0 instead of poison), or whether it needs to be strictly identical. Op and RepOp can be assumed to not be poison when determining refinement. |
|
Given operands for an Xor, fold the result or return null. |
|
Walk the specified region of the CFG (defined by all blocks dominated by the specified block, and that are in the current loop) in reverse depth first order w.r.t the DominatorTree. This allows us to visit uses before definitions, allowing us to sink a loop body in one pass without iteration. Takes DomTreeNode, AAResults, LoopInfo, DominatorTree, TargetLibraryInfo, Loop, AliasSet information for all instructions of the loop and loop safety information as arguments. Diagnostics is emitted via |
|
Call sinkRegion on loops contained within the specified loop in order from innermost to outermost. |
|
Get the size of a range. This is a wrapper function around std::distance which is only enabled when the operation is O(1). |
|
Decrement |
|
Increment |
|
Advance |
|
|
|
Attempt to sort the pointers in |
|
Returns text representation of the given rounding mode. |
|
|
|
|
|
|
|
Like splitBB, but reuses the current block's name for the new name. |
|
Split the specified block at the specified instruction |
|
Splits the given module |
|
|
|
Hash |
|
|
|
Sets the response to stream the file at FilePath, if available, and otherwise an HTTP 404 error response. |
|
Convert a KCFI hash algorithm enum to its string representation. |
|
Strip out all of the metadata and debug info inserted by debugify. If no llvm.debugify module‐level named metadata is present, this is a no‐op. Returns true if any change was made. |
|
Downgrade the debug info in a module to contain only line table information. |
|
Returns the inner value X if the expression has the form f(X) where f(X) == 0 if and only if X == 0, otherwise returns nullptr. |
|
Utility function that returns true if the provided LogicalResult corresponds to a success value. |
|
|
|
Returns the sum of all values in |
|
Exchange owned storage and hash state between |
|
For debugging. |
|
Based on the information recorded in the summaries during global summary‐based analysis: 1. Resolve prevailing symbol linkages and constrain visibility (CanAutoHide and consider visibility from other definitions for ELF) in |
|
Update the linkages in the given |
|
Internalize |
|
Propagate function attributes for function summaries along the index's callgraph during thinlink |
|
Resolve linkage for prevailing symbols in the |
|
Manually begin a time section, with the given |
|
Manually begin a time section, with the given |
|
Cleanup the time trace profiler, if it was initialized. |
|
Is the time trace profiler enabled, i.e. initialized? |
|
Manually end the last time section. |
|
Finish a time trace profiler running on a worker thread. |
|
Initialize the time trace profiler. This sets up the global |
|
|
|
|
|
String used by LLVM IR to represent atomic ordering. |
|
Returns the corresponding lowercase character if |
|
A helper for converting structs of vector types to structs of scalar types. Note: Only unpacked literal struct types are supported. |
|
A helper for converting vectorized types to scalarized (non‐vector) types. For vector types, this is equivalent to calling .getScalarType(). For struct types, this returns a new struct where each element type has been converted to a scalar type. Note: Only unpacked literal struct types are supported. |
|
|
|
|
|
Given an array of c‐style strings terminated by a null pointer, construct a vector of StringRefs representing the same strings without the terminating null string. |
|
Like toString(), but does not consume the error. This can be used to print a warning while retaining the original error object. |
|
Returns the corresponding uppercase character if |
|
A helper function for converting Scalar types to vector types. If the incoming type is void, we return void. If the EC represents a scalar, we return the scalar type. |
|
A helper for converting structs of scalar types to structs of vector types. Note: ‐ If |
|
A helper for converting to vectorized types. For scalar types, this is equivalent to calling |
|
|
|
|
|
Convert the string |
|
Returns underlying integer value of an enum. Backport of C++23 std::to_underlying. |
|
|
|
|
|
Wrapper function around std::transform to apply a function to a range and store the result elsewhere. |
|
Apply |
|
If the specified pointer points to an object that we control, try to modify the object's alignment to PrefAlign. Returns a minimum known alignment of the value after the operation, which may be lower than PrefAlign. |
|
Convert hexadecimal string |
|
Store the binary representation of the two provided values, |
|
Try to promote (devirtualize) a virtual call on an Alloca. Return true on success. |
|
|
|
Copy range |
|
|
|
|
|
|
|
Compute the union of two access‐group lists. |
|
Return the test mask which returns true if the value could have the same set of classes, but with a different sign. |
|
Conversion from LLVMErrorRef to Error for C error bindings. |
|
Helper to update the call graph after running a CGSCC pass. |
|
Helper to update the call graph after running a function pass. |
|
Find all globals in |
|
Update a DBG_VALUE whose value has been spilled to FrameIndex. Useful when modifying an instruction in place while iterating over a basic block. |
|
Call after cross‐module importing to update the recorded single impl devirt target names for any locals that were exported. |
|
Update call edges for indirect calls to local functions added from SamplePGO when needed. Normally this is done during computeDeadSymbolsAndUpdateIndirectCalls, but can be called standalone when that is not called (e.g. during testing). |
|
Update the debug locations contained within the MD_loop metadata attached to the instruction |
|
Replaces all uses of OldPred with the NewPred block in all PHINodes in a block. |
|
Updates profile information by adjusting the entry count by adding EntryDelta then scaling callsite information by the new count divided by the old count. VMap is used during inlinng to also update the new clone |
|
Upgrade the loop attachment metadata node. |
|
|
|
Convert |
|
Convert an unsigned integer to a decimal string. |
|
Check that each subscript in |
|
Check a function for errors, useful for use when debugging a pass. |
|
Check a module for errors. |
|
Run the safepoint verifier over a single function. Crashes on failure. |
|
Predicate and clone the given call site. |
|
|
|
|
|
Use SCEVTraversal to visit all nodes in the given expression tree. |
|
Visit all the ErrorInfo(s) contained in E by passing them to the respective handler, without consuming the error. |
|
|
|
Given a branch we know is widenable (defined per Analysis/GuardUtils.h), widen it such that condition 'NewCond' is also known to hold on the taken path. Branch remains widenable after transform. |
|
Returns true, if no instruction between |
|
Return true if the result produced by the instruction would have no side effects if it was not used. This is equivalent to checking whether isInstructionTriviallyDead would be true if the use count was 0. |
|
Conversion from Error to LLVMErrorRef for C error bindings. |
|
Write the specified module summary index to the given raw output stream, where it will be written in a new bitcode block. This is used when writing the combined index file for ThinLTO. When writing a subset of the index for a distributed backend, provide the |
|
Fuzzer friendly interface for the llvm bitcode printer. |
|
Write the specified thin link bitcode file (i.e., the minimized bitcode file) to the given raw output stream, where it will be written in a new bitcode block. The thin link bitcode file is used for thin link, and it only contains the necessary information for thin link. |
|
This helper creates an output stream and then passes it to |
|
Write floating‐point |
|
Write hex value |
|
|
|
|
|
|
|
zip iterator for two or more iteratable types. Iteration continues until the end of the shortest iteratee is reached. |
|
zip iterator that assumes that all iteratees have the same length. In builds with assertions on, this assumption is checked before the iteration starts. |
|
zip iterator that, for the sake of efficiency, assumes the first iteratee to be the shortest. Iteration continues until the end of the first iteratee is reached. In builds with assertions on, we check that the assumption about the first iteratee being the shortest holds. |
|
Iterate over two or more iterators at the same time. Iteration continues until all iterators reach the end. The std::optional only contains a value if the iterator has not reached the end. |
|
Left shift operators |
|
Equality operators |
|
Inequality operators |
|
Less‐than operators |
|
Less‐than‐or‐equal operators |
|
Greater‐than operators |
|
Greater‐than‐or‐equal operators |
Variables
Name |
Description |
The key we use for assumption attributes. |
|
AtomicExpandID ‐‐ Lowers atomic operations in terms of either cmpxchg load‐linked/store‐conditional loops. |
|
Number of bits needed to represent the largest enumerator of bitmask enum |
|
BranchFolding ‐ This pass performs machine code CFG based optimizations to delete branches to branches, eliminate branches to successor blocks (creating fall throughs), and eliminating branches over branches. |
|
BranchRelaxation ‐ This pass replaces branches that need to jump further than is supported by a branch instruction. |
|
Function object that applies |
|
Function object that applies |
|
DeadMachineInstructionElim ‐ This pass removes dead machine instructions. |
|
This boolean is set to true if the '‐debug' command line option is specified. This should probably not be referenced directly, instead, use the DEBUG macro below. |
|
The default number of maximum instructions to scan in the block, used by FindAvailableLoadedValue(). |
|
The default allocation token mode. |
|
This pass adds dead/undef flags after analyzing subregister lanes. |
|
Function object that applies |
|
Function object that applies |
|
EarlyIfConverter ‐ This pass performs if‐conversion on SSA form by inserting cmov instructions. |
|
EarlyIfPredicator ‐ This pass performs if‐conversion on SSA form by predicating if/else block and insert select at the join point. |
|
This pass performs loop invariant code motion on machine instructions. This variant works before register allocation. |
|
Duplicate blocks with unconditional branches into tails of their predecessors. Variant that works before register allocation. |
|
EdgeBundles analysis ‐ Bundle machine CFG edges. |
|
Controls emitting large character arrays as strings or character arrays. Typically set to false when building with MSVC. |
|
EnableDebugBuffering ‐ This defaults to false. If true, the debug stream will install signal handlers to dump any buffered debug output. It allows clients to selectively allow the debug stream to install signal handlers if they are certain there will be no conflict. |
|
Enable global value internalization in LTO. |
|
ExpandPostRAPseudos ‐ This pass expands pseudo instructions after register allocation. |
|
This pass inserts FEntry calls |
|
This pass expands pseudo‐instructions, reserves registers and adjusts machine frame information. |
|
The pass fixups statepoint machine instruction to replace usage of caller saved registers with stack slots. |
|
This pass lays out funclets contiguously. |
|
GCLowering Pass ‐ Used by gc.root to perform its default lowering operations. |
|
GCMachineCodeAnalysis ‐ Target‐independent pass to mark safe points in machine code. Must be added very late during code generation, just prior to output, and importantly after all CFG transformations (such as branch folding). |
|
Indicate whether a GraphTraits<NodeT>::getNumber() is supported. |
|
IfConverter ‐ This pass performs machine code if conversion. |
|
Tag in operand bundle indicating that this bundle should be ignored. |
|
ImplicitNullChecks ‐ This pass folds null pointer checks into nearby memory operations. |
|
True if |
|
Function object wrapper for the |
|
Function object wrapper for the |
|
Profile‐based loop metadata that should be accessed only by using |
|
@{ Metadata attribute names |
|
LiveDebugValues pass |
|
LiveIntervals ‐ This analysis keeps track of the live ranges of virtual and physical registers. |
|
LiveRangeShrink pass. Move instruction close to its definition to shrink the definition's live range. |
|
LiveStacks pass. An analysis keeping track of the liveness of stack slots. |
|
LiveVariables pass ‐ This pass computes the set of blocks in which each variable is life and sets machine operand kill flags. |
|
LocalStackSlotAllocation ‐ This pass assigns local frame indices to stack slots relative to one another and allocates base registers to access them when it is estimated by the target to be out of range of normal frame pointer or stack pointer index addressing. |
|
This pass adds flow sensitive discriminators. |
|
MIRCanonicalizer ‐ This pass canonicalizes MIR by renaming vregs according to the semantics of the instruction as well as hoists code. |
|
MIRPrintingPass ‐ this pass prints out the LLVM IR using the MIR serialization format. |
|
This pass reads flow sensitive profile. |
|
MachineBlockPlacement ‐ This pass places basic blocks based on branch probabilities. |
|
MachineBlockPlacementStats ‐ This pass collects statistics about the basic block placement using branch probabilities and block frequency information. |
|
MachineCFGPrinter pass. |
|
MachineCSE ‐ This pass performs global CSE on machine instructions. |
|
This pass performs instruction combining using trace metrics to estimate critical‐path and resource depth. |
|
MachineCopyPropagation ‐ This pass performs copy propagation on machine instructions. |
|
MachineDominanaceFrontier ‐ This pass is a machine dominators analysis. |
|
MachineDominators ‐ This pass is a machine dominators analysis pass. |
|
MachineFunctionPrinterPass ‐ This pass prints out MachineInstr's. |
|
This pass performs loop invariant code motion on machine instructions. |
|
MachineLateInstrsCleanup ‐ This pass removes redundant identical instructions after register allocation and rematerialization. |
|
MachineLoopInfo ‐ This pass is a loop analysis pass. |
|
This pass performs software pipelining on machine instructions. |
|
MachineRegionInfo ‐ This pass computes SESE regions for machine functions. |
|
MachineScheduler ‐ This pass schedules machine instructions. |
|
MachineSinking ‐ This pass performs sinking on machine instructions. |
|
MachineTraceMetrics ‐ This pass computes critical path and CPU resource usage in an ensemble of traces. |
|
The value passed to the line option that defines the maximal initialization chain length. |
|
The max limit of the search depth in DecomposeGEPExpression() and getUnderlyingObject(). |
|
Magic number in the value profile metadata showing a target has been promoted for the instruction and shouldn't be promoted again. |
|
OptimizePHIs ‐ This pass optimizes machine instruction PHIs to take advantage of opportunities created during DAG legalization. |
|
PHIElimination ‐ This pass eliminates machine instruction PHI nodes by inserting copy instructions. This destroys SSA information, but is the desired input for some register allocators. This pass is "required" by these register allocator like this: AU.addRequiredID(PHIEliminationID); |
|
This pass implements the "patchable‐function" attribute. |
|
PeepholeOptimizer ‐ This pass performs peephole optimizations ‐ like extension and comparison eliminations. |
|
PostMachineScheduler ‐ This pass schedules machine instructions postRA. |
|
PostRAHazardRecognizer ‐ This pass runs the post‐ra hazard recognizer. |
|
This pass perform post‐ra machine sink for COPY instructions. |
|
PostRAScheduler ‐ This pass performs post register allocation scheduling. |
|
Common option used by multiple tools to print pipeline passes |
|
ProcessImpicitDefs pass ‐ This pass removes IMPLICIT_DEFs. |
|
PrologEpilogCodeInserter ‐ This pass inserts prolog and epilog code, and eliminates abstract frame references. |
|
Basic register allocator. |
|
Greedy register allocator. |
|
RegisterCoalescer ‐ This pass merges live ranges to eliminate copies. |
|
RemoveLoadsIntoFakeUses pass. |
|
RemoveRedundantDebugValues pass. |
|
This pass detects subregister lanes in a virtual register that are used independently of other lanes and splits them into separate virtual registers. |
|
This function is used to do simplification of a CFG. For example, it adjusts branches to branches to eliminate the extra hop, it eliminates unreachable basic blocks, and does other peephole optimization of the CFG. It returns true if a modification was made, possibly deleting the basic block that was pointed to. LoopHeaders is an optional input parameter providing the set of loop headers that SimplifyCFG should not eliminate. |
|
ShadowStackGCLowering ‐ Implements the custom lowering mechanism used by the shadow stack GC. |
|
ShrinkWrap pass. Look for the best place to insert save and restore |
|
SpillPlacement analysis. Suggest optimal placement of spill code between basic blocks. |
|
StackSlotColoring ‐ This pass performs stack coloring and merging. It merges disjoint allocas to reduce the stack size. |
|
StackFramePrinter ‐ This pass prints the stack frame layout and variable mappings. |
|
StackMapLiveness ‐ This pass analyses the register live‐out set of stackmap/patchpoint intrinsics and attaches the calculated information to the intrinsic for later emission to the StackMap. |
|
StackSlotColoring ‐ This pass performs stack slot coloring. |
|
Function objects corresponding to the Cast types defined above. |
|
TailDuplicate ‐ Duplicate blocks with unconditional branches into tails of their predecessors. |
|
If the user specifies the ‐time‐passes argument on an LLVM tool command line then the value of this boolean will be true, otherwise false. This is the storage for the ‐time‐passes option. |
|
If TimePassesPerRun is true, there would be one line of report for each pass invocation. If TimePassesPerRun is false, there would be only one line of report for each pass (even there are more than one pass objects). (For new pass manager only) |
|
TwoAddressInstruction ‐ This pass reduces two‐address instructions to use two operands. This destroys SSA information but it is desired by register allocators. |
|
UnpackMachineBundles ‐ This pass unpack machine instruction bundles. |
|
UnreachableMachineBlockElimination ‐ This pass removes unreachable machine basic blocks. |
|
Enables verification of dominator trees. |
|
Enable verification of loop info. |
|
Enables verification of MemorySSA. |
|
VirtRegRewriter pass. Rewrite virtual registers to physical registers as assigned in VirtRegMap. |
|
This pass inserts the XRay instrumentation sleds if they are supported by the target platform. |
|
True if |
|
|
Tag value passed to enum_seq helpers to force iteration on unsafe enums. |
Tag value used to select range‐based constructors. |
|
Detects when type |
|
Use this rather than HUGE_VALF; the latter causes warnings on MSVC. |
|
Detects when type |
|
Using Declarations
Name |
Description |
Bring bitmask enum any‐bits‐set test into this namespace for ADL. |
|
Bring bitmask enum logical‐not into this namespace for ADL. |
|
Bring bitmask enum bitwise AND into this namespace for ADL. |
|
Bring bitmask enum in‐place AND into this namespace for ADL. |
|
Bring bitmask enum left‐shift into this namespace for ADL. |
|
Bring bitmask enum in‐place left‐shift into this namespace for ADL. |
|
Bring bitmask enum right‐shift into this namespace for ADL. |
|
Bring bitmask enum in‐place right‐shift into this namespace for ADL. |
|
Bring bitmask enum bitwise XOR into this namespace for ADL. |
|
Bring bitmask enum in‐place XOR into this namespace for ADL. |
|
Bring bitmask enum bitwise OR into this namespace for ADL. |
|
Bring bitmask enum in‐place OR into this namespace for ADL. |
|
Bring bitmask enum bitwise NOT into this namespace for ADL. |
Using Namespace Directives
Name |
Created with MrDocs