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