LLVM API Documentation

Public Member Functions | Static Public Member Functions
llvm::DataLayout Class Reference

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

#include <DataLayout.h>

List of all members.

Public Member Functions

 DataLayout (StringRef LayoutDescription)
 Constructs a DataLayout from a specification string. See reset().
 DataLayout (const Module *M)
 Initialize target data from properties stored in the module.
void init (const Module *M)
 DataLayout (const DataLayout &DL)
DataLayoutoperator= (const DataLayout &DL)
bool operator== (const DataLayout &Other) const
bool operator!= (const DataLayout &Other) const
 ~DataLayout ()
void reset (StringRef LayoutDescription)
 Parse a data layout string (with fallback to default values).
bool isLittleEndian () const
 Layout endianness...
bool isBigEndian () const
std::string getStringRepresentation () const
 Returns the string representation of the DataLayout.
bool isLegalInteger (unsigned Width) const
 Returns true if the specified type is known to be a native integer type supported by the CPU.
bool isIllegalInteger (unsigned Width) const
bool exceedsNaturalStackAlignment (unsigned Align) const
 Returns true if the given alignment exceeds the natural stack alignment.
unsigned getStackAlignment () const
bool hasMicrosoftFastStdCallMangling () const
bool hasLinkerPrivateGlobalPrefix () const
const char * getLinkerPrivateGlobalPrefix () const
char getGlobalPrefix () const
const char * getPrivateGlobalPrefix () const
bool fitsInLegalInteger (unsigned Width) const
 Returns true if the specified type fits in a native integer type supported by the CPU.
unsigned getPointerABIAlignment (unsigned AS=0) const
unsigned getPointerPrefAlignment (unsigned AS=0) const
unsigned getPointerSize (unsigned AS=0) const
unsigned getPointerSizeInBits (unsigned AS=0) const
unsigned getPointerTypeSizeInBits (Type *) const
unsigned getPointerTypeSize (Type *Ty) const
uint64_t getTypeSizeInBits (Type *Ty) const
 Returns the number of bits necessary to hold the specified type.
uint64_t getTypeStoreSize (Type *Ty) const
 Returns the maximum number of bytes that may be overwritten by storing the specified type.
uint64_t getTypeStoreSizeInBits (Type *Ty) const
 Returns the maximum number of bits that may be overwritten by storing the specified type; always a multiple of 8.
uint64_t getTypeAllocSize (Type *Ty) const
 Returns the offset in bytes between successive objects of the specified type, including alignment padding.
uint64_t getTypeAllocSizeInBits (Type *Ty) const
 Returns the offset in bits between successive objects of the specified type, including alignment padding; always a multiple of 8.
unsigned getABITypeAlignment (Type *Ty) const
 Returns the minimum ABI-required alignment for the specified type.
unsigned getABIIntegerTypeAlignment (unsigned BitWidth) const
 Returns the minimum ABI-required alignment for an integer type of the specified bitwidth.
unsigned getPrefTypeAlignment (Type *Ty) const
 Returns the preferred stack/global alignment for the specified type.
unsigned getPreferredTypeAlignmentShift (Type *Ty) const
 Returns the preferred alignment for the specified type, returned as log2 of the value (a shift amount).
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.
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.
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.
unsigned getLargestLegalIntTypeSize () const
 Returns the size of largest legal integer type size, or 0 if none are set.
uint64_t getIndexedOffset (Type *Ty, ArrayRef< Value * > Indices) const
 Returns the offset from the beginning of the type for the specified indices.
const StructLayoutgetStructLayout (StructType *Ty) const
 Returns a StructLayout object, indicating the alignment of the struct, its size, and the offsets of its fields.
unsigned getPreferredAlignment (const GlobalVariable *GV) const
 Returns the preferred alignment of the specified global.
unsigned getPreferredAlignmentLog (const GlobalVariable *GV) const
 Returns the preferred alignment of the specified global, returned in log form.

Static Public Member Functions

