LLVM 22.0.0git
llvm::DataLayout Class Reference

A parsed version of the target data layout string in and methods for querying it. More...

#include "llvm/IR/DataLayout.h"

Classes

struct  PointerSpec
 Pointer type specification. More...
struct  PrimitiveSpec
 Primitive type specification. More...

Public Types

enum class  FunctionPtrAlignType { Independent , MultipleOfFunctionAlign }

Public Member Functions

LLVM_ABI DataLayout ()
 Constructs a DataLayout with default values.
LLVM_ABI DataLayout (StringRef LayoutString)
 Constructs a DataLayout from a specification string.
 DataLayout (const DataLayout &DL)
LLVM_ABI ~DataLayout ()
LLVM_ABI DataLayoutoperator= (const DataLayout &Other)
LLVM_ABI bool operator== (const DataLayout &Other) const
bool operator!= (const DataLayout &Other) const
bool isLittleEndian () const
 Layout endianness...
bool isBigEndian () const
const std::string & getStringRepresentation () const
 Returns the string representation of the DataLayout.
bool isDefault () const
 Test if the DataLayout was constructed from an empty string.
bool isLegalInteger (uint64_t Width) const
 Returns true if the specified type is known to be a native integer type supported by the CPU.
bool isIllegalInteger (uint64_t Width) const
MaybeAlign getStackAlignment () const
 Returns the natural stack alignment, or MaybeAlign() if one wasn't specified.
unsigned getAllocaAddrSpace () const
PointerTypegetAllocaPtrType (LLVMContext &Ctx) const
MaybeAlign getFunctionPtrAlign () const
 Returns the alignment of function pointers, which may or may not be related to the alignment of functions.
FunctionPtrAlignType getFunctionPtrAlignType () const
 Return the type of function pointer alignment.
unsigned getProgramAddressSpace () const
unsigned getDefaultGlobalsAddressSpace () const
bool hasMicrosoftFastStdCallMangling () const
bool doNotMangleLeadingQuestionMark () const
 Returns true if symbols with leading question marks should not receive IR mangling.
bool hasLinkerPrivateGlobalPrefix () const
StringRef getLinkerPrivateGlobalPrefix () const
char getGlobalPrefix () const
StringRef getPrivateGlobalPrefix () const
bool fitsInLegalInteger (unsigned Width) const
 Returns true if the specified type fits in a native integer type supported by the CPU.
LLVM_ABI Align getPointerABIAlignment (unsigned AS) const
 Layout pointer alignment.
LLVM_ABI Align getPointerPrefAlignment (unsigned AS=0) const
 Return target's alignment for stack-based pointers FIXME: The defaults need to be removed once all of the backends/clients are updated.
LLVM_ABI unsigned getPointerSize (unsigned AS=0) const
 The pointer representation size in bytes, rounded up to a whole number of bytes.
LLVM_ABI unsigned getIndexSize (unsigned AS) const
 The index size in bytes used for address calculation, rounded up to a whole number of bytes.
unsigned getAddressSize (unsigned AS) const
 The integral size of a pointer in a given address space in bytes, which is defined to be the same as getIndexSize().
SmallVector< unsigned, 8 > getNonIntegralAddressSpaces () const
 Return the address spaces containing non-integral pointers.
bool isNonIntegralAddressSpace (unsigned AddrSpace) const
bool isNonIntegralPointerType (PointerType *PT) const
bool isNonIntegralPointerType (Type *Ty) const
unsigned getPointerSizeInBits (unsigned AS=0) const
 The size in bits of the pointer representation in a given address space.
unsigned getIndexSizeInBits (unsigned AS) const
 The size in bits of indices used for address calculation in getelementptr and for addresses in the given AS.
unsigned getAddressSizeInBits (unsigned AS) const
 The size in bits of an address in for the given AS.
LLVM_ABI unsigned getPointerTypeSizeInBits (Type *) const
 The pointer representation size in bits for this type.
LLVM_ABI unsigned getIndexTypeSizeInBits (Type *Ty) const
 The size in bits of the index used in GEP calculation for this type.
unsigned getAddressSizeInBits (Type *Ty) const
 The size in bits of an address for this type.
unsigned getPointerTypeSize (Type *Ty) const
TypeSize getTypeSizeInBits (Type *Ty) const
 Size examples:
TypeSize getTypeStoreSize (Type *Ty) const
 Returns the maximum number of bytes that may be overwritten by storing the specified type.
TypeSize getTypeStoreSizeInBits (Type *Ty) const
 Returns the maximum number of bits that may be overwritten by storing the specified type; always a multiple of 8.
bool typeSizeEqualsStoreSize (Type *Ty) const
 Returns true if no extra padding bits are needed when storing the specified type.
