1 //===- DataLayout.cpp - Data size & alignment routines ---------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines layout properties related to datatype size/offset/alignment
10 // information.
11 //
12 // This structure should be created once, filled in if the defaults are not
13 // correct and then passed around by const&. None of the members functions
14 // require modification to the object.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #include "llvm/IR/DataLayout.h"
19 #include "llvm/ADT/DenseMap.h"
20 #include "llvm/ADT/StringRef.h"
21 #include "llvm/ADT/Triple.h"
22 #include "llvm/IR/Constants.h"
23 #include "llvm/IR/DerivedTypes.h"
24 #include "llvm/IR/GetElementPtrTypeIterator.h"
25 #include "llvm/IR/GlobalVariable.h"
26 #include "llvm/IR/Module.h"
27 #include "llvm/IR/Type.h"
28 #include "llvm/IR/Value.h"
29 #include "llvm/Support/Casting.h"
30 #include "llvm/Support/Error.h"
31 #include "llvm/Support/ErrorHandling.h"
32 #include "llvm/Support/MathExtras.h"
33 #include "llvm/Support/MemAlloc.h"
34 #include "llvm/Support/TypeSize.h"
35 #include <algorithm>
36 #include <cassert>
37 #include <cstdint>
38 #include <cstdlib>
39 #include <new>
40 #include <utility>
41
42 using namespace llvm;
43
44 //===----------------------------------------------------------------------===//
45 // Support for StructLayout
46 //===----------------------------------------------------------------------===//
47
StructLayout(StructType * ST,const DataLayout & DL)48 StructLayout::StructLayout(StructType *ST, const DataLayout &DL) {
49 assert(!ST->isOpaque() && "Cannot get layout of opaque structs");
50 StructSize = 0;
51 IsPadded = false;
52 NumElements = ST->getNumElements();
53
54 // Loop over each of the elements, placing them in memory.
55 for (unsigned i = 0, e = NumElements; i != e; ++i) {
56 Type *Ty = ST->getElementType(i);
57 const Align TyAlign = ST->isPacked() ? Align(1) : DL.getABITypeAlign(Ty);
58
59 // Add padding if necessary to align the data element properly.
60 if (!isAligned(TyAlign, StructSize)) {
61 IsPadded = true;
62 StructSize = alignTo(StructSize, TyAlign);
63 }
64
65 // Keep track of maximum alignment constraint.
66 StructAlignment = std::max(TyAlign, StructAlignment);
67
68 getMemberOffsets()[i] = StructSize;
69 // Consume space for this data item
70 StructSize += DL.getTypeAllocSize(Ty).getFixedValue();
71 }
72
73 // Add padding to the end of the struct so that it could be put in an array
74 // and all array elements would be aligned correctly.
75 if (!isAligned(StructAlignment, StructSize)) {
76 IsPadded = true;
77 StructSize = alignTo(StructSize, StructAlignment);
78 }
79 }
80
81 /// getElementContainingOffset - Given a valid offset into the structure,
82 /// return the structure index that contains it.
getElementContainingOffset(uint64_t Offset) const83 unsigned StructLayout::getElementContainingOffset(uint64_t Offset) const {
84 ArrayRef<uint64_t> MemberOffsets = getMemberOffsets();
85 auto SI = llvm::upper_bound(MemberOffsets, Offset);
86 assert(SI != MemberOffsets.begin() && "Offset not in structure type!");
87 --SI;
88 assert(*SI <= Offset && "upper_bound didn't work");
89 assert((SI == MemberOffsets.begin() || *(SI - 1) <= Offset) &&
90 (SI + 1 == MemberOffsets.end() || *(SI + 1) > Offset) &&
91 "Upper bound didn't work!");
92
93 // Multiple fields can have the same offset if any of them are zero sized.
94 // For example, in { i32, [0 x i32], i32 }, searching for offset 4 will stop
95 // at the i32 element, because it is the last element at that offset. This is
96 // the right one to return, because anything after it will have a higher
97 // offset, implying that this element is non-empty.
98 return SI - MemberOffsets.begin();
99 }
100
101 //===----------------------------------------------------------------------===//
102 // LayoutAlignElem, LayoutAlign support
103 //===----------------------------------------------------------------------===//
104
get(AlignTypeEnum align_type,Align abi_align,Align pref_align,uint32_t bit_width)105 LayoutAlignElem LayoutAlignElem::get(AlignTypeEnum align_type, Align abi_align,
106 Align pref_align, uint32_t bit_width) {
107 assert(abi_align <= pref_align && "Preferred alignment worse than ABI!");
108 LayoutAlignElem retval;
109 retval.AlignType = align_type;
110 retval.ABIAlign = abi_align;
111 retval.PrefAlign = pref_align;
112 retval.TypeBitWidth = bit_width;
113 return retval;
114 }
115
116 bool
operator ==(const LayoutAlignElem & rhs) const117 LayoutAlignElem::operator==(const LayoutAlignElem &rhs) const {
118 return (AlignType == rhs.AlignType
119 && ABIAlign == rhs.ABIAlign
120 && PrefAlign == rhs.PrefAlign
121 && TypeBitWidth == rhs.TypeBitWidth);
122 }
123
124 //===----------------------------------------------------------------------===//
125 // PointerAlignElem, PointerAlign support
126 //===----------------------------------------------------------------------===//
127
getInBits(uint32_t AddressSpace,Align ABIAlign,Align PrefAlign,uint32_t TypeBitWidth,uint32_t IndexBitWidth)128 PointerAlignElem PointerAlignElem::getInBits(uint32_t AddressSpace,
129 Align ABIAlign, Align PrefAlign,
130 uint32_t TypeBitWidth,
131 uint32_t IndexBitWidth) {
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.TypeBitWidth = TypeBitWidth;
138 retval.IndexBitWidth = IndexBitWidth;
139 return retval;
140 }
141
142 bool
operator ==(const PointerAlignElem & rhs) const143 PointerAlignElem::operator==(const PointerAlignElem &rhs) const {
144 return (ABIAlign == rhs.ABIAlign && AddressSpace == rhs.AddressSpace &&
145 PrefAlign == rhs.PrefAlign && TypeBitWidth == rhs.TypeBitWidth &&
146 IndexBitWidth == rhs.IndexBitWidth);
147 }
148
149 //===----------------------------------------------------------------------===//
150 // DataLayout Class Implementation
151 //===----------------------------------------------------------------------===//
152
getManglingComponent(const Triple & T)153 const char *DataLayout::getManglingComponent(const Triple &T) {
154 if (T.isOSBinFormatGOFF())
155 return "-m:l";
156 if (T.isOSBinFormatMachO())
157 return "-m:o";
158 if (T.isOSWindows() && T.isOSBinFormatCOFF())
159 return T.getArch() == Triple::x86 ? "-m:x" : "-m:w";
160 if (T.isOSBinFormatXCOFF())
161 return "-m:a";
162 return "-m:e";
163 }
164
165 static const LayoutAlignElem DefaultAlignments[] = {
166 {INTEGER_ALIGN, 1, Align(1), Align(1)}, // i1
167 {INTEGER_ALIGN, 8, Align(1), Align(1)}, // i8
168 {INTEGER_ALIGN, 16, Align(2), Align(2)}, // i16
169 {INTEGER_ALIGN, 32, Align(4), Align(4)}, // i32
170 {INTEGER_ALIGN, 64, Align(4), Align(8)}, // i64
171 {FLOAT_ALIGN, 16, Align(2), Align(2)}, // half, bfloat
172 {FLOAT_ALIGN, 32, Align(4), Align(4)}, // float
173 {FLOAT_ALIGN, 64, Align(8), Align(8)}, // double
174 {FLOAT_ALIGN, 128, Align(16), Align(16)}, // ppcf128, quad, ...
175 {VECTOR_ALIGN, 64, Align(8), Align(8)}, // v2i32, v1i64, ...
176 {VECTOR_ALIGN, 128, Align(16), Align(16)}, // v16i8, v8i16, v4i32, ...
177 {AGGREGATE_ALIGN, 0, Align(1), Align(8)} // struct
178 };
179
reset(StringRef Desc)180 void DataLayout::reset(StringRef Desc) {
181 clear();
182
183 LayoutMap = nullptr;
184 BigEndian = false;
185 AllocaAddrSpace = 0;
186 StackNaturalAlign.reset();
187 ProgramAddrSpace = 0;
188 DefaultGlobalsAddrSpace = 0;
189 FunctionPtrAlign.reset();
190 TheFunctionPtrAlignType = FunctionPtrAlignType::Independent;
191 ManglingMode = MM_None;
192 NonIntegralAddressSpaces.clear();
193
194 // Default alignments
195 for (const LayoutAlignElem &E : DefaultAlignments) {
196 if (Error Err = setAlignment((AlignTypeEnum)E.AlignType, E.ABIAlign,
197 E.PrefAlign, E.TypeBitWidth))
198 return report_fatal_error(std::move(Err));
199 }
200 if (Error Err = setPointerAlignmentInBits(0, Align(8), Align(8), 64, 64))
201 return report_fatal_error(std::move(Err));
202
203 if (Error Err = parseSpecifier(Desc))
204 return report_fatal_error(std::move(Err));
205 }
206
parse(StringRef LayoutDescription)207 Expected<DataLayout> DataLayout::parse(StringRef LayoutDescription) {
208 DataLayout Layout("");
209 if (Error Err = Layout.parseSpecifier(LayoutDescription))
210 return std::move(Err);
211 return Layout;
212 }
213
reportError(const Twine & Message)214 static Error reportError(const Twine &Message) {
215 return createStringError(inconvertibleErrorCode(), Message);
216 }
217
218 /// Checked version of split, to ensure mandatory subparts.
split(StringRef Str,char Separator,std::pair<StringRef,StringRef> & Split)219 static Error split(StringRef Str, char Separator,
220 std::pair<StringRef, StringRef> &Split) {
221 assert(!Str.empty() && "parse error, string can't be empty here");
222 Split = Str.split(Separator);
223 if (Split.second.empty() && Split.first != Str)
224 return reportError("Trailing separator in datalayout string");
225 if (!Split.second.empty() && Split.first.empty())
226 return reportError("Expected token before separator in datalayout string");
227 return Error::success();
228 }
229
230 /// Get an unsigned integer, including error checks.
getInt(StringRef R,IntTy & Result)231 template <typename IntTy> static Error getInt(StringRef R, IntTy &Result) {
232 bool error = R.getAsInteger(10, Result); (void)error;
233 if (error)
234 return reportError("not a number, or does not fit in an unsigned int");
235 return Error::success();
236 }
237
238 /// Get an unsigned integer representing the number of bits and convert it into
239 /// bytes. Error out of not a byte width multiple.
240 template <typename IntTy>
getIntInBytes(StringRef R,IntTy & Result)241 static Error getIntInBytes(StringRef R, IntTy &Result) {
242 if (Error Err = getInt<IntTy>(R, Result))
243 return Err;
244 if (Result % 8)
245 return reportError("number of bits must be a byte width multiple");
246 Result /= 8;
247 return Error::success();
248 }
249
getAddrSpace(StringRef R,unsigned & AddrSpace)250 static Error getAddrSpace(StringRef R, unsigned &AddrSpace) {
251 if (Error Err = getInt(R, AddrSpace))
252 return Err;
253 if (!isUInt<24>(AddrSpace))
254 return reportError("Invalid address space, must be a 24-bit integer");
255 return Error::success();
256 }
257
parseSpecifier(StringRef Desc)258 Error DataLayout::parseSpecifier(StringRef Desc) {
259 StringRepresentation = std::string(Desc);
260 while (!Desc.empty()) {
261 // Split at '-'.
262 std::pair<StringRef, StringRef> Split;
263 if (Error Err = ::split(Desc, '-', Split))
264 return Err;
265 Desc = Split.second;
266
267 // Split at ':'.
268 if (Error Err = ::split(Split.first, ':', Split))
269 return Err;
270
271 // Aliases used below.
272 StringRef &Tok = Split.first; // Current token.
273 StringRef &Rest = Split.second; // The rest of the string.
274
275 if (Tok == "ni") {
276 do {
277 if (Error Err = ::split(Rest, ':', Split))
278 return Err;
279 Rest = Split.second;
280 unsigned AS;
281 if (Error Err = getInt(Split.first, AS))
282 return Err;
283 if (AS == 0)
284 return reportError("Address space 0 can never be non-integral");
285 NonIntegralAddressSpaces.push_back(AS);
286 } while (!Rest.empty());
287
288 continue;
289 }
290
291 char Specifier = Tok.front();
292 Tok = Tok.substr(1);
293
294 switch (Specifier) {
295 case 's':
296 // Deprecated, but ignoring here to preserve loading older textual llvm
297 // ASM file
298 break;
299 case 'E':
300 BigEndian = true;
301 break;
302 case 'e':
303 BigEndian = false;
304 break;
305 case 'p': {
306 // Address space.
307 unsigned AddrSpace = 0;
308 if (!Tok.empty())
309 if (Error Err = getInt(Tok, AddrSpace))
310 return Err;
311 if (!isUInt<24>(AddrSpace))
312 return reportError("Invalid address space, must be a 24bit integer");
313
314 // Size.
315 if (Rest.empty())
316 return reportError(
317 "Missing size specification for pointer in datalayout string");
318 if (Error Err = ::split(Rest, ':', Split))
319 return Err;
320 unsigned PointerMemSize;
321 if (Error Err = getInt(Tok, PointerMemSize))
322 return Err;
323 if (!PointerMemSize)
324 return reportError("Invalid pointer size of 0 bytes");
325
326 // ABI alignment.
327 if (Rest.empty())
328 return reportError(
329 "Missing alignment specification for pointer in datalayout string");
330 if (Error Err = ::split(Rest, ':', Split))
331 return Err;
332 unsigned PointerABIAlign;
333 if (Error Err = getIntInBytes(Tok, PointerABIAlign))
334 return Err;
335 if (!isPowerOf2_64(PointerABIAlign))
336 return reportError("Pointer ABI alignment must be a power of 2");
337
338 // Size of index used in GEP for address calculation.
339 // The parameter is optional. By default it is equal to size of pointer.
340 unsigned IndexSize = PointerMemSize;
341
342 // Preferred alignment.
343 unsigned PointerPrefAlign = PointerABIAlign;
344 if (!Rest.empty()) {
345 if (Error Err = ::split(Rest, ':', Split))
346 return Err;
347 if (Error Err = getIntInBytes(Tok, PointerPrefAlign))
348 return Err;
349 if (!isPowerOf2_64(PointerPrefAlign))
350 return reportError(
351 "Pointer preferred alignment must be a power of 2");
352
353 // Now read the index. It is the second optional parameter here.
354 if (!Rest.empty()) {
355 if (Error Err = ::split(Rest, ':', Split))
356 return Err;
357 if (Error Err = getInt(Tok, IndexSize))
358 return Err;
359 if (!IndexSize)
360 return reportError("Invalid index size of 0 bytes");
361 }
362 }
363 if (Error Err = setPointerAlignmentInBits(
364 AddrSpace, assumeAligned(PointerABIAlign),
365 assumeAligned(PointerPrefAlign), PointerMemSize, IndexSize))
366 return Err;
367 break;
368 }
369 case 'i':
370 case 'v':
371 case 'f':
372 case 'a': {
373 AlignTypeEnum AlignType;
374 switch (Specifier) {
375 default: llvm_unreachable("Unexpected specifier!");
376 case 'i': AlignType = INTEGER_ALIGN; break;
377 case 'v': AlignType = VECTOR_ALIGN; break;
378 case 'f': AlignType = FLOAT_ALIGN; break;
379 case 'a': AlignType = AGGREGATE_ALIGN; break;
380 }
381
382 // Bit size.
383 unsigned Size = 0;
384 if (!Tok.empty())
385 if (Error Err = getInt(Tok, Size))
386 return Err;
387
388 if (AlignType == AGGREGATE_ALIGN && Size != 0)
389 return reportError(
390 "Sized aggregate specification in datalayout string");
391
392 // ABI alignment.
393 if (Rest.empty())
394 return reportError(
395 "Missing alignment specification in datalayout string");
396 if (Error Err = ::split(Rest, ':', Split))
397 return Err;
398 unsigned ABIAlign;
399 if (Error Err = getIntInBytes(Tok, ABIAlign))
400 return Err;
401 if (AlignType != AGGREGATE_ALIGN && !ABIAlign)
402 return reportError(
403 "ABI alignment specification must be >0 for non-aggregate types");
404
405 if (!isUInt<16>(ABIAlign))
406 return reportError("Invalid ABI alignment, must be a 16bit integer");
407 if (ABIAlign != 0 && !isPowerOf2_64(ABIAlign))
408 return reportError("Invalid ABI alignment, must be a power of 2");
409
410 // Preferred alignment.
411 unsigned PrefAlign = ABIAlign;
412 if (!Rest.empty()) {
413 if (Error Err = ::split(Rest, ':', Split))
414 return Err;
415 if (Error Err = getIntInBytes(Tok, PrefAlign))
416 return Err;
417 }
418
419 if (!isUInt<16>(PrefAlign))
420 return reportError(
421 "Invalid preferred alignment, must be a 16bit integer");
422 if (PrefAlign != 0 && !isPowerOf2_64(PrefAlign))
423 return reportError("Invalid preferred alignment, must be a power of 2");
424
425 if (Error Err = setAlignment(AlignType, assumeAligned(ABIAlign),
426 assumeAligned(PrefAlign), Size))
427 return Err;
428
429 break;
430 }
431 case 'n': // Native integer types.
432 while (true) {
433 unsigned Width;
434 if (Error Err = getInt(Tok, Width))
435 return Err;
436 if (Width == 0)
437 return reportError(
438 "Zero width native integer type in datalayout string");
439 LegalIntWidths.push_back(Width);
440 if (Rest.empty())
441 break;
442 if (Error Err = ::split(Rest, ':', Split))
443 return Err;
444 }
445 break;
446 case 'S': { // Stack natural alignment.
447 uint64_t Alignment;
448 if (Error Err = getIntInBytes(Tok, Alignment))
449 return Err;
450 if (Alignment != 0 && !llvm::isPowerOf2_64(Alignment))
451 return reportError("Alignment is neither 0 nor a power of 2");
452 StackNaturalAlign = MaybeAlign(Alignment);
453 break;
454 }
455 case 'F': {
456 switch (Tok.front()) {
457 case 'i':
458 TheFunctionPtrAlignType = FunctionPtrAlignType::Independent;
459 break;
460 case 'n':
461 TheFunctionPtrAlignType = FunctionPtrAlignType::MultipleOfFunctionAlign;
462 break;
463 default:
464 return reportError("Unknown function pointer alignment type in "
465 "datalayout string");
466 }
467 Tok = Tok.substr(1);
468 uint64_t Alignment;
469 if (Error Err = getIntInBytes(Tok, Alignment))
470 return Err;
471 if (Alignment != 0 && !llvm::isPowerOf2_64(Alignment))
472 return reportError("Alignment is neither 0 nor a power of 2");
473 FunctionPtrAlign = MaybeAlign(Alignment);
474 break;
475 }
476 case 'P': { // Function address space.
477 if (Error Err = getAddrSpace(Tok, ProgramAddrSpace))
478 return Err;
479 break;
480 }
481 case 'A': { // Default stack/alloca address space.
482 if (Error Err = getAddrSpace(Tok, AllocaAddrSpace))
483 return Err;
484 break;
485 }
486 case 'G': { // Default address space for global variables.
487 if (Error Err = getAddrSpace(Tok, DefaultGlobalsAddrSpace))
488 return Err;
489 break;
490 }
491 case 'm':
492 if (!Tok.empty())
493 return reportError("Unexpected trailing characters after mangling "
494 "specifier in datalayout string");
495 if (Rest.empty())
496 return reportError("Expected mangling specifier in datalayout string");
497 if (Rest.size() > 1)
498 return reportError("Unknown mangling specifier in datalayout string");
499 switch(Rest[0]) {
500 default:
501 return reportError("Unknown mangling in datalayout string");
502 case 'e':
503 ManglingMode = MM_ELF;
504 break;
505 case 'l':
506 ManglingMode = MM_GOFF;
507 break;
508 case 'o':
509 ManglingMode = MM_MachO;
510 break;
511 case 'm':
512 ManglingMode = MM_Mips;
513 break;
514 case 'w':
515 ManglingMode = MM_WinCOFF;
516 break;
517 case 'x':
518 ManglingMode = MM_WinCOFFX86;
519 break;
520 case 'a':
521 ManglingMode = MM_XCOFF;
522 break;
523 }
524 break;
525 default:
526 return reportError("Unknown specifier in datalayout string");
527 break;
528 }
529 }
530
531 return Error::success();
532 }
533
DataLayout(const Module * M)534 DataLayout::DataLayout(const Module *M) {
535 init(M);
536 }
537
init(const Module * M)538 void DataLayout::init(const Module *M) { *this = M->getDataLayout(); }
539
operator ==(const DataLayout & Other) const540 bool DataLayout::operator==(const DataLayout &Other) const {
541 bool Ret = BigEndian == Other.BigEndian &&
542 AllocaAddrSpace == Other.AllocaAddrSpace &&
543 StackNaturalAlign == Other.StackNaturalAlign &&
544 ProgramAddrSpace == Other.ProgramAddrSpace &&
545 DefaultGlobalsAddrSpace == Other.DefaultGlobalsAddrSpace &&
546 FunctionPtrAlign == Other.FunctionPtrAlign &&
547 TheFunctionPtrAlignType == Other.TheFunctionPtrAlignType &&
548 ManglingMode == Other.ManglingMode &&
549 LegalIntWidths == Other.LegalIntWidths &&
550 Alignments == Other.Alignments && Pointers == Other.Pointers;
551 // Note: getStringRepresentation() might differs, it is not canonicalized
552 return Ret;
553 }
554
555 DataLayout::AlignmentsTy::iterator
findAlignmentLowerBound(AlignTypeEnum AlignType,uint32_t BitWidth)556 DataLayout::findAlignmentLowerBound(AlignTypeEnum AlignType,
557 uint32_t BitWidth) {
558 auto Pair = std::make_pair((unsigned)AlignType, BitWidth);
559 return partition_point(Alignments, [=](const LayoutAlignElem &E) {
560 return std::make_pair(E.AlignType, E.TypeBitWidth) < Pair;
561 });
562 }
563
setAlignment(AlignTypeEnum align_type,Align abi_align,Align pref_align,uint32_t bit_width)564 Error DataLayout::setAlignment(AlignTypeEnum align_type, Align abi_align,
565 Align pref_align, uint32_t bit_width) {
566 // AlignmentsTy::ABIAlign and AlignmentsTy::PrefAlign were once stored as
567 // uint16_t, it is unclear if there are requirements for alignment to be less
568 // than 2^16 other than storage. In the meantime we leave the restriction as
569 // an assert. See D67400 for context.
570 assert(Log2(abi_align) < 16 && Log2(pref_align) < 16 && "Alignment too big");
571 if (!isUInt<24>(bit_width))
572 return reportError("Invalid bit width, must be a 24bit integer");
573 if (pref_align < abi_align)
574 return reportError(
575 "Preferred alignment cannot be less than the ABI alignment");
576
577 AlignmentsTy::iterator I = findAlignmentLowerBound(align_type, bit_width);
578 if (I != Alignments.end() &&
579 I->AlignType == (unsigned)align_type && I->TypeBitWidth == bit_width) {
580 // Update the abi, preferred alignments.
581 I->ABIAlign = abi_align;
582 I->PrefAlign = pref_align;
583 } else {
584 // Insert before I to keep the vector sorted.
585 Alignments.insert(I, LayoutAlignElem::get(align_type, abi_align,
586 pref_align, bit_width));
587 }
588 return Error::success();
589 }
590
591 const PointerAlignElem &
getPointerAlignElem(uint32_t AddressSpace) const592 DataLayout::getPointerAlignElem(uint32_t AddressSpace) const {
593 if (AddressSpace != 0) {
594 auto I = lower_bound(Pointers, AddressSpace,
595 [](const PointerAlignElem &A, uint32_t AddressSpace) {
596 return A.AddressSpace < AddressSpace;
597 });
598 if (I != Pointers.end() && I->AddressSpace == AddressSpace)
599 return *I;
600 }
601
602 assert(Pointers[0].AddressSpace == 0);
603 return Pointers[0];
604 }
605
setPointerAlignmentInBits(uint32_t AddrSpace,Align ABIAlign,Align PrefAlign,uint32_t TypeBitWidth,uint32_t IndexBitWidth)606 Error DataLayout::setPointerAlignmentInBits(uint32_t AddrSpace, Align ABIAlign,
607 Align PrefAlign,
608 uint32_t TypeBitWidth,
609 uint32_t IndexBitWidth) {
610 if (PrefAlign < ABIAlign)
611 return reportError(
612 "Preferred alignment cannot be less than the ABI alignment");
613
614 auto I = lower_bound(Pointers, AddrSpace,
615 [](const PointerAlignElem &A, uint32_t AddressSpace) {
616 return A.AddressSpace < AddressSpace;
617 });
618 if (I == Pointers.end() || I->AddressSpace != AddrSpace) {
619 Pointers.insert(I,
620 PointerAlignElem::getInBits(AddrSpace, ABIAlign, PrefAlign,
621 TypeBitWidth, IndexBitWidth));
622 } else {
623 I->ABIAlign = ABIAlign;
624 I->PrefAlign = PrefAlign;
625 I->TypeBitWidth = TypeBitWidth;
626 I->IndexBitWidth = IndexBitWidth;
627 }
628 return Error::success();
629 }
630
getIntegerAlignment(uint32_t BitWidth,bool abi_or_pref) const631 Align DataLayout::getIntegerAlignment(uint32_t BitWidth,
632 bool abi_or_pref) const {
633 auto I = findAlignmentLowerBound(INTEGER_ALIGN, BitWidth);
634 // If we don't have an exact match, use alignment of next larger integer
635 // type. If there is none, use alignment of largest integer type by going
636 // back one element.
637 if (I == Alignments.end() || I->AlignType != INTEGER_ALIGN)
638 --I;
639 assert(I->AlignType == INTEGER_ALIGN && "Must be integer alignment");
640 return abi_or_pref ? I->ABIAlign : I->PrefAlign;
641 }
642
643 namespace {
644
645 class StructLayoutMap {
646 using LayoutInfoTy = DenseMap<StructType*, StructLayout*>;
647 LayoutInfoTy LayoutInfo;
648
649 public:
~StructLayoutMap()650 ~StructLayoutMap() {
651 // Remove any layouts.
652 for (const auto &I : LayoutInfo) {
653 StructLayout *Value = I.second;
654 Value->~StructLayout();
655 free(Value);
656 }
657 }
658
operator [](StructType * STy)659 StructLayout *&operator[](StructType *STy) {
660 return LayoutInfo[STy];
661 }
662 };
663
664 } // end anonymous namespace
665
clear()666 void DataLayout::clear() {
667 LegalIntWidths.clear();
668 Alignments.clear();
669 Pointers.clear();
670 delete static_cast<StructLayoutMap *>(LayoutMap);
671 LayoutMap = nullptr;
672 }
673
~DataLayout()674 DataLayout::~DataLayout() {
675 clear();
676 }
677
getStructLayout(StructType * Ty) const678 const StructLayout *DataLayout::getStructLayout(StructType *Ty) const {
679 if (!LayoutMap)
680 LayoutMap = new StructLayoutMap();
681
682 StructLayoutMap *STM = static_cast<StructLayoutMap*>(LayoutMap);
683 StructLayout *&SL = (*STM)[Ty];
684 if (SL) return SL;
685
686 // Otherwise, create the struct layout. Because it is variable length, we
687 // malloc it, then use placement new.
688 StructLayout *L = (StructLayout *)safe_malloc(
689 StructLayout::totalSizeToAlloc<uint64_t>(Ty->getNumElements()));
690
691 // Set SL before calling StructLayout's ctor. The ctor could cause other
692 // entries to be added to TheMap, invalidating our reference.
693 SL = L;
694
695 new (L) StructLayout(Ty, *this);
696
697 return L;
698 }
699
getPointerABIAlignment(unsigned AS) const700 Align DataLayout::getPointerABIAlignment(unsigned AS) const {
701 return getPointerAlignElem(AS).ABIAlign;
702 }
703
getPointerPrefAlignment(unsigned AS) const704 Align DataLayout::getPointerPrefAlignment(unsigned AS) const {
705 return getPointerAlignElem(AS).PrefAlign;
706 }
707
getPointerSize(unsigned AS) const708 unsigned DataLayout::getPointerSize(unsigned AS) const {
709 return divideCeil(getPointerAlignElem(AS).TypeBitWidth, 8);
710 }
711
getMaxIndexSize() const712 unsigned DataLayout::getMaxIndexSize() const {
713 unsigned MaxIndexSize = 0;
714 for (auto &P : Pointers)
715 MaxIndexSize =
716 std::max(MaxIndexSize, (unsigned)divideCeil(P.TypeBitWidth, 8));
717
718 return MaxIndexSize;
719 }
720
getPointerTypeSizeInBits(Type * Ty) const721 unsigned DataLayout::getPointerTypeSizeInBits(Type *Ty) const {
722 assert(Ty->isPtrOrPtrVectorTy() &&
723 "This should only be called with a pointer or pointer vector type");
724 Ty = Ty->getScalarType();
725 return getPointerSizeInBits(cast<PointerType>(Ty)->getAddressSpace());
726 }
727
getIndexSize(unsigned AS) const728 unsigned DataLayout::getIndexSize(unsigned AS) const {
729 return divideCeil(getPointerAlignElem(AS).IndexBitWidth, 8);
730 }
731
getIndexTypeSizeInBits(Type * Ty) const732 unsigned DataLayout::getIndexTypeSizeInBits(Type *Ty) const {
733 assert(Ty->isPtrOrPtrVectorTy() &&
734 "This should only be called with a pointer or pointer vector type");
735 Ty = Ty->getScalarType();
736 return getIndexSizeInBits(cast<PointerType>(Ty)->getAddressSpace());
737 }
738
739 /*!
740 \param abi_or_pref Flag that determines which alignment is returned. true
741 returns the ABI alignment, false returns the preferred alignment.
742 \param Ty The underlying type for which alignment is determined.
743
744 Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref
745 == false) for the requested type \a Ty.
746 */
getAlignment(Type * Ty,bool abi_or_pref) const747 Align DataLayout::getAlignment(Type *Ty, bool abi_or_pref) const {
748 assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
749 switch (Ty->getTypeID()) {
750 // Early escape for the non-numeric types.
751 case Type::LabelTyID:
752 return abi_or_pref ? getPointerABIAlignment(0) : getPointerPrefAlignment(0);
753 case Type::PointerTyID: {
754 unsigned AS = cast<PointerType>(Ty)->getAddressSpace();
755 return abi_or_pref ? getPointerABIAlignment(AS)
756 : getPointerPrefAlignment(AS);
757 }
758 case Type::ArrayTyID:
759 return getAlignment(cast<ArrayType>(Ty)->getElementType(), abi_or_pref);
760
761 case Type::StructTyID: {
762 // Packed structure types always have an ABI alignment of one.
763 if (cast<StructType>(Ty)->isPacked() && abi_or_pref)
764 return Align(1);
765
766 // Get the layout annotation... which is lazily created on demand.
767 const StructLayout *Layout = getStructLayout(cast<StructType>(Ty));
768 const LayoutAlignElem &AggregateAlign = Alignments[0];
769 assert(AggregateAlign.AlignType == AGGREGATE_ALIGN &&
770 "Aggregate alignment must be first alignment entry");
771 const Align Align =
772 abi_or_pref ? AggregateAlign.ABIAlign : AggregateAlign.PrefAlign;
773 return std::max(Align, Layout->getAlignment());
774 }
775 case Type::IntegerTyID:
776 return getIntegerAlignment(Ty->getIntegerBitWidth(), abi_or_pref);
777 case Type::HalfTyID:
778 case Type::BFloatTyID:
779 case Type::FloatTyID:
780 case Type::DoubleTyID:
781 // PPC_FP128TyID and FP128TyID have different data contents, but the
782 // same size and alignment, so they look the same here.
783 case Type::PPC_FP128TyID:
784 case Type::FP128TyID:
785 case Type::X86_FP80TyID: {
786 unsigned BitWidth = getTypeSizeInBits(Ty).getFixedSize();
787 auto I = findAlignmentLowerBound(FLOAT_ALIGN, BitWidth);
788 if (I != Alignments.end() && I->AlignType == FLOAT_ALIGN &&
789 I->TypeBitWidth == BitWidth)
790 return abi_or_pref ? I->ABIAlign : I->PrefAlign;
791
792 // If we still couldn't find a reasonable default alignment, fall back
793 // to a simple heuristic that the alignment is the first power of two
794 // greater-or-equal to the store size of the type. This is a reasonable
795 // approximation of reality, and if the user wanted something less
796 // less conservative, they should have specified it explicitly in the data
797 // layout.
798 return Align(PowerOf2Ceil(BitWidth / 8));
799 }
800 case Type::X86_MMXTyID:
801 case Type::FixedVectorTyID:
802 case Type::ScalableVectorTyID: {
803 unsigned BitWidth = getTypeSizeInBits(Ty).getKnownMinSize();
804 auto I = findAlignmentLowerBound(VECTOR_ALIGN, BitWidth);
805 if (I != Alignments.end() && I->AlignType == VECTOR_ALIGN &&
806 I->TypeBitWidth == BitWidth)
807 return abi_or_pref ? I->ABIAlign : I->PrefAlign;
808
809 // By default, use natural alignment for vector types. This is consistent
810 // with what clang and llvm-gcc do.
811 //
812 // We're only calculating a natural alignment, so it doesn't have to be
813 // based on the full size for scalable vectors. Using the minimum element
814 // count should be enough here.
815 return Align(PowerOf2Ceil(getTypeStoreSize(Ty).getKnownMinSize()));
816 }
817 case Type::X86_AMXTyID:
818 return Align(64);
819 default:
820 llvm_unreachable("Bad type for getAlignment!!!");
821 }
822 }
823
824 /// TODO: Remove this function once the transition to Align is over.
getABITypeAlignment(Type * Ty) const825 uint64_t DataLayout::getABITypeAlignment(Type *Ty) const {
826 return getABITypeAlign(Ty).value();
827 }
828
getABITypeAlign(Type * Ty) const829 Align DataLayout::getABITypeAlign(Type *Ty) const {
830 return getAlignment(Ty, true);
831 }
832
833 /// TODO: Remove this function once the transition to Align is over.
getPrefTypeAlignment(Type * Ty) const834 uint64_t DataLayout::getPrefTypeAlignment(Type *Ty) const {
835 return getPrefTypeAlign(Ty).value();
836 }
837
getPrefTypeAlign(Type * Ty) const838 Align DataLayout::getPrefTypeAlign(Type *Ty) const {
839 return getAlignment(Ty, false);
840 }
841
getIntPtrType(LLVMContext & C,unsigned AddressSpace) const842 IntegerType *DataLayout::getIntPtrType(LLVMContext &C,
843 unsigned AddressSpace) const {
844 return IntegerType::get(C, getPointerSizeInBits(AddressSpace));
845 }
846
getIntPtrType(Type * Ty) const847 Type *DataLayout::getIntPtrType(Type *Ty) const {
848 assert(Ty->isPtrOrPtrVectorTy() &&
849 "Expected a pointer or pointer vector type.");
850 unsigned NumBits = getPointerTypeSizeInBits(Ty);
851 IntegerType *IntTy = IntegerType::get(Ty->getContext(), NumBits);
852 if (VectorType *VecTy = dyn_cast<VectorType>(Ty))
853 return VectorType::get(IntTy, VecTy);
854 return IntTy;
855 }
856
getSmallestLegalIntType(LLVMContext & C,unsigned Width) const857 Type *DataLayout::getSmallestLegalIntType(LLVMContext &C, unsigned Width) const {
858 for (unsigned LegalIntWidth : LegalIntWidths)
859 if (Width <= LegalIntWidth)
860 return Type::getIntNTy(C, LegalIntWidth);
861 return nullptr;
862 }
863
getLargestLegalIntTypeSizeInBits() const864 unsigned DataLayout::getLargestLegalIntTypeSizeInBits() const {
865 auto Max = std::max_element(LegalIntWidths.begin(), LegalIntWidths.end());
866 return Max != LegalIntWidths.end() ? *Max : 0;
867 }
868
getIndexType(Type * Ty) const869 Type *DataLayout::getIndexType(Type *Ty) const {
870 assert(Ty->isPtrOrPtrVectorTy() &&
871 "Expected a pointer or pointer vector type.");
872 unsigned NumBits = getIndexTypeSizeInBits(Ty);
873 IntegerType *IntTy = IntegerType::get(Ty->getContext(), NumBits);
874 if (VectorType *VecTy = dyn_cast<VectorType>(Ty))
875 return VectorType::get(IntTy, VecTy);
876 return IntTy;
877 }
878
getIndexedOffsetInType(Type * ElemTy,ArrayRef<Value * > Indices) const879 int64_t DataLayout::getIndexedOffsetInType(Type *ElemTy,
880 ArrayRef<Value *> Indices) const {
881 int64_t Result = 0;
882
883 generic_gep_type_iterator<Value* const*>
884 GTI = gep_type_begin(ElemTy, Indices),
885 GTE = gep_type_end(ElemTy, Indices);
886 for (; GTI != GTE; ++GTI) {
887 Value *Idx = GTI.getOperand();
888 if (StructType *STy = GTI.getStructTypeOrNull()) {
889 assert(Idx->getType()->isIntegerTy(32) && "Illegal struct idx");
890 unsigned FieldNo = cast<ConstantInt>(Idx)->getZExtValue();
891
892 // Get structure layout information...
893 const StructLayout *Layout = getStructLayout(STy);
894
895 // Add in the offset, as calculated by the structure layout info...
896 Result += Layout->getElementOffset(FieldNo);
897 } else {
898 // Get the array index and the size of each array element.
899 if (int64_t arrayIdx = cast<ConstantInt>(Idx)->getSExtValue())
900 Result += arrayIdx * getTypeAllocSize(GTI.getIndexedType());
901 }
902 }
903
904 return Result;
905 }
906
getElementIndex(TypeSize ElemSize,APInt & Offset)907 static APInt getElementIndex(TypeSize ElemSize, APInt &Offset) {
908 // Skip over scalable or zero size elements. Also skip element sizes larger
909 // than the positive index space, because the arithmetic below may not be
910 // correct in that case.
911 unsigned BitWidth = Offset.getBitWidth();
912 if (ElemSize.isScalable() || ElemSize == 0 ||
913 !isUIntN(BitWidth - 1, ElemSize)) {
914 return APInt::getZero(BitWidth);
915 }
916
917 APInt Index = Offset.sdiv(ElemSize);
918 Offset -= Index * ElemSize;
919 if (Offset.isNegative()) {
920 // Prefer a positive remaining offset to allow struct indexing.
921 --Index;
922 Offset += ElemSize;
923 assert(Offset.isNonNegative() && "Remaining offset shouldn't be negative");
924 }
925 return Index;
926 }
927
getGEPIndexForOffset(Type * & ElemTy,APInt & Offset) const928 Optional<APInt> DataLayout::getGEPIndexForOffset(Type *&ElemTy,
929 APInt &Offset) const {
930 if (auto *ArrTy = dyn_cast<ArrayType>(ElemTy)) {
931 ElemTy = ArrTy->getElementType();
932 return getElementIndex(getTypeAllocSize(ElemTy), Offset);
933 }
934
935 if (auto *VecTy = dyn_cast<VectorType>(ElemTy)) {
936 ElemTy = VecTy->getElementType();
937 unsigned ElemSizeInBits = getTypeSizeInBits(ElemTy).getFixedSize();
938 // GEPs over non-multiple of 8 size vector elements are invalid.
939 if (ElemSizeInBits % 8 != 0)
940 return None;
941
942 return getElementIndex(TypeSize::Fixed(ElemSizeInBits / 8), Offset);
943 }
944
945 if (auto *STy = dyn_cast<StructType>(ElemTy)) {
946 const StructLayout *SL = getStructLayout(STy);
947 uint64_t IntOffset = Offset.getZExtValue();
948 if (IntOffset >= SL->getSizeInBytes())
949 return None;
950
951 unsigned Index = SL->getElementContainingOffset(IntOffset);
952 Offset -= SL->getElementOffset(Index);
953 ElemTy = STy->getElementType(Index);
954 return APInt(32, Index);
955 }
956
957 // Non-aggregate type.
958 return None;
959 }
960
getGEPIndicesForOffset(Type * & ElemTy,APInt & Offset) const961 SmallVector<APInt> DataLayout::getGEPIndicesForOffset(Type *&ElemTy,
962 APInt &Offset) const {
963 assert(ElemTy->isSized() && "Element type must be sized");
964 SmallVector<APInt> Indices;
965 Indices.push_back(getElementIndex(getTypeAllocSize(ElemTy), Offset));
966 while (Offset != 0) {
967 Optional<APInt> Index = getGEPIndexForOffset(ElemTy, Offset);
968 if (!Index)
969 break;
970 Indices.push_back(*Index);
971 }
972
973 return Indices;
974 }
975
976 /// getPreferredAlign - Return the preferred alignment of the specified global.
977 /// This includes an explicitly requested alignment (if the global has one).
getPreferredAlign(const GlobalVariable * GV) const978 Align DataLayout::getPreferredAlign(const GlobalVariable *GV) const {
979 MaybeAlign GVAlignment = GV->getAlign();
980 // If a section is specified, always precisely honor explicit alignment,
981 // so we don't insert padding into a section we don't control.
982 if (GVAlignment && GV->hasSection())
983 return *GVAlignment;
984
985 // If no explicit alignment is specified, compute the alignment based on
986 // the IR type. If an alignment is specified, increase it to match the ABI
987 // alignment of the IR type.
988 //
989 // FIXME: Not sure it makes sense to use the alignment of the type if
990 // there's already an explicit alignment specification.
991 Type *ElemType = GV->getValueType();
992 Align Alignment = getPrefTypeAlign(ElemType);
993 if (GVAlignment) {
994 if (*GVAlignment >= Alignment)
995 Alignment = *GVAlignment;
996 else
997 Alignment = std::max(*GVAlignment, getABITypeAlign(ElemType));
998 }
999
1000 // If no explicit alignment is specified, and the global is large, increase
1001 // the alignment to 16.
1002 // FIXME: Why 16, specifically?
1003 if (GV->hasInitializer() && !GVAlignment) {
1004 if (Alignment < Align(16)) {
1005 // If the global is not external, see if it is large. If so, give it a
1006 // larger alignment.
1007 if (getTypeSizeInBits(ElemType) > 128)
1008 Alignment = Align(16); // 16-byte alignment.
1009 }
1010 }
1011 return Alignment;
1012 }
1013