LLVM 20.0.0git
|
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 | |
DataLayout () | |
Constructs a DataLayout with default values. | |
DataLayout (StringRef LayoutString) | |
Constructs a DataLayout from a specification string. | |
DataLayout (const DataLayout &DL) | |
~DataLayout () | |
DataLayout & | operator= (const DataLayout &Other) |
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 |
bool | exceedsNaturalStackAlignment (Align Alignment) const |
Returns true if the given alignment exceeds the natural stack alignment. | |
Align | getStackAlignment () const |
unsigned | getAllocaAddrSpace () const |
PointerType * | getAllocaPtrType (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. | |
Align | getPointerABIAlignment (unsigned AS) const |
Layout pointer alignment. | |
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. | |
unsigned | getPointerSize (unsigned AS=0) const |
Layout pointer size in bytes, rounded up to a whole number of bytes. | |
unsigned | getMaxIndexSize () const |
Returns the maximum index size over all address spaces. | |
unsigned | getIndexSize (unsigned AS) const |
rounded up to a whole number of bytes. | |
ArrayRef< unsigned > | 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 |
Layout pointer size, in bits FIXME: The defaults need to be removed once all of the backends/clients are updated. | |
unsigned | getMaxIndexSizeInBits () const |
Returns the maximum index size over all address spaces. | |
unsigned | getIndexSizeInBits (unsigned AS) const |
Size in bits of index used for address calculation in getelementptr. | |
unsigned | getPointerTypeSizeInBits (Type *) const |
Layout pointer size, in bits, based on the type. | |
unsigned | getIndexTypeSizeInBits (Type *Ty) const |
Layout size of the index used in GEP calculation. | |
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. | |
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. | |
Align | getPrefTypeAlign (Type *Ty) const |
Returns the preferred stack/global alignment for the specified type. | |
IntegerType * | getIntPtrType (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. | |
Type * | getIntPtrType (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. | |
Type * | getSmallestLegalIntType (LLVMContext &C, unsigned Width=0) const |
Returns the smallest integer type with size at least as big as Width bits. | |
Type * | getLargestLegalIntType (LLVMContext &C) const |
Returns the largest legal integer type, or null if none are set. | |
unsigned | getLargestLegalIntTypeSizeInBits () const |
Returns the size of largest legal integer type size, or 0 if none are set. | |
IntegerType * | getIndexType (LLVMContext &C, unsigned AddressSpace) const |
Returns the type of a GEP index in AddressSpace. | |
Type * | getIndexType (Type *PtrTy) const |
Returns the type of a GEP index. | |
int64_t | getIndexedOffsetInType (Type *ElemTy, ArrayRef< Value * > Indices) const |
Returns the offset from the beginning of the type for the specified indices. | |
SmallVector< APInt > | getGEPIndicesForOffset (Type *&ElemTy, APInt &Offset) const |
Get GEP indices to access Offset inside ElemTy. | |
std::optional< APInt > | getGEPIndexForOffset (Type *&ElemTy, APInt &Offset) const |
Get single GEP index to access Offset inside ElemTy. | |
const StructLayout * | getStructLayout (StructType *Ty) const |
Returns a StructLayout object, indicating the alignment of the struct, its size, and the offsets of its fields. | |
Align | getPreferredAlign (const GlobalVariable *GV) const |
Returns the preferred alignment of the specified global. | |
Static Public Member Functions | |
static Expected< DataLayout > | parse (StringRef LayoutString) |
Parse a data layout string and return the layout. | |
static const char * | getManglingComponent (const Triple &T) |
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.
|
strong |
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 85 of file DataLayout.h.
DataLayout::DataLayout | ( | ) |
Constructs a DataLayout with default values.
Definition at line 212 of file DataLayout.cpp.
|
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 llvm::report_fatal_error().
|
inline |
Definition at line 181 of file DataLayout.h.
References DL.
DataLayout::~DataLayout | ( | ) |
Definition at line 693 of file DataLayout.cpp.
|
inline |
Returns true if symbols with leading question marks should not receive IR mangling.
True for Windows mangling modes.
Definition at line 261 of file DataLayout.h.
Returns true if the given alignment exceeds the natural stack alignment.
Definition at line 224 of file DataLayout.h.
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 316 of file DataLayout.h.
Returns the minimum ABI-required alignment for an integer type of the specified bitwidth.
Definition at line 490 of file DataLayout.h.
References llvm::BitWidth.
Referenced by llvm::OpenMPIRBuilder::emitOffloadingArrays(), and llvm::MachineJumpTableInfo::getEntryAlignment().
Returns the minimum ABI-required alignment for the specified type.
Definition at line 838 of file DataLayout.cpp.
Referenced by llvm::analyzeArguments(), llvm::FastISel::createMachineMemOperandFor(), llvm::SelectionDAG::getConstantPool(), llvm::SelectionDAG::getEVTAlign(), llvm::BasicTTIImplBase< T >::getIntrinsicInstrCost(), llvm::X86TTIImpl::getMemoryOpCost(), getPreferredAlign(), getTypeAllocSize(), getValueOrABITypeAlignment(), llvm::FastISel::lowerCallTo(), llvm::PPCTargetLowering::PerformDAGCombine(), llvm::SITargetLowering::ReplaceNodeResults(), and solveDIType().
|
inline |
|
inline |
Definition at line 235 of file DataLayout.h.
References llvm::PointerType::get().
|
inline |
Definition at line 251 of file DataLayout.h.
Referenced by llvm::OpenMPIRBuilder::createReductionsGPU(), and llvm::OpenMPIRBuilder::getOrCreateIdent().
|
inline |
Returns the alignment of function pointers, which may or may not be related to the alignment of functions.
Definition at line 242 of file DataLayout.h.
|
inline |
Return the type of function pointer alignment.
Definition at line 246 of file DataLayout.h.
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 936 of file DataLayout.cpp.
References llvm::StructLayout::getElementContainingOffset(), getElementIndex(), llvm::StructLayout::getElementOffset(), llvm::StructLayout::getSizeInBytes(), getStructLayout(), getTypeAllocSize(), and llvm::Offset.
Referenced by 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 966 of file DataLayout.cpp.
References assert(), getElementIndex(), getGEPIndexForOffset(), getTypeAllocSize(), llvm::Type::isSized(), llvm::Offset, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by llvm::InstCombinerImpl::visitGEPOfGEP().
|
inline |
Definition at line 273 of file DataLayout.h.
References llvm_unreachable.
Referenced by llvm::emitLinkerFlagsForGlobalCOFF().
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 888 of file DataLayout.cpp.
References assert(), 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(), and Idx.
Referenced by llvm::InstCombinerImpl::visitGEPOfGEP().
rounded up to a whole number of bytes.
Definition at line 745 of file DataLayout.cpp.
References llvm::divideCeil().
Size in bits of index used for address calculation in getelementptr.
Definition at line 377 of file DataLayout.h.
References llvm::DataLayout::PointerSpec::IndexBitWidth.
Referenced by llvm::GISelKnownBits::computeKnownBitsImpl(), llvm::OpenMPIRBuilder::emitOffloadingArrays(), llvm::BasicTTIImplBase< T >::getEstimatedNumberOfCaseClusters(), getIndexType(), getIndexTypeSizeInBits(), simplifyGEPInst(), and llvm::InstCombinerImpl::visitGetElementPtrInst().
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 873 of file DataLayout.cpp.
References llvm::CallingConv::C, llvm::IntegerType::get(), and getIndexSizeInBits().
Referenced by llvm::ObjectSizeOffsetEvaluator::compute(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), llvm::ScalarEvolution::getEffectiveSCEVType(), simplifyAllocaArraySize(), simplifyCastInst(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::ObjectSizeOffsetEvaluator::visitAllocaInst(), llvm::InstCombinerImpl::visitGetElementPtrInst(), and llvm::PtrUseVisitor< DerivedT >::visitPtr().
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 878 of file DataLayout.cpp.
References assert(), llvm::IntegerType::get(), llvm::VectorType::get(), llvm::Type::getContext(), getIndexTypeSizeInBits(), and llvm::Type::isPtrOrPtrVectorTy().
Layout size of the index used in GEP calculation.
The function should be called with pointer or vector of pointers type.
Definition at line 749 of file DataLayout.cpp.
References assert(), getIndexSizeInBits(), llvm::Type::getScalarType(), and llvm::Type::isPtrOrPtrVectorTy().
Referenced by getIndexType(), llvm::ScalarEvolution::getTypeSizeInBits(), isNonEqualPointersWithRecursiveGEP(), llvm::simplifyBinaryIntrinsic(), llvm::simplifyLoadInst(), llvm::InstCombinerImpl::visitGEPOfGEP(), and llvm::InstCombinerImpl::visitGetElementPtrInst().
IntegerType * DataLayout::getIntPtrType | ( | 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.
Definition at line 846 of file DataLayout.cpp.
References llvm::CallingConv::C, llvm::IntegerType::get(), and getPointerSizeInBits().
Referenced by llvm::ARMSelectionDAGInfo::EmitSpecializedLibcall(), llvm::AArch64SelectionDAGInfo::EmitStreamingCompatibleMemLibCall(), llvm::HexagonSelectionDAGInfo::EmitTargetCodeForMemcpy(), llvm::XCoreSelectionDAGInfo::EmitTargetCodeForMemcpy(), llvm::InstCombinerImpl::foldICmpInstWithConstantNotInt(), llvm::SelectionDAG::getAtomicMemcpy(), llvm::SelectionDAG::getAtomicMemmove(), llvm::SelectionDAG::getAtomicMemset(), llvm::ScalarEvolution::getLosslessPtrToIntExpr(), llvm::SelectionDAG::getMemcpy(), llvm::SelectionDAG::getMemmove(), llvm::IntrinsicLowering::LowerIntrinsicCall(), simplifyCastInst(), llvm::InstCombinerImpl::visitIntToPtr(), and llvm::InstCombinerImpl::visitPtrToInt().
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 851 of file DataLayout.cpp.
References assert(), llvm::IntegerType::get(), llvm::VectorType::get(), llvm::Type::getContext(), getPointerTypeSizeInBits(), and llvm::Type::isPtrOrPtrVectorTy().
|
inline |
Returns the largest legal integer type, or null if none are set.
Definition at line 513 of file DataLayout.h.
References llvm::CallingConv::C, llvm::Type::getIntNTy(), and getLargestLegalIntTypeSizeInBits().
unsigned DataLayout::getLargestLegalIntTypeSizeInBits | ( | ) | const |
Returns the size of largest legal integer type size, or 0 if none are set.
Definition at line 868 of file DataLayout.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::end(), and llvm::max_element().
Referenced by getLargestLegalIntType().
|
inline |
Definition at line 267 of file DataLayout.h.
Definition at line 175 of file DataLayout.cpp.
References llvm::Triple::x86.
Referenced by computeDataLayout(), and getDataLayoutString().
unsigned DataLayout::getMaxIndexSize | ( | ) | const |
Returns the maximum index size over all address spaces.
Definition at line 729 of file DataLayout.cpp.
References llvm::divideCeil().
Referenced by getMaxIndexSizeInBits().
|
inline |
Returns the maximum index size over all address spaces.
Definition at line 372 of file DataLayout.h.
References getMaxIndexSize().
Return the address spaces containing non-integral pointers.
Pointers in this address space don't have a well-defined bitwise representation.
Definition at line 346 of file DataLayout.h.
Referenced by isNonIntegralAddressSpace().
Layout pointer alignment.
Definition at line 717 of file DataLayout.cpp.
References llvm::DataLayout::PointerSpec::ABIAlign.
Referenced by llvm::MachineJumpTableInfo::getEntryAlignment().
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 721 of file DataLayout.cpp.
References llvm::DataLayout::PointerSpec::PrefAlign.
Layout pointer size in bytes, rounded up to a whole number of bytes.
FIXME: The defaults need to be removed once all of the backends/clients are updated.
Definition at line 725 of file DataLayout.cpp.
References llvm::BitWidth, and llvm::divideCeil().
Referenced by llvm::TargetLoweringBase::emitPatchPoint(), llvm::TargetMachine::getAllocaPointerSize(), llvm::MachineJumpTableInfo::getEntrySize(), llvm::TargetMachine::getPointerSize(), llvm::TargetMachine::getProgramPointerSize(), isTargetNullPtr(), and llvm::OpenMPIRBuilder::registerTargetGlobalVariable().
Layout pointer size, in bits FIXME: The defaults need to be removed once all of the backends/clients are updated.
Definition at line 367 of file DataLayout.h.
References llvm::DataLayout::PointerSpec::BitWidth.
Referenced by llvm::GIMatchTableExecutor::executeMatchTable(), llvm::InstCombinerImpl::foldIntegerTypedPHI(), llvm::ExecutionEngine::getConstantValue(), getIntPtrType(), llvm::TargetMachine::getPointerSizeInBits(), getPointerTypeSizeInBits(), getTypeSizeInBits(), lle_X_sprintf(), llvm::GCNTTIImpl::rewriteIntrinsicWithAddressSpace(), simplifyGEPInst(), unpackFromMemLoc(), llvm::InstCombinerImpl::visitIntToPtr(), and llvm::InstCombinerImpl::visitPtrToInt().
Definition at line 392 of file DataLayout.h.
References getPointerTypeSizeInBits().
Layout pointer size, in bits, based on the 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 738 of file DataLayout.cpp.
References assert(), getPointerSizeInBits(), llvm::Type::getScalarType(), and llvm::Type::isPtrOrPtrVectorTy().
Referenced by computeKnownBits(), computeKnownBitsFromOperator(), ComputeNumSignBitsImpl(), llvm::InstCombinerImpl::foldICmpUsingKnownBits(), llvm::InstCombinerImpl::foldICmpWithCastOp(), llvm::TargetTransformInfoImplBase::getCastInstrCost(), llvm::TargetTransformInfoImplCRTPBase< T >::getGEPCost(), llvm::SelectionDAG::getGlobalAddress(), getIntPtrType(), getPointerTypeSize(), llvm::SelectionDAG::InferPtrAlign(), and llvm::InstCombinerImpl::visitCallInst().
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 983 of file DataLayout.cpp.
References getABITypeAlign(), llvm::GlobalObject::getAlign(), getPrefTypeAlign(), getTypeSizeInBits(), llvm::GlobalValue::getValueType(), llvm::GlobalVariable::hasInitializer(), and llvm::GlobalObject::hasSection().
Referenced by getAlign(), getELFSectionNameForGlobal(), promoteToConstantPool(), and llvm::TargetLoweringObjectFileMachO::SelectSectionForGlobal().
Returns the preferred stack/global alignment for the specified type.
This is always at least as good as the ABI alignment.
Definition at line 842 of file DataLayout.cpp.
Referenced by llvm::TargetLowering::CTTZTableLookup(), llvm::OpenMPIRBuilder::emitNonContiguousDescriptor(), llvm::OpenMPIRBuilder::emitOffloadingArrays(), llvm::OpenMPIRBuilder::emitTargetKernel(), llvm::PPCInstrInfo::finalizeInsInstrs(), llvm::SelectionDAG::getConstantPool(), getPreferredAlign(), getPrefTypeAlign(), llvm::RISCVTTIImpl::getVectorInstrCost(), llvm::X86TTIImpl::getVectorInstrCost(), ReplaceLoadVector(), solveDIType(), llvm::InstCombinerImpl::visitLoadInst(), llvm::SelectionDAGBuilder::visitSPDescriptorParent(), and llvm::InstCombinerImpl::visitStoreInst().
|
inline |
Definition at line 289 of file DataLayout.h.
References llvm_unreachable.
Referenced by llvm::TargetLoweringObjectFileMachO::getIndirectSymViaGOTPCRel(), llvm::TargetLoweringObjectFile::getSymbolWithGlobalValueBase(), and llvm::MipsAsmPrinter::printOperand().
|
inline |
Definition at line 250 of file DataLayout.h.
Referenced by llvm::Module::getOrInsertFunction(), and llvm::TargetMachine::getProgramPointerSize().
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 861 of file DataLayout.cpp.
References llvm::CallingConv::C, and llvm::Type::getIntNTy().
Referenced by llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal().
|
inline |
Definition at line 228 of file DataLayout.h.
References assert().
Referenced by CC_AArch64_Custom_Block().
|
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 203 of file DataLayout.h.
Referenced by llvm::orc::LLJIT::applyDataLayout(), and llvm::orc::LLJITBuilderState::prepareForConstruction().
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 695 of file DataLayout.cpp.
References llvm::StructType::getNumElements(), and llvm::safe_malloc().
Referenced by computeKnownBitsFromOperator(), llvm::TargetTransformInfoImplCRTPBase< T >::getGEPCost(), getGEPIndexForOffset(), getIndexedOffsetInType(), llvm::ScalarEvolution::getOffsetOfExpr(), getTypeSizeInBits(), llvm::ExecutionEngine::InitializeMemory(), isGEPKnownNonNull(), llvm::FastISel::selectGetElementPtr(), and solveDIType().
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 461 of file DataLayout.h.
References llvm::alignTo(), getABITypeAlign(), getTypeStoreSize(), and value.
Referenced by llvm::analyzeArguments(), llvm::ExecutionEngine::emitGlobalVariable(), llvm::CSKYAsmPrinter::emitMachineConstantPoolValue(), llvm::SystemZAsmPrinter::emitMachineConstantPoolValue(), llvm::ARMAsmPrinter::emitXXStructor(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), llvm::GCNTTIImpl::getCallerAllocaCost(), llvm::ARMTTIImpl::getGatherScatterOpCost(), getGEPIndexForOffset(), getGEPIndicesForOffset(), getTypeAllocSizeInBits(), llvm::dxil::CBufferDataLayout::getTypeAllocSizeInBytes(), llvm::AMDGPUTTIImpl::getUnrollingPreferences(), llvm::ExecutionEngine::InitializeMemory(), llvm::HexagonTargetObjectFile::isGlobalInSmallSection(), llvm::RISCVELFTargetObjectFile::isGlobalInSmallSection(), llvm::TargetMachine::isLargeGlobalValue(), llvm::SparcTargetLowering::LowerCall_32(), llvm::FastISel::lowerCallTo(), llvm::X86TargetLowering::markLibCallAttributes(), performGlobalAddressCombine(), promoteToConstantPool(), llvm::FunctionLoweringInfo::set(), simplifyGEPInst(), llvm::InstCombinerImpl::visitAllocaInst(), llvm::ObjectSizeOffsetVisitor::visitAllocaInst(), llvm::ObjectSizeOffsetEvaluator::visitAllocaInst(), llvm::Interpreter::visitAllocaInst(), llvm::ObjectSizeOffsetVisitor::visitArgument(), llvm::InstCombinerImpl::visitGetElementPtrInst(), and llvm::ObjectSizeOffsetVisitor::visitGlobalVariable().
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 474 of file DataLayout.h.
References getTypeAllocSize().
Referenced by getTypeSizeInBits().
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 621 of file DataLayout.h.
References llvm::Type::ArrayTyID, assert(), llvm::Type::BFloatTyID, 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::Type::getIntegerBitWidth(), llvm::ArrayType::getNumElements(), llvm::Type::getPointerAddressSpace(), getPointerSizeInBits(), llvm::StructLayout::getSizeInBits(), getStructLayout(), getTypeAllocSizeInBits(), llvm::Type::getTypeID(), getTypeSizeInBits(), llvm::Type::HalfTyID, llvm::Type::IntegerTyID, llvm::Type::isSized(), 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(), llvm::FastISel::canFoldAddIntoGEP(), computeKnownBits(), computeKnownBitsForHorizontalOperation(), computeKnownBitsFromOperator(), ComputeNumSignBitsImpl(), llvm::OpenMPIRBuilder::createTask(), llvm::InstCombinerImpl::foldIntegerTypedPHI(), llvm::TargetTransformInfoImplBase::getCastInstrCost(), llvm::RISCVTTIImpl::getCastInstrCost(), llvm::ExecutionEngine::getConstantValue(), llvm::HexagonTTIImpl::getInstructionCost(), llvm::ARMTTIImpl::getInterleavedMemoryOpCost(), llvm::X86TTIImpl::getInterleavedMemoryOpCost(), llvm::X86TTIImpl::getMemoryOpCost(), llvm::RISCVTTIImpl::getMinMaxReductionCost(), getPreferredAlign(), llvm::RISCVTTIImpl::getRegUsageForType(), llvm::X86TTIImpl::getReplicationShuffleCost(), llvm::GCNTTIImpl::getShuffleCost(), llvm::ScalarEvolution::getTypeSizeInBits(), getTypeSizeInBits(), getTypeStoreSize(), llvm::GCNTTIImpl::getVectorInstrCost(), llvm::R600TTIImpl::getVectorInstrCost(), isKnownNonZeroFromOperator(), llvm::PatternMatch::PtrToIntSameSize_match< Op_t >::match(), llvm::OpenMPIRBuilder::registerTargetGlobalVariable(), simplifyAMDGCNMemoryIntrinsicDemanded(), simplifyGEPInst(), simplifyICmpInst(), solveDIType(), tocDataChecks(), typeSizeEqualsStoreSize(), and llvm::InstCombinerImpl::visitShuffleVectorInst().
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 429 of file DataLayout.h.
References llvm::divideCeil(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), getTypeSizeInBits(), and llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isScalable().
Referenced by llvm::FastISel::createMachineMemOperandFor(), llvm::OpenMPIRBuilder::createReductionsGPU(), llvm::OpenMPIRBuilder::createTask(), emitGlobalConstantLargeInt(), llvm::OpenMPIRBuilder::emitTargetTask(), llvm::X86TTIImpl::getInterleavedMemoryOpCostAVX512(), llvm::RISCVTTIImpl::getPointersChainCost(), llvm::X86TTIImpl::getShuffleCost(), getTypeAllocSize(), getTypeStoreSizeInBits(), llvm::X86TTIImpl::isLegalNTLoad(), llvm::TargetTransformInfoImplBase::isLegalNTLoad(), llvm::X86TTIImpl::isLegalNTStore(), llvm::TargetTransformInfoImplBase::isLegalNTStore(), llvm::ExecutionEngine::LoadValueFromMemory(), llvm::SPIRVCallLowering::lowerCall(), llvm::promoteLoopAccessesToScalars(), and llvm::ExecutionEngine::StoreValueToMemory().
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 441 of file DataLayout.h.
References getTypeStoreSize().
Referenced by llvm::slpvectorizer::BoUpSLP::canMapToVector(), llvm::RISCVTTIImpl::getMemoryOpCost(), and typeSizeEqualsStoreSize().
|
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 483 of file DataLayout.h.
References getABITypeAlign().
|
inline |
Definition at line 265 of file DataLayout.h.
|
inline |
Definition at line 255 of file DataLayout.h.
|
inline |
Definition at line 196 of file DataLayout.h.
Referenced by llvm::DwarfExpression::addConstantFP(), canCombineShuffleToExtendVectorInreg(), combineShuffleToAnyExtendVectorInreg(), combineShuffleToZeroExtendVectorInReg(), combineTruncationShuffle(), createGPRPairNode(), emitGlobalConstantFP(), llvm::RISCVInstrInfo::foldMemoryOperandImpl(), foldVecTruncToExtElt(), getCopyFromParts(), getCopyToParts(), getPPCf128HiElementSelector(), isExtendedBUILD_VECTOR(), isVMOVModifiedImm(), llvm::LegalizerHelper::lowerLoad(), LowerPredicateLoad(), LowerPredicateStore(), llvm::CombinerHelper::matchLoadOrCombine(), matchPERM(), narrowExtractedVectorLoad(), optimizeIntegerToVectorInsertions(), optimizeVectorResizeWithIntegerBitCasts(), PerformBITCASTCombine(), PerformSTORECombine(), PerformTruncatingStoreCombine(), PerformVMOVRRDCombine(), llvm::AArch64TargetLowering::ReconstructShuffle(), reduceBuildVecToShuffleWithZero(), llvm::LegalizerHelper::reduceLoadStoreWidth(), ReplaceATOMIC_LOAD_128Results(), ReplaceCMP_SWAP_128Results(), ReplaceCMP_SWAP_64Results(), llvm::TargetLowering::scalarizeVectorLoad(), llvm::TargetLowering::scalarizeVectorStore(), SkipExtensionForVMULL(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitInsertElementInst(), llvm::InstCombinerImpl::visitShuffleVectorInst(), and llvm::InstCombinerImpl::visitTrunc().
|
inline |
Test if the DataLayout was constructed from an empty string.
Definition at line 208 of file DataLayout.h.
Referenced by llvm::ExecutionEngine::getMangledName().
Definition at line 221 of file DataLayout.h.
References isLegalInteger().
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 217 of file DataLayout.h.
References llvm::is_contained().
Referenced by llvm::TargetTransformInfoImplBase::getCastInstrCost(), isIllegalInteger(), llvm::InstCombinerImpl::visitBitCast(), and visitIVCast().
|
inline |
Layout endianness...
Definition at line 195 of file DataLayout.h.
Referenced by llvm::DwarfUnit::addConstantValue(), addShuffleForVecExtend(), llvm::SparcTargetLowering::bitcastConstantFPToInt(), combineBVOfVecSExt(), llvm::SelectionDAG::computeKnownBits(), computeKnownBitsFromOperator(), llvm::SelectionDAG::ComputeNumSignBits(), llvm::DwarfDebug::emitDebugLocEntry(), llvm::TargetLowering::expandUnalignedLoad(), llvm::TargetLowering::expandUnalignedStore(), llvm::SelectionDAG::FoldConstantArithmetic(), llvm::TargetLowering::forceExpandWideMUL(), getMemsetStringVal(), llvm::PPC::getSplatIdxForPPCMnemonics(), llvm::TargetInstrInfo::getStackSlotRange(), llvm::PPCTTIImpl::instCombineIntrinsic(), llvm::PPC::isVMRGEOShuffleMask(), llvm::PPC::isVMRGHShuffleMask(), llvm::PPC::isVMRGLShuffleMask(), llvm::PPC::isVPKUDUMShuffleMask(), llvm::PPC::isVPKUHUMShuffleMask(), llvm::PPC::isVPKUWUMShuffleMask(), llvm::PPC::isVSLDOIShuffleMask(), LowerF64Op(), LowerFNEGorFABS(), llvm::SparcTargetLowering::LowerFormalArguments_32(), LowerSTORE(), performUzpCombine(), ShrinkLoadReplaceStoreWithStore(), llvm::TargetLowering::SimplifyDemandedBits(), llvm::TargetLowering::SimplifyDemandedVectorElts(), llvm::TargetLowering::SimplifyMultipleUseDemandedBits(), and llvm::TargetLowering::SimplifySetCC().
Definition at line 350 of file DataLayout.h.
References getNonIntegralAddressSpaces(), and llvm::is_contained().
Referenced by llvm::GISelKnownBits::computeKnownBitsImpl(), isNonIntegralPointerType(), and llvm::LegalizerHelper::lowerMergeValues().
|
inline |
Definition at line 355 of file DataLayout.h.
References llvm::PointerType::getAddressSpace(), and isNonIntegralAddressSpace().
Referenced by isNonIntegralPointerType().
Definition at line 359 of file DataLayout.h.
References isNonIntegralPointerType().
|
inline |
Definition at line 188 of file DataLayout.h.
References llvm::Other.
DataLayout & DataLayout::operator= | ( | const DataLayout & | Other | ) |
Definition at line 223 of file DataLayout.cpp.
References llvm::Other.
bool DataLayout::operator== | ( | const DataLayout & | Other | ) | const |
Definition at line 246 of file DataLayout.cpp.
References llvm::Other.
|
static |
Parse a data layout string and return the layout.
Return an error description on failure.
Definition at line 264 of file DataLayout.cpp.
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 449 of file DataLayout.h.
References getTypeSizeInBits(), and getTypeStoreSizeInBits().