1 //===-- DataLayout.cpp - Data size & alignment routines --------------------==// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines layout properties related to datatype size/offset/alignment 11 // information. 12 // 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. 16 // 17 //===----------------------------------------------------------------------===// 18 19 #include "llvm/IR/DataLayout.h" 20 #include "llvm/ADT/DenseMap.h" 21 #include "llvm/ADT/STLExtras.h" 22 #include "llvm/ADT/Triple.h" 23 #include "llvm/IR/Constants.h" 24 #include "llvm/IR/DerivedTypes.h" 25 #include "llvm/IR/Module.h" 26 #include "llvm/Support/ErrorHandling.h" 27 #include "llvm/Support/GetElementPtrTypeIterator.h" 28 #include "llvm/Support/ManagedStatic.h" 29 #include "llvm/Support/MathExtras.h" 30 #include "llvm/Support/Mutex.h" 31 #include "llvm/Support/raw_ostream.h" 32 #include <algorithm> 33 #include <cstdlib> 34 using namespace llvm; 35 36 // Handle the Pass registration stuff necessary to use DataLayout's. 37 38 // Register the default SparcV9 implementation... 39 INITIALIZE_PASS(DataLayout, "datalayout", "Data Layout", false, true) 40 char DataLayout::ID = 0; 41 42 //===----------------------------------------------------------------------===// 43 // Support for StructLayout 44 //===----------------------------------------------------------------------===// 45 46 StructLayout::StructLayout(StructType *ST, const DataLayout &DL) { 47 assert(!ST->isOpaque() && "Cannot get layout of opaque structs"); 48 StructAlignment = 0; 49 StructSize = 0; 50 NumElements = ST->getNumElements(); 51 52 // Loop over each of the elements, placing them in memory. 53 for (unsigned i = 0, e = NumElements; i != e; ++i) { 54 Type *Ty = ST->getElementType(i); 55 unsigned TyAlign = ST->isPacked() ? 1 : DL.getABITypeAlignment(Ty); 56 57 // Add padding if necessary to align the data element properly. 58 if ((StructSize & (TyAlign-1)) != 0) 59 StructSize = DataLayout::RoundUpAlignment(StructSize, TyAlign); 60 61 // Keep track of maximum alignment constraint. 62 StructAlignment = std::max(TyAlign, StructAlignment); 63 64 MemberOffsets[i] = StructSize; 65 StructSize += DL.getTypeAllocSize(Ty); // Consume space for this data item 66 } 67 68 // Empty structures have alignment of 1 byte. 69 if (StructAlignment == 0) StructAlignment = 1; 70 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-1)) != 0) 74 StructSize = DataLayout::RoundUpAlignment(StructSize, StructAlignment); 75 } 76 77 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 { 81 const uint64_t *SI = 82 std::upper_bound(&MemberOffsets[0], &MemberOffsets[NumElements], Offset); 83 assert(SI != &MemberOffsets[0] && "Offset not in structure type!"); 84 --SI; 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!"); 89 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]; 96 } 97 98 //===----------------------------------------------------------------------===// 99 // LayoutAlignElem, LayoutAlign support 100 //===----------------------------------------------------------------------===// 101 102 LayoutAlignElem 103 LayoutAlignElem::get(AlignTypeEnum align_type, unsigned abi_align, 104 unsigned pref_align, uint32_t bit_width) { 105 assert(abi_align <= pref_align && "Preferred alignment worse than ABI!"); 106 LayoutAlignElem retval; 107 retval.AlignType = align_type; 108 retval.ABIAlign = abi_align; 109 retval.PrefAlign = pref_align; 110 retval.TypeBitWidth = bit_width; 111 return retval; 112 } 113 114 bool 115 LayoutAlignElem::operator==(const LayoutAlignElem &rhs) const { 116 return (AlignType == rhs.AlignType 117 && ABIAlign == rhs.ABIAlign 118 && PrefAlign == rhs.PrefAlign 119 && TypeBitWidth == rhs.TypeBitWidth); 120 } 121 122 const LayoutAlignElem 123 DataLayout::InvalidAlignmentElem = { INVALID_ALIGN, 0, 0, 0 }; 124 125 //===----------------------------------------------------------------------===// 126 // PointerAlignElem, PointerAlign support 127 //===----------------------------------------------------------------------===// 128 129 PointerAlignElem 130 PointerAlignElem::get(uint32_t AddressSpace, unsigned ABIAlign, 131 unsigned PrefAlign, uint32_t TypeByteWidth) { 132 assert(ABIAlign <= PrefAlign && "Preferred alignment worse than ABI!"); 133 PointerAlignElem retval; 134 retval.AddressSpace = AddressSpace; 135 retval.ABIAlign = ABIAlign; 136 retval.PrefAlign = PrefAlign; 137 retval.TypeByteWidth = TypeByteWidth; 138 return retval; 139 } 140 141 bool 142 PointerAlignElem::operator==(const PointerAlignElem &rhs) const { 143 return (ABIAlign == rhs.ABIAlign 144 && AddressSpace == rhs.AddressSpace 145 && PrefAlign == rhs.PrefAlign 146 && TypeByteWidth == rhs.TypeByteWidth); 147 } 148 149 const PointerAlignElem 150 DataLayout::InvalidPointerElem = { 0U, 0U, 0U, ~0U }; 151 152 //===----------------------------------------------------------------------===// 153 // DataLayout Class Implementation 154 //===----------------------------------------------------------------------===// 155 156 const char *DataLayout::getManglingComponent(const Triple &T) { 157 if (T.isOSBinFormatMachO()) 158 return "-m:o"; 159 if (T.isOSBinFormatELF() || T.isArch64Bit()) 160 return "-m:e"; 161 assert(T.isOSBinFormatCOFF()); 162 return "-m:w"; 163 } 164 165 static const LayoutAlignElem DefaultAlignments[] = { 166 { INTEGER_ALIGN, 1, 1, 1 }, // i1 167 { INTEGER_ALIGN, 8, 1, 1 }, // i8 168 { INTEGER_ALIGN, 16, 2, 2 }, // i16 169 { INTEGER_ALIGN, 32, 4, 4 }, // i32 170 { INTEGER_ALIGN, 64, 4, 8 }, // i64 171 { FLOAT_ALIGN, 16, 2, 2 }, // half 172 { FLOAT_ALIGN, 32, 4, 4 }, // float 173 { FLOAT_ALIGN, 64, 8, 8 }, // double 174 { FLOAT_ALIGN, 128, 16, 16 }, // ppcf128, quad, ... 175 { VECTOR_ALIGN, 64, 8, 8 }, // v2i32, v1i64, ... 176 { VECTOR_ALIGN, 128, 16, 16 }, // v16i8, v8i16, v4i32, ... 177 { AGGREGATE_ALIGN, 0, 0, 8 } // struct 178 }; 179 180 void DataLayout::init(StringRef Desc) { 181 initializeDataLayoutPass(*PassRegistry::getPassRegistry()); 182 183 LayoutMap = 0; 184 LittleEndian = false; 185 StackNaturalAlign = 0; 186 ManglingMode = MM_None; 187 188 // Default alignments 189 for (int I = 0, N = array_lengthof(DefaultAlignments); I < N; ++I) { 190 const LayoutAlignElem &E = DefaultAlignments[I]; 191 setAlignment((AlignTypeEnum)E.AlignType, E.ABIAlign, E.PrefAlign, 192 E.TypeBitWidth); 193 } 194 setPointerAlignment(0, 8, 8, 8); 195 196 parseSpecifier(Desc); 197 } 198 199 /// Checked version of split, to ensure mandatory subparts. 200 static std::pair<StringRef, StringRef> split(StringRef Str, char Separator) { 201 assert(!Str.empty() && "parse error, string can't be empty here"); 202 std::pair<StringRef, StringRef> Split = Str.split(Separator); 203 assert((!Split.second.empty() || Split.first == Str) && 204 "a trailing separator is not allowed"); 205 return Split; 206 } 207 208 /// Get an unsigned integer, including error checks. 209 static unsigned getInt(StringRef R) { 210 unsigned Result; 211 bool error = R.getAsInteger(10, Result); (void)error; 212 if (error) 213 report_fatal_error("not a number, or does not fit in an unsigned int"); 214 return Result; 215 } 216 217 /// Convert bits into bytes. Assert if not a byte width multiple. 218 static unsigned inBytes(unsigned Bits) { 219 assert(Bits % 8 == 0 && "number of bits must be a byte width multiple"); 220 return Bits / 8; 221 } 222 223 void DataLayout::parseSpecifier(StringRef Desc) { 224 while (!Desc.empty()) { 225 // Split at '-'. 226 std::pair<StringRef, StringRef> Split = split(Desc, '-'); 227 Desc = Split.second; 228 229 // Split at ':'. 230 Split = split(Split.first, ':'); 231 232 // Aliases used below. 233 StringRef &Tok = Split.first; // Current token. 234 StringRef &Rest = Split.second; // The rest of the string. 235 236 char Specifier = Tok.front(); 237 Tok = Tok.substr(1); 238 239 switch (Specifier) { 240 case 's': 241 // Ignored for backward compatibility. 242 // FIXME: remove this on LLVM 4.0. 243 break; 244 case 'E': 245 LittleEndian = false; 246 break; 247 case 'e': 248 LittleEndian = true; 249 break; 250 case 'p': { 251 // Address space. 252 unsigned AddrSpace = Tok.empty() ? 0 : getInt(Tok); 253 assert(AddrSpace < 1 << 24 && 254 "Invalid address space, must be a 24bit integer"); 255 256 // Size. 257 Split = split(Rest, ':'); 258 unsigned PointerMemSize = inBytes(getInt(Tok)); 259 260 // ABI alignment. 261 Split = split(Rest, ':'); 262 unsigned PointerABIAlign = inBytes(getInt(Tok)); 263 264 // Preferred alignment. 265 unsigned PointerPrefAlign = PointerABIAlign; 266 if (!Rest.empty()) { 267 Split = split(Rest, ':'); 268 PointerPrefAlign = inBytes(getInt(Tok)); 269 } 270 271 setPointerAlignment(AddrSpace, PointerABIAlign, PointerPrefAlign, 272 PointerMemSize); 273 break; 274 } 275 case 'i': 276 case 'v': 277 case 'f': 278 case 'a': { 279 AlignTypeEnum AlignType; 280 switch (Specifier) { 281 default: 282 case 'i': AlignType = INTEGER_ALIGN; break; 283 case 'v': AlignType = VECTOR_ALIGN; break; 284 case 'f': AlignType = FLOAT_ALIGN; break; 285 case 'a': AlignType = AGGREGATE_ALIGN; break; 286 } 287 288 // Bit size. 289 unsigned Size = Tok.empty() ? 0 : getInt(Tok); 290 291 assert((AlignType != AGGREGATE_ALIGN || Size == 0) && 292 "These specifications don't have a size"); 293 294 // ABI alignment. 295 Split = split(Rest, ':'); 296 unsigned ABIAlign = inBytes(getInt(Tok)); 297 298 // Preferred alignment. 299 unsigned PrefAlign = ABIAlign; 300 if (!Rest.empty()) { 301 Split = split(Rest, ':'); 302 PrefAlign = inBytes(getInt(Tok)); 303 } 304 305 setAlignment(AlignType, ABIAlign, PrefAlign, Size); 306 307 break; 308 } 309 case 'n': // Native integer types. 310 for (;;) { 311 unsigned Width = getInt(Tok); 312 assert(Width != 0 && "width must be non-zero"); 313 LegalIntWidths.push_back(Width); 314 if (Rest.empty()) 315 break; 316 Split = split(Rest, ':'); 317 } 318 break; 319 case 'S': { // Stack natural alignment. 320 StackNaturalAlign = inBytes(getInt(Tok)); 321 break; 322 } 323 case 'm': 324 assert(Tok.empty()); 325 assert(Rest.size() == 1); 326 switch(Rest[0]) { 327 default: 328 llvm_unreachable("Unknown mangling in datalayout string"); 329 case 'e': 330 ManglingMode = MM_ELF; 331 break; 332 case 'o': 333 ManglingMode = MM_MachO; 334 break; 335 case 'm': 336 ManglingMode = MM_Mips; 337 break; 338 case 'w': 339 ManglingMode = MM_WINCOFF; 340 break; 341 } 342 break; 343 default: 344 llvm_unreachable("Unknown specifier in datalayout string"); 345 break; 346 } 347 } 348 } 349 350 /// Default ctor. 351 /// 352 /// @note This has to exist, because this is a pass, but it should never be 353 /// used. 354 DataLayout::DataLayout() : ImmutablePass(ID) { 355 report_fatal_error("Bad DataLayout ctor used. " 356 "Tool did not specify a DataLayout to use?"); 357 } 358 359 DataLayout::DataLayout(const Module *M) 360 : ImmutablePass(ID) { 361 init(M->getDataLayout()); 362 } 363 364 void 365 DataLayout::setAlignment(AlignTypeEnum align_type, unsigned abi_align, 366 unsigned pref_align, uint32_t bit_width) { 367 assert(abi_align <= pref_align && "Preferred alignment worse than ABI!"); 368 assert(pref_align < (1 << 16) && "Alignment doesn't fit in bitfield"); 369 assert(bit_width < (1 << 24) && "Bit width doesn't fit in bitfield"); 370 for (unsigned i = 0, e = Alignments.size(); i != e; ++i) { 371 if (Alignments[i].AlignType == (unsigned)align_type && 372 Alignments[i].TypeBitWidth == bit_width) { 373 // Update the abi, preferred alignments. 374 Alignments[i].ABIAlign = abi_align; 375 Alignments[i].PrefAlign = pref_align; 376 return; 377 } 378 } 379 380 Alignments.push_back(LayoutAlignElem::get(align_type, abi_align, 381 pref_align, bit_width)); 382 } 383 384 void DataLayout::setPointerAlignment(uint32_t AddrSpace, unsigned ABIAlign, 385 unsigned PrefAlign, 386 uint32_t TypeByteWidth) { 387 assert(ABIAlign <= PrefAlign && "Preferred alignment worse than ABI!"); 388 DenseMap<unsigned,PointerAlignElem>::iterator val = Pointers.find(AddrSpace); 389 if (val == Pointers.end()) { 390 Pointers[AddrSpace] = 391 PointerAlignElem::get(AddrSpace, ABIAlign, PrefAlign, TypeByteWidth); 392 } else { 393 val->second.ABIAlign = ABIAlign; 394 val->second.PrefAlign = PrefAlign; 395 val->second.TypeByteWidth = TypeByteWidth; 396 } 397 } 398 399 /// getAlignmentInfo - Return the alignment (either ABI if ABIInfo = true or 400 /// preferred if ABIInfo = false) the layout wants for the specified datatype. 401 unsigned DataLayout::getAlignmentInfo(AlignTypeEnum AlignType, 402 uint32_t BitWidth, bool ABIInfo, 403 Type *Ty) const { 404 // Check to see if we have an exact match and remember the best match we see. 405 int BestMatchIdx = -1; 406 int LargestInt = -1; 407 for (unsigned i = 0, e = Alignments.size(); i != e; ++i) { 408 if (Alignments[i].AlignType == (unsigned)AlignType && 409 Alignments[i].TypeBitWidth == BitWidth) 410 return ABIInfo ? Alignments[i].ABIAlign : Alignments[i].PrefAlign; 411 412 // The best match so far depends on what we're looking for. 413 if (AlignType == INTEGER_ALIGN && 414 Alignments[i].AlignType == INTEGER_ALIGN) { 415 // The "best match" for integers is the smallest size that is larger than 416 // the BitWidth requested. 417 if (Alignments[i].TypeBitWidth > BitWidth && (BestMatchIdx == -1 || 418 Alignments[i].TypeBitWidth < Alignments[BestMatchIdx].TypeBitWidth)) 419 BestMatchIdx = i; 420 // However, if there isn't one that's larger, then we must use the 421 // largest one we have (see below) 422 if (LargestInt == -1 || 423 Alignments[i].TypeBitWidth > Alignments[LargestInt].TypeBitWidth) 424 LargestInt = i; 425 } 426 } 427 428 // Okay, we didn't find an exact solution. Fall back here depending on what 429 // is being looked for. 430 if (BestMatchIdx == -1) { 431 // If we didn't find an integer alignment, fall back on most conservative. 432 if (AlignType == INTEGER_ALIGN) { 433 BestMatchIdx = LargestInt; 434 } else { 435 assert(AlignType == VECTOR_ALIGN && "Unknown alignment type!"); 436 437 // By default, use natural alignment for vector types. This is consistent 438 // with what clang and llvm-gcc do. 439 unsigned Align = getTypeAllocSize(cast<VectorType>(Ty)->getElementType()); 440 Align *= cast<VectorType>(Ty)->getNumElements(); 441 // If the alignment is not a power of 2, round up to the next power of 2. 442 // This happens for non-power-of-2 length vectors. 443 if (Align & (Align-1)) 444 Align = NextPowerOf2(Align); 445 return Align; 446 } 447 } 448 449 // Since we got a "best match" index, just return it. 450 return ABIInfo ? Alignments[BestMatchIdx].ABIAlign 451 : Alignments[BestMatchIdx].PrefAlign; 452 } 453 454 namespace { 455 456 class StructLayoutMap { 457 typedef DenseMap<StructType*, StructLayout*> LayoutInfoTy; 458 LayoutInfoTy LayoutInfo; 459 460 public: 461 virtual ~StructLayoutMap() { 462 // Remove any layouts. 463 for (LayoutInfoTy::iterator I = LayoutInfo.begin(), E = LayoutInfo.end(); 464 I != E; ++I) { 465 StructLayout *Value = I->second; 466 Value->~StructLayout(); 467 free(Value); 468 } 469 } 470 471 StructLayout *&operator[](StructType *STy) { 472 return LayoutInfo[STy]; 473 } 474 475 // for debugging... 476 virtual void dump() const {} 477 }; 478 479 } // end anonymous namespace 480 481 DataLayout::~DataLayout() { 482 delete static_cast<StructLayoutMap*>(LayoutMap); 483 } 484 485 bool DataLayout::doFinalization(Module &M) { 486 delete static_cast<StructLayoutMap*>(LayoutMap); 487 LayoutMap = 0; 488 return false; 489 } 490 491 const StructLayout *DataLayout::getStructLayout(StructType *Ty) const { 492 if (!LayoutMap) 493 LayoutMap = new StructLayoutMap(); 494 495 StructLayoutMap *STM = static_cast<StructLayoutMap*>(LayoutMap); 496 StructLayout *&SL = (*STM)[Ty]; 497 if (SL) return SL; 498 499 // Otherwise, create the struct layout. Because it is variable length, we 500 // malloc it, then use placement new. 501 int NumElts = Ty->getNumElements(); 502 StructLayout *L = 503 (StructLayout *)malloc(sizeof(StructLayout)+(NumElts-1) * sizeof(uint64_t)); 504 505 // Set SL before calling StructLayout's ctor. The ctor could cause other 506 // entries to be added to TheMap, invalidating our reference. 507 SL = L; 508 509 new (L) StructLayout(Ty, *this); 510 511 return L; 512 } 513 514 std::string DataLayout::getStringRepresentation() const { 515 std::string Result; 516 raw_string_ostream OS(Result); 517 518 OS << (LittleEndian ? "e" : "E"); 519 520 switch (ManglingMode) { 521 case MM_None: 522 break; 523 case MM_ELF: 524 OS << "-m:e"; 525 break; 526 case MM_MachO: 527 OS << "-m:o"; 528 break; 529 case MM_WINCOFF: 530 OS << "-m:w"; 531 break; 532 case MM_Mips: 533 OS << "-m:m"; 534 break; 535 } 536 537 SmallVector<unsigned, 8> addrSpaces; 538 // Lets get all of the known address spaces and sort them 539 // into increasing order so that we can emit the string 540 // in a cleaner format. 541 for (DenseMap<unsigned, PointerAlignElem>::const_iterator 542 pib = Pointers.begin(), pie = Pointers.end(); 543 pib != pie; ++pib) { 544 addrSpaces.push_back(pib->first); 545 } 546 std::sort(addrSpaces.begin(), addrSpaces.end()); 547 for (SmallVectorImpl<unsigned>::iterator asb = addrSpaces.begin(), 548 ase = addrSpaces.end(); asb != ase; ++asb) { 549 const PointerAlignElem &PI = Pointers.find(*asb)->second; 550 551 // Skip default. 552 if (PI.AddressSpace == 0 && PI.ABIAlign == 8 && PI.PrefAlign == 8 && 553 PI.TypeByteWidth == 8) 554 continue; 555 556 OS << "-p"; 557 if (PI.AddressSpace) { 558 OS << PI.AddressSpace; 559 } 560 OS << ":" << PI.TypeByteWidth*8 << ':' << PI.ABIAlign*8; 561 if (PI.PrefAlign != PI.ABIAlign) 562 OS << ':' << PI.PrefAlign*8; 563 } 564 565 const LayoutAlignElem *DefaultStart = DefaultAlignments; 566 const LayoutAlignElem *DefaultEnd = 567 DefaultStart + array_lengthof(DefaultAlignments); 568 for (unsigned i = 0, e = Alignments.size(); i != e; ++i) { 569 const LayoutAlignElem &AI = Alignments[i]; 570 if (std::find(DefaultStart, DefaultEnd, AI) != DefaultEnd) 571 continue; 572 OS << '-' << (char)AI.AlignType; 573 if (AI.TypeBitWidth) 574 OS << AI.TypeBitWidth; 575 OS << ':' << AI.ABIAlign*8; 576 if (AI.ABIAlign != AI.PrefAlign) 577 OS << ':' << AI.PrefAlign*8; 578 } 579 580 if (!LegalIntWidths.empty()) { 581 OS << "-n" << (unsigned)LegalIntWidths[0]; 582 583 for (unsigned i = 1, e = LegalIntWidths.size(); i != e; ++i) 584 OS << ':' << (unsigned)LegalIntWidths[i]; 585 } 586 587 if (StackNaturalAlign) 588 OS << "-S" << StackNaturalAlign*8; 589 590 return OS.str(); 591 } 592 593 unsigned DataLayout::getPointerTypeSizeInBits(Type *Ty) const { 594 assert(Ty->isPtrOrPtrVectorTy() && 595 "This should only be called with a pointer or pointer vector type"); 596 597 if (Ty->isPointerTy()) 598 return getTypeSizeInBits(Ty); 599 600 return getTypeSizeInBits(Ty->getScalarType()); 601 } 602 603 /*! 604 \param abi_or_pref Flag that determines which alignment is returned. true 605 returns the ABI alignment, false returns the preferred alignment. 606 \param Ty The underlying type for which alignment is determined. 607 608 Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref 609 == false) for the requested type \a Ty. 610 */ 611 unsigned DataLayout::getAlignment(Type *Ty, bool abi_or_pref) const { 612 int AlignType = -1; 613 614 assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!"); 615 switch (Ty->getTypeID()) { 616 // Early escape for the non-numeric types. 617 case Type::LabelTyID: 618 return (abi_or_pref 619 ? getPointerABIAlignment(0) 620 : getPointerPrefAlignment(0)); 621 case Type::PointerTyID: { 622 unsigned AS = dyn_cast<PointerType>(Ty)->getAddressSpace(); 623 return (abi_or_pref 624 ? getPointerABIAlignment(AS) 625 : getPointerPrefAlignment(AS)); 626 } 627 case Type::ArrayTyID: 628 return getAlignment(cast<ArrayType>(Ty)->getElementType(), abi_or_pref); 629 630 case Type::StructTyID: { 631 // Packed structure types always have an ABI alignment of one. 632 if (cast<StructType>(Ty)->isPacked() && abi_or_pref) 633 return 1; 634 635 // Get the layout annotation... which is lazily created on demand. 636 const StructLayout *Layout = getStructLayout(cast<StructType>(Ty)); 637 unsigned Align = getAlignmentInfo(AGGREGATE_ALIGN, 0, abi_or_pref, Ty); 638 return std::max(Align, Layout->getAlignment()); 639 } 640 case Type::IntegerTyID: 641 AlignType = INTEGER_ALIGN; 642 break; 643 case Type::HalfTyID: 644 case Type::FloatTyID: 645 case Type::DoubleTyID: 646 // PPC_FP128TyID and FP128TyID have different data contents, but the 647 // same size and alignment, so they look the same here. 648 case Type::PPC_FP128TyID: 649 case Type::FP128TyID: 650 case Type::X86_FP80TyID: 651 AlignType = FLOAT_ALIGN; 652 break; 653 case Type::X86_MMXTyID: 654 case Type::VectorTyID: 655 AlignType = VECTOR_ALIGN; 656 break; 657 default: 658 llvm_unreachable("Bad type for getAlignment!!!"); 659 } 660 661 return getAlignmentInfo((AlignTypeEnum)AlignType, getTypeSizeInBits(Ty), 662 abi_or_pref, Ty); 663 } 664 665 unsigned DataLayout::getABITypeAlignment(Type *Ty) const { 666 return getAlignment(Ty, true); 667 } 668 669 /// getABIIntegerTypeAlignment - Return the minimum ABI-required alignment for 670 /// an integer type of the specified bitwidth. 671 unsigned DataLayout::getABIIntegerTypeAlignment(unsigned BitWidth) const { 672 return getAlignmentInfo(INTEGER_ALIGN, BitWidth, true, 0); 673 } 674 675 unsigned DataLayout::getPrefTypeAlignment(Type *Ty) const { 676 return getAlignment(Ty, false); 677 } 678 679 unsigned DataLayout::getPreferredTypeAlignmentShift(Type *Ty) const { 680 unsigned Align = getPrefTypeAlignment(Ty); 681 assert(!(Align & (Align-1)) && "Alignment is not a power of two!"); 682 return Log2_32(Align); 683 } 684 685 IntegerType *DataLayout::getIntPtrType(LLVMContext &C, 686 unsigned AddressSpace) const { 687 return IntegerType::get(C, getPointerSizeInBits(AddressSpace)); 688 } 689 690 Type *DataLayout::getIntPtrType(Type *Ty) const { 691 assert(Ty->isPtrOrPtrVectorTy() && 692 "Expected a pointer or pointer vector type."); 693 unsigned NumBits = getTypeSizeInBits(Ty->getScalarType()); 694 IntegerType *IntTy = IntegerType::get(Ty->getContext(), NumBits); 695 if (VectorType *VecTy = dyn_cast<VectorType>(Ty)) 696 return VectorType::get(IntTy, VecTy->getNumElements()); 697 return IntTy; 698 } 699 700 Type *DataLayout::getSmallestLegalIntType(LLVMContext &C, unsigned Width) const { 701 for (unsigned i = 0, e = (unsigned)LegalIntWidths.size(); i != e; ++i) 702 if (Width <= LegalIntWidths[i]) 703 return Type::getIntNTy(C, LegalIntWidths[i]); 704 return 0; 705 } 706 707 unsigned DataLayout::getLargestLegalIntTypeSize() const { 708 unsigned MaxWidth = 0; 709 for (unsigned i = 0, e = (unsigned)LegalIntWidths.size(); i != e; ++i) 710 MaxWidth = std::max<unsigned>(MaxWidth, LegalIntWidths[i]); 711 return MaxWidth; 712 } 713 714 uint64_t DataLayout::getIndexedOffset(Type *ptrTy, 715 ArrayRef<Value *> Indices) const { 716 Type *Ty = ptrTy; 717 assert(Ty->isPointerTy() && "Illegal argument for getIndexedOffset()"); 718 uint64_t Result = 0; 719 720 generic_gep_type_iterator<Value* const*> 721 TI = gep_type_begin(ptrTy, Indices); 722 for (unsigned CurIDX = 0, EndIDX = Indices.size(); CurIDX != EndIDX; 723 ++CurIDX, ++TI) { 724 if (StructType *STy = dyn_cast<StructType>(*TI)) { 725 assert(Indices[CurIDX]->getType() == 726 Type::getInt32Ty(ptrTy->getContext()) && 727 "Illegal struct idx"); 728 unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])->getZExtValue(); 729 730 // Get structure layout information... 731 const StructLayout *Layout = getStructLayout(STy); 732 733 // Add in the offset, as calculated by the structure layout info... 734 Result += Layout->getElementOffset(FieldNo); 735 736 // Update Ty to refer to current element 737 Ty = STy->getElementType(FieldNo); 738 } else { 739 // Update Ty to refer to current element 740 Ty = cast<SequentialType>(Ty)->getElementType(); 741 742 // Get the array index and the size of each array element. 743 if (int64_t arrayIdx = cast<ConstantInt>(Indices[CurIDX])->getSExtValue()) 744 Result += (uint64_t)arrayIdx * getTypeAllocSize(Ty); 745 } 746 } 747 748 return Result; 749 } 750 751 /// getPreferredAlignment - Return the preferred alignment of the specified 752 /// global. This includes an explicitly requested alignment (if the global 753 /// has one). 754 unsigned DataLayout::getPreferredAlignment(const GlobalVariable *GV) const { 755 Type *ElemType = GV->getType()->getElementType(); 756 unsigned Alignment = getPrefTypeAlignment(ElemType); 757 unsigned GVAlignment = GV->getAlignment(); 758 if (GVAlignment >= Alignment) { 759 Alignment = GVAlignment; 760 } else if (GVAlignment != 0) { 761 Alignment = std::max(GVAlignment, getABITypeAlignment(ElemType)); 762 } 763 764 if (GV->hasInitializer() && GVAlignment == 0) { 765 if (Alignment < 16) { 766 // If the global is not external, see if it is large. If so, give it a 767 // larger alignment. 768 if (getTypeSizeInBits(ElemType) > 128) 769 Alignment = 16; // 16-byte alignment. 770 } 771 } 772 return Alignment; 773 } 774 775 /// getPreferredAlignmentLog - Return the preferred alignment of the 776 /// specified global, returned in log form. This includes an explicitly 777 /// requested alignment (if the global has one). 778 unsigned DataLayout::getPreferredAlignmentLog(const GlobalVariable *GV) const { 779 return Log2_32(getPreferredAlignment(GV)); 780 } 781