• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- TargetData.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 target 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/Target/TargetData.h"
20 #include "llvm/Constants.h"
21 #include "llvm/DerivedTypes.h"
22 #include "llvm/Module.h"
23 #include "llvm/Support/GetElementPtrTypeIterator.h"
24 #include "llvm/Support/MathExtras.h"
25 #include "llvm/Support/ManagedStatic.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include "llvm/Support/Mutex.h"
29 #include "llvm/ADT/DenseMap.h"
30 #include <algorithm>
31 #include <cstdlib>
32 using namespace llvm;
33 
34 // Handle the Pass registration stuff necessary to use TargetData's.
35 
36 // Register the default SparcV9 implementation...
37 INITIALIZE_PASS(TargetData, "targetdata", "Target Data Layout", false, true)
38 char TargetData::ID = 0;
39 
40 //===----------------------------------------------------------------------===//
41 // Support for StructLayout
42 //===----------------------------------------------------------------------===//
43 
StructLayout(StructType * ST,const TargetData & TD)44 StructLayout::StructLayout(StructType *ST, const TargetData &TD) {
45   assert(!ST->isOpaque() && "Cannot get layout of opaque structs");
46   StructAlignment = 0;
47   StructSize = 0;
48   NumElements = ST->getNumElements();
49 
50   // Loop over each of the elements, placing them in memory.
51   for (unsigned i = 0, e = NumElements; i != e; ++i) {
52     Type *Ty = ST->getElementType(i);
53     unsigned TyAlign = ST->isPacked() ? 1 : TD.getABITypeAlignment(Ty);
54 
55     // Add padding if necessary to align the data element properly.
56     if ((StructSize & (TyAlign-1)) != 0)
57       StructSize = TargetData::RoundUpAlignment(StructSize, TyAlign);
58 
59     // Keep track of maximum alignment constraint.
60     StructAlignment = std::max(TyAlign, StructAlignment);
61 
62     MemberOffsets[i] = StructSize;
63     StructSize += TD.getTypeAllocSize(Ty); // Consume space for this data item
64   }
65 
66   // Empty structures have alignment of 1 byte.
67   if (StructAlignment == 0) StructAlignment = 1;
68 
69   // Add padding to the end of the struct so that it could be put in an array
70   // and all array elements would be aligned correctly.
71   if ((StructSize & (StructAlignment-1)) != 0)
72     StructSize = TargetData::RoundUpAlignment(StructSize, StructAlignment);
73 }
74 
75 
76 /// getElementContainingOffset - Given a valid offset into the structure,
77 /// return the structure index that contains it.
getElementContainingOffset(uint64_t Offset) const78 unsigned StructLayout::getElementContainingOffset(uint64_t Offset) const {
79   const uint64_t *SI =
80     std::upper_bound(&MemberOffsets[0], &MemberOffsets[NumElements], Offset);
81   assert(SI != &MemberOffsets[0] && "Offset not in structure type!");
82   --SI;
83   assert(*SI <= Offset && "upper_bound didn't work");
84   assert((SI == &MemberOffsets[0] || *(SI-1) <= Offset) &&
85          (SI+1 == &MemberOffsets[NumElements] || *(SI+1) > Offset) &&
86          "Upper bound didn't work!");
87 
88   // Multiple fields can have the same offset if any of them are zero sized.
89   // For example, in { i32, [0 x i32], i32 }, searching for offset 4 will stop
90   // at the i32 element, because it is the last element at that offset.  This is
91   // the right one to return, because anything after it will have a higher
92   // offset, implying that this element is non-empty.
93   return SI-&MemberOffsets[0];
94 }
95 
96 //===----------------------------------------------------------------------===//
97 // TargetAlignElem, TargetAlign support
98 //===----------------------------------------------------------------------===//
99 
100 TargetAlignElem
get(AlignTypeEnum align_type,unsigned abi_align,unsigned pref_align,uint32_t bit_width)101 TargetAlignElem::get(AlignTypeEnum align_type, unsigned abi_align,
102                      unsigned pref_align, uint32_t bit_width) {
103   assert(abi_align <= pref_align && "Preferred alignment worse than ABI!");
104   TargetAlignElem retval;
105   retval.AlignType = align_type;
106   retval.ABIAlign = abi_align;
107   retval.PrefAlign = pref_align;
108   retval.TypeBitWidth = bit_width;
109   return retval;
110 }
111 
112 bool
operator ==(const TargetAlignElem & rhs) const113 TargetAlignElem::operator==(const TargetAlignElem &rhs) const {
114   return (AlignType == rhs.AlignType
115           && ABIAlign == rhs.ABIAlign
116           && PrefAlign == rhs.PrefAlign
117           && TypeBitWidth == rhs.TypeBitWidth);
118 }
119 
120 const TargetAlignElem TargetData::InvalidAlignmentElem =
121                 TargetAlignElem::get((AlignTypeEnum) -1, 0, 0, 0);
122 
123 //===----------------------------------------------------------------------===//
124 //                       TargetData Class Implementation
125 //===----------------------------------------------------------------------===//
126 
127 /// getInt - Get an integer ignoring errors.
getInt(StringRef R)128 static unsigned getInt(StringRef R) {
129   unsigned Result = 0;
130   R.getAsInteger(10, Result);
131   return Result;
132 }
133 
init(StringRef Desc)134 void TargetData::init(StringRef Desc) {
135   initializeTargetDataPass(*PassRegistry::getPassRegistry());
136 
137   LayoutMap = 0;
138   LittleEndian = false;
139   PointerMemSize = 8;
140   PointerABIAlign = 8;
141   PointerPrefAlign = PointerABIAlign;
142   StackNaturalAlign = 0;
143 
144   // Default alignments
145   setAlignment(INTEGER_ALIGN,   1,  1, 1);   // i1
146   setAlignment(INTEGER_ALIGN,   1,  1, 8);   // i8
147   setAlignment(INTEGER_ALIGN,   2,  2, 16);  // i16
148   setAlignment(INTEGER_ALIGN,   4,  4, 32);  // i32
149   setAlignment(INTEGER_ALIGN,   4,  8, 64);  // i64
150   setAlignment(FLOAT_ALIGN,     4,  4, 32);  // float
151   setAlignment(FLOAT_ALIGN,     8,  8, 64);  // double
152   setAlignment(VECTOR_ALIGN,    8,  8, 64);  // v2i32, v1i64, ...
153   setAlignment(VECTOR_ALIGN,   16, 16, 128); // v16i8, v8i16, v4i32, ...
154   setAlignment(AGGREGATE_ALIGN, 0,  8,  0);  // struct
155 
156   while (!Desc.empty()) {
157     std::pair<StringRef, StringRef> Split = Desc.split('-');
158     StringRef Token = Split.first;
159     Desc = Split.second;
160 
161     if (Token.empty())
162       continue;
163 
164     Split = Token.split(':');
165     StringRef Specifier = Split.first;
166     Token = Split.second;
167 
168     assert(!Specifier.empty() && "Can't be empty here");
169 
170     switch (Specifier[0]) {
171     case 'E':
172       LittleEndian = false;
173       break;
174     case 'e':
175       LittleEndian = true;
176       break;
177     case 'p':
178       Split = Token.split(':');
179       PointerMemSize = getInt(Split.first) / 8;
180       Split = Split.second.split(':');
181       PointerABIAlign = getInt(Split.first) / 8;
182       Split = Split.second.split(':');
183       PointerPrefAlign = getInt(Split.first) / 8;
184       if (PointerPrefAlign == 0)
185         PointerPrefAlign = PointerABIAlign;
186       break;
187     case 'i':
188     case 'v':
189     case 'f':
190     case 'a':
191     case 's': {
192       AlignTypeEnum AlignType;
193       switch (Specifier[0]) {
194       default:
195       case 'i': AlignType = INTEGER_ALIGN; break;
196       case 'v': AlignType = VECTOR_ALIGN; break;
197       case 'f': AlignType = FLOAT_ALIGN; break;
198       case 'a': AlignType = AGGREGATE_ALIGN; break;
199       case 's': AlignType = STACK_ALIGN; break;
200       }
201       unsigned Size = getInt(Specifier.substr(1));
202       Split = Token.split(':');
203       unsigned ABIAlign = getInt(Split.first) / 8;
204 
205       Split = Split.second.split(':');
206       unsigned PrefAlign = getInt(Split.first) / 8;
207       if (PrefAlign == 0)
208         PrefAlign = ABIAlign;
209       setAlignment(AlignType, ABIAlign, PrefAlign, Size);
210       break;
211     }
212     case 'n':  // Native integer types.
213       Specifier = Specifier.substr(1);
214       do {
215         if (unsigned Width = getInt(Specifier))
216           LegalIntWidths.push_back(Width);
217         Split = Token.split(':');
218         Specifier = Split.first;
219         Token = Split.second;
220       } while (!Specifier.empty() || !Token.empty());
221       break;
222     case 'S': // Stack natural alignment.
223       StackNaturalAlign = getInt(Specifier.substr(1));
224       StackNaturalAlign /= 8;
225       // FIXME: Should we really be truncating these alingments and
226       // sizes silently?
227       break;
228     default:
229       break;
230     }
231   }
232 }
233 
234 /// Default ctor.
235 ///
236 /// @note This has to exist, because this is a pass, but it should never be
237 /// used.
TargetData()238 TargetData::TargetData() : ImmutablePass(ID) {
239   report_fatal_error("Bad TargetData ctor used.  "
240                     "Tool did not specify a TargetData to use?");
241 }
242 
TargetData(const Module * M)243 TargetData::TargetData(const Module *M)
244   : ImmutablePass(ID) {
245   init(M->getDataLayout());
246 }
247 
248 void
setAlignment(AlignTypeEnum align_type,unsigned abi_align,unsigned pref_align,uint32_t bit_width)249 TargetData::setAlignment(AlignTypeEnum align_type, unsigned abi_align,
250                          unsigned pref_align, uint32_t bit_width) {
251   assert(abi_align <= pref_align && "Preferred alignment worse than ABI!");
252   for (unsigned i = 0, e = Alignments.size(); i != e; ++i) {
253     if (Alignments[i].AlignType == align_type &&
254         Alignments[i].TypeBitWidth == bit_width) {
255       // Update the abi, preferred alignments.
256       Alignments[i].ABIAlign = abi_align;
257       Alignments[i].PrefAlign = pref_align;
258       return;
259     }
260   }
261 
262   Alignments.push_back(TargetAlignElem::get(align_type, abi_align,
263                                             pref_align, bit_width));
264 }
265 
266 /// getAlignmentInfo - Return the alignment (either ABI if ABIInfo = true or
267 /// preferred if ABIInfo = false) the target wants for the specified datatype.
getAlignmentInfo(AlignTypeEnum AlignType,uint32_t BitWidth,bool ABIInfo,Type * Ty) const268 unsigned TargetData::getAlignmentInfo(AlignTypeEnum AlignType,
269                                       uint32_t BitWidth, bool ABIInfo,
270                                       Type *Ty) const {
271   // Check to see if we have an exact match and remember the best match we see.
272   int BestMatchIdx = -1;
273   int LargestInt = -1;
274   for (unsigned i = 0, e = Alignments.size(); i != e; ++i) {
275     if (Alignments[i].AlignType == AlignType &&
276         Alignments[i].TypeBitWidth == BitWidth)
277       return ABIInfo ? Alignments[i].ABIAlign : Alignments[i].PrefAlign;
278 
279     // The best match so far depends on what we're looking for.
280      if (AlignType == INTEGER_ALIGN &&
281          Alignments[i].AlignType == INTEGER_ALIGN) {
282       // The "best match" for integers is the smallest size that is larger than
283       // the BitWidth requested.
284       if (Alignments[i].TypeBitWidth > BitWidth && (BestMatchIdx == -1 ||
285            Alignments[i].TypeBitWidth < Alignments[BestMatchIdx].TypeBitWidth))
286         BestMatchIdx = i;
287       // However, if there isn't one that's larger, then we must use the
288       // largest one we have (see below)
289       if (LargestInt == -1 ||
290           Alignments[i].TypeBitWidth > Alignments[LargestInt].TypeBitWidth)
291         LargestInt = i;
292     }
293   }
294 
295   // Okay, we didn't find an exact solution.  Fall back here depending on what
296   // is being looked for.
297   if (BestMatchIdx == -1) {
298     // If we didn't find an integer alignment, fall back on most conservative.
299     if (AlignType == INTEGER_ALIGN) {
300       BestMatchIdx = LargestInt;
301     } else {
302       assert(AlignType == VECTOR_ALIGN && "Unknown alignment type!");
303 
304       // By default, use natural alignment for vector types. This is consistent
305       // with what clang and llvm-gcc do.
306       unsigned Align = getTypeAllocSize(cast<VectorType>(Ty)->getElementType());
307       Align *= cast<VectorType>(Ty)->getNumElements();
308       // If the alignment is not a power of 2, round up to the next power of 2.
309       // This happens for non-power-of-2 length vectors.
310       if (Align & (Align-1))
311         Align = llvm::NextPowerOf2(Align);
312       return Align;
313     }
314   }
315 
316   // Since we got a "best match" index, just return it.
317   return ABIInfo ? Alignments[BestMatchIdx].ABIAlign
318                  : Alignments[BestMatchIdx].PrefAlign;
319 }
320 
321 namespace {
322 
323 class StructLayoutMap {
324   typedef DenseMap<StructType*, StructLayout*> LayoutInfoTy;
325   LayoutInfoTy LayoutInfo;
326 
327 public:
~StructLayoutMap()328   virtual ~StructLayoutMap() {
329     // Remove any layouts.
330     for (LayoutInfoTy::iterator I = LayoutInfo.begin(), E = LayoutInfo.end();
331          I != E; ++I) {
332       StructLayout *Value = I->second;
333       Value->~StructLayout();
334       free(Value);
335     }
336   }
337 
operator [](StructType * STy)338   StructLayout *&operator[](StructType *STy) {
339     return LayoutInfo[STy];
340   }
341 
342   // for debugging...
dump() const343   virtual void dump() const {}
344 };
345 
346 } // end anonymous namespace
347 
~TargetData()348 TargetData::~TargetData() {
349   delete static_cast<StructLayoutMap*>(LayoutMap);
350 }
351 
getStructLayout(StructType * Ty) const352 const StructLayout *TargetData::getStructLayout(StructType *Ty) const {
353   if (!LayoutMap)
354     LayoutMap = new StructLayoutMap();
355 
356   StructLayoutMap *STM = static_cast<StructLayoutMap*>(LayoutMap);
357   StructLayout *&SL = (*STM)[Ty];
358   if (SL) return SL;
359 
360   // Otherwise, create the struct layout.  Because it is variable length, we
361   // malloc it, then use placement new.
362   int NumElts = Ty->getNumElements();
363   StructLayout *L =
364     (StructLayout *)malloc(sizeof(StructLayout)+(NumElts-1) * sizeof(uint64_t));
365 
366   // Set SL before calling StructLayout's ctor.  The ctor could cause other
367   // entries to be added to TheMap, invalidating our reference.
368   SL = L;
369 
370   new (L) StructLayout(Ty, *this);
371 
372   return L;
373 }
374 
getStringRepresentation() const375 std::string TargetData::getStringRepresentation() const {
376   std::string Result;
377   raw_string_ostream OS(Result);
378 
379   OS << (LittleEndian ? "e" : "E")
380      << "-p:" << PointerMemSize*8 << ':' << PointerABIAlign*8
381      << ':' << PointerPrefAlign*8
382      << "-S" << StackNaturalAlign*8;
383 
384   for (unsigned i = 0, e = Alignments.size(); i != e; ++i) {
385     const TargetAlignElem &AI = Alignments[i];
386     OS << '-' << (char)AI.AlignType << AI.TypeBitWidth << ':'
387        << AI.ABIAlign*8 << ':' << AI.PrefAlign*8;
388   }
389 
390   if (!LegalIntWidths.empty()) {
391     OS << "-n" << (unsigned)LegalIntWidths[0];
392 
393     for (unsigned i = 1, e = LegalIntWidths.size(); i != e; ++i)
394       OS << ':' << (unsigned)LegalIntWidths[i];
395   }
396   return OS.str();
397 }
398 
399 
getTypeSizeInBits(Type * Ty) const400 uint64_t TargetData::getTypeSizeInBits(Type *Ty) const {
401   assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
402   switch (Ty->getTypeID()) {
403   case Type::LabelTyID:
404   case Type::PointerTyID:
405     return getPointerSizeInBits();
406   case Type::ArrayTyID: {
407     ArrayType *ATy = cast<ArrayType>(Ty);
408     return getTypeAllocSizeInBits(ATy->getElementType())*ATy->getNumElements();
409   }
410   case Type::StructTyID:
411     // Get the layout annotation... which is lazily created on demand.
412     return getStructLayout(cast<StructType>(Ty))->getSizeInBits();
413   case Type::IntegerTyID:
414     return cast<IntegerType>(Ty)->getBitWidth();
415   case Type::VoidTyID:
416     return 8;
417   case Type::FloatTyID:
418     return 32;
419   case Type::DoubleTyID:
420   case Type::X86_MMXTyID:
421     return 64;
422   case Type::PPC_FP128TyID:
423   case Type::FP128TyID:
424     return 128;
425   // In memory objects this is always aligned to a higher boundary, but
426   // only 80 bits contain information.
427   case Type::X86_FP80TyID:
428     return 80;
429   case Type::VectorTyID:
430     return cast<VectorType>(Ty)->getBitWidth();
431   default:
432     llvm_unreachable("TargetData::getTypeSizeInBits(): Unsupported type");
433     break;
434   }
435   return 0;
436 }
437 
438 /*!
439   \param abi_or_pref Flag that determines which alignment is returned. true
440   returns the ABI alignment, false returns the preferred alignment.
441   \param Ty The underlying type for which alignment is determined.
442 
443   Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref
444   == false) for the requested type \a Ty.
445  */
getAlignment(Type * Ty,bool abi_or_pref) const446 unsigned TargetData::getAlignment(Type *Ty, bool abi_or_pref) const {
447   int AlignType = -1;
448 
449   assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
450   switch (Ty->getTypeID()) {
451   // Early escape for the non-numeric types.
452   case Type::LabelTyID:
453   case Type::PointerTyID:
454     return (abi_or_pref
455             ? getPointerABIAlignment()
456             : getPointerPrefAlignment());
457   case Type::ArrayTyID:
458     return getAlignment(cast<ArrayType>(Ty)->getElementType(), abi_or_pref);
459 
460   case Type::StructTyID: {
461     // Packed structure types always have an ABI alignment of one.
462     if (cast<StructType>(Ty)->isPacked() && abi_or_pref)
463       return 1;
464 
465     // Get the layout annotation... which is lazily created on demand.
466     const StructLayout *Layout = getStructLayout(cast<StructType>(Ty));
467     unsigned Align = getAlignmentInfo(AGGREGATE_ALIGN, 0, abi_or_pref, Ty);
468     return std::max(Align, Layout->getAlignment());
469   }
470   case Type::IntegerTyID:
471   case Type::VoidTyID:
472     AlignType = INTEGER_ALIGN;
473     break;
474   case Type::FloatTyID:
475   case Type::DoubleTyID:
476   // PPC_FP128TyID and FP128TyID have different data contents, but the
477   // same size and alignment, so they look the same here.
478   case Type::PPC_FP128TyID:
479   case Type::FP128TyID:
480   case Type::X86_FP80TyID:
481     AlignType = FLOAT_ALIGN;
482     break;
483   case Type::X86_MMXTyID:
484   case Type::VectorTyID:
485     AlignType = VECTOR_ALIGN;
486     break;
487   default:
488     llvm_unreachable("Bad type for getAlignment!!!");
489     break;
490   }
491 
492   return getAlignmentInfo((AlignTypeEnum)AlignType, getTypeSizeInBits(Ty),
493                           abi_or_pref, Ty);
494 }
495 
getABITypeAlignment(Type * Ty) const496 unsigned TargetData::getABITypeAlignment(Type *Ty) const {
497   return getAlignment(Ty, true);
498 }
499 
500 /// getABIIntegerTypeAlignment - Return the minimum ABI-required alignment for
501 /// an integer type of the specified bitwidth.
getABIIntegerTypeAlignment(unsigned BitWidth) const502 unsigned TargetData::getABIIntegerTypeAlignment(unsigned BitWidth) const {
503   return getAlignmentInfo(INTEGER_ALIGN, BitWidth, true, 0);
504 }
505 
506 
getCallFrameTypeAlignment(Type * Ty) const507 unsigned TargetData::getCallFrameTypeAlignment(Type *Ty) const {
508   for (unsigned i = 0, e = Alignments.size(); i != e; ++i)
509     if (Alignments[i].AlignType == STACK_ALIGN)
510       return Alignments[i].ABIAlign;
511 
512   return getABITypeAlignment(Ty);
513 }
514 
getPrefTypeAlignment(Type * Ty) const515 unsigned TargetData::getPrefTypeAlignment(Type *Ty) const {
516   return getAlignment(Ty, false);
517 }
518 
getPreferredTypeAlignmentShift(Type * Ty) const519 unsigned TargetData::getPreferredTypeAlignmentShift(Type *Ty) const {
520   unsigned Align = getPrefTypeAlignment(Ty);
521   assert(!(Align & (Align-1)) && "Alignment is not a power of two!");
522   return Log2_32(Align);
523 }
524 
525 /// getIntPtrType - Return an unsigned integer type that is the same size or
526 /// greater to the host pointer size.
getIntPtrType(LLVMContext & C) const527 IntegerType *TargetData::getIntPtrType(LLVMContext &C) const {
528   return IntegerType::get(C, getPointerSizeInBits());
529 }
530 
531 
getIndexedOffset(Type * ptrTy,ArrayRef<Value * > Indices) const532 uint64_t TargetData::getIndexedOffset(Type *ptrTy,
533                                       ArrayRef<Value *> Indices) const {
534   Type *Ty = ptrTy;
535   assert(Ty->isPointerTy() && "Illegal argument for getIndexedOffset()");
536   uint64_t Result = 0;
537 
538   generic_gep_type_iterator<Value* const*>
539     TI = gep_type_begin(ptrTy, Indices);
540   for (unsigned CurIDX = 0, EndIDX = Indices.size(); CurIDX != EndIDX;
541        ++CurIDX, ++TI) {
542     if (StructType *STy = dyn_cast<StructType>(*TI)) {
543       assert(Indices[CurIDX]->getType() ==
544              Type::getInt32Ty(ptrTy->getContext()) &&
545              "Illegal struct idx");
546       unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])->getZExtValue();
547 
548       // Get structure layout information...
549       const StructLayout *Layout = getStructLayout(STy);
550 
551       // Add in the offset, as calculated by the structure layout info...
552       Result += Layout->getElementOffset(FieldNo);
553 
554       // Update Ty to refer to current element
555       Ty = STy->getElementType(FieldNo);
556     } else {
557       // Update Ty to refer to current element
558       Ty = cast<SequentialType>(Ty)->getElementType();
559 
560       // Get the array index and the size of each array element.
561       if (int64_t arrayIdx = cast<ConstantInt>(Indices[CurIDX])->getSExtValue())
562         Result += (uint64_t)arrayIdx * getTypeAllocSize(Ty);
563     }
564   }
565 
566   return Result;
567 }
568 
569 /// getPreferredAlignment - Return the preferred alignment of the specified
570 /// global.  This includes an explicitly requested alignment (if the global
571 /// has one).
getPreferredAlignment(const GlobalVariable * GV) const572 unsigned TargetData::getPreferredAlignment(const GlobalVariable *GV) const {
573   Type *ElemType = GV->getType()->getElementType();
574   unsigned Alignment = getPrefTypeAlignment(ElemType);
575   unsigned GVAlignment = GV->getAlignment();
576   if (GVAlignment >= Alignment) {
577     Alignment = GVAlignment;
578   } else if (GVAlignment != 0) {
579     Alignment = std::max(GVAlignment, getABITypeAlignment(ElemType));
580   }
581 
582   if (GV->hasInitializer() && GVAlignment == 0) {
583     if (Alignment < 16) {
584       // If the global is not external, see if it is large.  If so, give it a
585       // larger alignment.
586       if (getTypeSizeInBits(ElemType) > 128)
587         Alignment = 16;    // 16-byte alignment.
588     }
589   }
590   return Alignment;
591 }
592 
593 /// getPreferredAlignmentLog - Return the preferred alignment of the
594 /// specified global, returned in log form.  This includes an explicitly
595 /// requested alignment (if the global has one).
getPreferredAlignmentLog(const GlobalVariable * GV) const596 unsigned TargetData::getPreferredAlignmentLog(const GlobalVariable *GV) const {
597   return Log2_32(getPreferredAlignment(GV));
598 }
599