1 //===-- TargetData.cpp - Data size & alignment routines --------------------==//
3 // The LLVM Compiler Infrastructure
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines target properties related to datatype size/offset/alignment
13 // This structure should be created once, filled in if the defaults are not
14 // correct and then passed around by const&. None of the members functions
15 // require modification to the object.
17 //===----------------------------------------------------------------------===//
19 #include "llvm/Target/TargetData.h"
20 #include "llvm/Module.h"
21 #include "llvm/DerivedTypes.h"
22 #include "llvm/Constants.h"
23 #include "llvm/Support/GetElementPtrTypeIterator.h"
24 #include "llvm/Support/MathExtras.h"
25 #include "llvm/Support/ManagedStatic.h"
26 #include "llvm/ADT/DenseMap.h"
27 #include "llvm/ADT/StringExtras.h"
33 // Handle the Pass registration stuff necessary to use TargetData's.
35 // Register the default SparcV9 implementation...
36 RegisterPass<TargetData> X("targetdata", "Target Data Layout");
38 char TargetData::ID = 0;
40 //===----------------------------------------------------------------------===//
41 // Support for StructLayout
42 //===----------------------------------------------------------------------===//
44 StructLayout::StructLayout(const StructType *ST, const TargetData &TD) {
47 NumElements = ST->getNumElements();
49 // Loop over each of the elements, placing them in memory...
50 for (unsigned i = 0, e = NumElements; i != e; ++i) {
51 const Type *Ty = ST->getElementType(i);
54 TyAlign = (ST->isPacked() ? 1 : TD.getABITypeAlignment(Ty));
55 TySize = TD.getTypeSize(Ty);
57 // Add padding if necessary to make the data element aligned properly...
58 if (StructSize % TyAlign != 0)
59 StructSize = (StructSize/TyAlign + 1) * TyAlign; // Add padding...
61 // Keep track of maximum alignment constraint
62 StructAlignment = std::max(TyAlign, StructAlignment);
64 MemberOffsets[i] = StructSize;
65 StructSize += TySize; // Consume space for this data item
68 // Empty structures have alignment of 1 byte.
69 if (StructAlignment == 0) StructAlignment = 1;
71 // Add padding to the end of the struct so that it could be put in an array
72 // and all array elements would be aligned correctly.
73 if (StructSize % StructAlignment != 0)
74 StructSize = (StructSize/StructAlignment + 1) * StructAlignment;
78 /// getElementContainingOffset - Given a valid offset into the structure,
79 /// return the structure index that contains it.
80 unsigned StructLayout::getElementContainingOffset(uint64_t Offset) const {
82 std::upper_bound(&MemberOffsets[0], &MemberOffsets[NumElements], Offset);
83 assert(SI != &MemberOffsets[0] && "Offset not in structure type!");
85 assert(*SI <= Offset && "upper_bound didn't work");
86 assert((SI == &MemberOffsets[0] || *(SI-1) <= Offset) &&
87 (SI+1 == &MemberOffsets[NumElements] || *(SI+1) > Offset) &&
88 "Upper bound didn't work!");
90 // Multiple fields can have the same offset if any of them are zero sized.
91 // For example, in { i32, [0 x i32], i32 }, searching for offset 4 will stop
92 // at the i32 element, because it is the last element at that offset. This is
93 // the right one to return, because anything after it will have a higher
94 // offset, implying that this element is non-empty.
95 return SI-&MemberOffsets[0];
98 //===----------------------------------------------------------------------===//
99 // TargetAlignElem, TargetAlign support
100 //===----------------------------------------------------------------------===//
103 TargetAlignElem::get(AlignTypeEnum align_type, unsigned char abi_align,
104 unsigned char pref_align, uint32_t bit_width) {
105 TargetAlignElem retval;
106 retval.AlignType = align_type;
107 retval.ABIAlign = abi_align;
108 retval.PrefAlign = pref_align;
109 retval.TypeBitWidth = bit_width;
114 TargetAlignElem::operator==(const TargetAlignElem &rhs) const {
115 return (AlignType == rhs.AlignType
116 && ABIAlign == rhs.ABIAlign
117 && PrefAlign == rhs.PrefAlign
118 && TypeBitWidth == rhs.TypeBitWidth);
122 TargetAlignElem::dump(std::ostream &os) const {
123 return os << AlignType
125 << ":" << (int) (ABIAlign * 8)
126 << ":" << (int) (PrefAlign * 8);
129 const TargetAlignElem TargetData::InvalidAlignmentElem =
130 TargetAlignElem::get((AlignTypeEnum) -1, 0, 0, 0);
132 //===----------------------------------------------------------------------===//
133 // TargetData Class Implementation
134 //===----------------------------------------------------------------------===//
137 A TargetDescription string consists of a sequence of hyphen-delimited
138 specifiers for target endianness, pointer size and alignments, and various
139 primitive type sizes and alignments. A typical string looks something like:
141 "E-p:32:32:32-i1:8:8-i8:8:8-i32:32:32-i64:32:64-f32:32:32-f64:32:64"
143 (note: this string is not fully specified and is only an example.)
145 Alignments come in two flavors: ABI and preferred. ABI alignment (abi_align,
146 below) dictates how a type will be aligned within an aggregate and when used
147 as an argument. Preferred alignment (pref_align, below) determines a type's
148 alignment when emitted as a global.
150 Specifier string details:
152 <i>[E|e]</i>: Endianness. "E" specifies a big-endian target data model, "e"
153 specifies a little-endian target data model.
155 <i>p:@verbatim<size>:<abi_align>:<pref_align>@endverbatim</i>: Pointer size,
156 ABI and preferred alignment.
158 <i>@verbatim<type><size>:<abi_align>:<pref_align>@endverbatim</i>: Numeric type alignment. Type is
159 one of <i>i|f|v|a</i>, corresponding to integer, floating point, vector (aka
160 packed) or aggregate. Size indicates the size, e.g., 32 or 64 bits.
162 The default string, fully specified is:
164 "E-p:64:64:64-a0:0:0-f32:32:32-f64:0:64"
165 "-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:0:64"
166 "-v64:64:64-v128:128:128"
168 Note that in the case of aggregates, 0 is the default ABI and preferred
169 alignment. This is a special case, where the aggregate's computed worst-case
170 alignment will be used.
172 void TargetData::init(const std::string &TargetDescription) {
173 std::string temp = TargetDescription;
175 LittleEndian = false;
178 PointerPrefAlign = PointerABIAlign;
180 // Default alignments
181 setAlignment(INTEGER_ALIGN, 1, 1, 1); // Bool
182 setAlignment(INTEGER_ALIGN, 1, 1, 8); // Byte
183 setAlignment(INTEGER_ALIGN, 2, 2, 16); // short
184 setAlignment(INTEGER_ALIGN, 4, 4, 32); // int
185 setAlignment(INTEGER_ALIGN, 4, 8, 64); // long
186 setAlignment(FLOAT_ALIGN, 4, 4, 32); // float
187 setAlignment(FLOAT_ALIGN, 8, 8, 64); // double
188 setAlignment(VECTOR_ALIGN, 8, 8, 64); // v2i32
189 setAlignment(VECTOR_ALIGN, 16, 16, 128); // v16i8, v8i16, v4i32, ...
190 setAlignment(AGGREGATE_ALIGN, 0, 8, 0); // struct, union, class, ...
192 while (!temp.empty()) {
193 std::string token = getToken(temp, "-");
194 std::string arg0 = getToken(token, ":");
195 const char *p = arg0.c_str();
198 LittleEndian = false;
204 PointerMemSize = atoi(getToken(token,":").c_str()) / 8;
205 PointerABIAlign = atoi(getToken(token,":").c_str()) / 8;
206 PointerPrefAlign = atoi(getToken(token,":").c_str()) / 8;
207 if (PointerPrefAlign == 0)
208 PointerPrefAlign = PointerABIAlign;
215 AlignTypeEnum align_type;
217 case 'i': align_type = INTEGER_ALIGN; break;
218 case 'v': align_type = VECTOR_ALIGN; break;
219 case 'f': align_type = FLOAT_ALIGN; break;
220 case 'a': align_type = AGGREGATE_ALIGN; break;
221 case 's': align_type = STACK_ALIGN; break;
223 uint32_t size = (uint32_t) atoi(++p);
224 unsigned char abi_align = atoi(getToken(token, ":").c_str()) / 8;
225 unsigned char pref_align = atoi(getToken(token, ":").c_str()) / 8;
227 pref_align = abi_align;
228 setAlignment(align_type, abi_align, pref_align, size);
237 TargetData::TargetData(const Module *M)
238 : ImmutablePass((intptr_t)&ID) {
239 init(M->getDataLayout());
243 TargetData::setAlignment(AlignTypeEnum align_type, unsigned char abi_align,
244 unsigned char pref_align, uint32_t bit_width) {
245 for (unsigned i = 0, e = Alignments.size(); i != e; ++i) {
246 if (Alignments[i].AlignType == align_type &&
247 Alignments[i].TypeBitWidth == bit_width) {
248 // Update the abi, preferred alignments.
249 Alignments[i].ABIAlign = abi_align;
250 Alignments[i].PrefAlign = pref_align;
255 Alignments.push_back(TargetAlignElem::get(align_type, abi_align,
256 pref_align, bit_width));
259 /// getAlignmentInfo - Return the alignment (either ABI if ABIInfo = true or
260 /// preferred if ABIInfo = false) the target wants for the specified datatype.
261 unsigned TargetData::getAlignmentInfo(AlignTypeEnum AlignType,
262 uint32_t BitWidth, bool ABIInfo) const {
263 // Check to see if we have an exact match and remember the best match we see.
264 int BestMatchIdx = -1;
266 for (unsigned i = 0, e = Alignments.size(); i != e; ++i) {
267 if (Alignments[i].AlignType == AlignType &&
268 Alignments[i].TypeBitWidth == BitWidth)
269 return ABIInfo ? Alignments[i].ABIAlign : Alignments[i].PrefAlign;
271 // The best match so far depends on what we're looking for.
272 if (AlignType == VECTOR_ALIGN) {
273 // If this is a specification for a smaller vector type, we will fall back
274 // to it. This happens because <128 x double> can be implemented in terms
275 // of 64 <2 x double>.
276 if (Alignments[i].AlignType == VECTOR_ALIGN &&
277 Alignments[i].TypeBitWidth < BitWidth) {
278 // Verify that we pick the biggest of the fallbacks.
279 if (BestMatchIdx == -1 ||
280 Alignments[BestMatchIdx].TypeBitWidth < BitWidth)
283 } else if (AlignType == INTEGER_ALIGN &&
284 Alignments[i].AlignType == INTEGER_ALIGN) {
285 // The "best match" for integers is the smallest size that is larger than
286 // the BitWidth requested.
287 if (Alignments[i].TypeBitWidth > BitWidth && (BestMatchIdx == -1 ||
288 Alignments[i].TypeBitWidth < Alignments[BestMatchIdx].TypeBitWidth))
290 // However, if there isn't one that's larger, then we must use the
291 // largest one we have (see below)
292 if (LargestInt == -1 ||
293 Alignments[i].TypeBitWidth > Alignments[LargestInt].TypeBitWidth)
298 // For integers, if we didn't find a best match, use the largest one found.
299 if (BestMatchIdx == -1)
300 BestMatchIdx = LargestInt;
302 // Okay, we didn't find an exact solution. Fall back here depending on what
303 // is being looked for.
304 assert(BestMatchIdx != -1 && "Didn't find alignment info for this datatype!");
306 // Since we got a "best match" index, just return it.
307 return ABIInfo ? Alignments[BestMatchIdx].ABIAlign
308 : Alignments[BestMatchIdx].PrefAlign;
311 /// LayoutInfo - The lazy cache of structure layout information maintained by
312 /// TargetData. Note that the struct types must have been free'd before
313 /// llvm_shutdown is called (and thus this is deallocated) because all the
314 /// targets with cached elements should have been destroyed.
316 typedef std::pair<const TargetData*,const StructType*> LayoutKey;
318 struct DenseMapLayoutKeyInfo {
319 static inline LayoutKey getEmptyKey() { return LayoutKey(0, 0); }
320 static inline LayoutKey getTombstoneKey() {
321 return LayoutKey((TargetData*)(intptr_t)-1, 0);
323 static unsigned getHashValue(const LayoutKey &Val) {
324 return DenseMapInfo<void*>::getHashValue(Val.first) ^
325 DenseMapInfo<void*>::getHashValue(Val.second);
327 static bool isEqual(const LayoutKey &LHS, const LayoutKey &RHS) {
331 static bool isPod() { return true; }
334 typedef DenseMap<LayoutKey, StructLayout*, DenseMapLayoutKeyInfo> LayoutInfoTy;
335 static ManagedStatic<LayoutInfoTy> LayoutInfo;
338 TargetData::~TargetData() {
339 if (LayoutInfo.isConstructed()) {
340 // Remove any layouts for this TD.
341 LayoutInfoTy &TheMap = *LayoutInfo;
342 for (LayoutInfoTy::iterator I = TheMap.begin(), E = TheMap.end();
344 if (I->first.first == this) {
345 I->second->~StructLayout();
355 const StructLayout *TargetData::getStructLayout(const StructType *Ty) const {
356 LayoutInfoTy &TheMap = *LayoutInfo;
358 StructLayout *&SL = TheMap[LayoutKey(this, Ty)];
361 // Otherwise, create the struct layout. Because it is variable length, we
362 // malloc it, then use placement new.
363 int NumElts = Ty->getNumElements();
365 (StructLayout *)malloc(sizeof(StructLayout)+(NumElts-1)*sizeof(uint64_t));
367 // Set SL before calling StructLayout's ctor. The ctor could cause other
368 // entries to be added to TheMap, invalidating our reference.
371 new (L) StructLayout(Ty, *this);
375 /// InvalidateStructLayoutInfo - TargetData speculatively caches StructLayout
376 /// objects. If a TargetData object is alive when types are being refined and
377 /// removed, this method must be called whenever a StructType is removed to
378 /// avoid a dangling pointer in this cache.
379 void TargetData::InvalidateStructLayoutInfo(const StructType *Ty) const {
380 if (!LayoutInfo.isConstructed()) return; // No cache.
382 LayoutInfoTy::iterator I = LayoutInfo->find(LayoutKey(this, Ty));
383 if (I != LayoutInfo->end()) {
384 I->second->~StructLayout();
386 LayoutInfo->erase(I);
391 std::string TargetData::getStringRepresentation() const {
393 repr.append(LittleEndian ? "e" : "E");
394 repr.append("-p:").append(itostr((int64_t) (PointerMemSize * 8))).
395 append(":").append(itostr((int64_t) (PointerABIAlign * 8))).
396 append(":").append(itostr((int64_t) (PointerPrefAlign * 8)));
397 for (align_const_iterator I = Alignments.begin();
398 I != Alignments.end();
400 repr.append("-").append(1, (char) I->AlignType).
401 append(utostr((int64_t) I->TypeBitWidth)).
402 append(":").append(utostr((uint64_t) (I->ABIAlign * 8))).
403 append(":").append(utostr((uint64_t) (I->PrefAlign * 8)));
409 uint64_t TargetData::getTypeSize(const Type *Ty) const {
410 assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
411 switch (Ty->getTypeID()) {
412 case Type::LabelTyID:
413 case Type::PointerTyID:
414 return getPointerSize();
415 case Type::ArrayTyID: {
416 const ArrayType *ATy = cast<ArrayType>(Ty);
418 unsigned char Alignment;
419 Size = getTypeSize(ATy->getElementType());
420 Alignment = getABITypeAlignment(ATy->getElementType());
421 uint64_t AlignedSize = (Size + Alignment - 1)/Alignment*Alignment;
422 return AlignedSize*ATy->getNumElements();
424 case Type::StructTyID: {
425 // Get the layout annotation... which is lazily created on demand.
426 const StructLayout *Layout = getStructLayout(cast<StructType>(Ty));
427 return Layout->getSizeInBytes();
429 case Type::IntegerTyID: {
430 unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
433 } else if (BitWidth <= 16) {
435 } else if (BitWidth <= 32) {
437 } else if (BitWidth <= 64) {
440 // The size of this > 64 bit type is chosen as a multiple of the
441 // preferred alignment of the largest "native" size the target supports.
442 // We first obtain the the alignment info for this type and then compute
443 // the next largest multiple of that size.
444 uint64_t size = getAlignmentInfo(INTEGER_ALIGN, BitWidth, false) * 8;
445 return (((BitWidth / (size)) + (BitWidth % size != 0)) * size) / 8;
451 case Type::FloatTyID:
453 case Type::DoubleTyID:
455 case Type::PPC_FP128TyID:
456 case Type::FP128TyID:
458 // In memory objects this is always aligned to a higher boundary, but
459 // only 10 bytes contain information.
460 case Type::X86_FP80TyID:
462 case Type::VectorTyID: {
463 const VectorType *PTy = cast<VectorType>(Ty);
464 return PTy->getBitWidth() / 8;
467 assert(0 && "TargetData::getTypeSize(): Unsupported type");
473 uint64_t TargetData::getTypeSizeInBits(const Type *Ty) const {
475 return cast<IntegerType>(Ty)->getBitWidth();
477 return getTypeSize(Ty) * 8;
480 uint64_t TargetData::getABITypeSizeInBits(const Type *Ty) const {
482 return cast<IntegerType>(Ty)->getBitWidth();
484 return getABITypeSize(Ty) * 8;
487 \param abi_or_pref Flag that determines which alignment is returned. true
488 returns the ABI alignment, false returns the preferred alignment.
489 \param Ty The underlying type for which alignment is determined.
491 Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref
492 == false) for the requested type \a Ty.
494 unsigned char TargetData::getAlignment(const Type *Ty, bool abi_or_pref) const {
497 assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
498 switch (Ty->getTypeID()) {
499 /* Early escape for the non-numeric types */
500 case Type::LabelTyID:
501 case Type::PointerTyID:
503 ? getPointerABIAlignment()
504 : getPointerPrefAlignment());
505 case Type::ArrayTyID:
506 return getAlignment(cast<ArrayType>(Ty)->getElementType(), abi_or_pref);
508 case Type::StructTyID: {
509 // Packed structure types always have an ABI alignment of one.
510 if (cast<StructType>(Ty)->isPacked() && abi_or_pref)
513 // Get the layout annotation... which is lazily created on demand.
514 const StructLayout *Layout = getStructLayout(cast<StructType>(Ty));
515 unsigned Align = getAlignmentInfo(AGGREGATE_ALIGN, 0, abi_or_pref);
516 return std::max(Align, (unsigned)Layout->getAlignment());
518 case Type::IntegerTyID:
520 AlignType = INTEGER_ALIGN;
522 case Type::FloatTyID:
523 case Type::DoubleTyID:
524 // PPC_FP128TyID and FP128TyID have different data contents, but the
525 // same size and alignment, so they look the same here.
526 case Type::PPC_FP128TyID:
527 case Type::FP128TyID:
528 case Type::X86_FP80TyID:
529 AlignType = FLOAT_ALIGN;
531 case Type::VectorTyID: {
532 const VectorType *VTy = cast<VectorType>(Ty);
533 // Degenerate vectors are assumed to be scalar-ized
534 if (VTy->getNumElements() == 1)
535 return getAlignment(VTy->getElementType(), abi_or_pref);
537 AlignType = VECTOR_ALIGN;
541 assert(0 && "Bad type for getAlignment!!!");
545 return getAlignmentInfo((AlignTypeEnum)AlignType, getTypeSize(Ty) * 8,
549 unsigned char TargetData::getABITypeAlignment(const Type *Ty) const {
550 return getAlignment(Ty, true);
553 unsigned char TargetData::getCallFrameTypeAlignment(const Type *Ty) const {
554 for (unsigned i = 0, e = Alignments.size(); i != e; ++i)
555 if (Alignments[i].AlignType == STACK_ALIGN)
556 return Alignments[i].ABIAlign;
558 return getABITypeAlignment(Ty);
561 unsigned char TargetData::getPrefTypeAlignment(const Type *Ty) const {
562 return getAlignment(Ty, false);
565 unsigned char TargetData::getPreferredTypeAlignmentShift(const Type *Ty) const {
566 unsigned Align = (unsigned) getPrefTypeAlignment(Ty);
567 assert(!(Align & (Align-1)) && "Alignment is not a power of two!");
568 return Log2_32(Align);
571 /// getIntPtrType - Return an unsigned integer type that is the same size or
572 /// greater to the host pointer size.
573 const Type *TargetData::getIntPtrType() const {
574 return IntegerType::get(getPointerSizeInBits());
578 uint64_t TargetData::getIndexedOffset(const Type *ptrTy, Value* const* Indices,
579 unsigned NumIndices) const {
580 const Type *Ty = ptrTy;
581 assert(isa<PointerType>(Ty) && "Illegal argument for getIndexedOffset()");
584 generic_gep_type_iterator<Value* const*>
585 TI = gep_type_begin(ptrTy, Indices, Indices+NumIndices);
586 for (unsigned CurIDX = 0; CurIDX != NumIndices; ++CurIDX, ++TI) {
587 if (const StructType *STy = dyn_cast<StructType>(*TI)) {
588 assert(Indices[CurIDX]->getType() == Type::Int32Ty &&
589 "Illegal struct idx");
590 unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])->getZExtValue();
592 // Get structure layout information...
593 const StructLayout *Layout = getStructLayout(STy);
595 // Add in the offset, as calculated by the structure layout info...
596 Result += Layout->getElementOffset(FieldNo);
598 // Update Ty to refer to current element
599 Ty = STy->getElementType(FieldNo);
601 // Update Ty to refer to current element
602 Ty = cast<SequentialType>(Ty)->getElementType();
604 // Get the array index and the size of each array element.
605 int64_t arrayIdx = cast<ConstantInt>(Indices[CurIDX])->getSExtValue();
606 Result += arrayIdx * (int64_t)getTypeSize(Ty);
613 /// getPreferredAlignmentLog - Return the preferred alignment of the
614 /// specified global, returned in log form. This includes an explicitly
615 /// requested alignment (if the global has one).
616 unsigned TargetData::getPreferredAlignmentLog(const GlobalVariable *GV) const {
617 const Type *ElemType = GV->getType()->getElementType();
618 unsigned Alignment = getPreferredTypeAlignmentShift(ElemType);
619 if (GV->getAlignment() > (1U << Alignment))
620 Alignment = Log2_32(GV->getAlignment());
622 if (GV->hasInitializer()) {
624 // If the global is not external, see if it is large. If so, give it a
626 if (getTypeSize(ElemType) > 128)
627 Alignment = 4; // 16-byte alignment.