TypeSize getTypeAllocSize (Type *Ty) const
 Returns the offset in bytes between successive objects of the specified type, including alignment padding.
TypeSize getTypeAllocSizeInBits (Type *Ty) const
 Returns the offset in bits between successive objects of the specified type, including alignment padding; always a multiple of 8.
LLVM_ABI Align getABITypeAlign (Type *Ty) const
 Returns the minimum ABI-required alignment for the specified type.
Align getValueOrABITypeAlignment (MaybeAlign Alignment, Type *Ty) const
 Helper function to return Alignment if it's set or the result of getABITypeAlign(Ty), in any case the result is a valid alignment.
Align getABIIntegerTypeAlignment (unsigned BitWidth) const
 Returns the minimum ABI-required alignment for an integer type of the specified bitwidth.
LLVM_ABI Align getPrefTypeAlign (Type *Ty) const
 Returns the preferred stack/global alignment for the specified type.
LLVM_ABI IntegerTypegetIntPtrType (LLVMContext &C, unsigned AddressSpace=0) const
 Returns an integer type with size at least as big as that of a pointer in the given address space.
LLVM_ABI TypegetIntPtrType (Type *) const
 Returns an integer (vector of integer) type with size at least as big as that of a pointer of the given pointer (vector of pointer) type.
LLVM_ABI TypegetSmallestLegalIntType (LLVMContext &C, unsigned Width=0) const
 Returns the smallest integer type with size at least as big as Width bits.
TypegetLargestLegalIntType (LLVMContext &C) const
 Returns the largest legal integer type, or null if none are set.
LLVM_ABI unsigned getLargestLegalIntTypeSizeInBits () const
 Returns the size of largest legal integer type size, or 0 if none are set.
LLVM_ABI IntegerTypegetIndexType (LLVMContext &C, unsigned AddressSpace) const
 Returns the type of a GEP index in AddressSpace.
IntegerTypegetAddressType (LLVMContext &C, unsigned AddressSpace) const
 Returns the type of an address in AddressSpace.
LLVM_ABI TypegetIndexType (Type *PtrTy) const
 Returns the type of a GEP index.
TypegetAddressType (Type *PtrTy) const
 Returns the type of an address in AddressSpace.
LLVM_ABI int64_t getIndexedOffsetInType (Type *ElemTy, ArrayRef< Value * > Indices) const
 Returns the offset from the beginning of the type for the specified indices.
LLVM_ABI SmallVector< APIntgetGEPIndicesForOffset (Type *&ElemTy, APInt &Offset) const
 Get GEP indices to access Offset inside ElemTy.
LLVM_ABI std::optional< APIntgetGEPIndexForOffset (Type *&ElemTy, APInt &Offset) const
 Get single GEP index to access Offset inside ElemTy.
LLVM_ABI const StructLayoutgetStructLayout (StructType *Ty) const
 Returns a StructLayout object, indicating the alignment of the struct, its size, and the offsets of its fields.
LLVM_ABI Align getPreferredAlign (const GlobalVariable *GV) const
 Returns the preferred alignment of the specified global.

Static Public Member Functions

static LLVM_ABI Expected< DataLayoutparse (StringRef LayoutString)
 Parse a data layout string and return the layout.
static LLVM_ABI const chargetManglingComponent (const Triple &T)

Detailed Description

A parsed version of the target data layout string in and methods for querying it.

The target data layout string is specified by the target - a frontend generating LLVM IR is required to generate the right target data for the target being codegen'd to.

Definition at line 63 of file DataLayout.h.

Member Enumeration Documentation

◆ FunctionPtrAlignType

Enumerator
Independent 

The function pointer alignment is independent of the function alignment.

MultipleOfFunctionAlign 

The function pointer alignment is a multiple of the function alignment.

Definition at line 89 of file DataLayout.h.

Constructor & Destructor Documentation

◆ DataLayout() [1/3]

DataLayout::DataLayout ( )

Constructs a DataLayout with default values.

Definition at line 212 of file DataLayout.cpp.

References DefaultFloatSpecs, DefaultIntSpecs, DefaultPointerSpecs, and DefaultVectorSpecs.

Referenced by DataLayout(), DataLayout(), operator!=(), operator=(), operator==(), and parse().

◆ DataLayout() [2/3]

DataLayout::DataLayout ( StringRef LayoutString)
explicit

Constructs a DataLayout from a specification string.

WARNING: Aborts execution if the string is malformed. Use parse() instead.

Definition at line 218 of file DataLayout.cpp.

References DataLayout(), and llvm::report_fatal_error().

◆ DataLayout() [3/3]

llvm::DataLayout::DataLayout ( const DataLayout & DL)
inline