static const char * getManglingComponent (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 99 of file DataLayout.h.


Constructor & Destructor Documentation

llvm::DataLayout::DataLayout ( StringRef  LayoutDescription) [inline, explicit]

Constructs a DataLayout from a specification string. See reset().

Definition at line 170 of file DataLayout.h.

References reset().

DataLayout::DataLayout ( const Module M) [explicit]

Initialize target data from properties stored in the module.

Definition at line 366 of file DataLayout.cpp.

References init().

Definition at line 179 of file DataLayout.h.

Definition at line 517 of file DataLayout.cpp.


Member Function Documentation

Returns true if the given alignment exceeds the natural stack alignment.

Definition at line 227 of file DataLayout.h.

Referenced by enforceKnownAlignment(), and getMemcpyLoadsAndStores().

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 280 of file DataLayout.h.

Referenced by llvm::MemoryDependenceAnalysis::getLoadLoadClobberFullWidthSize(), and SwitchToLookupTable().

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

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

Definition at line 712 of file DataLayout.cpp.

References llvm::INTEGER_ALIGN.

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

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

Definition at line 245 of file DataLayout.h.

References llvm_unreachable.

Referenced by llvm::Mangler::getNameWithPrefix().

uint64_t DataLayout::getIndexedOffset ( Type Ty,
ArrayRef< Value * >  Indices 
) const
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 726 of file DataLayout.cpp.

References llvm::IntegerType::get(), and getPointerSizeInBits().

Referenced by llvm::IntrinsicLowering::AddPrototypes(), CastGEPIndices(), CoerceAvailableValueToLoadType(), llvm::ObjectSizeOffsetEvaluator::compute(), llvm::ConstantFoldCompareInstOperands(), convertPointerToIntegerType(), convertValue(), llvm::EmitFWrite(), llvm::EmitGEPOffset(), llvm::EmitMemChr(), llvm::EmitMemCmp(), llvm::EmitMemCpyChk(), llvm::EmitStrLen(), llvm::EmitStrNCmp(), llvm::EmitStrNLen(), llvm::XCoreSelectionDAGInfo::EmitTargetCodeForMemcpy(), llvm::AArch64SelectionDAGInfo::EmitTargetCodeForMemset(), llvm::X86SelectionDAGInfo::EmitTargetCodeForMemset(), llvm::ARMSelectionDAGInfo::EmitTargetCodeForMemset(), EvaluateGEPOffsetExpression(), llvm::SimplifyFortifiedLibCalls::fold(), GetConstantInt(), llvm::ScalarEvolution::getEffectiveSCEVType(), llvm::IRBuilderBase::getIntPtrTy(), llvm::SelectionDAG::getMemcpy(), llvm::SelectionDAG::getMemmove(), llvm::SelectionDAG::getMemset(), GetStoreValueForLoad(), llvm::FastISel::hasTrivialKill(), isEliminableCastPair(), llvm::CastInst::isNoopCast(), llvm::AsmPrinter::lowerConstant(), llvm::IntrinsicLowering::LowerIntrinsicCall(), PerformHeapAllocSRoA(), ReadDataFromGlobal(), SimplifyBranchOnICmpChain(), stripAndComputeConstantOffsets(), SymbolicallyEvaluateGEP(), TryToOptimizeStoreOfMallocToGlobal(), llvm::InstCombiner::visitAllocaInst(), and llvm::PtrUseVisitor< SliceBuilder >::visitPtr().

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 731 of file DataLayout.cpp.

References llvm::IntegerType::get(), llvm::VectorType::get(), llvm::Type::getContext(), getPointerTypeSizeInBits(), and llvm::Type::isPtrOrPtrVectorTy().

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

Definition at line 408 of file DataLayout.h.

References llvm::Type::getIntNTy(), and getLargestLegalIntTypeSize().

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

Definition at line 748 of file DataLayout.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::begin(), and llvm::SmallVectorTemplateCommon< T, typename >::end().

Referenced by getLargestLegalIntType().

Definition at line 239 of file DataLayout.h.

References getPrivateGlobalPrefix().

Referenced by llvm::MachineFunction::getJTISymbol(), and getNameWithPrefixx().

Layout pointer alignment FIXME: The defaults need to be removed once all of the backends/clients are updated.

Definition at line 607 of file DataLayout.cpp.

References llvm::PointerAlignElem::ABIAlign, llvm::PointerAlignElem::AddressSpace, and llvm::SmallVectorTemplateCommon< T, typename >::end().

Referenced by llvm::TargetLoweringObjectFileELF::emitPersonalityValue(), and 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 616 of file DataLayout.cpp.

References llvm::PointerAlignElem::AddressSpace, llvm::SmallVectorTemplateCommon< T, typename >::end(), and llvm::PointerAlignElem::PrefAlign.

Referenced by FindOptimalMemOpLowering(), and getOpenCLAlignment().

Definition at line 316 of file DataLayout.h.

References getPointerTypeSizeInBits().

Referenced by llvm::AsmPrinter::EmitGlobalVariable().

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 634 of file DataLayout.cpp.

References llvm::Type::getScalarType(), getTypeSizeInBits(), llvm::Type::isPointerTy(), and llvm::Type::isPtrOrPtrVectorTy().

Referenced by llvm::ObjectSizeOffsetVisitor::compute(), llvm::ConstantFoldInstOperands(), getBitWidth(), getIntPtrType(), getNaturalGEPWithType(), llvm::getOrEnforceKnownAlignment(), llvm::GetPointerBaseWithConstantOffset(), getPointerTypeSize(), llvm::CastInst::isBitOrNoopPointerCastable(), IsConstantOffsetFromGlobal(), and llvm::AsmPrinter::lowerConstant().

Returns the preferred alignment of the specified global.

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

getPreferredAlignment - Return the preferred alignment of the specified global. This includes an explicitly requested alignment (if the global has one).

Definition at line 793 of file DataLayout.cpp.

References getABITypeAlignment(), llvm::GlobalObject::getAlignment(), llvm::SequentialType::getElementType(), getPrefTypeAlignment(), llvm::GlobalValue::getType(), getTypeSizeInBits(), and llvm::GlobalVariable::hasInitializer().

Referenced by computeKnownBits(), getPreferredAlignmentLog(), LLVMPreferredAlignmentOfGlobal(), llvm::TargetLoweringObjectFileELF::SelectSectionForGlobal(), and llvm::TargetLoweringObjectFileMachO::SelectSectionForGlobal().

Returns the preferred alignment of the specified global, returned in log form.

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

getPreferredAlignmentLog - Return the preferred alignment of the specified global, returned in log form. This includes an explicitly requested alignment (if the global has one).

Definition at line 817 of file DataLayout.cpp.

References getPreferredAlignment(), and llvm::Log2_32().

Referenced by getGVAlignmentLog2().

Returns the preferred alignment for the specified type, returned as log2 of the value (a shift amount).

Definition at line 720 of file DataLayout.cpp.

References getPrefTypeAlignment(), and llvm::Log2_32().

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

Definition at line 741 of file DataLayout.cpp.

References llvm::Type::getIntNTy().

Definition at line 231 of file DataLayout.h.

std::string DataLayout::getStringRepresentation ( ) const

Returns the string representation of the DataLayout.

This representation is in the same format accepted by the string constructor above.

Definition at line 544 of file DataLayout.cpp.

References llvm::sys::path::begin(), DefaultAlignments, llvm::SmallVectorBase::empty(), llvm::sys::path::end(), if(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and llvm::raw_string_ostream::str().

Referenced by LLVMCopyStringRepOfTargetData(), operator==(), and llvm::Module::setDataLayout().

uint64_t llvm::DataLayout::getTypeAllocSize ( Type Ty) const [inline]

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

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 364 of file DataLayout.h.

References getABITypeAlignment(), getTypeStoreSize(), and llvm::RoundUpToAlignment().

Referenced by llvm::GEPOperator::accumulateConstantOffset(), addByteCountSuffix(), computeArraySize(), llvm::ComputeValueVTs(), DecomposeGEPExpression(), llvm::AsmPrinter::EmitConstantPool(), llvm::EmitGEPOffset(), llvm::AsmPrinter::EmitGlobalConstant(), emitGlobalConstantArray(), emitGlobalConstantDataSequential(), emitGlobalConstantFP(), emitGlobalConstantImpl(), emitGlobalConstantLargeInt(), emitGlobalConstantStruct(), emitGlobalConstantVector(), llvm::AsmPrinter::EmitGlobalVariable(), llvm::ExecutionEngine::EmitGlobalVariable(), llvm::SystemZAsmPrinter::EmitMachineConstantPoolValue(), llvm::ARMAsmPrinter::EmitMachineConstantPoolValue(), llvm::ARMAsmPrinter::EmitXXStructor(), EvaluateGEPOffsetExpression(), FoldReinterpretLoadFromConstPtr(), getGEPInductionOperand(), getIndexedOffset(), llvm::TargetLoweringObjectFile::getKindForGlobal(), getNaturalGEPRecursively(), getNaturalGEPWithOffset(), GetOffsetFromIndex(), llvm::NVPTXTargetLowering::getPrototype(), llvm::MachineConstantPoolEntry::getSectionKind(), llvm::ScalarEvolution::getSizeOfExpr(), llvm::SparcTargetLowering::getSRetArgSize(), getStrideFromPointer(), llvm::AArch64TargetLowering::getTgtMemIntrinsic(), llvm::ARMTargetLowering::getTgtMemIntrinsic(), getTypeAllocSizeInBits(), getTypePartition(), INITIALIZE_TM_PASS(), llvm::ExecutionEngine::InitializeMemory(), llvm::InlineFunction(), llvm::MipsTargetObjectFile::IsConstantInSmallSection(), isGEPKnownNonNull(), llvm::HexagonTargetObjectFile::IsGlobalInSmallSection(), llvm::MipsTargetObjectFile::IsGlobalInSmallSectionImpl(), llvm::XCoreTargetLowering::isLegalAddressingMode(), isRepeatedByteSequence(), isSafeToEliminateVarargsCast(), IsSmallObject(), isStridedPtr(), LLVMABISizeOfType(), llvm::NVPTXTargetLowering::LowerCall(), llvm::FastISel::lowerCallTo(), llvm::TargetLowering::LowerCallTo(), llvm::AsmPrinter::lowerConstant(), llvm::NVPTXTargetLowering::LowerFormalArguments(), llvm::AMDGPUTargetLowering::LowerGlobalAddress(), llvm::NVPTXTargetLowering::LowerReturn(), PerformHeapAllocSRoA(), ReadDataFromGlobal(), llvm::FastISel::selectGetElementPtr(), llvm::XCoreTargetObjectFile::SelectSectionForGlobal(), llvm::FunctionLoweringInfo::set(), SRAGlobal(), stripAggregateTypeWrapping(), SymbolicallyEvaluateGEP(), TryToOptimizeStoreOfMallocToGlobal(), llvm::Interpreter::visitAllocaInst(), llvm::ObjectSizeOffsetVisitor::visitAllocaInst(), llvm::InstCombiner::visitAllocaInst(), llvm::ObjectSizeOffsetEvaluator::visitAllocaInst(), llvm::ObjectSizeOffsetVisitor::visitArgument(), and llvm::ObjectSizeOffsetVisitor::visitGlobalVariable().

uint64_t 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.

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 374 of file DataLayout.h.

References getTypeAllocSize().

Referenced by FoldBitCast(), FoldReinterpretLoadFromConstPtr(), getTypeSizeInBits(), HasPadding(), llvm::NVPTXTargetLowering::LowerCall(), llvm::AsmPrinter::lowerConstant(), and llvm::NVPTXTargetLowering::LowerReturn().

uint64_t llvm::DataLayout::getTypeSizeInBits ( Type Ty) const [inline]

Returns the number of bits necessary to hold the specified type.

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. 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 499 of file DataLayout.h.

References llvm::Type::ArrayTyID, llvm::Type::DoubleTyID, llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::SequentialType::getElementType(), llvm::Type::getIntegerBitWidth(), llvm::ArrayType::getNumElements(), llvm::VectorType::getNumElements(), llvm::Type::getPointerAddressSpace(), getPointerSizeInBits(), llvm::StructLayout::getSizeInBits(), getStructLayout(), getTypeAllocSizeInBits(), llvm::Type::getTypeID(), llvm::Type::HalfTyID, llvm::Type::IntegerTyID, llvm::Type::isSized(), llvm::Type::LabelTyID, llvm_unreachable, llvm::Type::PointerTyID, llvm::Type::PPC_FP128TyID, llvm::Type::StructTyID, llvm::Type::VectorTyID, llvm::Type::X86_FP80TyID, and llvm::Type::X86_MMXTyID.

Referenced by AnalyzeLoadFromClobberingLoad(), AnalyzeLoadFromClobberingStore(), AnalyzeLoadFromClobberingWrite(), CanCoerceMustAliasedValueToLoad(), canConvertValue(), llvm::FastISel::canFoldAddIntoGEP(), CoerceAvailableValueToLoadType(), computeKnownBits(), ComputeNumSignBits(), ConstantFoldLoadThroughBitcast(), FoldBitCast(), llvm::ExecutionEngine::getConstantValue(), GetMemInstValueForLoad(), getMemSetPatternValue(), getNaturalGEPRecursively(), getPointerTypeSizeInBits(), getPreferredAlignment(), GetStoreValueForLoad(), llvm::ScalarEvolution::getTypeSizeInBits(), getTypeStoreSize(), HasPadding(), isIntegerWideningViable(), llvm::AArch64TargetLowering::isLegalAddressingMode(), isSimpleEnoughValueToCommitHelper(), isVectorPromotionViable(), llvm::AMDGPUTargetLowering::isZExtFree(), LLVMSizeOfTypeInBits(), llvm::TargetLowering::ParseConstraints(), stripAggregateTypeWrapping(), SymbolicallyEvaluateBinop(), and SymbolicallyEvaluateGEP().

uint64_t llvm::DataLayout::getTypeStoreSize ( Type Ty) const [inline]
uint64_t 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.

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

Definition at line 355 of file DataLayout.h.

References getTypeStoreSize().

Referenced by llvm::Value::isDereferenceablePointer(), isIntegerWideningViable(), and isIntegerWideningViableForSlice().

Definition at line 237 of file DataLayout.h.

Referenced by llvm::AsmPrinter::EmitJumpTableInfo().

Definition at line 233 of file DataLayout.h.

Referenced by llvm::Mangler::getNameWithPrefix().

void DataLayout::init ( const Module M)

Definition at line 370 of file DataLayout.cpp.

References llvm::Module::getDataLayout(), Other, and reset().

Referenced by DataLayout().

bool llvm::DataLayout::isBigEndian ( ) const [inline]

Definition at line 224 of file DataLayout.h.

References isLegalInteger().

bool llvm::DataLayout::isLegalInteger ( unsigned  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 217 of file DataLayout.h.

Referenced by llvm::IVUsers::AddUsersImpl(), FindLoopCounter(), isIllegalInteger(), isIntegerWideningViable(), visitIVCast(), and llvm::InstCombiner::visitPHINode().

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

Definition at line 193 of file DataLayout.h.

References Other.

DataLayout& llvm::DataLayout::operator= ( const DataLayout DL) [inline]

Definition at line 181 of file DataLayout.h.

References isBigEndian().

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

Definition at line 378 of file DataLayout.cpp.

References getStringRepresentation(), and llvm::MipsISD::Ret.

void DataLayout::reset ( StringRef  LayoutDescription)

Parse a data layout string (with fallback to default values).

Definition at line 178 of file DataLayout.cpp.

References DefaultAlignments.

Referenced by DataLayout(), init(), and llvm::Module::setDataLayout().


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