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