Definition at line 184 of file DataLayout.h.

References DataLayout(), and DL.

◆ ~DataLayout()

DataLayout::~DataLayout ( )

Definition at line 710 of file DataLayout.cpp.

Member Function Documentation

◆ doNotMangleLeadingQuestionMark()

bool llvm::DataLayout::doNotMangleLeadingQuestionMark ( ) const
inline

Returns true if symbols with leading question marks should not receive IR mangling.

True for Windows mangling modes.

Definition at line 258 of file DataLayout.h.

◆ fitsInLegalInteger()

bool llvm::DataLayout::fitsInLegalInteger ( unsigned Width) const
inline

Returns true if the specified type fits in a native integer type supported by the CPU.

For example, if the CPU only supports i32 as a native integer type, then i27 fits in a legal integer type but i45 does not.

Definition at line 313 of file DataLayout.h.

◆ getABIIntegerTypeAlignment()

Align llvm::DataLayout::getABIIntegerTypeAlignment ( unsigned BitWidth) const
inline

Returns the minimum ABI-required alignment for an integer type of the specified bitwidth.

Definition at line 530 of file DataLayout.h.

References llvm::BitWidth.

Referenced by llvm::MachineJumpTableInfo::getEntryAlignment().

◆ getABITypeAlign()

◆ getAddressSize()

unsigned llvm::DataLayout::getAddressSize ( unsigned AS) const
inline

The integral size of a pointer in a given address space in bytes, which is defined to be the same as getIndexSize().

This exists as a separate function to make it clearer when reading code that the size of an address is being requested. While targets exist where index size and the underlying address width are not identical (e.g. AMDGPU fat pointers with 48-bit addresses and 32-bit offsets indexing), there is currently no need to differentiate these properties in LLVM.

See also
DataLayout::getIndexSize
DataLayout::getAddressSizeInBits

Definition at line 358 of file DataLayout.h.

References getIndexSize().

◆ getAddressSizeInBits() [1/2]

unsigned llvm::DataLayout::getAddressSizeInBits ( Type * Ty) const
inline

The size in bits of an address for this type.

This is defined to return the same value as getIndexTypeSizeInBits(), but separate functions exist for code clarity.

Definition at line 427 of file DataLayout.h.

References getIndexTypeSizeInBits().

◆ getAddressSizeInBits() [2/2]

unsigned llvm::DataLayout::getAddressSizeInBits ( unsigned AS) const
inline

The size in bits of an address in for the given AS.

This is defined to return the same value as getIndexSizeInBits() since there is currently no target that requires these two properties to have different values. See getIndexSize() for more information.

See also
DataLayout::getIndexSizeInBits()

Definition at line 407 of file DataLayout.h.

References getIndexSizeInBits().

◆ getAddressType() [1/2]

IntegerType * llvm::DataLayout::getAddressType ( LLVMContext & C,
unsigned AddressSpace ) const
inline

Returns the type of an address in AddressSpace.

Definition at line 570 of file DataLayout.h.

References llvm::CallingConv::C, and getIndexType().

◆ getAddressType() [2/2]

Type * llvm::DataLayout::getAddressType ( Type * PtrTy) const
inline

Returns the type of an address in AddressSpace.

Definition at line 579 of file DataLayout.h.

References getIndexType().

◆ getAllocaAddrSpace()

unsigned llvm::DataLayout::getAllocaAddrSpace ( ) const
inline

◆ getAllocaPtrType()

PointerType * llvm::DataLayout::getAllocaPtrType ( LLVMContext & Ctx) const
inline

Definition at line 232 of file DataLayout.h.

References llvm::PointerType::get().

◆ getDefaultGlobalsAddressSpace()

unsigned llvm::DataLayout::getDefaultGlobalsAddressSpace ( ) const
inline

Definition at line 248 of file DataLayout.h.

◆ getFunctionPtrAlign()

MaybeAlign llvm::DataLayout::getFunctionPtrAlign ( ) const
inline

Returns the alignment of function pointers, which may or may not be related to the alignment of functions.

See also
getFunctionPtrAlignType

Definition at line 239 of file DataLayout.h.

◆ getFunctionPtrAlignType()

FunctionPtrAlignType llvm::DataLayout::getFunctionPtrAlignType ( ) const
inline

Return the type of function pointer alignment.

See also
getFunctionPtrAlign

Definition at line 243 of file DataLayout.h.

◆ getGEPIndexForOffset()

std::optional< APInt > DataLayout::getGEPIndexForOffset ( Type *& ElemTy,
APInt & Offset ) const

Get single GEP index to access Offset inside ElemTy.

Returns std::nullopt if index cannot be computed, e.g. because the type is not an aggregate. ElemTy is updated to be the result element type and Offset to be the residual offset.

Definition at line 983 of file DataLayout.cpp.

References llvm::dyn_cast(), llvm::StructLayout::getElementContainingOffset(), getElementIndex(), llvm::StructLayout::getElementOffset(), llvm::StructLayout::getSizeInBytes(), getStructLayout(), getTypeAllocSize(), llvm::isa(), and llvm::Offset.

Referenced by getGEPIndicesForOffset().

◆ getGEPIndicesForOffset()

SmallVector< APInt > DataLayout::getGEPIndicesForOffset ( Type *& ElemTy,
APInt & Offset ) const

Get GEP indices to access Offset inside ElemTy.

ElemTy is updated to be the result element type and Offset to be the residual offset.

Definition at line 1013 of file DataLayout.cpp.

References assert(), getElementIndex(), getGEPIndexForOffset(), getTypeAllocSize(), llvm::Offset, and llvm::SmallVectorTemplateBase< T, bool >::push_back().

◆ getGlobalPrefix()

char llvm::DataLayout::getGlobalPrefix ( ) const
inline

Definition at line 270 of file DataLayout.h.

References llvm_unreachable.

Referenced by llvm::emitLinkerFlagsForGlobalCOFF().

◆ getIndexedOffsetInType()

int64_t DataLayout::getIndexedOffsetInType ( Type * ElemTy,
ArrayRef< Value * > Indices ) const

Returns the offset from the beginning of the type for the specified indices.

Note that this takes the element type, not the pointer type. This is used to implement getelementptr.

Definition at line 934 of file DataLayout.cpp.

References assert(), llvm::cast(), llvm::gep_type_begin(), llvm::gep_type_end(), llvm::StructLayout::getElementOffset(), llvm::generic_gep_type_iterator< ItTy >::getOperand(), llvm::generic_gep_type_iterator< ItTy >::getSequentialElementStride(), getStructLayout(), llvm::generic_gep_type_iterator< ItTy >::getStructTypeOrNull(), llvm::Value::getType(), and llvm::Type::isIntegerTy().

◆ getIndexSize()

unsigned DataLayout::getIndexSize ( unsigned AS) const

The index size in bytes used for address calculation, rounded up to a whole number of bytes.

This not only defines the size used in getelementptr operations, but also the size of addresses in this AS. For example, a 64-bit CHERI-enabled target has 128-bit pointers of which only 64 are used to represent the address and the remaining ones are used for metadata such as bounds and access permissions. In this case getPointerSize() returns 16, but getIndexSize() returns 8. To help with code understanding, the alias getAddressSize() can be used instead of getIndexSize() to clarify that an address width is needed.

Definition at line 753 of file DataLayout.cpp.

References llvm::divideCeil().

Referenced by getAddressSize().

◆ getIndexSizeInBits()

unsigned llvm::DataLayout::getIndexSizeInBits ( unsigned AS) const
inline

The size in bits of indices used for address calculation in getelementptr and for addresses in the given AS.

See getIndexSize() for more information.

See also
DataLayout::getAddressSizeInBits()

Definition at line 398 of file DataLayout.h.

Referenced by getAddressSizeInBits(), getIndexType(), getIndexTypeSizeInBits(), and simplifyGEPInst().

◆ getIndexType() [1/2]

IntegerType * DataLayout::getIndexType ( LLVMContext & C,
unsigned AddressSpace ) const

Returns the type of a GEP index in AddressSpace.

If it was not specified explicitly, it will be the integer type of the pointer width - IntPtrType.

Definition at line 919 of file DataLayout.cpp.

References llvm::CallingConv::C, llvm::IntegerType::get(), and getIndexSizeInBits().

Referenced by getAddressType(), getAddressType(), llvm::ScalarEvolution::getEffectiveSCEVType(), simplifyAllocaArraySize(), and simplifyCastInst().

◆ getIndexType() [2/2]

Type * DataLayout::getIndexType ( Type * PtrTy) const

Returns the type of a GEP index.

If it was not specified explicitly, it will be the integer type of the pointer width - IntPtrType.

Definition at line 924 of file DataLayout.cpp.

References assert(), llvm::dyn_cast(), llvm::IntegerType::get(), llvm::VectorType::get(), and getIndexTypeSizeInBits().

◆ getIndexTypeSizeInBits()

unsigned DataLayout::getIndexTypeSizeInBits ( Type * Ty) const

The size in bits of the index used in GEP calculation for this type.

The function should be called with pointer or vector of pointers type. This is defined to return the same value as getAddressSizeInBits(), but separate functions exist for code clarity.

Definition at line 757 of file DataLayout.cpp.

References assert(), llvm::cast(), getAddressSpace(), and getIndexSizeInBits().

Referenced by computeKnownBitsFromOperator(), getAddressSizeInBits(), getIndexType(), llvm::ScalarEvolution::getTypeSizeInBits(), getUnknownStore(), isNonEqualPointersWithRecursiveGEP(), llvm::simplifyBinaryIntrinsic(), and llvm::simplifyLoadInst().

◆ getIntPtrType() [1/2]

◆ getIntPtrType() [2/2]

Type * DataLayout::getIntPtrType ( Type * Ty) const

Returns an integer (vector of integer) type with size at least as big as that of a pointer of the given pointer (vector of pointer) type.

Definition at line 897 of file DataLayout.cpp.

References assert(), llvm::dyn_cast(), llvm::IntegerType::get(), llvm::VectorType::get(), and getPointerTypeSizeInBits().

◆ getLargestLegalIntType()

Type * llvm::DataLayout::getLargestLegalIntType ( LLVMContext & C) const
inline

Returns the largest legal integer type, or null if none are set.

Definition at line 555 of file DataLayout.h.

References llvm::CallingConv::C, llvm::Type::getIntNTy(), and getLargestLegalIntTypeSizeInBits().

◆ getLargestLegalIntTypeSizeInBits()

unsigned DataLayout::getLargestLegalIntTypeSizeInBits ( ) const

Returns the size of largest legal integer type size, or 0 if none are set.

Definition at line 914 of file DataLayout.cpp.

References llvm::max_element().

Referenced by getLargestLegalIntType().

◆ getLinkerPrivateGlobalPrefix()

StringRef llvm::DataLayout::getLinkerPrivateGlobalPrefix ( ) const
inline

Definition at line 264 of file DataLayout.h.

◆ getManglingComponent()

const char * DataLayout::getManglingComponent ( const Triple & T)
static

Definition at line 175 of file DataLayout.cpp.

References T, and llvm::Triple::x86.

Referenced by computeDataLayout(), computeDataLayout(), computeDataLayout(), and getDataLayoutString().

◆ getNonIntegralAddressSpaces()

SmallVector< unsigned, 8 > llvm::DataLayout::getNonIntegralAddressSpaces ( ) const
inline

Return the address spaces containing non-integral pointers.

Pointers in this address space don't have a well-defined bitwise representation.

Definition at line 362 of file DataLayout.h.

References llvm::SmallVectorTemplateBase< T, bool >::push_back().

◆ getPointerABIAlignment()

Align DataLayout::getPointerABIAlignment ( unsigned AS) const

Layout pointer alignment.

Definition at line 734 of file DataLayout.cpp.

Referenced by llvm::MachineJumpTableInfo::getEntryAlignment(), and getTypeAllocSize().

◆ getPointerPrefAlignment()

Align DataLayout::getPointerPrefAlignment ( unsigned AS = 0) const

Return target's alignment for stack-based pointers FIXME: The defaults need to be removed once all of the backends/clients are updated.

Definition at line 738 of file DataLayout.cpp.

◆ getPointerSize()

unsigned DataLayout::getPointerSize ( unsigned AS = 0) const

The pointer representation size in bytes, rounded up to a whole number of bytes.

The difference between this function and getAddressSize() is that this one returns the size of the entire pointer representation (including metadata bits for fat pointers) and the latter only returns the number of address bits.

See also
DataLayout::getAddressSizeInBits FIXME: The defaults need to be removed once all of the backends/clients are updated.

Definition at line 742 of file DataLayout.cpp.

References llvm::BitWidth, and llvm::divideCeil().

Referenced by llvm::LoongArchAsmPrinter::emitJumpTableInfo(), llvm::TargetLoweringBase::emitPatchPoint(), llvm::MachineJumpTableInfo::getEntrySize(), getTypeAllocSize(), and isTargetNullPtr().

◆ getPointerSizeInBits()

unsigned llvm::DataLayout::getPointerSizeInBits ( unsigned AS = 0) const
inline

The size in bits of the pointer representation in a given address space.

This is not necessarily the same as the integer address of a pointer (e.g. for fat pointers).

See also
DataLayout::getAddressSizeInBits() FIXME: The defaults need to be removed once all of the backends/clients are updated.

Definition at line 390 of file DataLayout.h.

Referenced by getIntPtrType(), getPointerTypeSizeInBits(), getTypeSizeInBits(), simplifyGEPInst(), unpackFromMemLoc(), unpackFromMemLoc(), and unpackFromMemLoc().

◆ getPointerTypeSize()

unsigned llvm::DataLayout::getPointerTypeSize ( Type * Ty) const
inline

Definition at line 431 of file DataLayout.h.

References getPointerTypeSizeInBits().

◆ getPointerTypeSizeInBits()

unsigned DataLayout::getPointerTypeSizeInBits ( Type * Ty) const

The pointer representation size in bits for this type.

If this function is called with a pointer type, then the type size of the pointer is returned. If this function is called with a vector of pointers, then the type size of the pointer is returned. This should only be called with a pointer or vector of pointers.

Definition at line 746 of file DataLayout.cpp.

References assert(), llvm::cast(), getAddressSpace(), and getPointerSizeInBits().

Referenced by computeKnownBits(), computeKnownBitsFromOperator(), ComputeNumSignBitsImpl(), llvm::SelectionDAG::getGlobalAddress(), getIntPtrType(), getPointerTypeSize(), and llvm::SelectionDAG::InferPtrAlign().

◆ getPreferredAlign()

Align DataLayout::getPreferredAlign ( const GlobalVariable * GV) const

Returns the preferred alignment of the specified global.

getPreferredAlign - Return the preferred alignment of the specified global.

This includes an explicitly requested alignment (if the global has one).

Definition at line 1030 of file DataLayout.cpp.

References getABITypeAlign(), llvm::GlobalVariable::getAlign(), getPrefTypeAlign(), getTypeSizeInBits(), llvm::GlobalValue::getValueType(), llvm::GlobalVariable::hasInitializer(), and llvm::GlobalObject::hasSection().

Referenced by getAlign(), getELFSectionNameForGlobal(), promoteToConstantPool(), and llvm::TargetLoweringObjectFileMachO::SelectSectionForGlobal().

◆ getPrefTypeAlign()

Align DataLayout::getPrefTypeAlign ( Type * Ty) const

Returns the preferred stack/global alignment for the specified type.

This is always at least as good as the ABI alignment.

Definition at line 888 of file DataLayout.cpp.

Referenced by llvm::TargetLowering::CTTZTableLookup(), llvm::PPCInstrInfo::finalizeInsInstrs(), llvm::SelectionDAG::getConstantPool(), llvm::SelectionDAG::getConstantPool(), getPreferredAlign(), getPrefTypeAlign(), getPrefTypeAlign(), lowerSTOREVector(), and solveDIType().

◆ getPrivateGlobalPrefix()

◆ getProgramAddressSpace()

unsigned llvm::DataLayout::getProgramAddressSpace ( ) const
inline

Definition at line 247 of file DataLayout.h.

◆ getSmallestLegalIntType()

Type * DataLayout::getSmallestLegalIntType ( LLVMContext & C,
unsigned Width = 0 ) const

Returns the smallest integer type with size at least as big as Width bits.

Definition at line 907 of file DataLayout.cpp.

References llvm::CallingConv::C, and llvm::Type::getIntNTy().

◆ getStackAlignment()

MaybeAlign llvm::DataLayout::getStackAlignment ( ) const
inline

Returns the natural stack alignment, or MaybeAlign() if one wasn't specified.

Definition at line 228 of file DataLayout.h.

◆ getStringRepresentation()

const std::string & llvm::DataLayout::getStringRepresentation ( ) const
inline

Returns the string representation of the DataLayout.

This representation is in the same format accepted by the string constructor above. This should not be used to compare two DataLayout as different string can represent the same layout.

Definition at line 206 of file DataLayout.h.

◆ getStructLayout()

const StructLayout * DataLayout::getStructLayout ( StructType * Ty) const

Returns a StructLayout object, indicating the alignment of the struct, its size, and the offsets of its fields.

Note that this information is lazily cached.

Definition at line 712 of file DataLayout.cpp.

References llvm::safe_malloc(), and llvm::TrailingObjects< StructLayout, TypeSize >::totalSizeToAlloc().

Referenced by computeKnownBitsFromOperator(), getGEPIndexForOffset(), getIndexedOffsetInType(), llvm::ScalarEvolution::getOffsetOfExpr(), getTypeAllocSize(), getTypeSizeInBits(), llvm::ExecutionEngine::InitializeMemory(), isGEPKnownNonNull(), and solveDIType().

◆ getTypeAllocSize()

TypeSize DataLayout::getTypeAllocSize ( Type * Ty) const

Returns the offset in bytes between successive objects of the specified type, including alignment padding.

If Ty is a scalable vector type, the scalable property will be set and the runtime size will be a positive integer multiple of the base size.

This is the amount that alloca reserves for this type. For example, returns 12 or 16 for x86_fp80, depending on alignment.

Definition at line 846 of file DataLayout.cpp.

References A(), llvm::alignTo(), llvm::Type::ArrayTyID, llvm::BitWidth, llvm::cast(), llvm::divideCeil(), getABITypeAlign(), llvm::StructLayout::getAlignment(), llvm::TypeSize::getFixed(), getPointerABIAlignment(), getPointerSize(), llvm::StructLayout::getSizeInBytes(), getStructLayout(), getTypeAllocSize(), getTypeStoreSize(), llvm::Type::IntegerTyID, llvm::Type::PointerTyID, Size, llvm::Type::StructTyID, and llvm::Type::TargetExtTyID.

Referenced by llvm::analyzeArguments(), llvm::ExecutionEngine::emitGlobalVariable(), llvm::CSKYAsmPrinter::emitMachineConstantPoolValue(), llvm::SystemZAsmPrinter::emitMachineConstantPoolValue(), llvm::ARMAsmPrinter::emitXXStructor(), getGEPIndexForOffset(), getGEPIndicesForOffset(), getTypeAllocSize(), getTypeAllocSizeInBits(), llvm::ExecutionEngine::InitializeMemory(), llvm::HexagonTargetObjectFile::isGlobalInSmallSection(), llvm::RISCVELFTargetObjectFile::isGlobalInSmallSection(), llvm::SparcTargetLowering::LowerCall_32(), llvm::X86TargetLowering::markLibCallAttributes(), performGlobalAddressCombine(), promoteToConstantPool(), simplifyGEPInst(), and llvm::Interpreter::visitAllocaInst().

◆ getTypeAllocSizeInBits()

TypeSize llvm::DataLayout::getTypeAllocSizeInBits ( Type * Ty) const
inline

Returns the offset in bits between successive objects of the specified type, including alignment padding; always a multiple of 8.

If Ty is a scalable vector type, the scalable property will be set and the runtime size will be a positive integer multiple of the base size.

This is the amount that alloca reserves for this type. For example, returns 96 or 128 for x86_fp80, depending on alignment.

Definition at line 514 of file DataLayout.h.

References getTypeAllocSize().

Referenced by getTypeSizeInBits().

◆ getTypeSizeInBits()

TypeSize llvm::DataLayout::getTypeSizeInBits ( Type * Ty) const
inline

Size examples:

Type SizeInBits StoreSizeInBits AllocSizeInBits[*]


i1 1 8 8 i8 8 8 8 i19 19 24 32 i32 32 32 32 i100 100 104 128 i128 128 128 128 Float 32 32 32 Double 64 64 64 X86_FP80 80 80 96

[*] The alloc size depends on the alignment, and thus on the target. These values are for x86-32 linux. Returns the number of bits necessary to hold the specified type.

If Ty is a scalable vector type, the scalable property will be set and the runtime size will be a positive integer multiple of the base size.

For example, returns 36 for i36 and 80 for x86_fp80. The type passed must have a size (Type::isSized() must return true).

Definition at line 671 of file DataLayout.h.

References llvm::Type::ArrayTyID, assert(), llvm::Type::BFloatTyID, llvm::cast(), llvm::Type::DoubleTyID, llvm::Type::FixedVectorTyID, llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::VectorType::getElementCount(), llvm::ArrayType::getElementType(), llvm::VectorType::getElementType(), llvm::TypeSize::getFixed(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::ArrayType::getNumElements(), getPointerSizeInBits(), llvm::StructLayout::getSizeInBits(), getStructLayout(), getTypeAllocSizeInBits(), getTypeSizeInBits(), llvm::Type::HalfTyID, llvm::Type::IntegerTyID, llvm::Type::LabelTyID, llvm_unreachable, llvm::Type::PointerTyID, llvm::Type::PPC_FP128TyID, llvm::Type::ScalableVectorTyID, llvm::Type::StructTyID, llvm::Type::TargetExtTyID, llvm::Type::X86_AMXTyID, and llvm::Type::X86_FP80TyID.

Referenced by buildFrameDebugInfo(), computeKnownBits(), computeKnownBitsForHorizontalOperation(), computeKnownBitsFromOperator(), ComputeNumSignBitsImpl(), llvm::AArch64TTIImpl::getIntrinsicInstrCost(), getOrCreateRefVariable(), getPreferredAlign(), getTypeSizeInBits(), llvm::ScalarEvolution::getTypeSizeInBits(), getTypeStoreSizeInBits(), isKnownNonZeroFromOperator(), simplifyAMDGCNMemoryIntrinsicDemanded(), simplifyGEPInst(), simplifyICmpInst(), solveDIType(), tocDataChecks(), and typeSizeEqualsStoreSize().

◆ getTypeStoreSize()

TypeSize llvm::DataLayout::getTypeStoreSize ( Type * Ty) const
inline

Returns the maximum number of bytes that may be overwritten by storing the specified type.

If Ty is a scalable vector type, the scalable property will be set and the runtime size will be a positive integer multiple of the base size.

For example, returns 5 for i36 and 10 for x86_fp80.

Definition at line 468 of file DataLayout.h.

References llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), getTypeStoreSizeInBits(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().

Referenced by emitGlobalConstantLargeInt(), getTypeAllocSize(), llvm::ExecutionEngine::LoadValueFromMemory(), llvm::SPIRVCallLowering::lowerCall(), llvm::promoteLoopAccessesToScalars(), and llvm::ExecutionEngine::StoreValueToMemory().

◆ getTypeStoreSizeInBits()

TypeSize llvm::DataLayout::getTypeStoreSizeInBits ( Type * Ty) const
inline

Returns the maximum number of bits that may be overwritten by storing the specified type; always a multiple of 8.

If Ty is a scalable vector type, the scalable property will be set and the runtime size will be a positive integer multiple of the base size.

For example, returns 40 for i36 and 80 for x86_fp80.

Definition at line 481 of file DataLayout.h.

References llvm::alignToPowerOf2(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), getTypeSizeInBits(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().

Referenced by getTypeStoreSize(), and typeSizeEqualsStoreSize().

◆ getValueOrABITypeAlignment()

Align llvm::DataLayout::getValueOrABITypeAlignment ( MaybeAlign Alignment,
Type * Ty ) const
inline

Helper function to return Alignment if it's set or the result of getABITypeAlign(Ty), in any case the result is a valid alignment.

Definition at line 523 of file DataLayout.h.

References getABITypeAlign().

◆ hasLinkerPrivateGlobalPrefix()

bool llvm::DataLayout::hasLinkerPrivateGlobalPrefix ( ) const
inline

Definition at line 262 of file DataLayout.h.

◆ hasMicrosoftFastStdCallMangling()

bool llvm::DataLayout::hasMicrosoftFastStdCallMangling ( ) const
inline

Definition at line 252 of file DataLayout.h.

◆ isBigEndian()

◆ isDefault()

bool llvm::DataLayout::isDefault ( ) const
inline

Test if the DataLayout was constructed from an empty string.

Definition at line 211 of file DataLayout.h.

Referenced by llvm::ExecutionEngine::getMangledName().

◆ isIllegalInteger()

bool llvm::DataLayout::isIllegalInteger ( uint64_t Width) const
inline

Definition at line 224 of file DataLayout.h.

References isLegalInteger().

◆ isLegalInteger()

bool llvm::DataLayout::isLegalInteger ( uint64_t Width) const
inline

Returns true if the specified type is known to be a native integer type supported by the CPU.

For example, i64 is not native on most 32-bit CPUs and i37 is not native on any known one. This returns false if the integer width is not legal.

The width is specified in bits.

Definition at line 220 of file DataLayout.h.

References llvm::is_contained().

Referenced by isIllegalInteger(), and visitIVCast().

◆ isLittleEndian()

◆ isNonIntegralAddressSpace()

bool llvm::DataLayout::isNonIntegralAddressSpace ( unsigned AddrSpace) const
inline

Definition at line 371 of file DataLayout.h.

Referenced by isNonIntegralPointerType().

◆ isNonIntegralPointerType() [1/2]

bool llvm::DataLayout::isNonIntegralPointerType ( PointerType * PT) const
inline

◆ isNonIntegralPointerType() [2/2]

bool llvm::DataLayout::isNonIntegralPointerType ( Type * Ty) const
inline

Definition at line 379 of file DataLayout.h.

References llvm::dyn_cast(), and isNonIntegralPointerType().

◆ operator!=()

bool llvm::DataLayout::operator!= ( const DataLayout & Other) const
inline

Definition at line 191 of file DataLayout.h.

References DataLayout(), and llvm::Other.

◆ operator=()

DataLayout & DataLayout::operator= ( const DataLayout & Other)

Definition at line 223 of file DataLayout.cpp.

References DataLayout(), and llvm::Other.

◆ operator==()

bool DataLayout::operator== ( const DataLayout & Other) const

Definition at line 245 of file DataLayout.cpp.

References DataLayout(), and llvm::Other.

◆ parse()

Expected< DataLayout > DataLayout::parse ( StringRef LayoutString)
static

Parse a data layout string and return the layout.

Return an error description on failure.

Definition at line 262 of file DataLayout.cpp.

References DataLayout().

Referenced by llvm::SPIRVTranslate().

◆ typeSizeEqualsStoreSize()

bool llvm::DataLayout::typeSizeEqualsStoreSize ( Type * Ty) const
inline

Returns true if no extra padding bits are needed when storing the specified type.

For example, returns false for i19 that has a 24-bit store size.

Definition at line 492 of file DataLayout.h.

References getTypeSizeInBits(), and getTypeStoreSizeInBits().


The documentation for this class was generated from the following files: