1 //===---- TargetInfo.cpp - Encapsulate target details -----------*- C++ -*-===//
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 // These classes wrap the information about a call or function
11 // definition used to handle ABI compliancy.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "TargetInfo.h"
16 #include "ABIInfo.h"
17 #include "CGCXXABI.h"
18 #include "CGValue.h"
19 #include "CodeGenFunction.h"
20 #include "clang/AST/RecordLayout.h"
21 #include "clang/CodeGen/CGFunctionInfo.h"
22 #include "clang/Frontend/CodeGenOptions.h"
23 #include "llvm/ADT/StringExtras.h"
24 #include "llvm/ADT/Triple.h"
25 #include "llvm/IR/DataLayout.h"
26 #include "llvm/IR/Type.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include <algorithm>    // std::sort
29 
30 using namespace clang;
31 using namespace CodeGen;
32 
33 static void AssignToArrayRange(CodeGen::CGBuilderTy &Builder,
34                                llvm::Value *Array,
35                                llvm::Value *Value,
36                                unsigned FirstIndex,
37                                unsigned LastIndex) {
38   // Alternatively, we could emit this as a loop in the source.
39   for (unsigned I = FirstIndex; I <= LastIndex; ++I) {
40     llvm::Value *Cell =
41         Builder.CreateConstInBoundsGEP1_32(Builder.getInt8Ty(), Array, I);
42     Builder.CreateAlignedStore(Value, Cell, CharUnits::One());
43   }
44 }
45 
46 static bool isAggregateTypeForABI(QualType T) {
47   return !CodeGenFunction::hasScalarEvaluationKind(T) ||
48          T->isMemberFunctionPointerType();
49 }
50 
51 ABIArgInfo
52 ABIInfo::getNaturalAlignIndirect(QualType Ty, bool ByRef, bool Realign,
53                                  llvm::Type *Padding) const {
54   return ABIArgInfo::getIndirect(getContext().getTypeAlignInChars(Ty),
55                                  ByRef, Realign, Padding);
56 }
57 
58 ABIArgInfo
59 ABIInfo::getNaturalAlignIndirectInReg(QualType Ty, bool Realign) const {
60   return ABIArgInfo::getIndirectInReg(getContext().getTypeAlignInChars(Ty),
61                                       /*ByRef*/ false, Realign);
62 }
63 
64 Address ABIInfo::EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr,
65                              QualType Ty) const {
66   return Address::invalid();
67 }
68 
69 ABIInfo::~ABIInfo() {}
70 
71 static CGCXXABI::RecordArgABI getRecordArgABI(const RecordType *RT,
72                                               CGCXXABI &CXXABI) {
73   const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl());
74   if (!RD)
75     return CGCXXABI::RAA_Default;
76   return CXXABI.getRecordArgABI(RD);
77 }
78 
79 static CGCXXABI::RecordArgABI getRecordArgABI(QualType T,
80                                               CGCXXABI &CXXABI) {
81   const RecordType *RT = T->getAs<RecordType>();
82   if (!RT)
83     return CGCXXABI::RAA_Default;
84   return getRecordArgABI(RT, CXXABI);
85 }
86 
87 /// Pass transparent unions as if they were the type of the first element. Sema
88 /// should ensure that all elements of the union have the same "machine type".
89 static QualType useFirstFieldIfTransparentUnion(QualType Ty) {
90   if (const RecordType *UT = Ty->getAsUnionType()) {
91     const RecordDecl *UD = UT->getDecl();
92     if (UD->hasAttr<TransparentUnionAttr>()) {
93       assert(!UD->field_empty() && "sema created an empty transparent union");
94       return UD->field_begin()->getType();
95     }
96   }
97   return Ty;
98 }
99 
100 CGCXXABI &ABIInfo::getCXXABI() const {
101   return CGT.getCXXABI();
102 }
103 
104 ASTContext &ABIInfo::getContext() const {
105   return CGT.getContext();
106 }
107 
108 llvm::LLVMContext &ABIInfo::getVMContext() const {
109   return CGT.getLLVMContext();
110 }
111 
112 const llvm::DataLayout &ABIInfo::getDataLayout() const {
113   return CGT.getDataLayout();
114 }
115 
116 const TargetInfo &ABIInfo::getTarget() const {
117   return CGT.getTarget();
118 }
119 
120 bool ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
121   return false;
122 }
123 
124 bool ABIInfo::isHomogeneousAggregateSmallEnough(const Type *Base,
125                                                 uint64_t Members) const {
126   return false;
127 }
128 
129 bool ABIInfo::shouldSignExtUnsignedType(QualType Ty) const {
130   return false;
131 }
132 
133 void ABIArgInfo::dump() const {
134   raw_ostream &OS = llvm::errs();
135   OS << "(ABIArgInfo Kind=";
136   switch (TheKind) {
137   case Direct:
138     OS << "Direct Type=";
139     if (llvm::Type *Ty = getCoerceToType())
140       Ty->print(OS);
141     else
142       OS << "null";
143     break;
144   case Extend:
145     OS << "Extend";
146     break;
147   case Ignore:
148     OS << "Ignore";
149     break;
150   case InAlloca:
151     OS << "InAlloca Offset=" << getInAllocaFieldIndex();
152     break;
153   case Indirect:
154     OS << "Indirect Align=" << getIndirectAlign().getQuantity()
155        << " ByVal=" << getIndirectByVal()
156        << " Realign=" << getIndirectRealign();
157     break;
158   case Expand:
159     OS << "Expand";
160     break;
161   }
162   OS << ")\n";
163 }
164 
165 // Dynamically round a pointer up to a multiple of the given alignment.
166 static llvm::Value *emitRoundPointerUpToAlignment(CodeGenFunction &CGF,
167                                                   llvm::Value *Ptr,
168                                                   CharUnits Align) {
169   llvm::Value *PtrAsInt = Ptr;
170   // OverflowArgArea = (OverflowArgArea + Align - 1) & -Align;
171   PtrAsInt = CGF.Builder.CreatePtrToInt(PtrAsInt, CGF.IntPtrTy);
172   PtrAsInt = CGF.Builder.CreateAdd(PtrAsInt,
173         llvm::ConstantInt::get(CGF.IntPtrTy, Align.getQuantity() - 1));
174   PtrAsInt = CGF.Builder.CreateAnd(PtrAsInt,
175            llvm::ConstantInt::get(CGF.IntPtrTy, -Align.getQuantity()));
176   PtrAsInt = CGF.Builder.CreateIntToPtr(PtrAsInt,
177                                         Ptr->getType(),
178                                         Ptr->getName() + ".aligned");
179   return PtrAsInt;
180 }
181 
182 /// Emit va_arg for a platform using the common void* representation,
183 /// where arguments are simply emitted in an array of slots on the stack.
184 ///
185 /// This version implements the core direct-value passing rules.
186 ///
187 /// \param SlotSize - The size and alignment of a stack slot.
188 ///   Each argument will be allocated to a multiple of this number of
189 ///   slots, and all the slots will be aligned to this value.
190 /// \param AllowHigherAlign - The slot alignment is not a cap;
191 ///   an argument type with an alignment greater than the slot size
192 ///   will be emitted on a higher-alignment address, potentially
193 ///   leaving one or more empty slots behind as padding.  If this
194 ///   is false, the returned address might be less-aligned than
195 ///   DirectAlign.
196 static Address emitVoidPtrDirectVAArg(CodeGenFunction &CGF,
197                                       Address VAListAddr,
198                                       llvm::Type *DirectTy,
199                                       CharUnits DirectSize,
200                                       CharUnits DirectAlign,
201                                       CharUnits SlotSize,
202                                       bool AllowHigherAlign) {
203   // Cast the element type to i8* if necessary.  Some platforms define
204   // va_list as a struct containing an i8* instead of just an i8*.
205   if (VAListAddr.getElementType() != CGF.Int8PtrTy)
206     VAListAddr = CGF.Builder.CreateElementBitCast(VAListAddr, CGF.Int8PtrTy);
207 
208   llvm::Value *Ptr = CGF.Builder.CreateLoad(VAListAddr, "argp.cur");
209 
210   // If the CC aligns values higher than the slot size, do so if needed.
211   Address Addr = Address::invalid();
212   if (AllowHigherAlign && DirectAlign > SlotSize) {
213     Addr = Address(emitRoundPointerUpToAlignment(CGF, Ptr, DirectAlign),
214                                                  DirectAlign);
215   } else {
216     Addr = Address(Ptr, SlotSize);
217   }
218 
219   // Advance the pointer past the argument, then store that back.
220   CharUnits FullDirectSize = DirectSize.RoundUpToAlignment(SlotSize);
221   llvm::Value *NextPtr =
222     CGF.Builder.CreateConstInBoundsByteGEP(Addr.getPointer(), FullDirectSize,
223                                            "argp.next");
224   CGF.Builder.CreateStore(NextPtr, VAListAddr);
225 
226   // If the argument is smaller than a slot, and this is a big-endian
227   // target, the argument will be right-adjusted in its slot.
228   if (DirectSize < SlotSize && CGF.CGM.getDataLayout().isBigEndian()) {
229     Addr = CGF.Builder.CreateConstInBoundsByteGEP(Addr, SlotSize - DirectSize);
230   }
231 
232   Addr = CGF.Builder.CreateElementBitCast(Addr, DirectTy);
233   return Addr;
234 }
235 
236 /// Emit va_arg for a platform using the common void* representation,
237 /// where arguments are simply emitted in an array of slots on the stack.
238 ///
239 /// \param IsIndirect - Values of this type are passed indirectly.
240 /// \param ValueInfo - The size and alignment of this type, generally
241 ///   computed with getContext().getTypeInfoInChars(ValueTy).
242 /// \param SlotSizeAndAlign - The size and alignment of a stack slot.
243 ///   Each argument will be allocated to a multiple of this number of
244 ///   slots, and all the slots will be aligned to this value.
245 /// \param AllowHigherAlign - The slot alignment is not a cap;
246 ///   an argument type with an alignment greater than the slot size
247 ///   will be emitted on a higher-alignment address, potentially
248 ///   leaving one or more empty slots behind as padding.
249 static Address emitVoidPtrVAArg(CodeGenFunction &CGF, Address VAListAddr,
250                                 QualType ValueTy, bool IsIndirect,
251                                 std::pair<CharUnits, CharUnits> ValueInfo,
252                                 CharUnits SlotSizeAndAlign,
253                                 bool AllowHigherAlign) {
254   // The size and alignment of the value that was passed directly.
255   CharUnits DirectSize, DirectAlign;
256   if (IsIndirect) {
257     DirectSize = CGF.getPointerSize();
258     DirectAlign = CGF.getPointerAlign();
259   } else {
260     DirectSize = ValueInfo.first;
261     DirectAlign = ValueInfo.second;
262   }
263 
264   // Cast the address we've calculated to the right type.
265   llvm::Type *DirectTy = CGF.ConvertTypeForMem(ValueTy);
266   if (IsIndirect)
267     DirectTy = DirectTy->getPointerTo(0);
268 
269   Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, DirectTy,
270                                         DirectSize, DirectAlign,
271                                         SlotSizeAndAlign,
272                                         AllowHigherAlign);
273 
274   if (IsIndirect) {
275     Addr = Address(CGF.Builder.CreateLoad(Addr), ValueInfo.second);
276   }
277 
278   return Addr;
279 
280 }
281 
282 static Address emitMergePHI(CodeGenFunction &CGF,
283                             Address Addr1, llvm::BasicBlock *Block1,
284                             Address Addr2, llvm::BasicBlock *Block2,
285                             const llvm::Twine &Name = "") {
286   assert(Addr1.getType() == Addr2.getType());
287   llvm::PHINode *PHI = CGF.Builder.CreatePHI(Addr1.getType(), 2, Name);
288   PHI->addIncoming(Addr1.getPointer(), Block1);
289   PHI->addIncoming(Addr2.getPointer(), Block2);
290   CharUnits Align = std::min(Addr1.getAlignment(), Addr2.getAlignment());
291   return Address(PHI, Align);
292 }
293 
294 TargetCodeGenInfo::~TargetCodeGenInfo() { delete Info; }
295 
296 // If someone can figure out a general rule for this, that would be great.
297 // It's probably just doomed to be platform-dependent, though.
298 unsigned TargetCodeGenInfo::getSizeOfUnwindException() const {
299   // Verified for:
300   //   x86-64     FreeBSD, Linux, Darwin
301   //   x86-32     FreeBSD, Linux, Darwin
302   //   PowerPC    Linux, Darwin
303   //   ARM        Darwin (*not* EABI)
304   //   AArch64    Linux
305   return 32;
306 }
307 
308 bool TargetCodeGenInfo::isNoProtoCallVariadic(const CallArgList &args,
309                                      const FunctionNoProtoType *fnType) const {
310   // The following conventions are known to require this to be false:
311   //   x86_stdcall
312   //   MIPS
313   // For everything else, we just prefer false unless we opt out.
314   return false;
315 }
316 
317 void
318 TargetCodeGenInfo::getDependentLibraryOption(llvm::StringRef Lib,
319                                              llvm::SmallString<24> &Opt) const {
320   // This assumes the user is passing a library name like "rt" instead of a
321   // filename like "librt.a/so", and that they don't care whether it's static or
322   // dynamic.
323   Opt = "-l";
324   Opt += Lib;
325 }
326 
327 static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays);
328 
329 /// isEmptyField - Return true iff a the field is "empty", that is it
330 /// is an unnamed bit-field or an (array of) empty record(s).
331 static bool isEmptyField(ASTContext &Context, const FieldDecl *FD,
332                          bool AllowArrays) {
333   if (FD->isUnnamedBitfield())
334     return true;
335 
336   QualType FT = FD->getType();
337 
338   // Constant arrays of empty records count as empty, strip them off.
339   // Constant arrays of zero length always count as empty.
340   if (AllowArrays)
341     while (const ConstantArrayType *AT = Context.getAsConstantArrayType(FT)) {
342       if (AT->getSize() == 0)
343         return true;
344       FT = AT->getElementType();
345     }
346 
347   const RecordType *RT = FT->getAs<RecordType>();
348   if (!RT)
349     return false;
350 
351   // C++ record fields are never empty, at least in the Itanium ABI.
352   //
353   // FIXME: We should use a predicate for whether this behavior is true in the
354   // current ABI.
355   if (isa<CXXRecordDecl>(RT->getDecl()))
356     return false;
357 
358   return isEmptyRecord(Context, FT, AllowArrays);
359 }
360 
361 /// isEmptyRecord - Return true iff a structure contains only empty
362 /// fields. Note that a structure with a flexible array member is not
363 /// considered empty.
364 static bool isEmptyRecord(ASTContext &Context, QualType T, bool AllowArrays) {
365   const RecordType *RT = T->getAs<RecordType>();
366   if (!RT)
367     return 0;
368   const RecordDecl *RD = RT->getDecl();
369   if (RD->hasFlexibleArrayMember())
370     return false;
371 
372   // If this is a C++ record, check the bases first.
373   if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD))
374     for (const auto &I : CXXRD->bases())
375       if (!isEmptyRecord(Context, I.getType(), true))
376         return false;
377 
378   for (const auto *I : RD->fields())
379     if (!isEmptyField(Context, I, AllowArrays))
380       return false;
381   return true;
382 }
383 
384 /// isSingleElementStruct - Determine if a structure is a "single
385 /// element struct", i.e. it has exactly one non-empty field or
386 /// exactly one field which is itself a single element
387 /// struct. Structures with flexible array members are never
388 /// considered single element structs.
389 ///
390 /// \return The field declaration for the single non-empty field, if
391 /// it exists.
392 static const Type *isSingleElementStruct(QualType T, ASTContext &Context) {
393   const RecordType *RT = T->getAs<RecordType>();
394   if (!RT)
395     return nullptr;
396 
397   const RecordDecl *RD = RT->getDecl();
398   if (RD->hasFlexibleArrayMember())
399     return nullptr;
400 
401   const Type *Found = nullptr;
402 
403   // If this is a C++ record, check the bases first.
404   if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
405     for (const auto &I : CXXRD->bases()) {
406       // Ignore empty records.
407       if (isEmptyRecord(Context, I.getType(), true))
408         continue;
409 
410       // If we already found an element then this isn't a single-element struct.
411       if (Found)
412         return nullptr;
413 
414       // If this is non-empty and not a single element struct, the composite
415       // cannot be a single element struct.
416       Found = isSingleElementStruct(I.getType(), Context);
417       if (!Found)
418         return nullptr;
419     }
420   }
421 
422   // Check for single element.
423   for (const auto *FD : RD->fields()) {
424     QualType FT = FD->getType();
425 
426     // Ignore empty fields.
427     if (isEmptyField(Context, FD, true))
428       continue;
429 
430     // If we already found an element then this isn't a single-element
431     // struct.
432     if (Found)
433       return nullptr;
434 
435     // Treat single element arrays as the element.
436     while (const ConstantArrayType *AT = Context.getAsConstantArrayType(FT)) {
437       if (AT->getSize().getZExtValue() != 1)
438         break;
439       FT = AT->getElementType();
440     }
441 
442     if (!isAggregateTypeForABI(FT)) {
443       Found = FT.getTypePtr();
444     } else {
445       Found = isSingleElementStruct(FT, Context);
446       if (!Found)
447         return nullptr;
448     }
449   }
450 
451   // We don't consider a struct a single-element struct if it has
452   // padding beyond the element type.
453   if (Found && Context.getTypeSize(Found) != Context.getTypeSize(T))
454     return nullptr;
455 
456   return Found;
457 }
458 
459 static bool is32Or64BitBasicType(QualType Ty, ASTContext &Context) {
460   // Treat complex types as the element type.
461   if (const ComplexType *CTy = Ty->getAs<ComplexType>())
462     Ty = CTy->getElementType();
463 
464   // Check for a type which we know has a simple scalar argument-passing
465   // convention without any padding.  (We're specifically looking for 32
466   // and 64-bit integer and integer-equivalents, float, and double.)
467   if (!Ty->getAs<BuiltinType>() && !Ty->hasPointerRepresentation() &&
468       !Ty->isEnumeralType() && !Ty->isBlockPointerType())
469     return false;
470 
471   uint64_t Size = Context.getTypeSize(Ty);
472   return Size == 32 || Size == 64;
473 }
474 
475 /// canExpandIndirectArgument - Test whether an argument type which is to be
476 /// passed indirectly (on the stack) would have the equivalent layout if it was
477 /// expanded into separate arguments. If so, we prefer to do the latter to avoid
478 /// inhibiting optimizations.
479 ///
480 // FIXME: This predicate is missing many cases, currently it just follows
481 // llvm-gcc (checks that all fields are 32-bit or 64-bit primitive types). We
482 // should probably make this smarter, or better yet make the LLVM backend
483 // capable of handling it.
484 static bool canExpandIndirectArgument(QualType Ty, ASTContext &Context) {
485   // We can only expand structure types.
486   const RecordType *RT = Ty->getAs<RecordType>();
487   if (!RT)
488     return false;
489 
490   // We can only expand (C) structures.
491   //
492   // FIXME: This needs to be generalized to handle classes as well.
493   const RecordDecl *RD = RT->getDecl();
494   if (!RD->isStruct())
495     return false;
496 
497   // We try to expand CLike CXXRecordDecl.
498   if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
499     if (!CXXRD->isCLike())
500       return false;
501   }
502 
503   uint64_t Size = 0;
504 
505   for (const auto *FD : RD->fields()) {
506     if (!is32Or64BitBasicType(FD->getType(), Context))
507       return false;
508 
509     // FIXME: Reject bit-fields wholesale; there are two problems, we don't know
510     // how to expand them yet, and the predicate for telling if a bitfield still
511     // counts as "basic" is more complicated than what we were doing previously.
512     if (FD->isBitField())
513       return false;
514 
515     Size += Context.getTypeSize(FD->getType());
516   }
517 
518   // Make sure there are not any holes in the struct.
519   if (Size != Context.getTypeSize(Ty))
520     return false;
521 
522   return true;
523 }
524 
525 namespace {
526 /// DefaultABIInfo - The default implementation for ABI specific
527 /// details. This implementation provides information which results in
528 /// self-consistent and sensible LLVM IR generation, but does not
529 /// conform to any particular ABI.
530 class DefaultABIInfo : public ABIInfo {
531 public:
532   DefaultABIInfo(CodeGen::CodeGenTypes &CGT) : ABIInfo(CGT) {}
533 
534   ABIArgInfo classifyReturnType(QualType RetTy) const;
535   ABIArgInfo classifyArgumentType(QualType RetTy) const;
536 
537   void computeInfo(CGFunctionInfo &FI) const override {
538     if (!getCXXABI().classifyReturnType(FI))
539       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
540     for (auto &I : FI.arguments())
541       I.info = classifyArgumentType(I.type);
542   }
543 
544   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
545                     QualType Ty) const override;
546 };
547 
548 class DefaultTargetCodeGenInfo : public TargetCodeGenInfo {
549 public:
550   DefaultTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
551     : TargetCodeGenInfo(new DefaultABIInfo(CGT)) {}
552 };
553 
554 Address DefaultABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
555                                   QualType Ty) const {
556   return Address::invalid();
557 }
558 
559 ABIArgInfo DefaultABIInfo::classifyArgumentType(QualType Ty) const {
560   Ty = useFirstFieldIfTransparentUnion(Ty);
561 
562   if (isAggregateTypeForABI(Ty)) {
563     // Records with non-trivial destructors/copy-constructors should not be
564     // passed by value.
565     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
566       return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
567 
568     return getNaturalAlignIndirect(Ty);
569   }
570 
571   // Treat an enum type as its underlying type.
572   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
573     Ty = EnumTy->getDecl()->getIntegerType();
574 
575   return (Ty->isPromotableIntegerType() ?
576           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
577 }
578 
579 ABIArgInfo DefaultABIInfo::classifyReturnType(QualType RetTy) const {
580   if (RetTy->isVoidType())
581     return ABIArgInfo::getIgnore();
582 
583   if (isAggregateTypeForABI(RetTy))
584     return getNaturalAlignIndirect(RetTy);
585 
586   // Treat an enum type as its underlying type.
587   if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
588     RetTy = EnumTy->getDecl()->getIntegerType();
589 
590   return (RetTy->isPromotableIntegerType() ?
591           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
592 }
593 
594 //===----------------------------------------------------------------------===//
595 // WebAssembly ABI Implementation
596 //
597 // This is a very simple ABI that relies a lot on DefaultABIInfo.
598 //===----------------------------------------------------------------------===//
599 
600 class WebAssemblyABIInfo final : public DefaultABIInfo {
601 public:
602   explicit WebAssemblyABIInfo(CodeGen::CodeGenTypes &CGT)
603       : DefaultABIInfo(CGT) {}
604 
605 private:
606   ABIArgInfo classifyReturnType(QualType RetTy) const;
607   ABIArgInfo classifyArgumentType(QualType Ty) const;
608 
609   // DefaultABIInfo's classifyReturnType and classifyArgumentType are
610   // non-virtual, but computeInfo is virtual, so we overload that.
611   void computeInfo(CGFunctionInfo &FI) const override {
612     if (!getCXXABI().classifyReturnType(FI))
613       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
614     for (auto &Arg : FI.arguments())
615       Arg.info = classifyArgumentType(Arg.type);
616   }
617 };
618 
619 class WebAssemblyTargetCodeGenInfo final : public TargetCodeGenInfo {
620 public:
621   explicit WebAssemblyTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
622       : TargetCodeGenInfo(new WebAssemblyABIInfo(CGT)) {}
623 };
624 
625 /// \brief Classify argument of given type \p Ty.
626 ABIArgInfo WebAssemblyABIInfo::classifyArgumentType(QualType Ty) const {
627   Ty = useFirstFieldIfTransparentUnion(Ty);
628 
629   if (isAggregateTypeForABI(Ty)) {
630     // Records with non-trivial destructors/copy-constructors should not be
631     // passed by value.
632     if (auto RAA = getRecordArgABI(Ty, getCXXABI()))
633       return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
634     // Ignore empty structs/unions.
635     if (isEmptyRecord(getContext(), Ty, true))
636       return ABIArgInfo::getIgnore();
637     // Lower single-element structs to just pass a regular value. TODO: We
638     // could do reasonable-size multiple-element structs too, using getExpand(),
639     // though watch out for things like bitfields.
640     if (const Type *SeltTy = isSingleElementStruct(Ty, getContext()))
641       return ABIArgInfo::getDirect(CGT.ConvertType(QualType(SeltTy, 0)));
642   }
643 
644   // Otherwise just do the default thing.
645   return DefaultABIInfo::classifyArgumentType(Ty);
646 }
647 
648 ABIArgInfo WebAssemblyABIInfo::classifyReturnType(QualType RetTy) const {
649   if (isAggregateTypeForABI(RetTy)) {
650     // Records with non-trivial destructors/copy-constructors should not be
651     // returned by value.
652     if (!getRecordArgABI(RetTy, getCXXABI())) {
653       // Ignore empty structs/unions.
654       if (isEmptyRecord(getContext(), RetTy, true))
655         return ABIArgInfo::getIgnore();
656       // Lower single-element structs to just return a regular value. TODO: We
657       // could do reasonable-size multiple-element structs too, using
658       // ABIArgInfo::getDirect().
659       if (const Type *SeltTy = isSingleElementStruct(RetTy, getContext()))
660         return ABIArgInfo::getDirect(CGT.ConvertType(QualType(SeltTy, 0)));
661     }
662   }
663 
664   // Otherwise just do the default thing.
665   return DefaultABIInfo::classifyReturnType(RetTy);
666 }
667 
668 //===----------------------------------------------------------------------===//
669 // le32/PNaCl bitcode ABI Implementation
670 //
671 // This is a simplified version of the x86_32 ABI.  Arguments and return values
672 // are always passed on the stack.
673 //===----------------------------------------------------------------------===//
674 
675 class PNaClABIInfo : public ABIInfo {
676  public:
677   PNaClABIInfo(CodeGen::CodeGenTypes &CGT) : ABIInfo(CGT) {}
678 
679   ABIArgInfo classifyReturnType(QualType RetTy) const;
680   ABIArgInfo classifyArgumentType(QualType RetTy) const;
681 
682   void computeInfo(CGFunctionInfo &FI) const override;
683   Address EmitVAArg(CodeGenFunction &CGF,
684                     Address VAListAddr, QualType Ty) const override;
685 };
686 
687 class PNaClTargetCodeGenInfo : public TargetCodeGenInfo {
688  public:
689   PNaClTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
690     : TargetCodeGenInfo(new PNaClABIInfo(CGT)) {}
691 };
692 
693 void PNaClABIInfo::computeInfo(CGFunctionInfo &FI) const {
694   if (!getCXXABI().classifyReturnType(FI))
695     FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
696 
697   for (auto &I : FI.arguments())
698     I.info = classifyArgumentType(I.type);
699 }
700 
701 Address PNaClABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
702                                 QualType Ty) const {
703   return Address::invalid();
704 }
705 
706 /// \brief Classify argument of given type \p Ty.
707 ABIArgInfo PNaClABIInfo::classifyArgumentType(QualType Ty) const {
708   if (isAggregateTypeForABI(Ty)) {
709     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
710       return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
711     return getNaturalAlignIndirect(Ty);
712   } else if (const EnumType *EnumTy = Ty->getAs<EnumType>()) {
713     // Treat an enum type as its underlying type.
714     Ty = EnumTy->getDecl()->getIntegerType();
715   } else if (Ty->isFloatingType()) {
716     // Floating-point types don't go inreg.
717     return ABIArgInfo::getDirect();
718   }
719 
720   return (Ty->isPromotableIntegerType() ?
721           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
722 }
723 
724 ABIArgInfo PNaClABIInfo::classifyReturnType(QualType RetTy) const {
725   if (RetTy->isVoidType())
726     return ABIArgInfo::getIgnore();
727 
728   // In the PNaCl ABI we always return records/structures on the stack.
729   if (isAggregateTypeForABI(RetTy))
730     return getNaturalAlignIndirect(RetTy);
731 
732   // Treat an enum type as its underlying type.
733   if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
734     RetTy = EnumTy->getDecl()->getIntegerType();
735 
736   return (RetTy->isPromotableIntegerType() ?
737           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
738 }
739 
740 /// IsX86_MMXType - Return true if this is an MMX type.
741 bool IsX86_MMXType(llvm::Type *IRType) {
742   // Return true if the type is an MMX type <2 x i32>, <4 x i16>, or <8 x i8>.
743   return IRType->isVectorTy() && IRType->getPrimitiveSizeInBits() == 64 &&
744     cast<llvm::VectorType>(IRType)->getElementType()->isIntegerTy() &&
745     IRType->getScalarSizeInBits() != 64;
746 }
747 
748 static llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
749                                           StringRef Constraint,
750                                           llvm::Type* Ty) {
751   if ((Constraint == "y" || Constraint == "&y") && Ty->isVectorTy()) {
752     if (cast<llvm::VectorType>(Ty)->getBitWidth() != 64) {
753       // Invalid MMX constraint
754       return nullptr;
755     }
756 
757     return llvm::Type::getX86_MMXTy(CGF.getLLVMContext());
758   }
759 
760   // No operation needed
761   return Ty;
762 }
763 
764 /// Returns true if this type can be passed in SSE registers with the
765 /// X86_VectorCall calling convention. Shared between x86_32 and x86_64.
766 static bool isX86VectorTypeForVectorCall(ASTContext &Context, QualType Ty) {
767   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
768     if (BT->isFloatingPoint() && BT->getKind() != BuiltinType::Half)
769       return true;
770   } else if (const VectorType *VT = Ty->getAs<VectorType>()) {
771     // vectorcall can pass XMM, YMM, and ZMM vectors. We don't pass SSE1 MMX
772     // registers specially.
773     unsigned VecSize = Context.getTypeSize(VT);
774     if (VecSize == 128 || VecSize == 256 || VecSize == 512)
775       return true;
776   }
777   return false;
778 }
779 
780 /// Returns true if this aggregate is small enough to be passed in SSE registers
781 /// in the X86_VectorCall calling convention. Shared between x86_32 and x86_64.
782 static bool isX86VectorCallAggregateSmallEnough(uint64_t NumMembers) {
783   return NumMembers <= 4;
784 }
785 
786 //===----------------------------------------------------------------------===//
787 // X86-32 ABI Implementation
788 //===----------------------------------------------------------------------===//
789 
790 /// \brief Similar to llvm::CCState, but for Clang.
791 struct CCState {
792   CCState(unsigned CC) : CC(CC), FreeRegs(0), FreeSSERegs(0) {}
793 
794   unsigned CC;
795   unsigned FreeRegs;
796   unsigned FreeSSERegs;
797 };
798 
799 /// X86_32ABIInfo - The X86-32 ABI information.
800 class X86_32ABIInfo : public ABIInfo {
801   enum Class {
802     Integer,
803     Float
804   };
805 
806   static const unsigned MinABIStackAlignInBytes = 4;
807 
808   bool IsDarwinVectorABI;
809   bool IsRetSmallStructInRegABI;
810   bool IsWin32StructABI;
811   bool IsSoftFloatABI;
812   bool IsMCUABI;
813   unsigned DefaultNumRegisterParameters;
814 
815   static bool isRegisterSize(unsigned Size) {
816     return (Size == 8 || Size == 16 || Size == 32 || Size == 64);
817   }
818 
819   bool isHomogeneousAggregateBaseType(QualType Ty) const override {
820     // FIXME: Assumes vectorcall is in use.
821     return isX86VectorTypeForVectorCall(getContext(), Ty);
822   }
823 
824   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
825                                          uint64_t NumMembers) const override {
826     // FIXME: Assumes vectorcall is in use.
827     return isX86VectorCallAggregateSmallEnough(NumMembers);
828   }
829 
830   bool shouldReturnTypeInRegister(QualType Ty, ASTContext &Context) const;
831 
832   /// getIndirectResult - Give a source type \arg Ty, return a suitable result
833   /// such that the argument will be passed in memory.
834   ABIArgInfo getIndirectResult(QualType Ty, bool ByVal, CCState &State) const;
835 
836   ABIArgInfo getIndirectReturnResult(QualType Ty, CCState &State) const;
837 
838   /// \brief Return the alignment to use for the given type on the stack.
839   unsigned getTypeStackAlignInBytes(QualType Ty, unsigned Align) const;
840 
841   Class classify(QualType Ty) const;
842   ABIArgInfo classifyReturnType(QualType RetTy, CCState &State) const;
843   ABIArgInfo classifyArgumentType(QualType RetTy, CCState &State) const;
844   bool shouldUseInReg(QualType Ty, CCState &State, bool &NeedsPadding) const;
845 
846   /// \brief Rewrite the function info so that all memory arguments use
847   /// inalloca.
848   void rewriteWithInAlloca(CGFunctionInfo &FI) const;
849 
850   void addFieldToArgStruct(SmallVector<llvm::Type *, 6> &FrameFields,
851                            CharUnits &StackOffset, ABIArgInfo &Info,
852                            QualType Type) const;
853 
854 public:
855 
856   void computeInfo(CGFunctionInfo &FI) const override;
857   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
858                     QualType Ty) const override;
859 
860   X86_32ABIInfo(CodeGen::CodeGenTypes &CGT, bool DarwinVectorABI,
861                 bool RetSmallStructInRegABI, bool Win32StructABI,
862                 unsigned NumRegisterParameters, bool SoftFloatABI)
863     : ABIInfo(CGT), IsDarwinVectorABI(DarwinVectorABI),
864       IsRetSmallStructInRegABI(RetSmallStructInRegABI),
865       IsWin32StructABI(Win32StructABI),
866       IsSoftFloatABI(SoftFloatABI),
867       IsMCUABI(CGT.getTarget().getTriple().isOSIAMCU()),
868       DefaultNumRegisterParameters(NumRegisterParameters) {}
869 };
870 
871 class X86_32TargetCodeGenInfo : public TargetCodeGenInfo {
872 public:
873   X86_32TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool DarwinVectorABI,
874                           bool RetSmallStructInRegABI, bool Win32StructABI,
875                           unsigned NumRegisterParameters, bool SoftFloatABI)
876       : TargetCodeGenInfo(new X86_32ABIInfo(
877             CGT, DarwinVectorABI, RetSmallStructInRegABI, Win32StructABI,
878             NumRegisterParameters, SoftFloatABI)) {}
879 
880   static bool isStructReturnInRegABI(
881       const llvm::Triple &Triple, const CodeGenOptions &Opts);
882 
883   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
884                            CodeGen::CodeGenModule &CGM) const override;
885 
886   int getDwarfEHStackPointer(CodeGen::CodeGenModule &CGM) const override {
887     // Darwin uses different dwarf register numbers for EH.
888     if (CGM.getTarget().getTriple().isOSDarwin()) return 5;
889     return 4;
890   }
891 
892   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
893                                llvm::Value *Address) const override;
894 
895   llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
896                                   StringRef Constraint,
897                                   llvm::Type* Ty) const override {
898     return X86AdjustInlineAsmType(CGF, Constraint, Ty);
899   }
900 
901   void addReturnRegisterOutputs(CodeGenFunction &CGF, LValue ReturnValue,
902                                 std::string &Constraints,
903                                 std::vector<llvm::Type *> &ResultRegTypes,
904                                 std::vector<llvm::Type *> &ResultTruncRegTypes,
905                                 std::vector<LValue> &ResultRegDests,
906                                 std::string &AsmString,
907                                 unsigned NumOutputs) const override;
908 
909   llvm::Constant *
910   getUBSanFunctionSignature(CodeGen::CodeGenModule &CGM) const override {
911     unsigned Sig = (0xeb << 0) |  // jmp rel8
912                    (0x06 << 8) |  //           .+0x08
913                    ('F' << 16) |
914                    ('T' << 24);
915     return llvm::ConstantInt::get(CGM.Int32Ty, Sig);
916   }
917 };
918 
919 }
920 
921 /// Rewrite input constraint references after adding some output constraints.
922 /// In the case where there is one output and one input and we add one output,
923 /// we need to replace all operand references greater than or equal to 1:
924 ///     mov $0, $1
925 ///     mov eax, $1
926 /// The result will be:
927 ///     mov $0, $2
928 ///     mov eax, $2
929 static void rewriteInputConstraintReferences(unsigned FirstIn,
930                                              unsigned NumNewOuts,
931                                              std::string &AsmString) {
932   std::string Buf;
933   llvm::raw_string_ostream OS(Buf);
934   size_t Pos = 0;
935   while (Pos < AsmString.size()) {
936     size_t DollarStart = AsmString.find('$', Pos);
937     if (DollarStart == std::string::npos)
938       DollarStart = AsmString.size();
939     size_t DollarEnd = AsmString.find_first_not_of('$', DollarStart);
940     if (DollarEnd == std::string::npos)
941       DollarEnd = AsmString.size();
942     OS << StringRef(&AsmString[Pos], DollarEnd - Pos);
943     Pos = DollarEnd;
944     size_t NumDollars = DollarEnd - DollarStart;
945     if (NumDollars % 2 != 0 && Pos < AsmString.size()) {
946       // We have an operand reference.
947       size_t DigitStart = Pos;
948       size_t DigitEnd = AsmString.find_first_not_of("0123456789", DigitStart);
949       if (DigitEnd == std::string::npos)
950         DigitEnd = AsmString.size();
951       StringRef OperandStr(&AsmString[DigitStart], DigitEnd - DigitStart);
952       unsigned OperandIndex;
953       if (!OperandStr.getAsInteger(10, OperandIndex)) {
954         if (OperandIndex >= FirstIn)
955           OperandIndex += NumNewOuts;
956         OS << OperandIndex;
957       } else {
958         OS << OperandStr;
959       }
960       Pos = DigitEnd;
961     }
962   }
963   AsmString = std::move(OS.str());
964 }
965 
966 /// Add output constraints for EAX:EDX because they are return registers.
967 void X86_32TargetCodeGenInfo::addReturnRegisterOutputs(
968     CodeGenFunction &CGF, LValue ReturnSlot, std::string &Constraints,
969     std::vector<llvm::Type *> &ResultRegTypes,
970     std::vector<llvm::Type *> &ResultTruncRegTypes,
971     std::vector<LValue> &ResultRegDests, std::string &AsmString,
972     unsigned NumOutputs) const {
973   uint64_t RetWidth = CGF.getContext().getTypeSize(ReturnSlot.getType());
974 
975   // Use the EAX constraint if the width is 32 or smaller and EAX:EDX if it is
976   // larger.
977   if (!Constraints.empty())
978     Constraints += ',';
979   if (RetWidth <= 32) {
980     Constraints += "={eax}";
981     ResultRegTypes.push_back(CGF.Int32Ty);
982   } else {
983     // Use the 'A' constraint for EAX:EDX.
984     Constraints += "=A";
985     ResultRegTypes.push_back(CGF.Int64Ty);
986   }
987 
988   // Truncate EAX or EAX:EDX to an integer of the appropriate size.
989   llvm::Type *CoerceTy = llvm::IntegerType::get(CGF.getLLVMContext(), RetWidth);
990   ResultTruncRegTypes.push_back(CoerceTy);
991 
992   // Coerce the integer by bitcasting the return slot pointer.
993   ReturnSlot.setAddress(CGF.Builder.CreateBitCast(ReturnSlot.getAddress(),
994                                                   CoerceTy->getPointerTo()));
995   ResultRegDests.push_back(ReturnSlot);
996 
997   rewriteInputConstraintReferences(NumOutputs, 1, AsmString);
998 }
999 
1000 /// shouldReturnTypeInRegister - Determine if the given type should be
1001 /// returned in a register (for the Darwin and MCU ABI).
1002 bool X86_32ABIInfo::shouldReturnTypeInRegister(QualType Ty,
1003                                                ASTContext &Context) const {
1004   uint64_t Size = Context.getTypeSize(Ty);
1005 
1006   // Type must be register sized.
1007   if (!isRegisterSize(Size))
1008     return false;
1009 
1010   if (Ty->isVectorType()) {
1011     // 64- and 128- bit vectors inside structures are not returned in
1012     // registers.
1013     if (Size == 64 || Size == 128)
1014       return false;
1015 
1016     return true;
1017   }
1018 
1019   // If this is a builtin, pointer, enum, complex type, member pointer, or
1020   // member function pointer it is ok.
1021   if (Ty->getAs<BuiltinType>() || Ty->hasPointerRepresentation() ||
1022       Ty->isAnyComplexType() || Ty->isEnumeralType() ||
1023       Ty->isBlockPointerType() || Ty->isMemberPointerType())
1024     return true;
1025 
1026   // Arrays are treated like records.
1027   if (const ConstantArrayType *AT = Context.getAsConstantArrayType(Ty))
1028     return shouldReturnTypeInRegister(AT->getElementType(), Context);
1029 
1030   // Otherwise, it must be a record type.
1031   const RecordType *RT = Ty->getAs<RecordType>();
1032   if (!RT) return false;
1033 
1034   // FIXME: Traverse bases here too.
1035 
1036   // Structure types are passed in register if all fields would be
1037   // passed in a register.
1038   for (const auto *FD : RT->getDecl()->fields()) {
1039     // Empty fields are ignored.
1040     if (isEmptyField(Context, FD, true))
1041       continue;
1042 
1043     // Check fields recursively.
1044     if (!shouldReturnTypeInRegister(FD->getType(), Context))
1045       return false;
1046   }
1047   return true;
1048 }
1049 
1050 ABIArgInfo X86_32ABIInfo::getIndirectReturnResult(QualType RetTy, CCState &State) const {
1051   // If the return value is indirect, then the hidden argument is consuming one
1052   // integer register.
1053   if (State.FreeRegs) {
1054     --State.FreeRegs;
1055     return getNaturalAlignIndirectInReg(RetTy);
1056   }
1057   return getNaturalAlignIndirect(RetTy, /*ByVal=*/false);
1058 }
1059 
1060 ABIArgInfo X86_32ABIInfo::classifyReturnType(QualType RetTy,
1061                                              CCState &State) const {
1062   if (RetTy->isVoidType())
1063     return ABIArgInfo::getIgnore();
1064 
1065   const Type *Base = nullptr;
1066   uint64_t NumElts = 0;
1067   if (State.CC == llvm::CallingConv::X86_VectorCall &&
1068       isHomogeneousAggregate(RetTy, Base, NumElts)) {
1069     // The LLVM struct type for such an aggregate should lower properly.
1070     return ABIArgInfo::getDirect();
1071   }
1072 
1073   if (const VectorType *VT = RetTy->getAs<VectorType>()) {
1074     // On Darwin, some vectors are returned in registers.
1075     if (IsDarwinVectorABI) {
1076       uint64_t Size = getContext().getTypeSize(RetTy);
1077 
1078       // 128-bit vectors are a special case; they are returned in
1079       // registers and we need to make sure to pick a type the LLVM
1080       // backend will like.
1081       if (Size == 128)
1082         return ABIArgInfo::getDirect(llvm::VectorType::get(
1083                   llvm::Type::getInt64Ty(getVMContext()), 2));
1084 
1085       // Always return in register if it fits in a general purpose
1086       // register, or if it is 64 bits and has a single element.
1087       if ((Size == 8 || Size == 16 || Size == 32) ||
1088           (Size == 64 && VT->getNumElements() == 1))
1089         return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
1090                                                             Size));
1091 
1092       return getIndirectReturnResult(RetTy, State);
1093     }
1094 
1095     return ABIArgInfo::getDirect();
1096   }
1097 
1098   if (isAggregateTypeForABI(RetTy)) {
1099     if (const RecordType *RT = RetTy->getAs<RecordType>()) {
1100       // Structures with flexible arrays are always indirect.
1101       if (RT->getDecl()->hasFlexibleArrayMember())
1102         return getIndirectReturnResult(RetTy, State);
1103     }
1104 
1105     // If specified, structs and unions are always indirect.
1106     if (!IsRetSmallStructInRegABI && !RetTy->isAnyComplexType())
1107       return getIndirectReturnResult(RetTy, State);
1108 
1109     // Small structures which are register sized are generally returned
1110     // in a register.
1111     if (shouldReturnTypeInRegister(RetTy, getContext())) {
1112       uint64_t Size = getContext().getTypeSize(RetTy);
1113 
1114       // As a special-case, if the struct is a "single-element" struct, and
1115       // the field is of type "float" or "double", return it in a
1116       // floating-point register. (MSVC does not apply this special case.)
1117       // We apply a similar transformation for pointer types to improve the
1118       // quality of the generated IR.
1119       if (const Type *SeltTy = isSingleElementStruct(RetTy, getContext()))
1120         if ((!IsWin32StructABI && SeltTy->isRealFloatingType())
1121             || SeltTy->hasPointerRepresentation())
1122           return ABIArgInfo::getDirect(CGT.ConvertType(QualType(SeltTy, 0)));
1123 
1124       // FIXME: We should be able to narrow this integer in cases with dead
1125       // padding.
1126       return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),Size));
1127     }
1128 
1129     return getIndirectReturnResult(RetTy, State);
1130   }
1131 
1132   // Treat an enum type as its underlying type.
1133   if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
1134     RetTy = EnumTy->getDecl()->getIntegerType();
1135 
1136   return (RetTy->isPromotableIntegerType() ?
1137           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
1138 }
1139 
1140 static bool isSSEVectorType(ASTContext &Context, QualType Ty) {
1141   return Ty->getAs<VectorType>() && Context.getTypeSize(Ty) == 128;
1142 }
1143 
1144 static bool isRecordWithSSEVectorType(ASTContext &Context, QualType Ty) {
1145   const RecordType *RT = Ty->getAs<RecordType>();
1146   if (!RT)
1147     return 0;
1148   const RecordDecl *RD = RT->getDecl();
1149 
1150   // If this is a C++ record, check the bases first.
1151   if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD))
1152     for (const auto &I : CXXRD->bases())
1153       if (!isRecordWithSSEVectorType(Context, I.getType()))
1154         return false;
1155 
1156   for (const auto *i : RD->fields()) {
1157     QualType FT = i->getType();
1158 
1159     if (isSSEVectorType(Context, FT))
1160       return true;
1161 
1162     if (isRecordWithSSEVectorType(Context, FT))
1163       return true;
1164   }
1165 
1166   return false;
1167 }
1168 
1169 unsigned X86_32ABIInfo::getTypeStackAlignInBytes(QualType Ty,
1170                                                  unsigned Align) const {
1171   // Otherwise, if the alignment is less than or equal to the minimum ABI
1172   // alignment, just use the default; the backend will handle this.
1173   if (Align <= MinABIStackAlignInBytes)
1174     return 0; // Use default alignment.
1175 
1176   // On non-Darwin, the stack type alignment is always 4.
1177   if (!IsDarwinVectorABI) {
1178     // Set explicit alignment, since we may need to realign the top.
1179     return MinABIStackAlignInBytes;
1180   }
1181 
1182   // Otherwise, if the type contains an SSE vector type, the alignment is 16.
1183   if (Align >= 16 && (isSSEVectorType(getContext(), Ty) ||
1184                       isRecordWithSSEVectorType(getContext(), Ty)))
1185     return 16;
1186 
1187   return MinABIStackAlignInBytes;
1188 }
1189 
1190 ABIArgInfo X86_32ABIInfo::getIndirectResult(QualType Ty, bool ByVal,
1191                                             CCState &State) const {
1192   if (!ByVal) {
1193     if (State.FreeRegs) {
1194       --State.FreeRegs; // Non-byval indirects just use one pointer.
1195       return getNaturalAlignIndirectInReg(Ty);
1196     }
1197     return getNaturalAlignIndirect(Ty, false);
1198   }
1199 
1200   // Compute the byval alignment.
1201   unsigned TypeAlign = getContext().getTypeAlign(Ty) / 8;
1202   unsigned StackAlign = getTypeStackAlignInBytes(Ty, TypeAlign);
1203   if (StackAlign == 0)
1204     return ABIArgInfo::getIndirect(CharUnits::fromQuantity(4), /*ByVal=*/true);
1205 
1206   // If the stack alignment is less than the type alignment, realign the
1207   // argument.
1208   bool Realign = TypeAlign > StackAlign;
1209   return ABIArgInfo::getIndirect(CharUnits::fromQuantity(StackAlign),
1210                                  /*ByVal=*/true, Realign);
1211 }
1212 
1213 X86_32ABIInfo::Class X86_32ABIInfo::classify(QualType Ty) const {
1214   const Type *T = isSingleElementStruct(Ty, getContext());
1215   if (!T)
1216     T = Ty.getTypePtr();
1217 
1218   if (const BuiltinType *BT = T->getAs<BuiltinType>()) {
1219     BuiltinType::Kind K = BT->getKind();
1220     if (K == BuiltinType::Float || K == BuiltinType::Double)
1221       return Float;
1222   }
1223   return Integer;
1224 }
1225 
1226 bool X86_32ABIInfo::shouldUseInReg(QualType Ty, CCState &State,
1227                                    bool &NeedsPadding) const {
1228   NeedsPadding = false;
1229   if (!IsSoftFloatABI) {
1230     Class C = classify(Ty);
1231     if (C == Float)
1232       return false;
1233   }
1234 
1235   unsigned Size = getContext().getTypeSize(Ty);
1236   unsigned SizeInRegs = (Size + 31) / 32;
1237 
1238   if (SizeInRegs == 0)
1239     return false;
1240 
1241   if (!IsMCUABI) {
1242     if (SizeInRegs > State.FreeRegs) {
1243       State.FreeRegs = 0;
1244       return false;
1245     }
1246   } else {
1247     // The MCU psABI allows passing parameters in-reg even if there are
1248     // earlier parameters that are passed on the stack. Also,
1249     // it does not allow passing >8-byte structs in-register,
1250     // even if there are 3 free registers available.
1251     if (SizeInRegs > State.FreeRegs || SizeInRegs > 2)
1252       return false;
1253   }
1254 
1255   State.FreeRegs -= SizeInRegs;
1256 
1257   if (State.CC == llvm::CallingConv::X86_FastCall ||
1258       State.CC == llvm::CallingConv::X86_VectorCall) {
1259     if (Size > 32)
1260       return false;
1261 
1262     if (Ty->isIntegralOrEnumerationType())
1263       return true;
1264 
1265     if (Ty->isPointerType())
1266       return true;
1267 
1268     if (Ty->isReferenceType())
1269       return true;
1270 
1271     if (State.FreeRegs)
1272       NeedsPadding = true;
1273 
1274     return false;
1275   }
1276 
1277   return true;
1278 }
1279 
1280 ABIArgInfo X86_32ABIInfo::classifyArgumentType(QualType Ty,
1281                                                CCState &State) const {
1282   // FIXME: Set alignment on indirect arguments.
1283 
1284   Ty = useFirstFieldIfTransparentUnion(Ty);
1285 
1286   // Check with the C++ ABI first.
1287   const RecordType *RT = Ty->getAs<RecordType>();
1288   if (RT) {
1289     CGCXXABI::RecordArgABI RAA = getRecordArgABI(RT, getCXXABI());
1290     if (RAA == CGCXXABI::RAA_Indirect) {
1291       return getIndirectResult(Ty, false, State);
1292     } else if (RAA == CGCXXABI::RAA_DirectInMemory) {
1293       // The field index doesn't matter, we'll fix it up later.
1294       return ABIArgInfo::getInAlloca(/*FieldIndex=*/0);
1295     }
1296   }
1297 
1298   // vectorcall adds the concept of a homogenous vector aggregate, similar
1299   // to other targets.
1300   const Type *Base = nullptr;
1301   uint64_t NumElts = 0;
1302   if (State.CC == llvm::CallingConv::X86_VectorCall &&
1303       isHomogeneousAggregate(Ty, Base, NumElts)) {
1304     if (State.FreeSSERegs >= NumElts) {
1305       State.FreeSSERegs -= NumElts;
1306       if (Ty->isBuiltinType() || Ty->isVectorType())
1307         return ABIArgInfo::getDirect();
1308       return ABIArgInfo::getExpand();
1309     }
1310     return getIndirectResult(Ty, /*ByVal=*/false, State);
1311   }
1312 
1313   if (isAggregateTypeForABI(Ty)) {
1314     if (RT) {
1315       // Structs are always byval on win32, regardless of what they contain.
1316       if (IsWin32StructABI)
1317         return getIndirectResult(Ty, true, State);
1318 
1319       // Structures with flexible arrays are always indirect.
1320       if (RT->getDecl()->hasFlexibleArrayMember())
1321         return getIndirectResult(Ty, true, State);
1322     }
1323 
1324     // Ignore empty structs/unions.
1325     if (isEmptyRecord(getContext(), Ty, true))
1326       return ABIArgInfo::getIgnore();
1327 
1328     llvm::LLVMContext &LLVMContext = getVMContext();
1329     llvm::IntegerType *Int32 = llvm::Type::getInt32Ty(LLVMContext);
1330     bool NeedsPadding;
1331     if (shouldUseInReg(Ty, State, NeedsPadding)) {
1332       unsigned SizeInRegs = (getContext().getTypeSize(Ty) + 31) / 32;
1333       SmallVector<llvm::Type*, 3> Elements(SizeInRegs, Int32);
1334       llvm::Type *Result = llvm::StructType::get(LLVMContext, Elements);
1335       return ABIArgInfo::getDirectInReg(Result);
1336     }
1337     llvm::IntegerType *PaddingType = NeedsPadding ? Int32 : nullptr;
1338 
1339     // Expand small (<= 128-bit) record types when we know that the stack layout
1340     // of those arguments will match the struct. This is important because the
1341     // LLVM backend isn't smart enough to remove byval, which inhibits many
1342     // optimizations.
1343     if (getContext().getTypeSize(Ty) <= 4*32 &&
1344         canExpandIndirectArgument(Ty, getContext()))
1345       return ABIArgInfo::getExpandWithPadding(
1346           State.CC == llvm::CallingConv::X86_FastCall ||
1347               State.CC == llvm::CallingConv::X86_VectorCall,
1348           PaddingType);
1349 
1350     return getIndirectResult(Ty, true, State);
1351   }
1352 
1353   if (const VectorType *VT = Ty->getAs<VectorType>()) {
1354     // On Darwin, some vectors are passed in memory, we handle this by passing
1355     // it as an i8/i16/i32/i64.
1356     if (IsDarwinVectorABI) {
1357       uint64_t Size = getContext().getTypeSize(Ty);
1358       if ((Size == 8 || Size == 16 || Size == 32) ||
1359           (Size == 64 && VT->getNumElements() == 1))
1360         return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
1361                                                             Size));
1362     }
1363 
1364     if (IsX86_MMXType(CGT.ConvertType(Ty)))
1365       return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), 64));
1366 
1367     return ABIArgInfo::getDirect();
1368   }
1369 
1370 
1371   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
1372     Ty = EnumTy->getDecl()->getIntegerType();
1373 
1374   bool NeedsPadding;
1375   bool InReg = shouldUseInReg(Ty, State, NeedsPadding);
1376 
1377   if (Ty->isPromotableIntegerType()) {
1378     if (InReg)
1379       return ABIArgInfo::getExtendInReg();
1380     return ABIArgInfo::getExtend();
1381   }
1382   if (InReg)
1383     return ABIArgInfo::getDirectInReg();
1384   return ABIArgInfo::getDirect();
1385 }
1386 
1387 void X86_32ABIInfo::computeInfo(CGFunctionInfo &FI) const {
1388   CCState State(FI.getCallingConvention());
1389   if (State.CC == llvm::CallingConv::X86_FastCall)
1390     State.FreeRegs = 2;
1391   else if (State.CC == llvm::CallingConv::X86_VectorCall) {
1392     State.FreeRegs = 2;
1393     State.FreeSSERegs = 6;
1394   } else if (FI.getHasRegParm())
1395     State.FreeRegs = FI.getRegParm();
1396   else if (IsMCUABI)
1397     State.FreeRegs = 3;
1398   else
1399     State.FreeRegs = DefaultNumRegisterParameters;
1400 
1401   if (!getCXXABI().classifyReturnType(FI)) {
1402     FI.getReturnInfo() = classifyReturnType(FI.getReturnType(), State);
1403   } else if (FI.getReturnInfo().isIndirect()) {
1404     // The C++ ABI is not aware of register usage, so we have to check if the
1405     // return value was sret and put it in a register ourselves if appropriate.
1406     if (State.FreeRegs) {
1407       --State.FreeRegs;  // The sret parameter consumes a register.
1408       FI.getReturnInfo().setInReg(true);
1409     }
1410   }
1411 
1412   // The chain argument effectively gives us another free register.
1413   if (FI.isChainCall())
1414     ++State.FreeRegs;
1415 
1416   bool UsedInAlloca = false;
1417   for (auto &I : FI.arguments()) {
1418     I.info = classifyArgumentType(I.type, State);
1419     UsedInAlloca |= (I.info.getKind() == ABIArgInfo::InAlloca);
1420   }
1421 
1422   // If we needed to use inalloca for any argument, do a second pass and rewrite
1423   // all the memory arguments to use inalloca.
1424   if (UsedInAlloca)
1425     rewriteWithInAlloca(FI);
1426 }
1427 
1428 void
1429 X86_32ABIInfo::addFieldToArgStruct(SmallVector<llvm::Type *, 6> &FrameFields,
1430                                    CharUnits &StackOffset, ABIArgInfo &Info,
1431                                    QualType Type) const {
1432   // Arguments are always 4-byte-aligned.
1433   CharUnits FieldAlign = CharUnits::fromQuantity(4);
1434 
1435   assert(StackOffset.isMultipleOf(FieldAlign) && "unaligned inalloca struct");
1436   Info = ABIArgInfo::getInAlloca(FrameFields.size());
1437   FrameFields.push_back(CGT.ConvertTypeForMem(Type));
1438   StackOffset += getContext().getTypeSizeInChars(Type);
1439 
1440   // Insert padding bytes to respect alignment.
1441   CharUnits FieldEnd = StackOffset;
1442   StackOffset = FieldEnd.RoundUpToAlignment(FieldAlign);
1443   if (StackOffset != FieldEnd) {
1444     CharUnits NumBytes = StackOffset - FieldEnd;
1445     llvm::Type *Ty = llvm::Type::getInt8Ty(getVMContext());
1446     Ty = llvm::ArrayType::get(Ty, NumBytes.getQuantity());
1447     FrameFields.push_back(Ty);
1448   }
1449 }
1450 
1451 static bool isArgInAlloca(const ABIArgInfo &Info) {
1452   // Leave ignored and inreg arguments alone.
1453   switch (Info.getKind()) {
1454   case ABIArgInfo::InAlloca:
1455     return true;
1456   case ABIArgInfo::Indirect:
1457     assert(Info.getIndirectByVal());
1458     return true;
1459   case ABIArgInfo::Ignore:
1460     return false;
1461   case ABIArgInfo::Direct:
1462   case ABIArgInfo::Extend:
1463   case ABIArgInfo::Expand:
1464     if (Info.getInReg())
1465       return false;
1466     return true;
1467   }
1468   llvm_unreachable("invalid enum");
1469 }
1470 
1471 void X86_32ABIInfo::rewriteWithInAlloca(CGFunctionInfo &FI) const {
1472   assert(IsWin32StructABI && "inalloca only supported on win32");
1473 
1474   // Build a packed struct type for all of the arguments in memory.
1475   SmallVector<llvm::Type *, 6> FrameFields;
1476 
1477   // The stack alignment is always 4.
1478   CharUnits StackAlign = CharUnits::fromQuantity(4);
1479 
1480   CharUnits StackOffset;
1481   CGFunctionInfo::arg_iterator I = FI.arg_begin(), E = FI.arg_end();
1482 
1483   // Put 'this' into the struct before 'sret', if necessary.
1484   bool IsThisCall =
1485       FI.getCallingConvention() == llvm::CallingConv::X86_ThisCall;
1486   ABIArgInfo &Ret = FI.getReturnInfo();
1487   if (Ret.isIndirect() && Ret.isSRetAfterThis() && !IsThisCall &&
1488       isArgInAlloca(I->info)) {
1489     addFieldToArgStruct(FrameFields, StackOffset, I->info, I->type);
1490     ++I;
1491   }
1492 
1493   // Put the sret parameter into the inalloca struct if it's in memory.
1494   if (Ret.isIndirect() && !Ret.getInReg()) {
1495     CanQualType PtrTy = getContext().getPointerType(FI.getReturnType());
1496     addFieldToArgStruct(FrameFields, StackOffset, Ret, PtrTy);
1497     // On Windows, the hidden sret parameter is always returned in eax.
1498     Ret.setInAllocaSRet(IsWin32StructABI);
1499   }
1500 
1501   // Skip the 'this' parameter in ecx.
1502   if (IsThisCall)
1503     ++I;
1504 
1505   // Put arguments passed in memory into the struct.
1506   for (; I != E; ++I) {
1507     if (isArgInAlloca(I->info))
1508       addFieldToArgStruct(FrameFields, StackOffset, I->info, I->type);
1509   }
1510 
1511   FI.setArgStruct(llvm::StructType::get(getVMContext(), FrameFields,
1512                                         /*isPacked=*/true),
1513                   StackAlign);
1514 }
1515 
1516 Address X86_32ABIInfo::EmitVAArg(CodeGenFunction &CGF,
1517                                  Address VAListAddr, QualType Ty) const {
1518 
1519   auto TypeInfo = getContext().getTypeInfoInChars(Ty);
1520 
1521   // x86-32 changes the alignment of certain arguments on the stack.
1522   //
1523   // Just messing with TypeInfo like this works because we never pass
1524   // anything indirectly.
1525   TypeInfo.second = CharUnits::fromQuantity(
1526                 getTypeStackAlignInBytes(Ty, TypeInfo.second.getQuantity()));
1527 
1528   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*Indirect*/ false,
1529                           TypeInfo, CharUnits::fromQuantity(4),
1530                           /*AllowHigherAlign*/ true);
1531 }
1532 
1533 bool X86_32TargetCodeGenInfo::isStructReturnInRegABI(
1534     const llvm::Triple &Triple, const CodeGenOptions &Opts) {
1535   assert(Triple.getArch() == llvm::Triple::x86);
1536 
1537   switch (Opts.getStructReturnConvention()) {
1538   case CodeGenOptions::SRCK_Default:
1539     break;
1540   case CodeGenOptions::SRCK_OnStack:  // -fpcc-struct-return
1541     return false;
1542   case CodeGenOptions::SRCK_InRegs:  // -freg-struct-return
1543     return true;
1544   }
1545 
1546   if (Triple.isOSDarwin() || Triple.isOSIAMCU())
1547     return true;
1548 
1549   switch (Triple.getOS()) {
1550   case llvm::Triple::DragonFly:
1551   case llvm::Triple::FreeBSD:
1552   case llvm::Triple::OpenBSD:
1553   case llvm::Triple::Bitrig:
1554   case llvm::Triple::Win32:
1555     return true;
1556   default:
1557     return false;
1558   }
1559 }
1560 
1561 void X86_32TargetCodeGenInfo::setTargetAttributes(const Decl *D,
1562                                                   llvm::GlobalValue *GV,
1563                                             CodeGen::CodeGenModule &CGM) const {
1564   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
1565     if (FD->hasAttr<X86ForceAlignArgPointerAttr>()) {
1566       // Get the LLVM function.
1567       llvm::Function *Fn = cast<llvm::Function>(GV);
1568 
1569       // Now add the 'alignstack' attribute with a value of 16.
1570       llvm::AttrBuilder B;
1571       B.addStackAlignmentAttr(16);
1572       Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
1573                       llvm::AttributeSet::get(CGM.getLLVMContext(),
1574                                               llvm::AttributeSet::FunctionIndex,
1575                                               B));
1576     }
1577   }
1578 }
1579 
1580 bool X86_32TargetCodeGenInfo::initDwarfEHRegSizeTable(
1581                                                CodeGen::CodeGenFunction &CGF,
1582                                                llvm::Value *Address) const {
1583   CodeGen::CGBuilderTy &Builder = CGF.Builder;
1584 
1585   llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
1586 
1587   // 0-7 are the eight integer registers;  the order is different
1588   //   on Darwin (for EH), but the range is the same.
1589   // 8 is %eip.
1590   AssignToArrayRange(Builder, Address, Four8, 0, 8);
1591 
1592   if (CGF.CGM.getTarget().getTriple().isOSDarwin()) {
1593     // 12-16 are st(0..4).  Not sure why we stop at 4.
1594     // These have size 16, which is sizeof(long double) on
1595     // platforms with 8-byte alignment for that type.
1596     llvm::Value *Sixteen8 = llvm::ConstantInt::get(CGF.Int8Ty, 16);
1597     AssignToArrayRange(Builder, Address, Sixteen8, 12, 16);
1598 
1599   } else {
1600     // 9 is %eflags, which doesn't get a size on Darwin for some
1601     // reason.
1602     Builder.CreateAlignedStore(
1603         Four8, Builder.CreateConstInBoundsGEP1_32(CGF.Int8Ty, Address, 9),
1604                                CharUnits::One());
1605 
1606     // 11-16 are st(0..5).  Not sure why we stop at 5.
1607     // These have size 12, which is sizeof(long double) on
1608     // platforms with 4-byte alignment for that type.
1609     llvm::Value *Twelve8 = llvm::ConstantInt::get(CGF.Int8Ty, 12);
1610     AssignToArrayRange(Builder, Address, Twelve8, 11, 16);
1611   }
1612 
1613   return false;
1614 }
1615 
1616 //===----------------------------------------------------------------------===//
1617 // X86-64 ABI Implementation
1618 //===----------------------------------------------------------------------===//
1619 
1620 
1621 namespace {
1622 /// The AVX ABI level for X86 targets.
1623 enum class X86AVXABILevel {
1624   None,
1625   AVX,
1626   AVX512
1627 };
1628 
1629 /// \p returns the size in bits of the largest (native) vector for \p AVXLevel.
1630 static unsigned getNativeVectorSizeForAVXABI(X86AVXABILevel AVXLevel) {
1631   switch (AVXLevel) {
1632   case X86AVXABILevel::AVX512:
1633     return 512;
1634   case X86AVXABILevel::AVX:
1635     return 256;
1636   case X86AVXABILevel::None:
1637     return 128;
1638   }
1639   llvm_unreachable("Unknown AVXLevel");
1640 }
1641 
1642 /// X86_64ABIInfo - The X86_64 ABI information.
1643 class X86_64ABIInfo : public ABIInfo {
1644   enum Class {
1645     Integer = 0,
1646     SSE,
1647     SSEUp,
1648     X87,
1649     X87Up,
1650     ComplexX87,
1651     NoClass,
1652     Memory
1653   };
1654 
1655   /// merge - Implement the X86_64 ABI merging algorithm.
1656   ///
1657   /// Merge an accumulating classification \arg Accum with a field
1658   /// classification \arg Field.
1659   ///
1660   /// \param Accum - The accumulating classification. This should
1661   /// always be either NoClass or the result of a previous merge
1662   /// call. In addition, this should never be Memory (the caller
1663   /// should just return Memory for the aggregate).
1664   static Class merge(Class Accum, Class Field);
1665 
1666   /// postMerge - Implement the X86_64 ABI post merging algorithm.
1667   ///
1668   /// Post merger cleanup, reduces a malformed Hi and Lo pair to
1669   /// final MEMORY or SSE classes when necessary.
1670   ///
1671   /// \param AggregateSize - The size of the current aggregate in
1672   /// the classification process.
1673   ///
1674   /// \param Lo - The classification for the parts of the type
1675   /// residing in the low word of the containing object.
1676   ///
1677   /// \param Hi - The classification for the parts of the type
1678   /// residing in the higher words of the containing object.
1679   ///
1680   void postMerge(unsigned AggregateSize, Class &Lo, Class &Hi) const;
1681 
1682   /// classify - Determine the x86_64 register classes in which the
1683   /// given type T should be passed.
1684   ///
1685   /// \param Lo - The classification for the parts of the type
1686   /// residing in the low word of the containing object.
1687   ///
1688   /// \param Hi - The classification for the parts of the type
1689   /// residing in the high word of the containing object.
1690   ///
1691   /// \param OffsetBase - The bit offset of this type in the
1692   /// containing object.  Some parameters are classified different
1693   /// depending on whether they straddle an eightbyte boundary.
1694   ///
1695   /// \param isNamedArg - Whether the argument in question is a "named"
1696   /// argument, as used in AMD64-ABI 3.5.7.
1697   ///
1698   /// If a word is unused its result will be NoClass; if a type should
1699   /// be passed in Memory then at least the classification of \arg Lo
1700   /// will be Memory.
1701   ///
1702   /// The \arg Lo class will be NoClass iff the argument is ignored.
1703   ///
1704   /// If the \arg Lo class is ComplexX87, then the \arg Hi class will
1705   /// also be ComplexX87.
1706   void classify(QualType T, uint64_t OffsetBase, Class &Lo, Class &Hi,
1707                 bool isNamedArg) const;
1708 
1709   llvm::Type *GetByteVectorType(QualType Ty) const;
1710   llvm::Type *GetSSETypeAtOffset(llvm::Type *IRType,
1711                                  unsigned IROffset, QualType SourceTy,
1712                                  unsigned SourceOffset) const;
1713   llvm::Type *GetINTEGERTypeAtOffset(llvm::Type *IRType,
1714                                      unsigned IROffset, QualType SourceTy,
1715                                      unsigned SourceOffset) const;
1716 
1717   /// getIndirectResult - Give a source type \arg Ty, return a suitable result
1718   /// such that the argument will be returned in memory.
1719   ABIArgInfo getIndirectReturnResult(QualType Ty) const;
1720 
1721   /// getIndirectResult - Give a source type \arg Ty, return a suitable result
1722   /// such that the argument will be passed in memory.
1723   ///
1724   /// \param freeIntRegs - The number of free integer registers remaining
1725   /// available.
1726   ABIArgInfo getIndirectResult(QualType Ty, unsigned freeIntRegs) const;
1727 
1728   ABIArgInfo classifyReturnType(QualType RetTy) const;
1729 
1730   ABIArgInfo classifyArgumentType(QualType Ty,
1731                                   unsigned freeIntRegs,
1732                                   unsigned &neededInt,
1733                                   unsigned &neededSSE,
1734                                   bool isNamedArg) const;
1735 
1736   bool IsIllegalVectorType(QualType Ty) const;
1737 
1738   /// The 0.98 ABI revision clarified a lot of ambiguities,
1739   /// unfortunately in ways that were not always consistent with
1740   /// certain previous compilers.  In particular, platforms which
1741   /// required strict binary compatibility with older versions of GCC
1742   /// may need to exempt themselves.
1743   bool honorsRevision0_98() const {
1744     return !getTarget().getTriple().isOSDarwin();
1745   }
1746 
1747   X86AVXABILevel AVXLevel;
1748   // Some ABIs (e.g. X32 ABI and Native Client OS) use 32 bit pointers on
1749   // 64-bit hardware.
1750   bool Has64BitPointers;
1751 
1752 public:
1753   X86_64ABIInfo(CodeGen::CodeGenTypes &CGT, X86AVXABILevel AVXLevel) :
1754       ABIInfo(CGT), AVXLevel(AVXLevel),
1755       Has64BitPointers(CGT.getDataLayout().getPointerSize(0) == 8) {
1756   }
1757 
1758   bool isPassedUsingAVXType(QualType type) const {
1759     unsigned neededInt, neededSSE;
1760     // The freeIntRegs argument doesn't matter here.
1761     ABIArgInfo info = classifyArgumentType(type, 0, neededInt, neededSSE,
1762                                            /*isNamedArg*/true);
1763     if (info.isDirect()) {
1764       llvm::Type *ty = info.getCoerceToType();
1765       if (llvm::VectorType *vectorTy = dyn_cast_or_null<llvm::VectorType>(ty))
1766         return (vectorTy->getBitWidth() > 128);
1767     }
1768     return false;
1769   }
1770 
1771   void computeInfo(CGFunctionInfo &FI) const override;
1772 
1773   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
1774                     QualType Ty) const override;
1775   Address EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr,
1776                       QualType Ty) const override;
1777 
1778   bool has64BitPointers() const {
1779     return Has64BitPointers;
1780   }
1781 };
1782 
1783 /// WinX86_64ABIInfo - The Windows X86_64 ABI information.
1784 class WinX86_64ABIInfo : public ABIInfo {
1785 public:
1786   WinX86_64ABIInfo(CodeGen::CodeGenTypes &CGT)
1787       : ABIInfo(CGT),
1788         IsMingw64(getTarget().getTriple().isWindowsGNUEnvironment()) {}
1789 
1790   void computeInfo(CGFunctionInfo &FI) const override;
1791 
1792   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
1793                     QualType Ty) const override;
1794 
1795   bool isHomogeneousAggregateBaseType(QualType Ty) const override {
1796     // FIXME: Assumes vectorcall is in use.
1797     return isX86VectorTypeForVectorCall(getContext(), Ty);
1798   }
1799 
1800   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
1801                                          uint64_t NumMembers) const override {
1802     // FIXME: Assumes vectorcall is in use.
1803     return isX86VectorCallAggregateSmallEnough(NumMembers);
1804   }
1805 
1806 private:
1807   ABIArgInfo classify(QualType Ty, unsigned &FreeSSERegs,
1808                       bool IsReturnType) const;
1809 
1810   bool IsMingw64;
1811 };
1812 
1813 class X86_64TargetCodeGenInfo : public TargetCodeGenInfo {
1814 public:
1815   X86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, X86AVXABILevel AVXLevel)
1816       : TargetCodeGenInfo(new X86_64ABIInfo(CGT, AVXLevel)) {}
1817 
1818   const X86_64ABIInfo &getABIInfo() const {
1819     return static_cast<const X86_64ABIInfo&>(TargetCodeGenInfo::getABIInfo());
1820   }
1821 
1822   int getDwarfEHStackPointer(CodeGen::CodeGenModule &CGM) const override {
1823     return 7;
1824   }
1825 
1826   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
1827                                llvm::Value *Address) const override {
1828     llvm::Value *Eight8 = llvm::ConstantInt::get(CGF.Int8Ty, 8);
1829 
1830     // 0-15 are the 16 integer registers.
1831     // 16 is %rip.
1832     AssignToArrayRange(CGF.Builder, Address, Eight8, 0, 16);
1833     return false;
1834   }
1835 
1836   llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
1837                                   StringRef Constraint,
1838                                   llvm::Type* Ty) const override {
1839     return X86AdjustInlineAsmType(CGF, Constraint, Ty);
1840   }
1841 
1842   bool isNoProtoCallVariadic(const CallArgList &args,
1843                              const FunctionNoProtoType *fnType) const override {
1844     // The default CC on x86-64 sets %al to the number of SSA
1845     // registers used, and GCC sets this when calling an unprototyped
1846     // function, so we override the default behavior.  However, don't do
1847     // that when AVX types are involved: the ABI explicitly states it is
1848     // undefined, and it doesn't work in practice because of how the ABI
1849     // defines varargs anyway.
1850     if (fnType->getCallConv() == CC_C) {
1851       bool HasAVXType = false;
1852       for (CallArgList::const_iterator
1853              it = args.begin(), ie = args.end(); it != ie; ++it) {
1854         if (getABIInfo().isPassedUsingAVXType(it->Ty)) {
1855           HasAVXType = true;
1856           break;
1857         }
1858       }
1859 
1860       if (!HasAVXType)
1861         return true;
1862     }
1863 
1864     return TargetCodeGenInfo::isNoProtoCallVariadic(args, fnType);
1865   }
1866 
1867   llvm::Constant *
1868   getUBSanFunctionSignature(CodeGen::CodeGenModule &CGM) const override {
1869     unsigned Sig;
1870     if (getABIInfo().has64BitPointers())
1871       Sig = (0xeb << 0) |  // jmp rel8
1872             (0x0a << 8) |  //           .+0x0c
1873             ('F' << 16) |
1874             ('T' << 24);
1875     else
1876       Sig = (0xeb << 0) |  // jmp rel8
1877             (0x06 << 8) |  //           .+0x08
1878             ('F' << 16) |
1879             ('T' << 24);
1880     return llvm::ConstantInt::get(CGM.Int32Ty, Sig);
1881   }
1882 };
1883 
1884 class PS4TargetCodeGenInfo : public X86_64TargetCodeGenInfo {
1885 public:
1886   PS4TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, X86AVXABILevel AVXLevel)
1887     : X86_64TargetCodeGenInfo(CGT, AVXLevel) {}
1888 
1889   void getDependentLibraryOption(llvm::StringRef Lib,
1890                                  llvm::SmallString<24> &Opt) const override {
1891     Opt = "\01";
1892     // If the argument contains a space, enclose it in quotes.
1893     if (Lib.find(" ") != StringRef::npos)
1894       Opt += "\"" + Lib.str() + "\"";
1895     else
1896       Opt += Lib;
1897   }
1898 };
1899 
1900 static std::string qualifyWindowsLibrary(llvm::StringRef Lib) {
1901   // If the argument does not end in .lib, automatically add the suffix.
1902   // If the argument contains a space, enclose it in quotes.
1903   // This matches the behavior of MSVC.
1904   bool Quote = (Lib.find(" ") != StringRef::npos);
1905   std::string ArgStr = Quote ? "\"" : "";
1906   ArgStr += Lib;
1907   if (!Lib.endswith_lower(".lib"))
1908     ArgStr += ".lib";
1909   ArgStr += Quote ? "\"" : "";
1910   return ArgStr;
1911 }
1912 
1913 class WinX86_32TargetCodeGenInfo : public X86_32TargetCodeGenInfo {
1914 public:
1915   WinX86_32TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT,
1916         bool DarwinVectorABI, bool RetSmallStructInRegABI, bool Win32StructABI,
1917         unsigned NumRegisterParameters)
1918     : X86_32TargetCodeGenInfo(CGT, DarwinVectorABI, RetSmallStructInRegABI,
1919         Win32StructABI, NumRegisterParameters, false) {}
1920 
1921   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
1922                            CodeGen::CodeGenModule &CGM) const override;
1923 
1924   void getDependentLibraryOption(llvm::StringRef Lib,
1925                                  llvm::SmallString<24> &Opt) const override {
1926     Opt = "/DEFAULTLIB:";
1927     Opt += qualifyWindowsLibrary(Lib);
1928   }
1929 
1930   void getDetectMismatchOption(llvm::StringRef Name,
1931                                llvm::StringRef Value,
1932                                llvm::SmallString<32> &Opt) const override {
1933     Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
1934   }
1935 };
1936 
1937 static void addStackProbeSizeTargetAttribute(const Decl *D,
1938                                              llvm::GlobalValue *GV,
1939                                              CodeGen::CodeGenModule &CGM) {
1940   if (D && isa<FunctionDecl>(D)) {
1941     if (CGM.getCodeGenOpts().StackProbeSize != 4096) {
1942       llvm::Function *Fn = cast<llvm::Function>(GV);
1943 
1944       Fn->addFnAttr("stack-probe-size",
1945                     llvm::utostr(CGM.getCodeGenOpts().StackProbeSize));
1946     }
1947   }
1948 }
1949 
1950 void WinX86_32TargetCodeGenInfo::setTargetAttributes(const Decl *D,
1951                                                      llvm::GlobalValue *GV,
1952                                             CodeGen::CodeGenModule &CGM) const {
1953   X86_32TargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
1954 
1955   addStackProbeSizeTargetAttribute(D, GV, CGM);
1956 }
1957 
1958 class WinX86_64TargetCodeGenInfo : public TargetCodeGenInfo {
1959 public:
1960   WinX86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT,
1961                              X86AVXABILevel AVXLevel)
1962       : TargetCodeGenInfo(new WinX86_64ABIInfo(CGT)) {}
1963 
1964   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
1965                            CodeGen::CodeGenModule &CGM) const override;
1966 
1967   int getDwarfEHStackPointer(CodeGen::CodeGenModule &CGM) const override {
1968     return 7;
1969   }
1970 
1971   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
1972                                llvm::Value *Address) const override {
1973     llvm::Value *Eight8 = llvm::ConstantInt::get(CGF.Int8Ty, 8);
1974 
1975     // 0-15 are the 16 integer registers.
1976     // 16 is %rip.
1977     AssignToArrayRange(CGF.Builder, Address, Eight8, 0, 16);
1978     return false;
1979   }
1980 
1981   void getDependentLibraryOption(llvm::StringRef Lib,
1982                                  llvm::SmallString<24> &Opt) const override {
1983     Opt = "/DEFAULTLIB:";
1984     Opt += qualifyWindowsLibrary(Lib);
1985   }
1986 
1987   void getDetectMismatchOption(llvm::StringRef Name,
1988                                llvm::StringRef Value,
1989                                llvm::SmallString<32> &Opt) const override {
1990     Opt = "/FAILIFMISMATCH:\"" + Name.str() + "=" + Value.str() + "\"";
1991   }
1992 };
1993 
1994 void WinX86_64TargetCodeGenInfo::setTargetAttributes(const Decl *D,
1995                                                      llvm::GlobalValue *GV,
1996                                             CodeGen::CodeGenModule &CGM) const {
1997   TargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
1998 
1999   addStackProbeSizeTargetAttribute(D, GV, CGM);
2000 }
2001 }
2002 
2003 void X86_64ABIInfo::postMerge(unsigned AggregateSize, Class &Lo,
2004                               Class &Hi) const {
2005   // AMD64-ABI 3.2.3p2: Rule 5. Then a post merger cleanup is done:
2006   //
2007   // (a) If one of the classes is Memory, the whole argument is passed in
2008   //     memory.
2009   //
2010   // (b) If X87UP is not preceded by X87, the whole argument is passed in
2011   //     memory.
2012   //
2013   // (c) If the size of the aggregate exceeds two eightbytes and the first
2014   //     eightbyte isn't SSE or any other eightbyte isn't SSEUP, the whole
2015   //     argument is passed in memory. NOTE: This is necessary to keep the
2016   //     ABI working for processors that don't support the __m256 type.
2017   //
2018   // (d) If SSEUP is not preceded by SSE or SSEUP, it is converted to SSE.
2019   //
2020   // Some of these are enforced by the merging logic.  Others can arise
2021   // only with unions; for example:
2022   //   union { _Complex double; unsigned; }
2023   //
2024   // Note that clauses (b) and (c) were added in 0.98.
2025   //
2026   if (Hi == Memory)
2027     Lo = Memory;
2028   if (Hi == X87Up && Lo != X87 && honorsRevision0_98())
2029     Lo = Memory;
2030   if (AggregateSize > 128 && (Lo != SSE || Hi != SSEUp))
2031     Lo = Memory;
2032   if (Hi == SSEUp && Lo != SSE)
2033     Hi = SSE;
2034 }
2035 
2036 X86_64ABIInfo::Class X86_64ABIInfo::merge(Class Accum, Class Field) {
2037   // AMD64-ABI 3.2.3p2: Rule 4. Each field of an object is
2038   // classified recursively so that always two fields are
2039   // considered. The resulting class is calculated according to
2040   // the classes of the fields in the eightbyte:
2041   //
2042   // (a) If both classes are equal, this is the resulting class.
2043   //
2044   // (b) If one of the classes is NO_CLASS, the resulting class is
2045   // the other class.
2046   //
2047   // (c) If one of the classes is MEMORY, the result is the MEMORY
2048   // class.
2049   //
2050   // (d) If one of the classes is INTEGER, the result is the
2051   // INTEGER.
2052   //
2053   // (e) If one of the classes is X87, X87UP, COMPLEX_X87 class,
2054   // MEMORY is used as class.
2055   //
2056   // (f) Otherwise class SSE is used.
2057 
2058   // Accum should never be memory (we should have returned) or
2059   // ComplexX87 (because this cannot be passed in a structure).
2060   assert((Accum != Memory && Accum != ComplexX87) &&
2061          "Invalid accumulated classification during merge.");
2062   if (Accum == Field || Field == NoClass)
2063     return Accum;
2064   if (Field == Memory)
2065     return Memory;
2066   if (Accum == NoClass)
2067     return Field;
2068   if (Accum == Integer || Field == Integer)
2069     return Integer;
2070   if (Field == X87 || Field == X87Up || Field == ComplexX87 ||
2071       Accum == X87 || Accum == X87Up)
2072     return Memory;
2073   return SSE;
2074 }
2075 
2076 void X86_64ABIInfo::classify(QualType Ty, uint64_t OffsetBase,
2077                              Class &Lo, Class &Hi, bool isNamedArg) const {
2078   // FIXME: This code can be simplified by introducing a simple value class for
2079   // Class pairs with appropriate constructor methods for the various
2080   // situations.
2081 
2082   // FIXME: Some of the split computations are wrong; unaligned vectors
2083   // shouldn't be passed in registers for example, so there is no chance they
2084   // can straddle an eightbyte. Verify & simplify.
2085 
2086   Lo = Hi = NoClass;
2087 
2088   Class &Current = OffsetBase < 64 ? Lo : Hi;
2089   Current = Memory;
2090 
2091   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
2092     BuiltinType::Kind k = BT->getKind();
2093 
2094     if (k == BuiltinType::Void) {
2095       Current = NoClass;
2096     } else if (k == BuiltinType::Int128 || k == BuiltinType::UInt128) {
2097       Lo = Integer;
2098       Hi = Integer;
2099     } else if (k >= BuiltinType::Bool && k <= BuiltinType::LongLong) {
2100       Current = Integer;
2101     } else if (k == BuiltinType::Float || k == BuiltinType::Double) {
2102       Current = SSE;
2103     } else if (k == BuiltinType::LongDouble) {
2104       const llvm::fltSemantics *LDF = &getTarget().getLongDoubleFormat();
2105       if (LDF == &llvm::APFloat::IEEEquad) {
2106         Lo = SSE;
2107         Hi = SSEUp;
2108       } else if (LDF == &llvm::APFloat::x87DoubleExtended) {
2109         Lo = X87;
2110         Hi = X87Up;
2111       } else if (LDF == &llvm::APFloat::IEEEdouble) {
2112         Current = SSE;
2113       } else
2114         llvm_unreachable("unexpected long double representation!");
2115     }
2116     // FIXME: _Decimal32 and _Decimal64 are SSE.
2117     // FIXME: _float128 and _Decimal128 are (SSE, SSEUp).
2118     return;
2119   }
2120 
2121   if (const EnumType *ET = Ty->getAs<EnumType>()) {
2122     // Classify the underlying integer type.
2123     classify(ET->getDecl()->getIntegerType(), OffsetBase, Lo, Hi, isNamedArg);
2124     return;
2125   }
2126 
2127   if (Ty->hasPointerRepresentation()) {
2128     Current = Integer;
2129     return;
2130   }
2131 
2132   if (Ty->isMemberPointerType()) {
2133     if (Ty->isMemberFunctionPointerType()) {
2134       if (Has64BitPointers) {
2135         // If Has64BitPointers, this is an {i64, i64}, so classify both
2136         // Lo and Hi now.
2137         Lo = Hi = Integer;
2138       } else {
2139         // Otherwise, with 32-bit pointers, this is an {i32, i32}. If that
2140         // straddles an eightbyte boundary, Hi should be classified as well.
2141         uint64_t EB_FuncPtr = (OffsetBase) / 64;
2142         uint64_t EB_ThisAdj = (OffsetBase + 64 - 1) / 64;
2143         if (EB_FuncPtr != EB_ThisAdj) {
2144           Lo = Hi = Integer;
2145         } else {
2146           Current = Integer;
2147         }
2148       }
2149     } else {
2150       Current = Integer;
2151     }
2152     return;
2153   }
2154 
2155   if (const VectorType *VT = Ty->getAs<VectorType>()) {
2156     uint64_t Size = getContext().getTypeSize(VT);
2157     if (Size == 1 || Size == 8 || Size == 16 || Size == 32) {
2158       // gcc passes the following as integer:
2159       // 4 bytes - <4 x char>, <2 x short>, <1 x int>, <1 x float>
2160       // 2 bytes - <2 x char>, <1 x short>
2161       // 1 byte  - <1 x char>
2162       Current = Integer;
2163 
2164       // If this type crosses an eightbyte boundary, it should be
2165       // split.
2166       uint64_t EB_Lo = (OffsetBase) / 64;
2167       uint64_t EB_Hi = (OffsetBase + Size - 1) / 64;
2168       if (EB_Lo != EB_Hi)
2169         Hi = Lo;
2170     } else if (Size == 64) {
2171       // gcc passes <1 x double> in memory. :(
2172       if (VT->getElementType()->isSpecificBuiltinType(BuiltinType::Double))
2173         return;
2174 
2175       // gcc passes <1 x long long> as INTEGER.
2176       if (VT->getElementType()->isSpecificBuiltinType(BuiltinType::LongLong) ||
2177           VT->getElementType()->isSpecificBuiltinType(BuiltinType::ULongLong) ||
2178           VT->getElementType()->isSpecificBuiltinType(BuiltinType::Long) ||
2179           VT->getElementType()->isSpecificBuiltinType(BuiltinType::ULong))
2180         Current = Integer;
2181       else
2182         Current = SSE;
2183 
2184       // If this type crosses an eightbyte boundary, it should be
2185       // split.
2186       if (OffsetBase && OffsetBase != 64)
2187         Hi = Lo;
2188     } else if (Size == 128 ||
2189                (isNamedArg && Size <= getNativeVectorSizeForAVXABI(AVXLevel))) {
2190       // Arguments of 256-bits are split into four eightbyte chunks. The
2191       // least significant one belongs to class SSE and all the others to class
2192       // SSEUP. The original Lo and Hi design considers that types can't be
2193       // greater than 128-bits, so a 64-bit split in Hi and Lo makes sense.
2194       // This design isn't correct for 256-bits, but since there're no cases
2195       // where the upper parts would need to be inspected, avoid adding
2196       // complexity and just consider Hi to match the 64-256 part.
2197       //
2198       // Note that per 3.5.7 of AMD64-ABI, 256-bit args are only passed in
2199       // registers if they are "named", i.e. not part of the "..." of a
2200       // variadic function.
2201       //
2202       // Similarly, per 3.2.3. of the AVX512 draft, 512-bits ("named") args are
2203       // split into eight eightbyte chunks, one SSE and seven SSEUP.
2204       Lo = SSE;
2205       Hi = SSEUp;
2206     }
2207     return;
2208   }
2209 
2210   if (const ComplexType *CT = Ty->getAs<ComplexType>()) {
2211     QualType ET = getContext().getCanonicalType(CT->getElementType());
2212 
2213     uint64_t Size = getContext().getTypeSize(Ty);
2214     if (ET->isIntegralOrEnumerationType()) {
2215       if (Size <= 64)
2216         Current = Integer;
2217       else if (Size <= 128)
2218         Lo = Hi = Integer;
2219     } else if (ET == getContext().FloatTy) {
2220       Current = SSE;
2221     } else if (ET == getContext().DoubleTy) {
2222       Lo = Hi = SSE;
2223     } else if (ET == getContext().LongDoubleTy) {
2224       const llvm::fltSemantics *LDF = &getTarget().getLongDoubleFormat();
2225       if (LDF == &llvm::APFloat::IEEEquad)
2226         Current = Memory;
2227       else if (LDF == &llvm::APFloat::x87DoubleExtended)
2228         Current = ComplexX87;
2229       else if (LDF == &llvm::APFloat::IEEEdouble)
2230         Lo = Hi = SSE;
2231       else
2232         llvm_unreachable("unexpected long double representation!");
2233     }
2234 
2235     // If this complex type crosses an eightbyte boundary then it
2236     // should be split.
2237     uint64_t EB_Real = (OffsetBase) / 64;
2238     uint64_t EB_Imag = (OffsetBase + getContext().getTypeSize(ET)) / 64;
2239     if (Hi == NoClass && EB_Real != EB_Imag)
2240       Hi = Lo;
2241 
2242     return;
2243   }
2244 
2245   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
2246     // Arrays are treated like structures.
2247 
2248     uint64_t Size = getContext().getTypeSize(Ty);
2249 
2250     // AMD64-ABI 3.2.3p2: Rule 1. If the size of an object is larger
2251     // than four eightbytes, ..., it has class MEMORY.
2252     if (Size > 256)
2253       return;
2254 
2255     // AMD64-ABI 3.2.3p2: Rule 1. If ..., or it contains unaligned
2256     // fields, it has class MEMORY.
2257     //
2258     // Only need to check alignment of array base.
2259     if (OffsetBase % getContext().getTypeAlign(AT->getElementType()))
2260       return;
2261 
2262     // Otherwise implement simplified merge. We could be smarter about
2263     // this, but it isn't worth it and would be harder to verify.
2264     Current = NoClass;
2265     uint64_t EltSize = getContext().getTypeSize(AT->getElementType());
2266     uint64_t ArraySize = AT->getSize().getZExtValue();
2267 
2268     // The only case a 256-bit wide vector could be used is when the array
2269     // contains a single 256-bit element. Since Lo and Hi logic isn't extended
2270     // to work for sizes wider than 128, early check and fallback to memory.
2271     if (Size > 128 && EltSize != 256)
2272       return;
2273 
2274     for (uint64_t i=0, Offset=OffsetBase; i<ArraySize; ++i, Offset += EltSize) {
2275       Class FieldLo, FieldHi;
2276       classify(AT->getElementType(), Offset, FieldLo, FieldHi, isNamedArg);
2277       Lo = merge(Lo, FieldLo);
2278       Hi = merge(Hi, FieldHi);
2279       if (Lo == Memory || Hi == Memory)
2280         break;
2281     }
2282 
2283     postMerge(Size, Lo, Hi);
2284     assert((Hi != SSEUp || Lo == SSE) && "Invalid SSEUp array classification.");
2285     return;
2286   }
2287 
2288   if (const RecordType *RT = Ty->getAs<RecordType>()) {
2289     uint64_t Size = getContext().getTypeSize(Ty);
2290 
2291     // AMD64-ABI 3.2.3p2: Rule 1. If the size of an object is larger
2292     // than four eightbytes, ..., it has class MEMORY.
2293     if (Size > 256)
2294       return;
2295 
2296     // AMD64-ABI 3.2.3p2: Rule 2. If a C++ object has either a non-trivial
2297     // copy constructor or a non-trivial destructor, it is passed by invisible
2298     // reference.
2299     if (getRecordArgABI(RT, getCXXABI()))
2300       return;
2301 
2302     const RecordDecl *RD = RT->getDecl();
2303 
2304     // Assume variable sized types are passed in memory.
2305     if (RD->hasFlexibleArrayMember())
2306       return;
2307 
2308     const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
2309 
2310     // Reset Lo class, this will be recomputed.
2311     Current = NoClass;
2312 
2313     // If this is a C++ record, classify the bases first.
2314     if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
2315       for (const auto &I : CXXRD->bases()) {
2316         assert(!I.isVirtual() && !I.getType()->isDependentType() &&
2317                "Unexpected base class!");
2318         const CXXRecordDecl *Base =
2319           cast<CXXRecordDecl>(I.getType()->getAs<RecordType>()->getDecl());
2320 
2321         // Classify this field.
2322         //
2323         // AMD64-ABI 3.2.3p2: Rule 3. If the size of the aggregate exceeds a
2324         // single eightbyte, each is classified separately. Each eightbyte gets
2325         // initialized to class NO_CLASS.
2326         Class FieldLo, FieldHi;
2327         uint64_t Offset =
2328           OffsetBase + getContext().toBits(Layout.getBaseClassOffset(Base));
2329         classify(I.getType(), Offset, FieldLo, FieldHi, isNamedArg);
2330         Lo = merge(Lo, FieldLo);
2331         Hi = merge(Hi, FieldHi);
2332         if (Lo == Memory || Hi == Memory) {
2333           postMerge(Size, Lo, Hi);
2334           return;
2335         }
2336       }
2337     }
2338 
2339     // Classify the fields one at a time, merging the results.
2340     unsigned idx = 0;
2341     for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
2342            i != e; ++i, ++idx) {
2343       uint64_t Offset = OffsetBase + Layout.getFieldOffset(idx);
2344       bool BitField = i->isBitField();
2345 
2346       // AMD64-ABI 3.2.3p2: Rule 1. If the size of an object is larger than
2347       // four eightbytes, or it contains unaligned fields, it has class MEMORY.
2348       //
2349       // The only case a 256-bit wide vector could be used is when the struct
2350       // contains a single 256-bit element. Since Lo and Hi logic isn't extended
2351       // to work for sizes wider than 128, early check and fallback to memory.
2352       //
2353       if (Size > 128 && getContext().getTypeSize(i->getType()) != 256) {
2354         Lo = Memory;
2355         postMerge(Size, Lo, Hi);
2356         return;
2357       }
2358       // Note, skip this test for bit-fields, see below.
2359       if (!BitField && Offset % getContext().getTypeAlign(i->getType())) {
2360         Lo = Memory;
2361         postMerge(Size, Lo, Hi);
2362         return;
2363       }
2364 
2365       // Classify this field.
2366       //
2367       // AMD64-ABI 3.2.3p2: Rule 3. If the size of the aggregate
2368       // exceeds a single eightbyte, each is classified
2369       // separately. Each eightbyte gets initialized to class
2370       // NO_CLASS.
2371       Class FieldLo, FieldHi;
2372 
2373       // Bit-fields require special handling, they do not force the
2374       // structure to be passed in memory even if unaligned, and
2375       // therefore they can straddle an eightbyte.
2376       if (BitField) {
2377         // Ignore padding bit-fields.
2378         if (i->isUnnamedBitfield())
2379           continue;
2380 
2381         uint64_t Offset = OffsetBase + Layout.getFieldOffset(idx);
2382         uint64_t Size = i->getBitWidthValue(getContext());
2383 
2384         uint64_t EB_Lo = Offset / 64;
2385         uint64_t EB_Hi = (Offset + Size - 1) / 64;
2386 
2387         if (EB_Lo) {
2388           assert(EB_Hi == EB_Lo && "Invalid classification, type > 16 bytes.");
2389           FieldLo = NoClass;
2390           FieldHi = Integer;
2391         } else {
2392           FieldLo = Integer;
2393           FieldHi = EB_Hi ? Integer : NoClass;
2394         }
2395       } else
2396         classify(i->getType(), Offset, FieldLo, FieldHi, isNamedArg);
2397       Lo = merge(Lo, FieldLo);
2398       Hi = merge(Hi, FieldHi);
2399       if (Lo == Memory || Hi == Memory)
2400         break;
2401     }
2402 
2403     postMerge(Size, Lo, Hi);
2404   }
2405 }
2406 
2407 ABIArgInfo X86_64ABIInfo::getIndirectReturnResult(QualType Ty) const {
2408   // If this is a scalar LLVM value then assume LLVM will pass it in the right
2409   // place naturally.
2410   if (!isAggregateTypeForABI(Ty)) {
2411     // Treat an enum type as its underlying type.
2412     if (const EnumType *EnumTy = Ty->getAs<EnumType>())
2413       Ty = EnumTy->getDecl()->getIntegerType();
2414 
2415     return (Ty->isPromotableIntegerType() ?
2416             ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
2417   }
2418 
2419   return getNaturalAlignIndirect(Ty);
2420 }
2421 
2422 bool X86_64ABIInfo::IsIllegalVectorType(QualType Ty) const {
2423   if (const VectorType *VecTy = Ty->getAs<VectorType>()) {
2424     uint64_t Size = getContext().getTypeSize(VecTy);
2425     unsigned LargestVector = getNativeVectorSizeForAVXABI(AVXLevel);
2426     if (Size <= 64 || Size > LargestVector)
2427       return true;
2428   }
2429 
2430   return false;
2431 }
2432 
2433 ABIArgInfo X86_64ABIInfo::getIndirectResult(QualType Ty,
2434                                             unsigned freeIntRegs) const {
2435   // If this is a scalar LLVM value then assume LLVM will pass it in the right
2436   // place naturally.
2437   //
2438   // This assumption is optimistic, as there could be free registers available
2439   // when we need to pass this argument in memory, and LLVM could try to pass
2440   // the argument in the free register. This does not seem to happen currently,
2441   // but this code would be much safer if we could mark the argument with
2442   // 'onstack'. See PR12193.
2443   if (!isAggregateTypeForABI(Ty) && !IsIllegalVectorType(Ty)) {
2444     // Treat an enum type as its underlying type.
2445     if (const EnumType *EnumTy = Ty->getAs<EnumType>())
2446       Ty = EnumTy->getDecl()->getIntegerType();
2447 
2448     return (Ty->isPromotableIntegerType() ?
2449             ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
2450   }
2451 
2452   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
2453     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
2454 
2455   // Compute the byval alignment. We specify the alignment of the byval in all
2456   // cases so that the mid-level optimizer knows the alignment of the byval.
2457   unsigned Align = std::max(getContext().getTypeAlign(Ty) / 8, 8U);
2458 
2459   // Attempt to avoid passing indirect results using byval when possible. This
2460   // is important for good codegen.
2461   //
2462   // We do this by coercing the value into a scalar type which the backend can
2463   // handle naturally (i.e., without using byval).
2464   //
2465   // For simplicity, we currently only do this when we have exhausted all of the
2466   // free integer registers. Doing this when there are free integer registers
2467   // would require more care, as we would have to ensure that the coerced value
2468   // did not claim the unused register. That would require either reording the
2469   // arguments to the function (so that any subsequent inreg values came first),
2470   // or only doing this optimization when there were no following arguments that
2471   // might be inreg.
2472   //
2473   // We currently expect it to be rare (particularly in well written code) for
2474   // arguments to be passed on the stack when there are still free integer
2475   // registers available (this would typically imply large structs being passed
2476   // by value), so this seems like a fair tradeoff for now.
2477   //
2478   // We can revisit this if the backend grows support for 'onstack' parameter
2479   // attributes. See PR12193.
2480   if (freeIntRegs == 0) {
2481     uint64_t Size = getContext().getTypeSize(Ty);
2482 
2483     // If this type fits in an eightbyte, coerce it into the matching integral
2484     // type, which will end up on the stack (with alignment 8).
2485     if (Align == 8 && Size <= 64)
2486       return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
2487                                                           Size));
2488   }
2489 
2490   return ABIArgInfo::getIndirect(CharUnits::fromQuantity(Align));
2491 }
2492 
2493 /// The ABI specifies that a value should be passed in a full vector XMM/YMM
2494 /// register. Pick an LLVM IR type that will be passed as a vector register.
2495 llvm::Type *X86_64ABIInfo::GetByteVectorType(QualType Ty) const {
2496   // Wrapper structs/arrays that only contain vectors are passed just like
2497   // vectors; strip them off if present.
2498   if (const Type *InnerTy = isSingleElementStruct(Ty, getContext()))
2499     Ty = QualType(InnerTy, 0);
2500 
2501   llvm::Type *IRType = CGT.ConvertType(Ty);
2502   if (isa<llvm::VectorType>(IRType) ||
2503       IRType->getTypeID() == llvm::Type::FP128TyID)
2504     return IRType;
2505 
2506   // We couldn't find the preferred IR vector type for 'Ty'.
2507   uint64_t Size = getContext().getTypeSize(Ty);
2508   assert((Size == 128 || Size == 256) && "Invalid type found!");
2509 
2510   // Return a LLVM IR vector type based on the size of 'Ty'.
2511   return llvm::VectorType::get(llvm::Type::getDoubleTy(getVMContext()),
2512                                Size / 64);
2513 }
2514 
2515 /// BitsContainNoUserData - Return true if the specified [start,end) bit range
2516 /// is known to either be off the end of the specified type or being in
2517 /// alignment padding.  The user type specified is known to be at most 128 bits
2518 /// in size, and have passed through X86_64ABIInfo::classify with a successful
2519 /// classification that put one of the two halves in the INTEGER class.
2520 ///
2521 /// It is conservatively correct to return false.
2522 static bool BitsContainNoUserData(QualType Ty, unsigned StartBit,
2523                                   unsigned EndBit, ASTContext &Context) {
2524   // If the bytes being queried are off the end of the type, there is no user
2525   // data hiding here.  This handles analysis of builtins, vectors and other
2526   // types that don't contain interesting padding.
2527   unsigned TySize = (unsigned)Context.getTypeSize(Ty);
2528   if (TySize <= StartBit)
2529     return true;
2530 
2531   if (const ConstantArrayType *AT = Context.getAsConstantArrayType(Ty)) {
2532     unsigned EltSize = (unsigned)Context.getTypeSize(AT->getElementType());
2533     unsigned NumElts = (unsigned)AT->getSize().getZExtValue();
2534 
2535     // Check each element to see if the element overlaps with the queried range.
2536     for (unsigned i = 0; i != NumElts; ++i) {
2537       // If the element is after the span we care about, then we're done..
2538       unsigned EltOffset = i*EltSize;
2539       if (EltOffset >= EndBit) break;
2540 
2541       unsigned EltStart = EltOffset < StartBit ? StartBit-EltOffset :0;
2542       if (!BitsContainNoUserData(AT->getElementType(), EltStart,
2543                                  EndBit-EltOffset, Context))
2544         return false;
2545     }
2546     // If it overlaps no elements, then it is safe to process as padding.
2547     return true;
2548   }
2549 
2550   if (const RecordType *RT = Ty->getAs<RecordType>()) {
2551     const RecordDecl *RD = RT->getDecl();
2552     const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
2553 
2554     // If this is a C++ record, check the bases first.
2555     if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
2556       for (const auto &I : CXXRD->bases()) {
2557         assert(!I.isVirtual() && !I.getType()->isDependentType() &&
2558                "Unexpected base class!");
2559         const CXXRecordDecl *Base =
2560           cast<CXXRecordDecl>(I.getType()->getAs<RecordType>()->getDecl());
2561 
2562         // If the base is after the span we care about, ignore it.
2563         unsigned BaseOffset = Context.toBits(Layout.getBaseClassOffset(Base));
2564         if (BaseOffset >= EndBit) continue;
2565 
2566         unsigned BaseStart = BaseOffset < StartBit ? StartBit-BaseOffset :0;
2567         if (!BitsContainNoUserData(I.getType(), BaseStart,
2568                                    EndBit-BaseOffset, Context))
2569           return false;
2570       }
2571     }
2572 
2573     // Verify that no field has data that overlaps the region of interest.  Yes
2574     // this could be sped up a lot by being smarter about queried fields,
2575     // however we're only looking at structs up to 16 bytes, so we don't care
2576     // much.
2577     unsigned idx = 0;
2578     for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
2579          i != e; ++i, ++idx) {
2580       unsigned FieldOffset = (unsigned)Layout.getFieldOffset(idx);
2581 
2582       // If we found a field after the region we care about, then we're done.
2583       if (FieldOffset >= EndBit) break;
2584 
2585       unsigned FieldStart = FieldOffset < StartBit ? StartBit-FieldOffset :0;
2586       if (!BitsContainNoUserData(i->getType(), FieldStart, EndBit-FieldOffset,
2587                                  Context))
2588         return false;
2589     }
2590 
2591     // If nothing in this record overlapped the area of interest, then we're
2592     // clean.
2593     return true;
2594   }
2595 
2596   return false;
2597 }
2598 
2599 /// ContainsFloatAtOffset - Return true if the specified LLVM IR type has a
2600 /// float member at the specified offset.  For example, {int,{float}} has a
2601 /// float at offset 4.  It is conservatively correct for this routine to return
2602 /// false.
2603 static bool ContainsFloatAtOffset(llvm::Type *IRType, unsigned IROffset,
2604                                   const llvm::DataLayout &TD) {
2605   // Base case if we find a float.
2606   if (IROffset == 0 && IRType->isFloatTy())
2607     return true;
2608 
2609   // If this is a struct, recurse into the field at the specified offset.
2610   if (llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType)) {
2611     const llvm::StructLayout *SL = TD.getStructLayout(STy);
2612     unsigned Elt = SL->getElementContainingOffset(IROffset);
2613     IROffset -= SL->getElementOffset(Elt);
2614     return ContainsFloatAtOffset(STy->getElementType(Elt), IROffset, TD);
2615   }
2616 
2617   // If this is an array, recurse into the field at the specified offset.
2618   if (llvm::ArrayType *ATy = dyn_cast<llvm::ArrayType>(IRType)) {
2619     llvm::Type *EltTy = ATy->getElementType();
2620     unsigned EltSize = TD.getTypeAllocSize(EltTy);
2621     IROffset -= IROffset/EltSize*EltSize;
2622     return ContainsFloatAtOffset(EltTy, IROffset, TD);
2623   }
2624 
2625   return false;
2626 }
2627 
2628 
2629 /// GetSSETypeAtOffset - Return a type that will be passed by the backend in the
2630 /// low 8 bytes of an XMM register, corresponding to the SSE class.
2631 llvm::Type *X86_64ABIInfo::
2632 GetSSETypeAtOffset(llvm::Type *IRType, unsigned IROffset,
2633                    QualType SourceTy, unsigned SourceOffset) const {
2634   // The only three choices we have are either double, <2 x float>, or float. We
2635   // pass as float if the last 4 bytes is just padding.  This happens for
2636   // structs that contain 3 floats.
2637   if (BitsContainNoUserData(SourceTy, SourceOffset*8+32,
2638                             SourceOffset*8+64, getContext()))
2639     return llvm::Type::getFloatTy(getVMContext());
2640 
2641   // We want to pass as <2 x float> if the LLVM IR type contains a float at
2642   // offset+0 and offset+4.  Walk the LLVM IR type to find out if this is the
2643   // case.
2644   if (ContainsFloatAtOffset(IRType, IROffset, getDataLayout()) &&
2645       ContainsFloatAtOffset(IRType, IROffset+4, getDataLayout()))
2646     return llvm::VectorType::get(llvm::Type::getFloatTy(getVMContext()), 2);
2647 
2648   return llvm::Type::getDoubleTy(getVMContext());
2649 }
2650 
2651 
2652 /// GetINTEGERTypeAtOffset - The ABI specifies that a value should be passed in
2653 /// an 8-byte GPR.  This means that we either have a scalar or we are talking
2654 /// about the high or low part of an up-to-16-byte struct.  This routine picks
2655 /// the best LLVM IR type to represent this, which may be i64 or may be anything
2656 /// else that the backend will pass in a GPR that works better (e.g. i8, %foo*,
2657 /// etc).
2658 ///
2659 /// PrefType is an LLVM IR type that corresponds to (part of) the IR type for
2660 /// the source type.  IROffset is an offset in bytes into the LLVM IR type that
2661 /// the 8-byte value references.  PrefType may be null.
2662 ///
2663 /// SourceTy is the source-level type for the entire argument.  SourceOffset is
2664 /// an offset into this that we're processing (which is always either 0 or 8).
2665 ///
2666 llvm::Type *X86_64ABIInfo::
2667 GetINTEGERTypeAtOffset(llvm::Type *IRType, unsigned IROffset,
2668                        QualType SourceTy, unsigned SourceOffset) const {
2669   // If we're dealing with an un-offset LLVM IR type, then it means that we're
2670   // returning an 8-byte unit starting with it.  See if we can safely use it.
2671   if (IROffset == 0) {
2672     // Pointers and int64's always fill the 8-byte unit.
2673     if ((isa<llvm::PointerType>(IRType) && Has64BitPointers) ||
2674         IRType->isIntegerTy(64))
2675       return IRType;
2676 
2677     // If we have a 1/2/4-byte integer, we can use it only if the rest of the
2678     // goodness in the source type is just tail padding.  This is allowed to
2679     // kick in for struct {double,int} on the int, but not on
2680     // struct{double,int,int} because we wouldn't return the second int.  We
2681     // have to do this analysis on the source type because we can't depend on
2682     // unions being lowered a specific way etc.
2683     if (IRType->isIntegerTy(8) || IRType->isIntegerTy(16) ||
2684         IRType->isIntegerTy(32) ||
2685         (isa<llvm::PointerType>(IRType) && !Has64BitPointers)) {
2686       unsigned BitWidth = isa<llvm::PointerType>(IRType) ? 32 :
2687           cast<llvm::IntegerType>(IRType)->getBitWidth();
2688 
2689       if (BitsContainNoUserData(SourceTy, SourceOffset*8+BitWidth,
2690                                 SourceOffset*8+64, getContext()))
2691         return IRType;
2692     }
2693   }
2694 
2695   if (llvm::StructType *STy = dyn_cast<llvm::StructType>(IRType)) {
2696     // If this is a struct, recurse into the field at the specified offset.
2697     const llvm::StructLayout *SL = getDataLayout().getStructLayout(STy);
2698     if (IROffset < SL->getSizeInBytes()) {
2699       unsigned FieldIdx = SL->getElementContainingOffset(IROffset);
2700       IROffset -= SL->getElementOffset(FieldIdx);
2701 
2702       return GetINTEGERTypeAtOffset(STy->getElementType(FieldIdx), IROffset,
2703                                     SourceTy, SourceOffset);
2704     }
2705   }
2706 
2707   if (llvm::ArrayType *ATy = dyn_cast<llvm::ArrayType>(IRType)) {
2708     llvm::Type *EltTy = ATy->getElementType();
2709     unsigned EltSize = getDataLayout().getTypeAllocSize(EltTy);
2710     unsigned EltOffset = IROffset/EltSize*EltSize;
2711     return GetINTEGERTypeAtOffset(EltTy, IROffset-EltOffset, SourceTy,
2712                                   SourceOffset);
2713   }
2714 
2715   // Okay, we don't have any better idea of what to pass, so we pass this in an
2716   // integer register that isn't too big to fit the rest of the struct.
2717   unsigned TySizeInBytes =
2718     (unsigned)getContext().getTypeSizeInChars(SourceTy).getQuantity();
2719 
2720   assert(TySizeInBytes != SourceOffset && "Empty field?");
2721 
2722   // It is always safe to classify this as an integer type up to i64 that
2723   // isn't larger than the structure.
2724   return llvm::IntegerType::get(getVMContext(),
2725                                 std::min(TySizeInBytes-SourceOffset, 8U)*8);
2726 }
2727 
2728 
2729 /// GetX86_64ByValArgumentPair - Given a high and low type that can ideally
2730 /// be used as elements of a two register pair to pass or return, return a
2731 /// first class aggregate to represent them.  For example, if the low part of
2732 /// a by-value argument should be passed as i32* and the high part as float,
2733 /// return {i32*, float}.
2734 static llvm::Type *
2735 GetX86_64ByValArgumentPair(llvm::Type *Lo, llvm::Type *Hi,
2736                            const llvm::DataLayout &TD) {
2737   // In order to correctly satisfy the ABI, we need to the high part to start
2738   // at offset 8.  If the high and low parts we inferred are both 4-byte types
2739   // (e.g. i32 and i32) then the resultant struct type ({i32,i32}) won't have
2740   // the second element at offset 8.  Check for this:
2741   unsigned LoSize = (unsigned)TD.getTypeAllocSize(Lo);
2742   unsigned HiAlign = TD.getABITypeAlignment(Hi);
2743   unsigned HiStart = llvm::RoundUpToAlignment(LoSize, HiAlign);
2744   assert(HiStart != 0 && HiStart <= 8 && "Invalid x86-64 argument pair!");
2745 
2746   // To handle this, we have to increase the size of the low part so that the
2747   // second element will start at an 8 byte offset.  We can't increase the size
2748   // of the second element because it might make us access off the end of the
2749   // struct.
2750   if (HiStart != 8) {
2751     // There are usually two sorts of types the ABI generation code can produce
2752     // for the low part of a pair that aren't 8 bytes in size: float or
2753     // i8/i16/i32.  This can also include pointers when they are 32-bit (X32 and
2754     // NaCl).
2755     // Promote these to a larger type.
2756     if (Lo->isFloatTy())
2757       Lo = llvm::Type::getDoubleTy(Lo->getContext());
2758     else {
2759       assert((Lo->isIntegerTy() || Lo->isPointerTy())
2760              && "Invalid/unknown lo type");
2761       Lo = llvm::Type::getInt64Ty(Lo->getContext());
2762     }
2763   }
2764 
2765   llvm::StructType *Result = llvm::StructType::get(Lo, Hi, nullptr);
2766 
2767 
2768   // Verify that the second element is at an 8-byte offset.
2769   assert(TD.getStructLayout(Result)->getElementOffset(1) == 8 &&
2770          "Invalid x86-64 argument pair!");
2771   return Result;
2772 }
2773 
2774 ABIArgInfo X86_64ABIInfo::
2775 classifyReturnType(QualType RetTy) const {
2776   // AMD64-ABI 3.2.3p4: Rule 1. Classify the return type with the
2777   // classification algorithm.
2778   X86_64ABIInfo::Class Lo, Hi;
2779   classify(RetTy, 0, Lo, Hi, /*isNamedArg*/ true);
2780 
2781   // Check some invariants.
2782   assert((Hi != Memory || Lo == Memory) && "Invalid memory classification.");
2783   assert((Hi != SSEUp || Lo == SSE) && "Invalid SSEUp classification.");
2784 
2785   llvm::Type *ResType = nullptr;
2786   switch (Lo) {
2787   case NoClass:
2788     if (Hi == NoClass)
2789       return ABIArgInfo::getIgnore();
2790     // If the low part is just padding, it takes no register, leave ResType
2791     // null.
2792     assert((Hi == SSE || Hi == Integer || Hi == X87Up) &&
2793            "Unknown missing lo part");
2794     break;
2795 
2796   case SSEUp:
2797   case X87Up:
2798     llvm_unreachable("Invalid classification for lo word.");
2799 
2800     // AMD64-ABI 3.2.3p4: Rule 2. Types of class memory are returned via
2801     // hidden argument.
2802   case Memory:
2803     return getIndirectReturnResult(RetTy);
2804 
2805     // AMD64-ABI 3.2.3p4: Rule 3. If the class is INTEGER, the next
2806     // available register of the sequence %rax, %rdx is used.
2807   case Integer:
2808     ResType = GetINTEGERTypeAtOffset(CGT.ConvertType(RetTy), 0, RetTy, 0);
2809 
2810     // If we have a sign or zero extended integer, make sure to return Extend
2811     // so that the parameter gets the right LLVM IR attributes.
2812     if (Hi == NoClass && isa<llvm::IntegerType>(ResType)) {
2813       // Treat an enum type as its underlying type.
2814       if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
2815         RetTy = EnumTy->getDecl()->getIntegerType();
2816 
2817       if (RetTy->isIntegralOrEnumerationType() &&
2818           RetTy->isPromotableIntegerType())
2819         return ABIArgInfo::getExtend();
2820     }
2821     break;
2822 
2823     // AMD64-ABI 3.2.3p4: Rule 4. If the class is SSE, the next
2824     // available SSE register of the sequence %xmm0, %xmm1 is used.
2825   case SSE:
2826     ResType = GetSSETypeAtOffset(CGT.ConvertType(RetTy), 0, RetTy, 0);
2827     break;
2828 
2829     // AMD64-ABI 3.2.3p4: Rule 6. If the class is X87, the value is
2830     // returned on the X87 stack in %st0 as 80-bit x87 number.
2831   case X87:
2832     ResType = llvm::Type::getX86_FP80Ty(getVMContext());
2833     break;
2834 
2835     // AMD64-ABI 3.2.3p4: Rule 8. If the class is COMPLEX_X87, the real
2836     // part of the value is returned in %st0 and the imaginary part in
2837     // %st1.
2838   case ComplexX87:
2839     assert(Hi == ComplexX87 && "Unexpected ComplexX87 classification.");
2840     ResType = llvm::StructType::get(llvm::Type::getX86_FP80Ty(getVMContext()),
2841                                     llvm::Type::getX86_FP80Ty(getVMContext()),
2842                                     nullptr);
2843     break;
2844   }
2845 
2846   llvm::Type *HighPart = nullptr;
2847   switch (Hi) {
2848     // Memory was handled previously and X87 should
2849     // never occur as a hi class.
2850   case Memory:
2851   case X87:
2852     llvm_unreachable("Invalid classification for hi word.");
2853 
2854   case ComplexX87: // Previously handled.
2855   case NoClass:
2856     break;
2857 
2858   case Integer:
2859     HighPart = GetINTEGERTypeAtOffset(CGT.ConvertType(RetTy), 8, RetTy, 8);
2860     if (Lo == NoClass)  // Return HighPart at offset 8 in memory.
2861       return ABIArgInfo::getDirect(HighPart, 8);
2862     break;
2863   case SSE:
2864     HighPart = GetSSETypeAtOffset(CGT.ConvertType(RetTy), 8, RetTy, 8);
2865     if (Lo == NoClass)  // Return HighPart at offset 8 in memory.
2866       return ABIArgInfo::getDirect(HighPart, 8);
2867     break;
2868 
2869     // AMD64-ABI 3.2.3p4: Rule 5. If the class is SSEUP, the eightbyte
2870     // is passed in the next available eightbyte chunk if the last used
2871     // vector register.
2872     //
2873     // SSEUP should always be preceded by SSE, just widen.
2874   case SSEUp:
2875     assert(Lo == SSE && "Unexpected SSEUp classification.");
2876     ResType = GetByteVectorType(RetTy);
2877     break;
2878 
2879     // AMD64-ABI 3.2.3p4: Rule 7. If the class is X87UP, the value is
2880     // returned together with the previous X87 value in %st0.
2881   case X87Up:
2882     // If X87Up is preceded by X87, we don't need to do
2883     // anything. However, in some cases with unions it may not be
2884     // preceded by X87. In such situations we follow gcc and pass the
2885     // extra bits in an SSE reg.
2886     if (Lo != X87) {
2887       HighPart = GetSSETypeAtOffset(CGT.ConvertType(RetTy), 8, RetTy, 8);
2888       if (Lo == NoClass)  // Return HighPart at offset 8 in memory.
2889         return ABIArgInfo::getDirect(HighPart, 8);
2890     }
2891     break;
2892   }
2893 
2894   // If a high part was specified, merge it together with the low part.  It is
2895   // known to pass in the high eightbyte of the result.  We do this by forming a
2896   // first class struct aggregate with the high and low part: {low, high}
2897   if (HighPart)
2898     ResType = GetX86_64ByValArgumentPair(ResType, HighPart, getDataLayout());
2899 
2900   return ABIArgInfo::getDirect(ResType);
2901 }
2902 
2903 ABIArgInfo X86_64ABIInfo::classifyArgumentType(
2904   QualType Ty, unsigned freeIntRegs, unsigned &neededInt, unsigned &neededSSE,
2905   bool isNamedArg)
2906   const
2907 {
2908   Ty = useFirstFieldIfTransparentUnion(Ty);
2909 
2910   X86_64ABIInfo::Class Lo, Hi;
2911   classify(Ty, 0, Lo, Hi, isNamedArg);
2912 
2913   // Check some invariants.
2914   // FIXME: Enforce these by construction.
2915   assert((Hi != Memory || Lo == Memory) && "Invalid memory classification.");
2916   assert((Hi != SSEUp || Lo == SSE) && "Invalid SSEUp classification.");
2917 
2918   neededInt = 0;
2919   neededSSE = 0;
2920   llvm::Type *ResType = nullptr;
2921   switch (Lo) {
2922   case NoClass:
2923     if (Hi == NoClass)
2924       return ABIArgInfo::getIgnore();
2925     // If the low part is just padding, it takes no register, leave ResType
2926     // null.
2927     assert((Hi == SSE || Hi == Integer || Hi == X87Up) &&
2928            "Unknown missing lo part");
2929     break;
2930 
2931     // AMD64-ABI 3.2.3p3: Rule 1. If the class is MEMORY, pass the argument
2932     // on the stack.
2933   case Memory:
2934 
2935     // AMD64-ABI 3.2.3p3: Rule 5. If the class is X87, X87UP or
2936     // COMPLEX_X87, it is passed in memory.
2937   case X87:
2938   case ComplexX87:
2939     if (getRecordArgABI(Ty, getCXXABI()) == CGCXXABI::RAA_Indirect)
2940       ++neededInt;
2941     return getIndirectResult(Ty, freeIntRegs);
2942 
2943   case SSEUp:
2944   case X87Up:
2945     llvm_unreachable("Invalid classification for lo word.");
2946 
2947     // AMD64-ABI 3.2.3p3: Rule 2. If the class is INTEGER, the next
2948     // available register of the sequence %rdi, %rsi, %rdx, %rcx, %r8
2949     // and %r9 is used.
2950   case Integer:
2951     ++neededInt;
2952 
2953     // Pick an 8-byte type based on the preferred type.
2954     ResType = GetINTEGERTypeAtOffset(CGT.ConvertType(Ty), 0, Ty, 0);
2955 
2956     // If we have a sign or zero extended integer, make sure to return Extend
2957     // so that the parameter gets the right LLVM IR attributes.
2958     if (Hi == NoClass && isa<llvm::IntegerType>(ResType)) {
2959       // Treat an enum type as its underlying type.
2960       if (const EnumType *EnumTy = Ty->getAs<EnumType>())
2961         Ty = EnumTy->getDecl()->getIntegerType();
2962 
2963       if (Ty->isIntegralOrEnumerationType() &&
2964           Ty->isPromotableIntegerType())
2965         return ABIArgInfo::getExtend();
2966     }
2967 
2968     break;
2969 
2970     // AMD64-ABI 3.2.3p3: Rule 3. If the class is SSE, the next
2971     // available SSE register is used, the registers are taken in the
2972     // order from %xmm0 to %xmm7.
2973   case SSE: {
2974     llvm::Type *IRType = CGT.ConvertType(Ty);
2975     ResType = GetSSETypeAtOffset(IRType, 0, Ty, 0);
2976     ++neededSSE;
2977     break;
2978   }
2979   }
2980 
2981   llvm::Type *HighPart = nullptr;
2982   switch (Hi) {
2983     // Memory was handled previously, ComplexX87 and X87 should
2984     // never occur as hi classes, and X87Up must be preceded by X87,
2985     // which is passed in memory.
2986   case Memory:
2987   case X87:
2988   case ComplexX87:
2989     llvm_unreachable("Invalid classification for hi word.");
2990 
2991   case NoClass: break;
2992 
2993   case Integer:
2994     ++neededInt;
2995     // Pick an 8-byte type based on the preferred type.
2996     HighPart = GetINTEGERTypeAtOffset(CGT.ConvertType(Ty), 8, Ty, 8);
2997 
2998     if (Lo == NoClass)  // Pass HighPart at offset 8 in memory.
2999       return ABIArgInfo::getDirect(HighPart, 8);
3000     break;
3001 
3002     // X87Up generally doesn't occur here (long double is passed in
3003     // memory), except in situations involving unions.
3004   case X87Up:
3005   case SSE:
3006     HighPart = GetSSETypeAtOffset(CGT.ConvertType(Ty), 8, Ty, 8);
3007 
3008     if (Lo == NoClass)  // Pass HighPart at offset 8 in memory.
3009       return ABIArgInfo::getDirect(HighPart, 8);
3010 
3011     ++neededSSE;
3012     break;
3013 
3014     // AMD64-ABI 3.2.3p3: Rule 4. If the class is SSEUP, the
3015     // eightbyte is passed in the upper half of the last used SSE
3016     // register.  This only happens when 128-bit vectors are passed.
3017   case SSEUp:
3018     assert(Lo == SSE && "Unexpected SSEUp classification");
3019     ResType = GetByteVectorType(Ty);
3020     break;
3021   }
3022 
3023   // If a high part was specified, merge it together with the low part.  It is
3024   // known to pass in the high eightbyte of the result.  We do this by forming a
3025   // first class struct aggregate with the high and low part: {low, high}
3026   if (HighPart)
3027     ResType = GetX86_64ByValArgumentPair(ResType, HighPart, getDataLayout());
3028 
3029   return ABIArgInfo::getDirect(ResType);
3030 }
3031 
3032 void X86_64ABIInfo::computeInfo(CGFunctionInfo &FI) const {
3033 
3034   if (!getCXXABI().classifyReturnType(FI))
3035     FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
3036 
3037   // Keep track of the number of assigned registers.
3038   unsigned freeIntRegs = 6, freeSSERegs = 8;
3039 
3040   // If the return value is indirect, then the hidden argument is consuming one
3041   // integer register.
3042   if (FI.getReturnInfo().isIndirect())
3043     --freeIntRegs;
3044 
3045   // The chain argument effectively gives us another free register.
3046   if (FI.isChainCall())
3047     ++freeIntRegs;
3048 
3049   unsigned NumRequiredArgs = FI.getNumRequiredArgs();
3050   // AMD64-ABI 3.2.3p3: Once arguments are classified, the registers
3051   // get assigned (in left-to-right order) for passing as follows...
3052   unsigned ArgNo = 0;
3053   for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end();
3054        it != ie; ++it, ++ArgNo) {
3055     bool IsNamedArg = ArgNo < NumRequiredArgs;
3056 
3057     unsigned neededInt, neededSSE;
3058     it->info = classifyArgumentType(it->type, freeIntRegs, neededInt,
3059                                     neededSSE, IsNamedArg);
3060 
3061     // AMD64-ABI 3.2.3p3: If there are no registers available for any
3062     // eightbyte of an argument, the whole argument is passed on the
3063     // stack. If registers have already been assigned for some
3064     // eightbytes of such an argument, the assignments get reverted.
3065     if (freeIntRegs >= neededInt && freeSSERegs >= neededSSE) {
3066       freeIntRegs -= neededInt;
3067       freeSSERegs -= neededSSE;
3068     } else {
3069       it->info = getIndirectResult(it->type, freeIntRegs);
3070     }
3071   }
3072 }
3073 
3074 static Address EmitX86_64VAArgFromMemory(CodeGenFunction &CGF,
3075                                          Address VAListAddr, QualType Ty) {
3076   Address overflow_arg_area_p = CGF.Builder.CreateStructGEP(
3077       VAListAddr, 2, CharUnits::fromQuantity(8), "overflow_arg_area_p");
3078   llvm::Value *overflow_arg_area =
3079     CGF.Builder.CreateLoad(overflow_arg_area_p, "overflow_arg_area");
3080 
3081   // AMD64-ABI 3.5.7p5: Step 7. Align l->overflow_arg_area upwards to a 16
3082   // byte boundary if alignment needed by type exceeds 8 byte boundary.
3083   // It isn't stated explicitly in the standard, but in practice we use
3084   // alignment greater than 16 where necessary.
3085   CharUnits Align = CGF.getContext().getTypeAlignInChars(Ty);
3086   if (Align > CharUnits::fromQuantity(8)) {
3087     overflow_arg_area = emitRoundPointerUpToAlignment(CGF, overflow_arg_area,
3088                                                       Align);
3089   }
3090 
3091   // AMD64-ABI 3.5.7p5: Step 8. Fetch type from l->overflow_arg_area.
3092   llvm::Type *LTy = CGF.ConvertTypeForMem(Ty);
3093   llvm::Value *Res =
3094     CGF.Builder.CreateBitCast(overflow_arg_area,
3095                               llvm::PointerType::getUnqual(LTy));
3096 
3097   // AMD64-ABI 3.5.7p5: Step 9. Set l->overflow_arg_area to:
3098   // l->overflow_arg_area + sizeof(type).
3099   // AMD64-ABI 3.5.7p5: Step 10. Align l->overflow_arg_area upwards to
3100   // an 8 byte boundary.
3101 
3102   uint64_t SizeInBytes = (CGF.getContext().getTypeSize(Ty) + 7) / 8;
3103   llvm::Value *Offset =
3104       llvm::ConstantInt::get(CGF.Int32Ty, (SizeInBytes + 7)  & ~7);
3105   overflow_arg_area = CGF.Builder.CreateGEP(overflow_arg_area, Offset,
3106                                             "overflow_arg_area.next");
3107   CGF.Builder.CreateStore(overflow_arg_area, overflow_arg_area_p);
3108 
3109   // AMD64-ABI 3.5.7p5: Step 11. Return the fetched type.
3110   return Address(Res, Align);
3111 }
3112 
3113 Address X86_64ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
3114                                  QualType Ty) const {
3115   // Assume that va_list type is correct; should be pointer to LLVM type:
3116   // struct {
3117   //   i32 gp_offset;
3118   //   i32 fp_offset;
3119   //   i8* overflow_arg_area;
3120   //   i8* reg_save_area;
3121   // };
3122   unsigned neededInt, neededSSE;
3123 
3124   Ty = getContext().getCanonicalType(Ty);
3125   ABIArgInfo AI = classifyArgumentType(Ty, 0, neededInt, neededSSE,
3126                                        /*isNamedArg*/false);
3127 
3128   // AMD64-ABI 3.5.7p5: Step 1. Determine whether type may be passed
3129   // in the registers. If not go to step 7.
3130   if (!neededInt && !neededSSE)
3131     return EmitX86_64VAArgFromMemory(CGF, VAListAddr, Ty);
3132 
3133   // AMD64-ABI 3.5.7p5: Step 2. Compute num_gp to hold the number of
3134   // general purpose registers needed to pass type and num_fp to hold
3135   // the number of floating point registers needed.
3136 
3137   // AMD64-ABI 3.5.7p5: Step 3. Verify whether arguments fit into
3138   // registers. In the case: l->gp_offset > 48 - num_gp * 8 or
3139   // l->fp_offset > 304 - num_fp * 16 go to step 7.
3140   //
3141   // NOTE: 304 is a typo, there are (6 * 8 + 8 * 16) = 176 bytes of
3142   // register save space).
3143 
3144   llvm::Value *InRegs = nullptr;
3145   Address gp_offset_p = Address::invalid(), fp_offset_p = Address::invalid();
3146   llvm::Value *gp_offset = nullptr, *fp_offset = nullptr;
3147   if (neededInt) {
3148     gp_offset_p =
3149         CGF.Builder.CreateStructGEP(VAListAddr, 0, CharUnits::Zero(),
3150                                     "gp_offset_p");
3151     gp_offset = CGF.Builder.CreateLoad(gp_offset_p, "gp_offset");
3152     InRegs = llvm::ConstantInt::get(CGF.Int32Ty, 48 - neededInt * 8);
3153     InRegs = CGF.Builder.CreateICmpULE(gp_offset, InRegs, "fits_in_gp");
3154   }
3155 
3156   if (neededSSE) {
3157     fp_offset_p =
3158         CGF.Builder.CreateStructGEP(VAListAddr, 1, CharUnits::fromQuantity(4),
3159                                     "fp_offset_p");
3160     fp_offset = CGF.Builder.CreateLoad(fp_offset_p, "fp_offset");
3161     llvm::Value *FitsInFP =
3162       llvm::ConstantInt::get(CGF.Int32Ty, 176 - neededSSE * 16);
3163     FitsInFP = CGF.Builder.CreateICmpULE(fp_offset, FitsInFP, "fits_in_fp");
3164     InRegs = InRegs ? CGF.Builder.CreateAnd(InRegs, FitsInFP) : FitsInFP;
3165   }
3166 
3167   llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
3168   llvm::BasicBlock *InMemBlock = CGF.createBasicBlock("vaarg.in_mem");
3169   llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
3170   CGF.Builder.CreateCondBr(InRegs, InRegBlock, InMemBlock);
3171 
3172   // Emit code to load the value if it was passed in registers.
3173 
3174   CGF.EmitBlock(InRegBlock);
3175 
3176   // AMD64-ABI 3.5.7p5: Step 4. Fetch type from l->reg_save_area with
3177   // an offset of l->gp_offset and/or l->fp_offset. This may require
3178   // copying to a temporary location in case the parameter is passed
3179   // in different register classes or requires an alignment greater
3180   // than 8 for general purpose registers and 16 for XMM registers.
3181   //
3182   // FIXME: This really results in shameful code when we end up needing to
3183   // collect arguments from different places; often what should result in a
3184   // simple assembling of a structure from scattered addresses has many more
3185   // loads than necessary. Can we clean this up?
3186   llvm::Type *LTy = CGF.ConvertTypeForMem(Ty);
3187   llvm::Value *RegSaveArea = CGF.Builder.CreateLoad(
3188       CGF.Builder.CreateStructGEP(VAListAddr, 3, CharUnits::fromQuantity(16)),
3189                                   "reg_save_area");
3190 
3191   Address RegAddr = Address::invalid();
3192   if (neededInt && neededSSE) {
3193     // FIXME: Cleanup.
3194     assert(AI.isDirect() && "Unexpected ABI info for mixed regs");
3195     llvm::StructType *ST = cast<llvm::StructType>(AI.getCoerceToType());
3196     Address Tmp = CGF.CreateMemTemp(Ty);
3197     Tmp = CGF.Builder.CreateElementBitCast(Tmp, ST);
3198     assert(ST->getNumElements() == 2 && "Unexpected ABI info for mixed regs");
3199     llvm::Type *TyLo = ST->getElementType(0);
3200     llvm::Type *TyHi = ST->getElementType(1);
3201     assert((TyLo->isFPOrFPVectorTy() ^ TyHi->isFPOrFPVectorTy()) &&
3202            "Unexpected ABI info for mixed regs");
3203     llvm::Type *PTyLo = llvm::PointerType::getUnqual(TyLo);
3204     llvm::Type *PTyHi = llvm::PointerType::getUnqual(TyHi);
3205     llvm::Value *GPAddr = CGF.Builder.CreateGEP(RegSaveArea, gp_offset);
3206     llvm::Value *FPAddr = CGF.Builder.CreateGEP(RegSaveArea, fp_offset);
3207     llvm::Value *RegLoAddr = TyLo->isFPOrFPVectorTy() ? FPAddr : GPAddr;
3208     llvm::Value *RegHiAddr = TyLo->isFPOrFPVectorTy() ? GPAddr : FPAddr;
3209 
3210     // Copy the first element.
3211     llvm::Value *V =
3212       CGF.Builder.CreateDefaultAlignedLoad(
3213                                CGF.Builder.CreateBitCast(RegLoAddr, PTyLo));
3214     CGF.Builder.CreateStore(V,
3215                     CGF.Builder.CreateStructGEP(Tmp, 0, CharUnits::Zero()));
3216 
3217     // Copy the second element.
3218     V = CGF.Builder.CreateDefaultAlignedLoad(
3219                                CGF.Builder.CreateBitCast(RegHiAddr, PTyHi));
3220     CharUnits Offset = CharUnits::fromQuantity(
3221                    getDataLayout().getStructLayout(ST)->getElementOffset(1));
3222     CGF.Builder.CreateStore(V, CGF.Builder.CreateStructGEP(Tmp, 1, Offset));
3223 
3224     RegAddr = CGF.Builder.CreateElementBitCast(Tmp, LTy);
3225   } else if (neededInt) {
3226     RegAddr = Address(CGF.Builder.CreateGEP(RegSaveArea, gp_offset),
3227                       CharUnits::fromQuantity(8));
3228     RegAddr = CGF.Builder.CreateElementBitCast(RegAddr, LTy);
3229 
3230     // Copy to a temporary if necessary to ensure the appropriate alignment.
3231     std::pair<CharUnits, CharUnits> SizeAlign =
3232         getContext().getTypeInfoInChars(Ty);
3233     uint64_t TySize = SizeAlign.first.getQuantity();
3234     CharUnits TyAlign = SizeAlign.second;
3235 
3236     // Copy into a temporary if the type is more aligned than the
3237     // register save area.
3238     if (TyAlign.getQuantity() > 8) {
3239       Address Tmp = CGF.CreateMemTemp(Ty);
3240       CGF.Builder.CreateMemCpy(Tmp, RegAddr, TySize, false);
3241       RegAddr = Tmp;
3242     }
3243 
3244   } else if (neededSSE == 1) {
3245     RegAddr = Address(CGF.Builder.CreateGEP(RegSaveArea, fp_offset),
3246                       CharUnits::fromQuantity(16));
3247     RegAddr = CGF.Builder.CreateElementBitCast(RegAddr, LTy);
3248   } else {
3249     assert(neededSSE == 2 && "Invalid number of needed registers!");
3250     // SSE registers are spaced 16 bytes apart in the register save
3251     // area, we need to collect the two eightbytes together.
3252     // The ABI isn't explicit about this, but it seems reasonable
3253     // to assume that the slots are 16-byte aligned, since the stack is
3254     // naturally 16-byte aligned and the prologue is expected to store
3255     // all the SSE registers to the RSA.
3256     Address RegAddrLo = Address(CGF.Builder.CreateGEP(RegSaveArea, fp_offset),
3257                                 CharUnits::fromQuantity(16));
3258     Address RegAddrHi =
3259       CGF.Builder.CreateConstInBoundsByteGEP(RegAddrLo,
3260                                              CharUnits::fromQuantity(16));
3261     llvm::Type *DoubleTy = CGF.DoubleTy;
3262     llvm::StructType *ST = llvm::StructType::get(DoubleTy, DoubleTy, nullptr);
3263     llvm::Value *V;
3264     Address Tmp = CGF.CreateMemTemp(Ty);
3265     Tmp = CGF.Builder.CreateElementBitCast(Tmp, ST);
3266     V = CGF.Builder.CreateLoad(
3267                    CGF.Builder.CreateElementBitCast(RegAddrLo, DoubleTy));
3268     CGF.Builder.CreateStore(V,
3269                    CGF.Builder.CreateStructGEP(Tmp, 0, CharUnits::Zero()));
3270     V = CGF.Builder.CreateLoad(
3271                    CGF.Builder.CreateElementBitCast(RegAddrHi, DoubleTy));
3272     CGF.Builder.CreateStore(V,
3273           CGF.Builder.CreateStructGEP(Tmp, 1, CharUnits::fromQuantity(8)));
3274 
3275     RegAddr = CGF.Builder.CreateElementBitCast(Tmp, LTy);
3276   }
3277 
3278   // AMD64-ABI 3.5.7p5: Step 5. Set:
3279   // l->gp_offset = l->gp_offset + num_gp * 8
3280   // l->fp_offset = l->fp_offset + num_fp * 16.
3281   if (neededInt) {
3282     llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int32Ty, neededInt * 8);
3283     CGF.Builder.CreateStore(CGF.Builder.CreateAdd(gp_offset, Offset),
3284                             gp_offset_p);
3285   }
3286   if (neededSSE) {
3287     llvm::Value *Offset = llvm::ConstantInt::get(CGF.Int32Ty, neededSSE * 16);
3288     CGF.Builder.CreateStore(CGF.Builder.CreateAdd(fp_offset, Offset),
3289                             fp_offset_p);
3290   }
3291   CGF.EmitBranch(ContBlock);
3292 
3293   // Emit code to load the value if it was passed in memory.
3294 
3295   CGF.EmitBlock(InMemBlock);
3296   Address MemAddr = EmitX86_64VAArgFromMemory(CGF, VAListAddr, Ty);
3297 
3298   // Return the appropriate result.
3299 
3300   CGF.EmitBlock(ContBlock);
3301   Address ResAddr = emitMergePHI(CGF, RegAddr, InRegBlock, MemAddr, InMemBlock,
3302                                  "vaarg.addr");
3303   return ResAddr;
3304 }
3305 
3306 Address X86_64ABIInfo::EmitMSVAArg(CodeGenFunction &CGF, Address VAListAddr,
3307                                    QualType Ty) const {
3308   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*indirect*/ false,
3309                           CGF.getContext().getTypeInfoInChars(Ty),
3310                           CharUnits::fromQuantity(8),
3311                           /*allowHigherAlign*/ false);
3312 }
3313 
3314 ABIArgInfo WinX86_64ABIInfo::classify(QualType Ty, unsigned &FreeSSERegs,
3315                                       bool IsReturnType) const {
3316 
3317   if (Ty->isVoidType())
3318     return ABIArgInfo::getIgnore();
3319 
3320   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
3321     Ty = EnumTy->getDecl()->getIntegerType();
3322 
3323   TypeInfo Info = getContext().getTypeInfo(Ty);
3324   uint64_t Width = Info.Width;
3325   CharUnits Align = getContext().toCharUnitsFromBits(Info.Align);
3326 
3327   const RecordType *RT = Ty->getAs<RecordType>();
3328   if (RT) {
3329     if (!IsReturnType) {
3330       if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(RT, getCXXABI()))
3331         return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
3332     }
3333 
3334     if (RT->getDecl()->hasFlexibleArrayMember())
3335       return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
3336 
3337   }
3338 
3339   // vectorcall adds the concept of a homogenous vector aggregate, similar to
3340   // other targets.
3341   const Type *Base = nullptr;
3342   uint64_t NumElts = 0;
3343   if (FreeSSERegs && isHomogeneousAggregate(Ty, Base, NumElts)) {
3344     if (FreeSSERegs >= NumElts) {
3345       FreeSSERegs -= NumElts;
3346       if (IsReturnType || Ty->isBuiltinType() || Ty->isVectorType())
3347         return ABIArgInfo::getDirect();
3348       return ABIArgInfo::getExpand();
3349     }
3350     return ABIArgInfo::getIndirect(Align, /*ByVal=*/false);
3351   }
3352 
3353 
3354   if (Ty->isMemberPointerType()) {
3355     // If the member pointer is represented by an LLVM int or ptr, pass it
3356     // directly.
3357     llvm::Type *LLTy = CGT.ConvertType(Ty);
3358     if (LLTy->isPointerTy() || LLTy->isIntegerTy())
3359       return ABIArgInfo::getDirect();
3360   }
3361 
3362   if (RT || Ty->isAnyComplexType() || Ty->isMemberPointerType()) {
3363     // MS x64 ABI requirement: "Any argument that doesn't fit in 8 bytes, or is
3364     // not 1, 2, 4, or 8 bytes, must be passed by reference."
3365     if (Width > 64 || !llvm::isPowerOf2_64(Width))
3366       return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
3367 
3368     // Otherwise, coerce it to a small integer.
3369     return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Width));
3370   }
3371 
3372   // Bool type is always extended to the ABI, other builtin types are not
3373   // extended.
3374   const BuiltinType *BT = Ty->getAs<BuiltinType>();
3375   if (BT && BT->getKind() == BuiltinType::Bool)
3376     return ABIArgInfo::getExtend();
3377 
3378   // Mingw64 GCC uses the old 80 bit extended precision floating point unit. It
3379   // passes them indirectly through memory.
3380   if (IsMingw64 && BT && BT->getKind() == BuiltinType::LongDouble) {
3381     const llvm::fltSemantics *LDF = &getTarget().getLongDoubleFormat();
3382     if (LDF == &llvm::APFloat::x87DoubleExtended)
3383       return ABIArgInfo::getIndirect(Align, /*ByVal=*/false);
3384   }
3385 
3386   return ABIArgInfo::getDirect();
3387 }
3388 
3389 void WinX86_64ABIInfo::computeInfo(CGFunctionInfo &FI) const {
3390   bool IsVectorCall =
3391       FI.getCallingConvention() == llvm::CallingConv::X86_VectorCall;
3392 
3393   // We can use up to 4 SSE return registers with vectorcall.
3394   unsigned FreeSSERegs = IsVectorCall ? 4 : 0;
3395   if (!getCXXABI().classifyReturnType(FI))
3396     FI.getReturnInfo() = classify(FI.getReturnType(), FreeSSERegs, true);
3397 
3398   // We can use up to 6 SSE register parameters with vectorcall.
3399   FreeSSERegs = IsVectorCall ? 6 : 0;
3400   for (auto &I : FI.arguments())
3401     I.info = classify(I.type, FreeSSERegs, false);
3402 }
3403 
3404 Address WinX86_64ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
3405                                     QualType Ty) const {
3406   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*indirect*/ false,
3407                           CGF.getContext().getTypeInfoInChars(Ty),
3408                           CharUnits::fromQuantity(8),
3409                           /*allowHigherAlign*/ false);
3410 }
3411 
3412 // PowerPC-32
3413 namespace {
3414 /// PPC32_SVR4_ABIInfo - The 32-bit PowerPC ELF (SVR4) ABI information.
3415 class PPC32_SVR4_ABIInfo : public DefaultABIInfo {
3416 public:
3417   PPC32_SVR4_ABIInfo(CodeGen::CodeGenTypes &CGT) : DefaultABIInfo(CGT) {}
3418 
3419   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
3420                     QualType Ty) const override;
3421 };
3422 
3423 class PPC32TargetCodeGenInfo : public TargetCodeGenInfo {
3424 public:
3425   PPC32TargetCodeGenInfo(CodeGenTypes &CGT)
3426       : TargetCodeGenInfo(new PPC32_SVR4_ABIInfo(CGT)) {}
3427 
3428   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
3429     // This is recovered from gcc output.
3430     return 1; // r1 is the dedicated stack pointer
3431   }
3432 
3433   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
3434                                llvm::Value *Address) const override;
3435 };
3436 
3437 }
3438 
3439 Address PPC32_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAList,
3440                                       QualType Ty) const {
3441   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
3442     // TODO: Implement this. For now ignore.
3443     (void)CTy;
3444     return Address::invalid();
3445   }
3446 
3447   // struct __va_list_tag {
3448   //   unsigned char gpr;
3449   //   unsigned char fpr;
3450   //   unsigned short reserved;
3451   //   void *overflow_arg_area;
3452   //   void *reg_save_area;
3453   // };
3454 
3455   bool isI64 = Ty->isIntegerType() && getContext().getTypeSize(Ty) == 64;
3456   bool isInt =
3457       Ty->isIntegerType() || Ty->isPointerType() || Ty->isAggregateType();
3458 
3459   // All aggregates are passed indirectly?  That doesn't seem consistent
3460   // with the argument-lowering code.
3461   bool isIndirect = Ty->isAggregateType();
3462 
3463   CGBuilderTy &Builder = CGF.Builder;
3464 
3465   // The calling convention either uses 1-2 GPRs or 1 FPR.
3466   Address NumRegsAddr = Address::invalid();
3467   if (isInt) {
3468     NumRegsAddr = Builder.CreateStructGEP(VAList, 0, CharUnits::Zero(), "gpr");
3469   } else {
3470     NumRegsAddr = Builder.CreateStructGEP(VAList, 1, CharUnits::One(), "fpr");
3471   }
3472 
3473   llvm::Value *NumRegs = Builder.CreateLoad(NumRegsAddr, "numUsedRegs");
3474 
3475   // "Align" the register count when TY is i64.
3476   if (isI64) {
3477     NumRegs = Builder.CreateAdd(NumRegs, Builder.getInt8(1));
3478     NumRegs = Builder.CreateAnd(NumRegs, Builder.getInt8((uint8_t) ~1U));
3479   }
3480 
3481   llvm::Value *CC =
3482       Builder.CreateICmpULT(NumRegs, Builder.getInt8(8), "cond");
3483 
3484   llvm::BasicBlock *UsingRegs = CGF.createBasicBlock("using_regs");
3485   llvm::BasicBlock *UsingOverflow = CGF.createBasicBlock("using_overflow");
3486   llvm::BasicBlock *Cont = CGF.createBasicBlock("cont");
3487 
3488   Builder.CreateCondBr(CC, UsingRegs, UsingOverflow);
3489 
3490   llvm::Type *DirectTy = CGF.ConvertType(Ty);
3491   if (isIndirect) DirectTy = DirectTy->getPointerTo(0);
3492 
3493   // Case 1: consume registers.
3494   Address RegAddr = Address::invalid();
3495   {
3496     CGF.EmitBlock(UsingRegs);
3497 
3498     Address RegSaveAreaPtr =
3499       Builder.CreateStructGEP(VAList, 4, CharUnits::fromQuantity(8));
3500     RegAddr = Address(Builder.CreateLoad(RegSaveAreaPtr),
3501                       CharUnits::fromQuantity(8));
3502     assert(RegAddr.getElementType() == CGF.Int8Ty);
3503 
3504     // Floating-point registers start after the general-purpose registers.
3505     if (!isInt) {
3506       RegAddr = Builder.CreateConstInBoundsByteGEP(RegAddr,
3507                                                    CharUnits::fromQuantity(32));
3508     }
3509 
3510     // Get the address of the saved value by scaling the number of
3511     // registers we've used by the number of
3512     CharUnits RegSize = CharUnits::fromQuantity(isInt ? 4 : 8);
3513     llvm::Value *RegOffset =
3514       Builder.CreateMul(NumRegs, Builder.getInt8(RegSize.getQuantity()));
3515     RegAddr = Address(Builder.CreateInBoundsGEP(CGF.Int8Ty,
3516                                             RegAddr.getPointer(), RegOffset),
3517                       RegAddr.getAlignment().alignmentOfArrayElement(RegSize));
3518     RegAddr = Builder.CreateElementBitCast(RegAddr, DirectTy);
3519 
3520     // Increase the used-register count.
3521     NumRegs = Builder.CreateAdd(NumRegs, Builder.getInt8(isI64 ? 2 : 1));
3522     Builder.CreateStore(NumRegs, NumRegsAddr);
3523 
3524     CGF.EmitBranch(Cont);
3525   }
3526 
3527   // Case 2: consume space in the overflow area.
3528   Address MemAddr = Address::invalid();
3529   {
3530     CGF.EmitBlock(UsingOverflow);
3531 
3532     // Everything in the overflow area is rounded up to a size of at least 4.
3533     CharUnits OverflowAreaAlign = CharUnits::fromQuantity(4);
3534 
3535     CharUnits Size;
3536     if (!isIndirect) {
3537       auto TypeInfo = CGF.getContext().getTypeInfoInChars(Ty);
3538       Size = TypeInfo.first.RoundUpToAlignment(OverflowAreaAlign);
3539     } else {
3540       Size = CGF.getPointerSize();
3541     }
3542 
3543     Address OverflowAreaAddr =
3544       Builder.CreateStructGEP(VAList, 3, CharUnits::fromQuantity(4));
3545     Address OverflowArea(Builder.CreateLoad(OverflowAreaAddr, "argp.cur"),
3546                          OverflowAreaAlign);
3547     // Round up address of argument to alignment
3548     CharUnits Align = CGF.getContext().getTypeAlignInChars(Ty);
3549     if (Align > OverflowAreaAlign) {
3550       llvm::Value *Ptr = OverflowArea.getPointer();
3551       OverflowArea = Address(emitRoundPointerUpToAlignment(CGF, Ptr, Align),
3552                                                            Align);
3553     }
3554 
3555     MemAddr = Builder.CreateElementBitCast(OverflowArea, DirectTy);
3556 
3557     // Increase the overflow area.
3558     OverflowArea = Builder.CreateConstInBoundsByteGEP(OverflowArea, Size);
3559     Builder.CreateStore(OverflowArea.getPointer(), OverflowAreaAddr);
3560     CGF.EmitBranch(Cont);
3561   }
3562 
3563   CGF.EmitBlock(Cont);
3564 
3565   // Merge the cases with a phi.
3566   Address Result = emitMergePHI(CGF, RegAddr, UsingRegs, MemAddr, UsingOverflow,
3567                                 "vaarg.addr");
3568 
3569   // Load the pointer if the argument was passed indirectly.
3570   if (isIndirect) {
3571     Result = Address(Builder.CreateLoad(Result, "aggr"),
3572                      getContext().getTypeAlignInChars(Ty));
3573   }
3574 
3575   return Result;
3576 }
3577 
3578 bool
3579 PPC32TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
3580                                                 llvm::Value *Address) const {
3581   // This is calculated from the LLVM and GCC tables and verified
3582   // against gcc output.  AFAIK all ABIs use the same encoding.
3583 
3584   CodeGen::CGBuilderTy &Builder = CGF.Builder;
3585 
3586   llvm::IntegerType *i8 = CGF.Int8Ty;
3587   llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
3588   llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
3589   llvm::Value *Sixteen8 = llvm::ConstantInt::get(i8, 16);
3590 
3591   // 0-31: r0-31, the 4-byte general-purpose registers
3592   AssignToArrayRange(Builder, Address, Four8, 0, 31);
3593 
3594   // 32-63: fp0-31, the 8-byte floating-point registers
3595   AssignToArrayRange(Builder, Address, Eight8, 32, 63);
3596 
3597   // 64-76 are various 4-byte special-purpose registers:
3598   // 64: mq
3599   // 65: lr
3600   // 66: ctr
3601   // 67: ap
3602   // 68-75 cr0-7
3603   // 76: xer
3604   AssignToArrayRange(Builder, Address, Four8, 64, 76);
3605 
3606   // 77-108: v0-31, the 16-byte vector registers
3607   AssignToArrayRange(Builder, Address, Sixteen8, 77, 108);
3608 
3609   // 109: vrsave
3610   // 110: vscr
3611   // 111: spe_acc
3612   // 112: spefscr
3613   // 113: sfp
3614   AssignToArrayRange(Builder, Address, Four8, 109, 113);
3615 
3616   return false;
3617 }
3618 
3619 // PowerPC-64
3620 
3621 namespace {
3622 /// PPC64_SVR4_ABIInfo - The 64-bit PowerPC ELF (SVR4) ABI information.
3623 class PPC64_SVR4_ABIInfo : public DefaultABIInfo {
3624 public:
3625   enum ABIKind {
3626     ELFv1 = 0,
3627     ELFv2
3628   };
3629 
3630 private:
3631   static const unsigned GPRBits = 64;
3632   ABIKind Kind;
3633   bool HasQPX;
3634 
3635   // A vector of float or double will be promoted to <4 x f32> or <4 x f64> and
3636   // will be passed in a QPX register.
3637   bool IsQPXVectorTy(const Type *Ty) const {
3638     if (!HasQPX)
3639       return false;
3640 
3641     if (const VectorType *VT = Ty->getAs<VectorType>()) {
3642       unsigned NumElements = VT->getNumElements();
3643       if (NumElements == 1)
3644         return false;
3645 
3646       if (VT->getElementType()->isSpecificBuiltinType(BuiltinType::Double)) {
3647         if (getContext().getTypeSize(Ty) <= 256)
3648           return true;
3649       } else if (VT->getElementType()->
3650                    isSpecificBuiltinType(BuiltinType::Float)) {
3651         if (getContext().getTypeSize(Ty) <= 128)
3652           return true;
3653       }
3654     }
3655 
3656     return false;
3657   }
3658 
3659   bool IsQPXVectorTy(QualType Ty) const {
3660     return IsQPXVectorTy(Ty.getTypePtr());
3661   }
3662 
3663 public:
3664   PPC64_SVR4_ABIInfo(CodeGen::CodeGenTypes &CGT, ABIKind Kind, bool HasQPX)
3665     : DefaultABIInfo(CGT), Kind(Kind), HasQPX(HasQPX) {}
3666 
3667   bool isPromotableTypeForABI(QualType Ty) const;
3668   CharUnits getParamTypeAlignment(QualType Ty) const;
3669 
3670   ABIArgInfo classifyReturnType(QualType RetTy) const;
3671   ABIArgInfo classifyArgumentType(QualType Ty) const;
3672 
3673   bool isHomogeneousAggregateBaseType(QualType Ty) const override;
3674   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
3675                                          uint64_t Members) const override;
3676 
3677   // TODO: We can add more logic to computeInfo to improve performance.
3678   // Example: For aggregate arguments that fit in a register, we could
3679   // use getDirectInReg (as is done below for structs containing a single
3680   // floating-point value) to avoid pushing them to memory on function
3681   // entry.  This would require changing the logic in PPCISelLowering
3682   // when lowering the parameters in the caller and args in the callee.
3683   void computeInfo(CGFunctionInfo &FI) const override {
3684     if (!getCXXABI().classifyReturnType(FI))
3685       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
3686     for (auto &I : FI.arguments()) {
3687       // We rely on the default argument classification for the most part.
3688       // One exception:  An aggregate containing a single floating-point
3689       // or vector item must be passed in a register if one is available.
3690       const Type *T = isSingleElementStruct(I.type, getContext());
3691       if (T) {
3692         const BuiltinType *BT = T->getAs<BuiltinType>();
3693         if (IsQPXVectorTy(T) ||
3694             (T->isVectorType() && getContext().getTypeSize(T) == 128) ||
3695             (BT && BT->isFloatingPoint())) {
3696           QualType QT(T, 0);
3697           I.info = ABIArgInfo::getDirectInReg(CGT.ConvertType(QT));
3698           continue;
3699         }
3700       }
3701       I.info = classifyArgumentType(I.type);
3702     }
3703   }
3704 
3705   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
3706                     QualType Ty) const override;
3707 };
3708 
3709 class PPC64_SVR4_TargetCodeGenInfo : public TargetCodeGenInfo {
3710 
3711 public:
3712   PPC64_SVR4_TargetCodeGenInfo(CodeGenTypes &CGT,
3713                                PPC64_SVR4_ABIInfo::ABIKind Kind, bool HasQPX)
3714       : TargetCodeGenInfo(new PPC64_SVR4_ABIInfo(CGT, Kind, HasQPX)) {}
3715 
3716   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
3717     // This is recovered from gcc output.
3718     return 1; // r1 is the dedicated stack pointer
3719   }
3720 
3721   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
3722                                llvm::Value *Address) const override;
3723 };
3724 
3725 class PPC64TargetCodeGenInfo : public DefaultTargetCodeGenInfo {
3726 public:
3727   PPC64TargetCodeGenInfo(CodeGenTypes &CGT) : DefaultTargetCodeGenInfo(CGT) {}
3728 
3729   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
3730     // This is recovered from gcc output.
3731     return 1; // r1 is the dedicated stack pointer
3732   }
3733 
3734   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
3735                                llvm::Value *Address) const override;
3736 };
3737 
3738 }
3739 
3740 // Return true if the ABI requires Ty to be passed sign- or zero-
3741 // extended to 64 bits.
3742 bool
3743 PPC64_SVR4_ABIInfo::isPromotableTypeForABI(QualType Ty) const {
3744   // Treat an enum type as its underlying type.
3745   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
3746     Ty = EnumTy->getDecl()->getIntegerType();
3747 
3748   // Promotable integer types are required to be promoted by the ABI.
3749   if (Ty->isPromotableIntegerType())
3750     return true;
3751 
3752   // In addition to the usual promotable integer types, we also need to
3753   // extend all 32-bit types, since the ABI requires promotion to 64 bits.
3754   if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
3755     switch (BT->getKind()) {
3756     case BuiltinType::Int:
3757     case BuiltinType::UInt:
3758       return true;
3759     default:
3760       break;
3761     }
3762 
3763   return false;
3764 }
3765 
3766 /// isAlignedParamType - Determine whether a type requires 16-byte or
3767 /// higher alignment in the parameter area.  Always returns at least 8.
3768 CharUnits PPC64_SVR4_ABIInfo::getParamTypeAlignment(QualType Ty) const {
3769   // Complex types are passed just like their elements.
3770   if (const ComplexType *CTy = Ty->getAs<ComplexType>())
3771     Ty = CTy->getElementType();
3772 
3773   // Only vector types of size 16 bytes need alignment (larger types are
3774   // passed via reference, smaller types are not aligned).
3775   if (IsQPXVectorTy(Ty)) {
3776     if (getContext().getTypeSize(Ty) > 128)
3777       return CharUnits::fromQuantity(32);
3778 
3779     return CharUnits::fromQuantity(16);
3780   } else if (Ty->isVectorType()) {
3781     return CharUnits::fromQuantity(getContext().getTypeSize(Ty) == 128 ? 16 : 8);
3782   }
3783 
3784   // For single-element float/vector structs, we consider the whole type
3785   // to have the same alignment requirements as its single element.
3786   const Type *AlignAsType = nullptr;
3787   const Type *EltType = isSingleElementStruct(Ty, getContext());
3788   if (EltType) {
3789     const BuiltinType *BT = EltType->getAs<BuiltinType>();
3790     if (IsQPXVectorTy(EltType) || (EltType->isVectorType() &&
3791          getContext().getTypeSize(EltType) == 128) ||
3792         (BT && BT->isFloatingPoint()))
3793       AlignAsType = EltType;
3794   }
3795 
3796   // Likewise for ELFv2 homogeneous aggregates.
3797   const Type *Base = nullptr;
3798   uint64_t Members = 0;
3799   if (!AlignAsType && Kind == ELFv2 &&
3800       isAggregateTypeForABI(Ty) && isHomogeneousAggregate(Ty, Base, Members))
3801     AlignAsType = Base;
3802 
3803   // With special case aggregates, only vector base types need alignment.
3804   if (AlignAsType && IsQPXVectorTy(AlignAsType)) {
3805     if (getContext().getTypeSize(AlignAsType) > 128)
3806       return CharUnits::fromQuantity(32);
3807 
3808     return CharUnits::fromQuantity(16);
3809   } else if (AlignAsType) {
3810     return CharUnits::fromQuantity(AlignAsType->isVectorType() ? 16 : 8);
3811   }
3812 
3813   // Otherwise, we only need alignment for any aggregate type that
3814   // has an alignment requirement of >= 16 bytes.
3815   if (isAggregateTypeForABI(Ty) && getContext().getTypeAlign(Ty) >= 128) {
3816     if (HasQPX && getContext().getTypeAlign(Ty) >= 256)
3817       return CharUnits::fromQuantity(32);
3818     return CharUnits::fromQuantity(16);
3819   }
3820 
3821   return CharUnits::fromQuantity(8);
3822 }
3823 
3824 /// isHomogeneousAggregate - Return true if a type is an ELFv2 homogeneous
3825 /// aggregate.  Base is set to the base element type, and Members is set
3826 /// to the number of base elements.
3827 bool ABIInfo::isHomogeneousAggregate(QualType Ty, const Type *&Base,
3828                                      uint64_t &Members) const {
3829   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
3830     uint64_t NElements = AT->getSize().getZExtValue();
3831     if (NElements == 0)
3832       return false;
3833     if (!isHomogeneousAggregate(AT->getElementType(), Base, Members))
3834       return false;
3835     Members *= NElements;
3836   } else if (const RecordType *RT = Ty->getAs<RecordType>()) {
3837     const RecordDecl *RD = RT->getDecl();
3838     if (RD->hasFlexibleArrayMember())
3839       return false;
3840 
3841     Members = 0;
3842 
3843     // If this is a C++ record, check the bases first.
3844     if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) {
3845       for (const auto &I : CXXRD->bases()) {
3846         // Ignore empty records.
3847         if (isEmptyRecord(getContext(), I.getType(), true))
3848           continue;
3849 
3850         uint64_t FldMembers;
3851         if (!isHomogeneousAggregate(I.getType(), Base, FldMembers))
3852           return false;
3853 
3854         Members += FldMembers;
3855       }
3856     }
3857 
3858     for (const auto *FD : RD->fields()) {
3859       // Ignore (non-zero arrays of) empty records.
3860       QualType FT = FD->getType();
3861       while (const ConstantArrayType *AT =
3862              getContext().getAsConstantArrayType(FT)) {
3863         if (AT->getSize().getZExtValue() == 0)
3864           return false;
3865         FT = AT->getElementType();
3866       }
3867       if (isEmptyRecord(getContext(), FT, true))
3868         continue;
3869 
3870       // For compatibility with GCC, ignore empty bitfields in C++ mode.
3871       if (getContext().getLangOpts().CPlusPlus &&
3872           FD->isBitField() && FD->getBitWidthValue(getContext()) == 0)
3873         continue;
3874 
3875       uint64_t FldMembers;
3876       if (!isHomogeneousAggregate(FD->getType(), Base, FldMembers))
3877         return false;
3878 
3879       Members = (RD->isUnion() ?
3880                  std::max(Members, FldMembers) : Members + FldMembers);
3881     }
3882 
3883     if (!Base)
3884       return false;
3885 
3886     // Ensure there is no padding.
3887     if (getContext().getTypeSize(Base) * Members !=
3888         getContext().getTypeSize(Ty))
3889       return false;
3890   } else {
3891     Members = 1;
3892     if (const ComplexType *CT = Ty->getAs<ComplexType>()) {
3893       Members = 2;
3894       Ty = CT->getElementType();
3895     }
3896 
3897     // Most ABIs only support float, double, and some vector type widths.
3898     if (!isHomogeneousAggregateBaseType(Ty))
3899       return false;
3900 
3901     // The base type must be the same for all members.  Types that
3902     // agree in both total size and mode (float vs. vector) are
3903     // treated as being equivalent here.
3904     const Type *TyPtr = Ty.getTypePtr();
3905     if (!Base)
3906       Base = TyPtr;
3907 
3908     if (Base->isVectorType() != TyPtr->isVectorType() ||
3909         getContext().getTypeSize(Base) != getContext().getTypeSize(TyPtr))
3910       return false;
3911   }
3912   return Members > 0 && isHomogeneousAggregateSmallEnough(Base, Members);
3913 }
3914 
3915 bool PPC64_SVR4_ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
3916   // Homogeneous aggregates for ELFv2 must have base types of float,
3917   // double, long double, or 128-bit vectors.
3918   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
3919     if (BT->getKind() == BuiltinType::Float ||
3920         BT->getKind() == BuiltinType::Double ||
3921         BT->getKind() == BuiltinType::LongDouble)
3922       return true;
3923   }
3924   if (const VectorType *VT = Ty->getAs<VectorType>()) {
3925     if (getContext().getTypeSize(VT) == 128 || IsQPXVectorTy(Ty))
3926       return true;
3927   }
3928   return false;
3929 }
3930 
3931 bool PPC64_SVR4_ABIInfo::isHomogeneousAggregateSmallEnough(
3932     const Type *Base, uint64_t Members) const {
3933   // Vector types require one register, floating point types require one
3934   // or two registers depending on their size.
3935   uint32_t NumRegs =
3936       Base->isVectorType() ? 1 : (getContext().getTypeSize(Base) + 63) / 64;
3937 
3938   // Homogeneous Aggregates may occupy at most 8 registers.
3939   return Members * NumRegs <= 8;
3940 }
3941 
3942 ABIArgInfo
3943 PPC64_SVR4_ABIInfo::classifyArgumentType(QualType Ty) const {
3944   Ty = useFirstFieldIfTransparentUnion(Ty);
3945 
3946   if (Ty->isAnyComplexType())
3947     return ABIArgInfo::getDirect();
3948 
3949   // Non-Altivec vector types are passed in GPRs (smaller than 16 bytes)
3950   // or via reference (larger than 16 bytes).
3951   if (Ty->isVectorType() && !IsQPXVectorTy(Ty)) {
3952     uint64_t Size = getContext().getTypeSize(Ty);
3953     if (Size > 128)
3954       return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
3955     else if (Size < 128) {
3956       llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
3957       return ABIArgInfo::getDirect(CoerceTy);
3958     }
3959   }
3960 
3961   if (isAggregateTypeForABI(Ty)) {
3962     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
3963       return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
3964 
3965     uint64_t ABIAlign = getParamTypeAlignment(Ty).getQuantity();
3966     uint64_t TyAlign = getContext().getTypeAlignInChars(Ty).getQuantity();
3967 
3968     // ELFv2 homogeneous aggregates are passed as array types.
3969     const Type *Base = nullptr;
3970     uint64_t Members = 0;
3971     if (Kind == ELFv2 &&
3972         isHomogeneousAggregate(Ty, Base, Members)) {
3973       llvm::Type *BaseTy = CGT.ConvertType(QualType(Base, 0));
3974       llvm::Type *CoerceTy = llvm::ArrayType::get(BaseTy, Members);
3975       return ABIArgInfo::getDirect(CoerceTy);
3976     }
3977 
3978     // If an aggregate may end up fully in registers, we do not
3979     // use the ByVal method, but pass the aggregate as array.
3980     // This is usually beneficial since we avoid forcing the
3981     // back-end to store the argument to memory.
3982     uint64_t Bits = getContext().getTypeSize(Ty);
3983     if (Bits > 0 && Bits <= 8 * GPRBits) {
3984       llvm::Type *CoerceTy;
3985 
3986       // Types up to 8 bytes are passed as integer type (which will be
3987       // properly aligned in the argument save area doubleword).
3988       if (Bits <= GPRBits)
3989         CoerceTy = llvm::IntegerType::get(getVMContext(),
3990                                           llvm::RoundUpToAlignment(Bits, 8));
3991       // Larger types are passed as arrays, with the base type selected
3992       // according to the required alignment in the save area.
3993       else {
3994         uint64_t RegBits = ABIAlign * 8;
3995         uint64_t NumRegs = llvm::RoundUpToAlignment(Bits, RegBits) / RegBits;
3996         llvm::Type *RegTy = llvm::IntegerType::get(getVMContext(), RegBits);
3997         CoerceTy = llvm::ArrayType::get(RegTy, NumRegs);
3998       }
3999 
4000       return ABIArgInfo::getDirect(CoerceTy);
4001     }
4002 
4003     // All other aggregates are passed ByVal.
4004     return ABIArgInfo::getIndirect(CharUnits::fromQuantity(ABIAlign),
4005                                    /*ByVal=*/true,
4006                                    /*Realign=*/TyAlign > ABIAlign);
4007   }
4008 
4009   return (isPromotableTypeForABI(Ty) ?
4010           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
4011 }
4012 
4013 ABIArgInfo
4014 PPC64_SVR4_ABIInfo::classifyReturnType(QualType RetTy) const {
4015   if (RetTy->isVoidType())
4016     return ABIArgInfo::getIgnore();
4017 
4018   if (RetTy->isAnyComplexType())
4019     return ABIArgInfo::getDirect();
4020 
4021   // Non-Altivec vector types are returned in GPRs (smaller than 16 bytes)
4022   // or via reference (larger than 16 bytes).
4023   if (RetTy->isVectorType() && !IsQPXVectorTy(RetTy)) {
4024     uint64_t Size = getContext().getTypeSize(RetTy);
4025     if (Size > 128)
4026       return getNaturalAlignIndirect(RetTy);
4027     else if (Size < 128) {
4028       llvm::Type *CoerceTy = llvm::IntegerType::get(getVMContext(), Size);
4029       return ABIArgInfo::getDirect(CoerceTy);
4030     }
4031   }
4032 
4033   if (isAggregateTypeForABI(RetTy)) {
4034     // ELFv2 homogeneous aggregates are returned as array types.
4035     const Type *Base = nullptr;
4036     uint64_t Members = 0;
4037     if (Kind == ELFv2 &&
4038         isHomogeneousAggregate(RetTy, Base, Members)) {
4039       llvm::Type *BaseTy = CGT.ConvertType(QualType(Base, 0));
4040       llvm::Type *CoerceTy = llvm::ArrayType::get(BaseTy, Members);
4041       return ABIArgInfo::getDirect(CoerceTy);
4042     }
4043 
4044     // ELFv2 small aggregates are returned in up to two registers.
4045     uint64_t Bits = getContext().getTypeSize(RetTy);
4046     if (Kind == ELFv2 && Bits <= 2 * GPRBits) {
4047       if (Bits == 0)
4048         return ABIArgInfo::getIgnore();
4049 
4050       llvm::Type *CoerceTy;
4051       if (Bits > GPRBits) {
4052         CoerceTy = llvm::IntegerType::get(getVMContext(), GPRBits);
4053         CoerceTy = llvm::StructType::get(CoerceTy, CoerceTy, nullptr);
4054       } else
4055         CoerceTy = llvm::IntegerType::get(getVMContext(),
4056                                           llvm::RoundUpToAlignment(Bits, 8));
4057       return ABIArgInfo::getDirect(CoerceTy);
4058     }
4059 
4060     // All other aggregates are returned indirectly.
4061     return getNaturalAlignIndirect(RetTy);
4062   }
4063 
4064   return (isPromotableTypeForABI(RetTy) ?
4065           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
4066 }
4067 
4068 // Based on ARMABIInfo::EmitVAArg, adjusted for 64-bit machine.
4069 Address PPC64_SVR4_ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
4070                                       QualType Ty) const {
4071   auto TypeInfo = getContext().getTypeInfoInChars(Ty);
4072   TypeInfo.second = getParamTypeAlignment(Ty);
4073 
4074   CharUnits SlotSize = CharUnits::fromQuantity(8);
4075 
4076   // If we have a complex type and the base type is smaller than 8 bytes,
4077   // the ABI calls for the real and imaginary parts to be right-adjusted
4078   // in separate doublewords.  However, Clang expects us to produce a
4079   // pointer to a structure with the two parts packed tightly.  So generate
4080   // loads of the real and imaginary parts relative to the va_list pointer,
4081   // and store them to a temporary structure.
4082   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
4083     CharUnits EltSize = TypeInfo.first / 2;
4084     if (EltSize < SlotSize) {
4085       Address Addr = emitVoidPtrDirectVAArg(CGF, VAListAddr, CGF.Int8Ty,
4086                                             SlotSize * 2, SlotSize,
4087                                             SlotSize, /*AllowHigher*/ true);
4088 
4089       Address RealAddr = Addr;
4090       Address ImagAddr = RealAddr;
4091       if (CGF.CGM.getDataLayout().isBigEndian()) {
4092         RealAddr = CGF.Builder.CreateConstInBoundsByteGEP(RealAddr,
4093                                                           SlotSize - EltSize);
4094         ImagAddr = CGF.Builder.CreateConstInBoundsByteGEP(ImagAddr,
4095                                                       2 * SlotSize - EltSize);
4096       } else {
4097         ImagAddr = CGF.Builder.CreateConstInBoundsByteGEP(RealAddr, SlotSize);
4098       }
4099 
4100       llvm::Type *EltTy = CGF.ConvertTypeForMem(CTy->getElementType());
4101       RealAddr = CGF.Builder.CreateElementBitCast(RealAddr, EltTy);
4102       ImagAddr = CGF.Builder.CreateElementBitCast(ImagAddr, EltTy);
4103       llvm::Value *Real = CGF.Builder.CreateLoad(RealAddr, ".vareal");
4104       llvm::Value *Imag = CGF.Builder.CreateLoad(ImagAddr, ".vaimag");
4105 
4106       Address Temp = CGF.CreateMemTemp(Ty, "vacplx");
4107       CGF.EmitStoreOfComplex({Real, Imag}, CGF.MakeAddrLValue(Temp, Ty),
4108                              /*init*/ true);
4109       return Temp;
4110     }
4111   }
4112 
4113   // Otherwise, just use the general rule.
4114   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*Indirect*/ false,
4115                           TypeInfo, SlotSize, /*AllowHigher*/ true);
4116 }
4117 
4118 static bool
4119 PPC64_initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
4120                               llvm::Value *Address) {
4121   // This is calculated from the LLVM and GCC tables and verified
4122   // against gcc output.  AFAIK all ABIs use the same encoding.
4123 
4124   CodeGen::CGBuilderTy &Builder = CGF.Builder;
4125 
4126   llvm::IntegerType *i8 = CGF.Int8Ty;
4127   llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
4128   llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
4129   llvm::Value *Sixteen8 = llvm::ConstantInt::get(i8, 16);
4130 
4131   // 0-31: r0-31, the 8-byte general-purpose registers
4132   AssignToArrayRange(Builder, Address, Eight8, 0, 31);
4133 
4134   // 32-63: fp0-31, the 8-byte floating-point registers
4135   AssignToArrayRange(Builder, Address, Eight8, 32, 63);
4136 
4137   // 64-76 are various 4-byte special-purpose registers:
4138   // 64: mq
4139   // 65: lr
4140   // 66: ctr
4141   // 67: ap
4142   // 68-75 cr0-7
4143   // 76: xer
4144   AssignToArrayRange(Builder, Address, Four8, 64, 76);
4145 
4146   // 77-108: v0-31, the 16-byte vector registers
4147   AssignToArrayRange(Builder, Address, Sixteen8, 77, 108);
4148 
4149   // 109: vrsave
4150   // 110: vscr
4151   // 111: spe_acc
4152   // 112: spefscr
4153   // 113: sfp
4154   AssignToArrayRange(Builder, Address, Four8, 109, 113);
4155 
4156   return false;
4157 }
4158 
4159 bool
4160 PPC64_SVR4_TargetCodeGenInfo::initDwarfEHRegSizeTable(
4161   CodeGen::CodeGenFunction &CGF,
4162   llvm::Value *Address) const {
4163 
4164   return PPC64_initDwarfEHRegSizeTable(CGF, Address);
4165 }
4166 
4167 bool
4168 PPC64TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
4169                                                 llvm::Value *Address) const {
4170 
4171   return PPC64_initDwarfEHRegSizeTable(CGF, Address);
4172 }
4173 
4174 //===----------------------------------------------------------------------===//
4175 // AArch64 ABI Implementation
4176 //===----------------------------------------------------------------------===//
4177 
4178 namespace {
4179 
4180 class AArch64ABIInfo : public ABIInfo {
4181 public:
4182   enum ABIKind {
4183     AAPCS = 0,
4184     DarwinPCS
4185   };
4186 
4187 private:
4188   ABIKind Kind;
4189 
4190 public:
4191   AArch64ABIInfo(CodeGenTypes &CGT, ABIKind Kind) : ABIInfo(CGT), Kind(Kind) {}
4192 
4193 private:
4194   ABIKind getABIKind() const { return Kind; }
4195   bool isDarwinPCS() const { return Kind == DarwinPCS; }
4196 
4197   ABIArgInfo classifyReturnType(QualType RetTy) const;
4198   ABIArgInfo classifyArgumentType(QualType RetTy) const;
4199   bool isHomogeneousAggregateBaseType(QualType Ty) const override;
4200   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
4201                                          uint64_t Members) const override;
4202 
4203   bool isIllegalVectorType(QualType Ty) const;
4204 
4205   void computeInfo(CGFunctionInfo &FI) const override {
4206     if (!getCXXABI().classifyReturnType(FI))
4207       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
4208 
4209     for (auto &it : FI.arguments())
4210       it.info = classifyArgumentType(it.type);
4211   }
4212 
4213   Address EmitDarwinVAArg(Address VAListAddr, QualType Ty,
4214                           CodeGenFunction &CGF) const;
4215 
4216   Address EmitAAPCSVAArg(Address VAListAddr, QualType Ty,
4217                          CodeGenFunction &CGF) const;
4218 
4219   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
4220                     QualType Ty) const override {
4221     return isDarwinPCS() ? EmitDarwinVAArg(VAListAddr, Ty, CGF)
4222                          : EmitAAPCSVAArg(VAListAddr, Ty, CGF);
4223   }
4224 };
4225 
4226 class AArch64TargetCodeGenInfo : public TargetCodeGenInfo {
4227 public:
4228   AArch64TargetCodeGenInfo(CodeGenTypes &CGT, AArch64ABIInfo::ABIKind Kind)
4229       : TargetCodeGenInfo(new AArch64ABIInfo(CGT, Kind)) {}
4230 
4231   StringRef getARCRetainAutoreleasedReturnValueMarker() const override {
4232     return "mov\tfp, fp\t\t; marker for objc_retainAutoreleaseReturnValue";
4233   }
4234 
4235   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
4236     return 31;
4237   }
4238 
4239   bool doesReturnSlotInterfereWithArgs() const override { return false; }
4240 };
4241 }
4242 
4243 ABIArgInfo AArch64ABIInfo::classifyArgumentType(QualType Ty) const {
4244   Ty = useFirstFieldIfTransparentUnion(Ty);
4245 
4246   // Handle illegal vector types here.
4247   if (isIllegalVectorType(Ty)) {
4248     uint64_t Size = getContext().getTypeSize(Ty);
4249     if (Size <= 32) {
4250       llvm::Type *ResType = llvm::Type::getInt32Ty(getVMContext());
4251       return ABIArgInfo::getDirect(ResType);
4252     }
4253     if (Size == 64) {
4254       llvm::Type *ResType =
4255           llvm::VectorType::get(llvm::Type::getInt32Ty(getVMContext()), 2);
4256       return ABIArgInfo::getDirect(ResType);
4257     }
4258     if (Size == 128) {
4259       llvm::Type *ResType =
4260           llvm::VectorType::get(llvm::Type::getInt32Ty(getVMContext()), 4);
4261       return ABIArgInfo::getDirect(ResType);
4262     }
4263     return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
4264   }
4265 
4266   if (!isAggregateTypeForABI(Ty)) {
4267     // Treat an enum type as its underlying type.
4268     if (const EnumType *EnumTy = Ty->getAs<EnumType>())
4269       Ty = EnumTy->getDecl()->getIntegerType();
4270 
4271     return (Ty->isPromotableIntegerType() && isDarwinPCS()
4272                 ? ABIArgInfo::getExtend()
4273                 : ABIArgInfo::getDirect());
4274   }
4275 
4276   // Structures with either a non-trivial destructor or a non-trivial
4277   // copy constructor are always indirect.
4278   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI())) {
4279     return getNaturalAlignIndirect(Ty, /*ByVal=*/RAA ==
4280                                      CGCXXABI::RAA_DirectInMemory);
4281   }
4282 
4283   // Empty records are always ignored on Darwin, but actually passed in C++ mode
4284   // elsewhere for GNU compatibility.
4285   if (isEmptyRecord(getContext(), Ty, true)) {
4286     if (!getContext().getLangOpts().CPlusPlus || isDarwinPCS())
4287       return ABIArgInfo::getIgnore();
4288 
4289     return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
4290   }
4291 
4292   // Homogeneous Floating-point Aggregates (HFAs) need to be expanded.
4293   const Type *Base = nullptr;
4294   uint64_t Members = 0;
4295   if (isHomogeneousAggregate(Ty, Base, Members)) {
4296     return ABIArgInfo::getDirect(
4297         llvm::ArrayType::get(CGT.ConvertType(QualType(Base, 0)), Members));
4298   }
4299 
4300   // Aggregates <= 16 bytes are passed directly in registers or on the stack.
4301   uint64_t Size = getContext().getTypeSize(Ty);
4302   if (Size <= 128) {
4303     unsigned Alignment = getContext().getTypeAlign(Ty);
4304     Size = 64 * ((Size + 63) / 64); // round up to multiple of 8 bytes
4305 
4306     // We use a pair of i64 for 16-byte aggregate with 8-byte alignment.
4307     // For aggregates with 16-byte alignment, we use i128.
4308     if (Alignment < 128 && Size == 128) {
4309       llvm::Type *BaseTy = llvm::Type::getInt64Ty(getVMContext());
4310       return ABIArgInfo::getDirect(llvm::ArrayType::get(BaseTy, Size / 64));
4311     }
4312     return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size));
4313   }
4314 
4315   return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
4316 }
4317 
4318 ABIArgInfo AArch64ABIInfo::classifyReturnType(QualType RetTy) const {
4319   if (RetTy->isVoidType())
4320     return ABIArgInfo::getIgnore();
4321 
4322   // Large vector types should be returned via memory.
4323   if (RetTy->isVectorType() && getContext().getTypeSize(RetTy) > 128)
4324     return getNaturalAlignIndirect(RetTy);
4325 
4326   if (!isAggregateTypeForABI(RetTy)) {
4327     // Treat an enum type as its underlying type.
4328     if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
4329       RetTy = EnumTy->getDecl()->getIntegerType();
4330 
4331     return (RetTy->isPromotableIntegerType() && isDarwinPCS()
4332                 ? ABIArgInfo::getExtend()
4333                 : ABIArgInfo::getDirect());
4334   }
4335 
4336   if (isEmptyRecord(getContext(), RetTy, true))
4337     return ABIArgInfo::getIgnore();
4338 
4339   const Type *Base = nullptr;
4340   uint64_t Members = 0;
4341   if (isHomogeneousAggregate(RetTy, Base, Members))
4342     // Homogeneous Floating-point Aggregates (HFAs) are returned directly.
4343     return ABIArgInfo::getDirect();
4344 
4345   // Aggregates <= 16 bytes are returned directly in registers or on the stack.
4346   uint64_t Size = getContext().getTypeSize(RetTy);
4347   if (Size <= 128) {
4348     unsigned Alignment = getContext().getTypeAlign(RetTy);
4349     Size = 64 * ((Size + 63) / 64); // round up to multiple of 8 bytes
4350 
4351     // We use a pair of i64 for 16-byte aggregate with 8-byte alignment.
4352     // For aggregates with 16-byte alignment, we use i128.
4353     if (Alignment < 128 && Size == 128) {
4354       llvm::Type *BaseTy = llvm::Type::getInt64Ty(getVMContext());
4355       return ABIArgInfo::getDirect(llvm::ArrayType::get(BaseTy, Size / 64));
4356     }
4357     return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size));
4358   }
4359 
4360   return getNaturalAlignIndirect(RetTy);
4361 }
4362 
4363 /// isIllegalVectorType - check whether the vector type is legal for AArch64.
4364 bool AArch64ABIInfo::isIllegalVectorType(QualType Ty) const {
4365   if (const VectorType *VT = Ty->getAs<VectorType>()) {
4366     // Check whether VT is legal.
4367     unsigned NumElements = VT->getNumElements();
4368     uint64_t Size = getContext().getTypeSize(VT);
4369     // NumElements should be power of 2 between 1 and 16.
4370     if ((NumElements & (NumElements - 1)) != 0 || NumElements > 16)
4371       return true;
4372     return Size != 64 && (Size != 128 || NumElements == 1);
4373   }
4374   return false;
4375 }
4376 
4377 bool AArch64ABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
4378   // Homogeneous aggregates for AAPCS64 must have base types of a floating
4379   // point type or a short-vector type. This is the same as the 32-bit ABI,
4380   // but with the difference that any floating-point type is allowed,
4381   // including __fp16.
4382   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
4383     if (BT->isFloatingPoint())
4384       return true;
4385   } else if (const VectorType *VT = Ty->getAs<VectorType>()) {
4386     unsigned VecSize = getContext().getTypeSize(VT);
4387     if (VecSize == 64 || VecSize == 128)
4388       return true;
4389   }
4390   return false;
4391 }
4392 
4393 bool AArch64ABIInfo::isHomogeneousAggregateSmallEnough(const Type *Base,
4394                                                        uint64_t Members) const {
4395   return Members <= 4;
4396 }
4397 
4398 Address AArch64ABIInfo::EmitAAPCSVAArg(Address VAListAddr,
4399                                             QualType Ty,
4400                                             CodeGenFunction &CGF) const {
4401   ABIArgInfo AI = classifyArgumentType(Ty);
4402   bool IsIndirect = AI.isIndirect();
4403 
4404   llvm::Type *BaseTy = CGF.ConvertType(Ty);
4405   if (IsIndirect)
4406     BaseTy = llvm::PointerType::getUnqual(BaseTy);
4407   else if (AI.getCoerceToType())
4408     BaseTy = AI.getCoerceToType();
4409 
4410   unsigned NumRegs = 1;
4411   if (llvm::ArrayType *ArrTy = dyn_cast<llvm::ArrayType>(BaseTy)) {
4412     BaseTy = ArrTy->getElementType();
4413     NumRegs = ArrTy->getNumElements();
4414   }
4415   bool IsFPR = BaseTy->isFloatingPointTy() || BaseTy->isVectorTy();
4416 
4417   // The AArch64 va_list type and handling is specified in the Procedure Call
4418   // Standard, section B.4:
4419   //
4420   // struct {
4421   //   void *__stack;
4422   //   void *__gr_top;
4423   //   void *__vr_top;
4424   //   int __gr_offs;
4425   //   int __vr_offs;
4426   // };
4427 
4428   llvm::BasicBlock *MaybeRegBlock = CGF.createBasicBlock("vaarg.maybe_reg");
4429   llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
4430   llvm::BasicBlock *OnStackBlock = CGF.createBasicBlock("vaarg.on_stack");
4431   llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
4432 
4433   auto TyInfo = getContext().getTypeInfoInChars(Ty);
4434   CharUnits TyAlign = TyInfo.second;
4435 
4436   Address reg_offs_p = Address::invalid();
4437   llvm::Value *reg_offs = nullptr;
4438   int reg_top_index;
4439   CharUnits reg_top_offset;
4440   int RegSize = IsIndirect ? 8 : TyInfo.first.getQuantity();
4441   if (!IsFPR) {
4442     // 3 is the field number of __gr_offs
4443     reg_offs_p =
4444         CGF.Builder.CreateStructGEP(VAListAddr, 3, CharUnits::fromQuantity(24),
4445                                     "gr_offs_p");
4446     reg_offs = CGF.Builder.CreateLoad(reg_offs_p, "gr_offs");
4447     reg_top_index = 1; // field number for __gr_top
4448     reg_top_offset = CharUnits::fromQuantity(8);
4449     RegSize = llvm::RoundUpToAlignment(RegSize, 8);
4450   } else {
4451     // 4 is the field number of __vr_offs.
4452     reg_offs_p =
4453         CGF.Builder.CreateStructGEP(VAListAddr, 4, CharUnits::fromQuantity(28),
4454                                     "vr_offs_p");
4455     reg_offs = CGF.Builder.CreateLoad(reg_offs_p, "vr_offs");
4456     reg_top_index = 2; // field number for __vr_top
4457     reg_top_offset = CharUnits::fromQuantity(16);
4458     RegSize = 16 * NumRegs;
4459   }
4460 
4461   //=======================================
4462   // Find out where argument was passed
4463   //=======================================
4464 
4465   // If reg_offs >= 0 we're already using the stack for this type of
4466   // argument. We don't want to keep updating reg_offs (in case it overflows,
4467   // though anyone passing 2GB of arguments, each at most 16 bytes, deserves
4468   // whatever they get).
4469   llvm::Value *UsingStack = nullptr;
4470   UsingStack = CGF.Builder.CreateICmpSGE(
4471       reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, 0));
4472 
4473   CGF.Builder.CreateCondBr(UsingStack, OnStackBlock, MaybeRegBlock);
4474 
4475   // Otherwise, at least some kind of argument could go in these registers, the
4476   // question is whether this particular type is too big.
4477   CGF.EmitBlock(MaybeRegBlock);
4478 
4479   // Integer arguments may need to correct register alignment (for example a
4480   // "struct { __int128 a; };" gets passed in x_2N, x_{2N+1}). In this case we
4481   // align __gr_offs to calculate the potential address.
4482   if (!IsFPR && !IsIndirect && TyAlign.getQuantity() > 8) {
4483     int Align = TyAlign.getQuantity();
4484 
4485     reg_offs = CGF.Builder.CreateAdd(
4486         reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, Align - 1),
4487         "align_regoffs");
4488     reg_offs = CGF.Builder.CreateAnd(
4489         reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, -Align),
4490         "aligned_regoffs");
4491   }
4492 
4493   // Update the gr_offs/vr_offs pointer for next call to va_arg on this va_list.
4494   // The fact that this is done unconditionally reflects the fact that
4495   // allocating an argument to the stack also uses up all the remaining
4496   // registers of the appropriate kind.
4497   llvm::Value *NewOffset = nullptr;
4498   NewOffset = CGF.Builder.CreateAdd(
4499       reg_offs, llvm::ConstantInt::get(CGF.Int32Ty, RegSize), "new_reg_offs");
4500   CGF.Builder.CreateStore(NewOffset, reg_offs_p);
4501 
4502   // Now we're in a position to decide whether this argument really was in
4503   // registers or not.
4504   llvm::Value *InRegs = nullptr;
4505   InRegs = CGF.Builder.CreateICmpSLE(
4506       NewOffset, llvm::ConstantInt::get(CGF.Int32Ty, 0), "inreg");
4507 
4508   CGF.Builder.CreateCondBr(InRegs, InRegBlock, OnStackBlock);
4509 
4510   //=======================================
4511   // Argument was in registers
4512   //=======================================
4513 
4514   // Now we emit the code for if the argument was originally passed in
4515   // registers. First start the appropriate block:
4516   CGF.EmitBlock(InRegBlock);
4517 
4518   llvm::Value *reg_top = nullptr;
4519   Address reg_top_p = CGF.Builder.CreateStructGEP(VAListAddr, reg_top_index,
4520                                                   reg_top_offset, "reg_top_p");
4521   reg_top = CGF.Builder.CreateLoad(reg_top_p, "reg_top");
4522   Address BaseAddr(CGF.Builder.CreateInBoundsGEP(reg_top, reg_offs),
4523                    CharUnits::fromQuantity(IsFPR ? 16 : 8));
4524   Address RegAddr = Address::invalid();
4525   llvm::Type *MemTy = CGF.ConvertTypeForMem(Ty);
4526 
4527   if (IsIndirect) {
4528     // If it's been passed indirectly (actually a struct), whatever we find from
4529     // stored registers or on the stack will actually be a struct **.
4530     MemTy = llvm::PointerType::getUnqual(MemTy);
4531   }
4532 
4533   const Type *Base = nullptr;
4534   uint64_t NumMembers = 0;
4535   bool IsHFA = isHomogeneousAggregate(Ty, Base, NumMembers);
4536   if (IsHFA && NumMembers > 1) {
4537     // Homogeneous aggregates passed in registers will have their elements split
4538     // and stored 16-bytes apart regardless of size (they're notionally in qN,
4539     // qN+1, ...). We reload and store into a temporary local variable
4540     // contiguously.
4541     assert(!IsIndirect && "Homogeneous aggregates should be passed directly");
4542     auto BaseTyInfo = getContext().getTypeInfoInChars(QualType(Base, 0));
4543     llvm::Type *BaseTy = CGF.ConvertType(QualType(Base, 0));
4544     llvm::Type *HFATy = llvm::ArrayType::get(BaseTy, NumMembers);
4545     Address Tmp = CGF.CreateTempAlloca(HFATy,
4546                                        std::max(TyAlign, BaseTyInfo.second));
4547 
4548     // On big-endian platforms, the value will be right-aligned in its slot.
4549     int Offset = 0;
4550     if (CGF.CGM.getDataLayout().isBigEndian() &&
4551         BaseTyInfo.first.getQuantity() < 16)
4552       Offset = 16 - BaseTyInfo.first.getQuantity();
4553 
4554     for (unsigned i = 0; i < NumMembers; ++i) {
4555       CharUnits BaseOffset = CharUnits::fromQuantity(16 * i + Offset);
4556       Address LoadAddr =
4557         CGF.Builder.CreateConstInBoundsByteGEP(BaseAddr, BaseOffset);
4558       LoadAddr = CGF.Builder.CreateElementBitCast(LoadAddr, BaseTy);
4559 
4560       Address StoreAddr =
4561         CGF.Builder.CreateConstArrayGEP(Tmp, i, BaseTyInfo.first);
4562 
4563       llvm::Value *Elem = CGF.Builder.CreateLoad(LoadAddr);
4564       CGF.Builder.CreateStore(Elem, StoreAddr);
4565     }
4566 
4567     RegAddr = CGF.Builder.CreateElementBitCast(Tmp, MemTy);
4568   } else {
4569     // Otherwise the object is contiguous in memory.
4570 
4571     // It might be right-aligned in its slot.
4572     CharUnits SlotSize = BaseAddr.getAlignment();
4573     if (CGF.CGM.getDataLayout().isBigEndian() && !IsIndirect &&
4574         (IsHFA || !isAggregateTypeForABI(Ty)) &&
4575         TyInfo.first < SlotSize) {
4576       CharUnits Offset = SlotSize - TyInfo.first;
4577       BaseAddr = CGF.Builder.CreateConstInBoundsByteGEP(BaseAddr, Offset);
4578     }
4579 
4580     RegAddr = CGF.Builder.CreateElementBitCast(BaseAddr, MemTy);
4581   }
4582 
4583   CGF.EmitBranch(ContBlock);
4584 
4585   //=======================================
4586   // Argument was on the stack
4587   //=======================================
4588   CGF.EmitBlock(OnStackBlock);
4589 
4590   Address stack_p = CGF.Builder.CreateStructGEP(VAListAddr, 0,
4591                                                 CharUnits::Zero(), "stack_p");
4592   llvm::Value *OnStackPtr = CGF.Builder.CreateLoad(stack_p, "stack");
4593 
4594   // Again, stack arguments may need realignment. In this case both integer and
4595   // floating-point ones might be affected.
4596   if (!IsIndirect && TyAlign.getQuantity() > 8) {
4597     int Align = TyAlign.getQuantity();
4598 
4599     OnStackPtr = CGF.Builder.CreatePtrToInt(OnStackPtr, CGF.Int64Ty);
4600 
4601     OnStackPtr = CGF.Builder.CreateAdd(
4602         OnStackPtr, llvm::ConstantInt::get(CGF.Int64Ty, Align - 1),
4603         "align_stack");
4604     OnStackPtr = CGF.Builder.CreateAnd(
4605         OnStackPtr, llvm::ConstantInt::get(CGF.Int64Ty, -Align),
4606         "align_stack");
4607 
4608     OnStackPtr = CGF.Builder.CreateIntToPtr(OnStackPtr, CGF.Int8PtrTy);
4609   }
4610   Address OnStackAddr(OnStackPtr,
4611                       std::max(CharUnits::fromQuantity(8), TyAlign));
4612 
4613   // All stack slots are multiples of 8 bytes.
4614   CharUnits StackSlotSize = CharUnits::fromQuantity(8);
4615   CharUnits StackSize;
4616   if (IsIndirect)
4617     StackSize = StackSlotSize;
4618   else
4619     StackSize = TyInfo.first.RoundUpToAlignment(StackSlotSize);
4620 
4621   llvm::Value *StackSizeC = CGF.Builder.getSize(StackSize);
4622   llvm::Value *NewStack =
4623       CGF.Builder.CreateInBoundsGEP(OnStackPtr, StackSizeC, "new_stack");
4624 
4625   // Write the new value of __stack for the next call to va_arg
4626   CGF.Builder.CreateStore(NewStack, stack_p);
4627 
4628   if (CGF.CGM.getDataLayout().isBigEndian() && !isAggregateTypeForABI(Ty) &&
4629       TyInfo.first < StackSlotSize) {
4630     CharUnits Offset = StackSlotSize - TyInfo.first;
4631     OnStackAddr = CGF.Builder.CreateConstInBoundsByteGEP(OnStackAddr, Offset);
4632   }
4633 
4634   OnStackAddr = CGF.Builder.CreateElementBitCast(OnStackAddr, MemTy);
4635 
4636   CGF.EmitBranch(ContBlock);
4637 
4638   //=======================================
4639   // Tidy up
4640   //=======================================
4641   CGF.EmitBlock(ContBlock);
4642 
4643   Address ResAddr = emitMergePHI(CGF, RegAddr, InRegBlock,
4644                                  OnStackAddr, OnStackBlock, "vaargs.addr");
4645 
4646   if (IsIndirect)
4647     return Address(CGF.Builder.CreateLoad(ResAddr, "vaarg.addr"),
4648                    TyInfo.second);
4649 
4650   return ResAddr;
4651 }
4652 
4653 Address AArch64ABIInfo::EmitDarwinVAArg(Address VAListAddr, QualType Ty,
4654                                         CodeGenFunction &CGF) const {
4655   // The backend's lowering doesn't support va_arg for aggregates or
4656   // illegal vector types.  Lower VAArg here for these cases and use
4657   // the LLVM va_arg instruction for everything else.
4658   if (!isAggregateTypeForABI(Ty) && !isIllegalVectorType(Ty))
4659     return Address::invalid();
4660 
4661   CharUnits SlotSize = CharUnits::fromQuantity(8);
4662 
4663   // Empty records are ignored for parameter passing purposes.
4664   if (isEmptyRecord(getContext(), Ty, true)) {
4665     Address Addr(CGF.Builder.CreateLoad(VAListAddr, "ap.cur"), SlotSize);
4666     Addr = CGF.Builder.CreateElementBitCast(Addr, CGF.ConvertTypeForMem(Ty));
4667     return Addr;
4668   }
4669 
4670   // The size of the actual thing passed, which might end up just
4671   // being a pointer for indirect types.
4672   auto TyInfo = getContext().getTypeInfoInChars(Ty);
4673 
4674   // Arguments bigger than 16 bytes which aren't homogeneous
4675   // aggregates should be passed indirectly.
4676   bool IsIndirect = false;
4677   if (TyInfo.first.getQuantity() > 16) {
4678     const Type *Base = nullptr;
4679     uint64_t Members = 0;
4680     IsIndirect = !isHomogeneousAggregate(Ty, Base, Members);
4681   }
4682 
4683   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, IsIndirect,
4684                           TyInfo, SlotSize, /*AllowHigherAlign*/ true);
4685 }
4686 
4687 //===----------------------------------------------------------------------===//
4688 // ARM ABI Implementation
4689 //===----------------------------------------------------------------------===//
4690 
4691 namespace {
4692 
4693 class ARMABIInfo : public ABIInfo {
4694 public:
4695   enum ABIKind {
4696     APCS = 0,
4697     AAPCS = 1,
4698     AAPCS_VFP = 2,
4699     AAPCS16_VFP = 3,
4700   };
4701 
4702 private:
4703   ABIKind Kind;
4704 
4705 public:
4706   ARMABIInfo(CodeGenTypes &CGT, ABIKind _Kind) : ABIInfo(CGT), Kind(_Kind) {
4707     setCCs();
4708   }
4709 
4710   bool isEABI() const {
4711     switch (getTarget().getTriple().getEnvironment()) {
4712     case llvm::Triple::Android:
4713     case llvm::Triple::EABI:
4714     case llvm::Triple::EABIHF:
4715     case llvm::Triple::GNUEABI:
4716     case llvm::Triple::GNUEABIHF:
4717       return true;
4718     default:
4719       return false;
4720     }
4721   }
4722 
4723   bool isEABIHF() const {
4724     switch (getTarget().getTriple().getEnvironment()) {
4725     case llvm::Triple::EABIHF:
4726     case llvm::Triple::GNUEABIHF:
4727       return true;
4728     default:
4729       return false;
4730     }
4731   }
4732 
4733   bool isAndroid() const {
4734     return (getTarget().getTriple().getEnvironment() ==
4735             llvm::Triple::Android);
4736   }
4737 
4738   ABIKind getABIKind() const { return Kind; }
4739 
4740 private:
4741   ABIArgInfo classifyReturnType(QualType RetTy, bool isVariadic) const;
4742   ABIArgInfo classifyArgumentType(QualType RetTy, bool isVariadic) const;
4743   bool isIllegalVectorType(QualType Ty) const;
4744 
4745   bool isHomogeneousAggregateBaseType(QualType Ty) const override;
4746   bool isHomogeneousAggregateSmallEnough(const Type *Ty,
4747                                          uint64_t Members) const override;
4748 
4749   void computeInfo(CGFunctionInfo &FI) const override;
4750 
4751   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
4752                     QualType Ty) const override;
4753 
4754   llvm::CallingConv::ID getLLVMDefaultCC() const;
4755   llvm::CallingConv::ID getABIDefaultCC() const;
4756   void setCCs();
4757 };
4758 
4759 class ARMTargetCodeGenInfo : public TargetCodeGenInfo {
4760 public:
4761   ARMTargetCodeGenInfo(CodeGenTypes &CGT, ARMABIInfo::ABIKind K)
4762     :TargetCodeGenInfo(new ARMABIInfo(CGT, K)) {}
4763 
4764   const ARMABIInfo &getABIInfo() const {
4765     return static_cast<const ARMABIInfo&>(TargetCodeGenInfo::getABIInfo());
4766   }
4767 
4768   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
4769     return 13;
4770   }
4771 
4772   StringRef getARCRetainAutoreleasedReturnValueMarker() const override {
4773     return "mov\tr7, r7\t\t@ marker for objc_retainAutoreleaseReturnValue";
4774   }
4775 
4776   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
4777                                llvm::Value *Address) const override {
4778     llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
4779 
4780     // 0-15 are the 16 integer registers.
4781     AssignToArrayRange(CGF.Builder, Address, Four8, 0, 15);
4782     return false;
4783   }
4784 
4785   unsigned getSizeOfUnwindException() const override {
4786     if (getABIInfo().isEABI()) return 88;
4787     return TargetCodeGenInfo::getSizeOfUnwindException();
4788   }
4789 
4790   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
4791                            CodeGen::CodeGenModule &CGM) const override {
4792     const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
4793     if (!FD)
4794       return;
4795 
4796     const ARMInterruptAttr *Attr = FD->getAttr<ARMInterruptAttr>();
4797     if (!Attr)
4798       return;
4799 
4800     const char *Kind;
4801     switch (Attr->getInterrupt()) {
4802     case ARMInterruptAttr::Generic: Kind = ""; break;
4803     case ARMInterruptAttr::IRQ:     Kind = "IRQ"; break;
4804     case ARMInterruptAttr::FIQ:     Kind = "FIQ"; break;
4805     case ARMInterruptAttr::SWI:     Kind = "SWI"; break;
4806     case ARMInterruptAttr::ABORT:   Kind = "ABORT"; break;
4807     case ARMInterruptAttr::UNDEF:   Kind = "UNDEF"; break;
4808     }
4809 
4810     llvm::Function *Fn = cast<llvm::Function>(GV);
4811 
4812     Fn->addFnAttr("interrupt", Kind);
4813 
4814     ARMABIInfo::ABIKind ABI = cast<ARMABIInfo>(getABIInfo()).getABIKind();
4815     if (ABI == ARMABIInfo::APCS)
4816       return;
4817 
4818     // AAPCS guarantees that sp will be 8-byte aligned on any public interface,
4819     // however this is not necessarily true on taking any interrupt. Instruct
4820     // the backend to perform a realignment as part of the function prologue.
4821     llvm::AttrBuilder B;
4822     B.addStackAlignmentAttr(8);
4823     Fn->addAttributes(llvm::AttributeSet::FunctionIndex,
4824                       llvm::AttributeSet::get(CGM.getLLVMContext(),
4825                                               llvm::AttributeSet::FunctionIndex,
4826                                               B));
4827   }
4828 };
4829 
4830 class WindowsARMTargetCodeGenInfo : public ARMTargetCodeGenInfo {
4831   void addStackProbeSizeTargetAttribute(const Decl *D, llvm::GlobalValue *GV,
4832                                         CodeGen::CodeGenModule &CGM) const;
4833 
4834 public:
4835   WindowsARMTargetCodeGenInfo(CodeGenTypes &CGT, ARMABIInfo::ABIKind K)
4836       : ARMTargetCodeGenInfo(CGT, K) {}
4837 
4838   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
4839                            CodeGen::CodeGenModule &CGM) const override;
4840 };
4841 
4842 void WindowsARMTargetCodeGenInfo::addStackProbeSizeTargetAttribute(
4843     const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const {
4844   if (!isa<FunctionDecl>(D))
4845     return;
4846   if (CGM.getCodeGenOpts().StackProbeSize == 4096)
4847     return;
4848 
4849   llvm::Function *F = cast<llvm::Function>(GV);
4850   F->addFnAttr("stack-probe-size",
4851                llvm::utostr(CGM.getCodeGenOpts().StackProbeSize));
4852 }
4853 
4854 void WindowsARMTargetCodeGenInfo::setTargetAttributes(
4855     const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const {
4856   ARMTargetCodeGenInfo::setTargetAttributes(D, GV, CGM);
4857   addStackProbeSizeTargetAttribute(D, GV, CGM);
4858 }
4859 }
4860 
4861 void ARMABIInfo::computeInfo(CGFunctionInfo &FI) const {
4862   if (!getCXXABI().classifyReturnType(FI))
4863     FI.getReturnInfo() =
4864         classifyReturnType(FI.getReturnType(), FI.isVariadic());
4865 
4866   for (auto &I : FI.arguments())
4867     I.info = classifyArgumentType(I.type, FI.isVariadic());
4868 
4869   // Always honor user-specified calling convention.
4870   if (FI.getCallingConvention() != llvm::CallingConv::C)
4871     return;
4872 
4873   llvm::CallingConv::ID cc = getRuntimeCC();
4874   if (cc != llvm::CallingConv::C)
4875     FI.setEffectiveCallingConvention(cc);
4876 }
4877 
4878 /// Return the default calling convention that LLVM will use.
4879 llvm::CallingConv::ID ARMABIInfo::getLLVMDefaultCC() const {
4880   // The default calling convention that LLVM will infer.
4881   if (isEABIHF() || getTarget().getTriple().isWatchOS())
4882     return llvm::CallingConv::ARM_AAPCS_VFP;
4883   else if (isEABI())
4884     return llvm::CallingConv::ARM_AAPCS;
4885   else
4886     return llvm::CallingConv::ARM_APCS;
4887 }
4888 
4889 /// Return the calling convention that our ABI would like us to use
4890 /// as the C calling convention.
4891 llvm::CallingConv::ID ARMABIInfo::getABIDefaultCC() const {
4892   switch (getABIKind()) {
4893   case APCS: return llvm::CallingConv::ARM_APCS;
4894   case AAPCS: return llvm::CallingConv::ARM_AAPCS;
4895   case AAPCS_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
4896   case AAPCS16_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
4897   }
4898   llvm_unreachable("bad ABI kind");
4899 }
4900 
4901 void ARMABIInfo::setCCs() {
4902   assert(getRuntimeCC() == llvm::CallingConv::C);
4903 
4904   // Don't muddy up the IR with a ton of explicit annotations if
4905   // they'd just match what LLVM will infer from the triple.
4906   llvm::CallingConv::ID abiCC = getABIDefaultCC();
4907   if (abiCC != getLLVMDefaultCC())
4908     RuntimeCC = abiCC;
4909 
4910   // AAPCS apparently requires runtime support functions to be soft-float, but
4911   // that's almost certainly for historic reasons (Thumb1 not supporting VFP
4912   // most likely). It's more convenient for AAPCS16_VFP to be hard-float.
4913   switch (getABIKind()) {
4914   case APCS:
4915   case AAPCS16_VFP:
4916     if (abiCC != getLLVMDefaultCC())
4917       BuiltinCC = abiCC;
4918     break;
4919   case AAPCS:
4920   case AAPCS_VFP:
4921     BuiltinCC = llvm::CallingConv::ARM_AAPCS;
4922     break;
4923   }
4924 }
4925 
4926 ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty,
4927                                             bool isVariadic) const {
4928   // 6.1.2.1 The following argument types are VFP CPRCs:
4929   //   A single-precision floating-point type (including promoted
4930   //   half-precision types); A double-precision floating-point type;
4931   //   A 64-bit or 128-bit containerized vector type; Homogeneous Aggregate
4932   //   with a Base Type of a single- or double-precision floating-point type,
4933   //   64-bit containerized vectors or 128-bit containerized vectors with one
4934   //   to four Elements.
4935   bool IsEffectivelyAAPCS_VFP = getABIKind() == AAPCS_VFP && !isVariadic;
4936 
4937   Ty = useFirstFieldIfTransparentUnion(Ty);
4938 
4939   // Handle illegal vector types here.
4940   if (isIllegalVectorType(Ty)) {
4941     uint64_t Size = getContext().getTypeSize(Ty);
4942     if (Size <= 32) {
4943       llvm::Type *ResType =
4944           llvm::Type::getInt32Ty(getVMContext());
4945       return ABIArgInfo::getDirect(ResType);
4946     }
4947     if (Size == 64) {
4948       llvm::Type *ResType = llvm::VectorType::get(
4949           llvm::Type::getInt32Ty(getVMContext()), 2);
4950       return ABIArgInfo::getDirect(ResType);
4951     }
4952     if (Size == 128) {
4953       llvm::Type *ResType = llvm::VectorType::get(
4954           llvm::Type::getInt32Ty(getVMContext()), 4);
4955       return ABIArgInfo::getDirect(ResType);
4956     }
4957     return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
4958   }
4959 
4960   // __fp16 gets passed as if it were an int or float, but with the top 16 bits
4961   // unspecified. This is not done for OpenCL as it handles the half type
4962   // natively, and does not need to interwork with AAPCS code.
4963   if (Ty->isHalfType() && !getContext().getLangOpts().OpenCL) {
4964     llvm::Type *ResType = IsEffectivelyAAPCS_VFP ?
4965       llvm::Type::getFloatTy(getVMContext()) :
4966       llvm::Type::getInt32Ty(getVMContext());
4967     return ABIArgInfo::getDirect(ResType);
4968   }
4969 
4970   if (!isAggregateTypeForABI(Ty)) {
4971     // Treat an enum type as its underlying type.
4972     if (const EnumType *EnumTy = Ty->getAs<EnumType>()) {
4973       Ty = EnumTy->getDecl()->getIntegerType();
4974     }
4975 
4976     return (Ty->isPromotableIntegerType() ? ABIArgInfo::getExtend()
4977                                           : ABIArgInfo::getDirect());
4978   }
4979 
4980   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI())) {
4981     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
4982   }
4983 
4984   // Ignore empty records.
4985   if (isEmptyRecord(getContext(), Ty, true))
4986     return ABIArgInfo::getIgnore();
4987 
4988   if (IsEffectivelyAAPCS_VFP) {
4989     // Homogeneous Aggregates need to be expanded when we can fit the aggregate
4990     // into VFP registers.
4991     const Type *Base = nullptr;
4992     uint64_t Members = 0;
4993     if (isHomogeneousAggregate(Ty, Base, Members)) {
4994       assert(Base && "Base class should be set for homogeneous aggregate");
4995       // Base can be a floating-point or a vector.
4996       return ABIArgInfo::getDirect(nullptr, 0, nullptr, false);
4997     }
4998   } else if (getABIKind() == ARMABIInfo::AAPCS16_VFP) {
4999     // WatchOS does have homogeneous aggregates. Note that we intentionally use
5000     // this convention even for a variadic function: the backend will use GPRs
5001     // if needed.
5002     const Type *Base = nullptr;
5003     uint64_t Members = 0;
5004     if (isHomogeneousAggregate(Ty, Base, Members)) {
5005       assert(Base && Members <= 4 && "unexpected homogeneous aggregate");
5006       llvm::Type *Ty =
5007         llvm::ArrayType::get(CGT.ConvertType(QualType(Base, 0)), Members);
5008       return ABIArgInfo::getDirect(Ty, 0, nullptr, false);
5009     }
5010   }
5011 
5012   if (getABIKind() == ARMABIInfo::AAPCS16_VFP &&
5013       getContext().getTypeSizeInChars(Ty) > CharUnits::fromQuantity(16)) {
5014     // WatchOS is adopting the 64-bit AAPCS rule on composite types: if they're
5015     // bigger than 128-bits, they get placed in space allocated by the caller,
5016     // and a pointer is passed.
5017     return ABIArgInfo::getIndirect(
5018         CharUnits::fromQuantity(getContext().getTypeAlign(Ty) / 8), false);
5019   }
5020 
5021   // Support byval for ARM.
5022   // The ABI alignment for APCS is 4-byte and for AAPCS at least 4-byte and at
5023   // most 8-byte. We realign the indirect argument if type alignment is bigger
5024   // than ABI alignment.
5025   uint64_t ABIAlign = 4;
5026   uint64_t TyAlign = getContext().getTypeAlign(Ty) / 8;
5027   if (getABIKind() == ARMABIInfo::AAPCS_VFP ||
5028        getABIKind() == ARMABIInfo::AAPCS)
5029     ABIAlign = std::min(std::max(TyAlign, (uint64_t)4), (uint64_t)8);
5030 
5031   if (getContext().getTypeSizeInChars(Ty) > CharUnits::fromQuantity(64)) {
5032     assert(getABIKind() != ARMABIInfo::AAPCS16_VFP && "unexpected byval");
5033     return ABIArgInfo::getIndirect(CharUnits::fromQuantity(ABIAlign),
5034                                    /*ByVal=*/true,
5035                                    /*Realign=*/TyAlign > ABIAlign);
5036   }
5037 
5038   // Otherwise, pass by coercing to a structure of the appropriate size.
5039   llvm::Type* ElemTy;
5040   unsigned SizeRegs;
5041   // FIXME: Try to match the types of the arguments more accurately where
5042   // we can.
5043   if (getContext().getTypeAlign(Ty) <= 32) {
5044     ElemTy = llvm::Type::getInt32Ty(getVMContext());
5045     SizeRegs = (getContext().getTypeSize(Ty) + 31) / 32;
5046   } else {
5047     ElemTy = llvm::Type::getInt64Ty(getVMContext());
5048     SizeRegs = (getContext().getTypeSize(Ty) + 63) / 64;
5049   }
5050 
5051   return ABIArgInfo::getDirect(llvm::ArrayType::get(ElemTy, SizeRegs));
5052 }
5053 
5054 static bool isIntegerLikeType(QualType Ty, ASTContext &Context,
5055                               llvm::LLVMContext &VMContext) {
5056   // APCS, C Language Calling Conventions, Non-Simple Return Values: A structure
5057   // is called integer-like if its size is less than or equal to one word, and
5058   // the offset of each of its addressable sub-fields is zero.
5059 
5060   uint64_t Size = Context.getTypeSize(Ty);
5061 
5062   // Check that the type fits in a word.
5063   if (Size > 32)
5064     return false;
5065 
5066   // FIXME: Handle vector types!
5067   if (Ty->isVectorType())
5068     return false;
5069 
5070   // Float types are never treated as "integer like".
5071   if (Ty->isRealFloatingType())
5072     return false;
5073 
5074   // If this is a builtin or pointer type then it is ok.
5075   if (Ty->getAs<BuiltinType>() || Ty->isPointerType())
5076     return true;
5077 
5078   // Small complex integer types are "integer like".
5079   if (const ComplexType *CT = Ty->getAs<ComplexType>())
5080     return isIntegerLikeType(CT->getElementType(), Context, VMContext);
5081 
5082   // Single element and zero sized arrays should be allowed, by the definition
5083   // above, but they are not.
5084 
5085   // Otherwise, it must be a record type.
5086   const RecordType *RT = Ty->getAs<RecordType>();
5087   if (!RT) return false;
5088 
5089   // Ignore records with flexible arrays.
5090   const RecordDecl *RD = RT->getDecl();
5091   if (RD->hasFlexibleArrayMember())
5092     return false;
5093 
5094   // Check that all sub-fields are at offset 0, and are themselves "integer
5095   // like".
5096   const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
5097 
5098   bool HadField = false;
5099   unsigned idx = 0;
5100   for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
5101        i != e; ++i, ++idx) {
5102     const FieldDecl *FD = *i;
5103 
5104     // Bit-fields are not addressable, we only need to verify they are "integer
5105     // like". We still have to disallow a subsequent non-bitfield, for example:
5106     //   struct { int : 0; int x }
5107     // is non-integer like according to gcc.
5108     if (FD->isBitField()) {
5109       if (!RD->isUnion())
5110         HadField = true;
5111 
5112       if (!isIntegerLikeType(FD->getType(), Context, VMContext))
5113         return false;
5114 
5115       continue;
5116     }
5117 
5118     // Check if this field is at offset 0.
5119     if (Layout.getFieldOffset(idx) != 0)
5120       return false;
5121 
5122     if (!isIntegerLikeType(FD->getType(), Context, VMContext))
5123       return false;
5124 
5125     // Only allow at most one field in a structure. This doesn't match the
5126     // wording above, but follows gcc in situations with a field following an
5127     // empty structure.
5128     if (!RD->isUnion()) {
5129       if (HadField)
5130         return false;
5131 
5132       HadField = true;
5133     }
5134   }
5135 
5136   return true;
5137 }
5138 
5139 ABIArgInfo ARMABIInfo::classifyReturnType(QualType RetTy,
5140                                           bool isVariadic) const {
5141   bool IsEffectivelyAAPCS_VFP =
5142       (getABIKind() == AAPCS_VFP || getABIKind() == AAPCS16_VFP) && !isVariadic;
5143 
5144   if (RetTy->isVoidType())
5145     return ABIArgInfo::getIgnore();
5146 
5147   // Large vector types should be returned via memory.
5148   if (RetTy->isVectorType() && getContext().getTypeSize(RetTy) > 128) {
5149     return getNaturalAlignIndirect(RetTy);
5150   }
5151 
5152   // __fp16 gets returned as if it were an int or float, but with the top 16
5153   // bits unspecified. This is not done for OpenCL as it handles the half type
5154   // natively, and does not need to interwork with AAPCS code.
5155   if (RetTy->isHalfType() && !getContext().getLangOpts().OpenCL) {
5156     llvm::Type *ResType = IsEffectivelyAAPCS_VFP ?
5157       llvm::Type::getFloatTy(getVMContext()) :
5158       llvm::Type::getInt32Ty(getVMContext());
5159     return ABIArgInfo::getDirect(ResType);
5160   }
5161 
5162   if (!isAggregateTypeForABI(RetTy)) {
5163     // Treat an enum type as its underlying type.
5164     if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
5165       RetTy = EnumTy->getDecl()->getIntegerType();
5166 
5167     return RetTy->isPromotableIntegerType() ? ABIArgInfo::getExtend()
5168                                             : ABIArgInfo::getDirect();
5169   }
5170 
5171   // Are we following APCS?
5172   if (getABIKind() == APCS) {
5173     if (isEmptyRecord(getContext(), RetTy, false))
5174       return ABIArgInfo::getIgnore();
5175 
5176     // Complex types are all returned as packed integers.
5177     //
5178     // FIXME: Consider using 2 x vector types if the back end handles them
5179     // correctly.
5180     if (RetTy->isAnyComplexType())
5181       return ABIArgInfo::getDirect(llvm::IntegerType::get(
5182           getVMContext(), getContext().getTypeSize(RetTy)));
5183 
5184     // Integer like structures are returned in r0.
5185     if (isIntegerLikeType(RetTy, getContext(), getVMContext())) {
5186       // Return in the smallest viable integer type.
5187       uint64_t Size = getContext().getTypeSize(RetTy);
5188       if (Size <= 8)
5189         return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
5190       if (Size <= 16)
5191         return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
5192       return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
5193     }
5194 
5195     // Otherwise return in memory.
5196     return getNaturalAlignIndirect(RetTy);
5197   }
5198 
5199   // Otherwise this is an AAPCS variant.
5200 
5201   if (isEmptyRecord(getContext(), RetTy, true))
5202     return ABIArgInfo::getIgnore();
5203 
5204   // Check for homogeneous aggregates with AAPCS-VFP.
5205   if (IsEffectivelyAAPCS_VFP) {
5206     const Type *Base = nullptr;
5207     uint64_t Members = 0;
5208     if (isHomogeneousAggregate(RetTy, Base, Members)) {
5209       assert(Base && "Base class should be set for homogeneous aggregate");
5210       // Homogeneous Aggregates are returned directly.
5211       return ABIArgInfo::getDirect(nullptr, 0, nullptr, false);
5212     }
5213   }
5214 
5215   // Aggregates <= 4 bytes are returned in r0; other aggregates
5216   // are returned indirectly.
5217   uint64_t Size = getContext().getTypeSize(RetTy);
5218   if (Size <= 32) {
5219     if (getDataLayout().isBigEndian())
5220       // Return in 32 bit integer integer type (as if loaded by LDR, AAPCS 5.4)
5221       return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
5222 
5223     // Return in the smallest viable integer type.
5224     if (Size <= 8)
5225       return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
5226     if (Size <= 16)
5227       return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
5228     return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
5229   } else if (Size <= 128 && getABIKind() == AAPCS16_VFP) {
5230     llvm::Type *Int32Ty = llvm::Type::getInt32Ty(getVMContext());
5231     llvm::Type *CoerceTy =
5232         llvm::ArrayType::get(Int32Ty, llvm::RoundUpToAlignment(Size, 32) / 32);
5233     return ABIArgInfo::getDirect(CoerceTy);
5234   }
5235 
5236   return getNaturalAlignIndirect(RetTy);
5237 }
5238 
5239 /// isIllegalVector - check whether Ty is an illegal vector type.
5240 bool ARMABIInfo::isIllegalVectorType(QualType Ty) const {
5241   if (const VectorType *VT = Ty->getAs<VectorType> ()) {
5242     if (isAndroid()) {
5243       // Android shipped using Clang 3.1, which supported a slightly different
5244       // vector ABI. The primary differences were that 3-element vector types
5245       // were legal, and so were sub 32-bit vectors (i.e. <2 x i8>). This path
5246       // accepts that legacy behavior for Android only.
5247       // Check whether VT is legal.
5248       unsigned NumElements = VT->getNumElements();
5249       // NumElements should be power of 2 or equal to 3.
5250       if (!llvm::isPowerOf2_32(NumElements) && NumElements != 3)
5251         return true;
5252     } else {
5253       // Check whether VT is legal.
5254       unsigned NumElements = VT->getNumElements();
5255       uint64_t Size = getContext().getTypeSize(VT);
5256       // NumElements should be power of 2.
5257       if (!llvm::isPowerOf2_32(NumElements))
5258         return true;
5259       // Size should be greater than 32 bits.
5260       return Size <= 32;
5261     }
5262   }
5263   return false;
5264 }
5265 
5266 bool ARMABIInfo::isHomogeneousAggregateBaseType(QualType Ty) const {
5267   // Homogeneous aggregates for AAPCS-VFP must have base types of float,
5268   // double, or 64-bit or 128-bit vectors.
5269   if (const BuiltinType *BT = Ty->getAs<BuiltinType>()) {
5270     if (BT->getKind() == BuiltinType::Float ||
5271         BT->getKind() == BuiltinType::Double ||
5272         BT->getKind() == BuiltinType::LongDouble)
5273       return true;
5274   } else if (const VectorType *VT = Ty->getAs<VectorType>()) {
5275     unsigned VecSize = getContext().getTypeSize(VT);
5276     if (VecSize == 64 || VecSize == 128)
5277       return true;
5278   }
5279   return false;
5280 }
5281 
5282 bool ARMABIInfo::isHomogeneousAggregateSmallEnough(const Type *Base,
5283                                                    uint64_t Members) const {
5284   return Members <= 4;
5285 }
5286 
5287 Address ARMABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5288                               QualType Ty) const {
5289   CharUnits SlotSize = CharUnits::fromQuantity(4);
5290 
5291   // Empty records are ignored for parameter passing purposes.
5292   if (isEmptyRecord(getContext(), Ty, true)) {
5293     Address Addr(CGF.Builder.CreateLoad(VAListAddr), SlotSize);
5294     Addr = CGF.Builder.CreateElementBitCast(Addr, CGF.ConvertTypeForMem(Ty));
5295     return Addr;
5296   }
5297 
5298   auto TyInfo = getContext().getTypeInfoInChars(Ty);
5299   CharUnits TyAlignForABI = TyInfo.second;
5300 
5301   // Use indirect if size of the illegal vector is bigger than 16 bytes.
5302   bool IsIndirect = false;
5303   const Type *Base = nullptr;
5304   uint64_t Members = 0;
5305   if (TyInfo.first > CharUnits::fromQuantity(16) && isIllegalVectorType(Ty)) {
5306     IsIndirect = true;
5307 
5308   // ARMv7k passes structs bigger than 16 bytes indirectly, in space
5309   // allocated by the caller.
5310   } else if (TyInfo.first > CharUnits::fromQuantity(16) &&
5311              getABIKind() == ARMABIInfo::AAPCS16_VFP &&
5312              !isHomogeneousAggregate(Ty, Base, Members)) {
5313     IsIndirect = true;
5314 
5315   // Otherwise, bound the type's ABI alignment.
5316   // The ABI alignment for 64-bit or 128-bit vectors is 8 for AAPCS and 4 for
5317   // APCS. For AAPCS, the ABI alignment is at least 4-byte and at most 8-byte.
5318   // Our callers should be prepared to handle an under-aligned address.
5319   } else if (getABIKind() == ARMABIInfo::AAPCS_VFP ||
5320              getABIKind() == ARMABIInfo::AAPCS) {
5321     TyAlignForABI = std::max(TyAlignForABI, CharUnits::fromQuantity(4));
5322     TyAlignForABI = std::min(TyAlignForABI, CharUnits::fromQuantity(8));
5323   } else if (getABIKind() == ARMABIInfo::AAPCS16_VFP) {
5324     // ARMv7k allows type alignment up to 16 bytes.
5325     TyAlignForABI = std::max(TyAlignForABI, CharUnits::fromQuantity(4));
5326     TyAlignForABI = std::min(TyAlignForABI, CharUnits::fromQuantity(16));
5327   } else {
5328     TyAlignForABI = CharUnits::fromQuantity(4);
5329   }
5330   TyInfo.second = TyAlignForABI;
5331 
5332   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, IsIndirect, TyInfo,
5333                           SlotSize, /*AllowHigherAlign*/ true);
5334 }
5335 
5336 //===----------------------------------------------------------------------===//
5337 // NVPTX ABI Implementation
5338 //===----------------------------------------------------------------------===//
5339 
5340 namespace {
5341 
5342 class NVPTXABIInfo : public ABIInfo {
5343 public:
5344   NVPTXABIInfo(CodeGenTypes &CGT) : ABIInfo(CGT) {}
5345 
5346   ABIArgInfo classifyReturnType(QualType RetTy) const;
5347   ABIArgInfo classifyArgumentType(QualType Ty) const;
5348 
5349   void computeInfo(CGFunctionInfo &FI) const override;
5350   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5351                     QualType Ty) const override;
5352 };
5353 
5354 class NVPTXTargetCodeGenInfo : public TargetCodeGenInfo {
5355 public:
5356   NVPTXTargetCodeGenInfo(CodeGenTypes &CGT)
5357     : TargetCodeGenInfo(new NVPTXABIInfo(CGT)) {}
5358 
5359   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5360                            CodeGen::CodeGenModule &M) const override;
5361 private:
5362   // Adds a NamedMDNode with F, Name, and Operand as operands, and adds the
5363   // resulting MDNode to the nvvm.annotations MDNode.
5364   static void addNVVMMetadata(llvm::Function *F, StringRef Name, int Operand);
5365 };
5366 
5367 ABIArgInfo NVPTXABIInfo::classifyReturnType(QualType RetTy) const {
5368   if (RetTy->isVoidType())
5369     return ABIArgInfo::getIgnore();
5370 
5371   // note: this is different from default ABI
5372   if (!RetTy->isScalarType())
5373     return ABIArgInfo::getDirect();
5374 
5375   // Treat an enum type as its underlying type.
5376   if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
5377     RetTy = EnumTy->getDecl()->getIntegerType();
5378 
5379   return (RetTy->isPromotableIntegerType() ?
5380           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
5381 }
5382 
5383 ABIArgInfo NVPTXABIInfo::classifyArgumentType(QualType Ty) const {
5384   // Treat an enum type as its underlying type.
5385   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
5386     Ty = EnumTy->getDecl()->getIntegerType();
5387 
5388   // Return aggregates type as indirect by value
5389   if (isAggregateTypeForABI(Ty))
5390     return getNaturalAlignIndirect(Ty, /* byval */ true);
5391 
5392   return (Ty->isPromotableIntegerType() ?
5393           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
5394 }
5395 
5396 void NVPTXABIInfo::computeInfo(CGFunctionInfo &FI) const {
5397   if (!getCXXABI().classifyReturnType(FI))
5398     FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
5399   for (auto &I : FI.arguments())
5400     I.info = classifyArgumentType(I.type);
5401 
5402   // Always honor user-specified calling convention.
5403   if (FI.getCallingConvention() != llvm::CallingConv::C)
5404     return;
5405 
5406   FI.setEffectiveCallingConvention(getRuntimeCC());
5407 }
5408 
5409 Address NVPTXABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5410                                 QualType Ty) const {
5411   llvm_unreachable("NVPTX does not support varargs");
5412 }
5413 
5414 void NVPTXTargetCodeGenInfo::
5415 setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5416                     CodeGen::CodeGenModule &M) const{
5417   const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
5418   if (!FD) return;
5419 
5420   llvm::Function *F = cast<llvm::Function>(GV);
5421 
5422   // Perform special handling in OpenCL mode
5423   if (M.getLangOpts().OpenCL) {
5424     // Use OpenCL function attributes to check for kernel functions
5425     // By default, all functions are device functions
5426     if (FD->hasAttr<OpenCLKernelAttr>()) {
5427       // OpenCL __kernel functions get kernel metadata
5428       // Create !{<func-ref>, metadata !"kernel", i32 1} node
5429       addNVVMMetadata(F, "kernel", 1);
5430       // And kernel functions are not subject to inlining
5431       F->addFnAttr(llvm::Attribute::NoInline);
5432     }
5433   }
5434 
5435   // Perform special handling in CUDA mode.
5436   if (M.getLangOpts().CUDA) {
5437     // CUDA __global__ functions get a kernel metadata entry.  Since
5438     // __global__ functions cannot be called from the device, we do not
5439     // need to set the noinline attribute.
5440     if (FD->hasAttr<CUDAGlobalAttr>()) {
5441       // Create !{<func-ref>, metadata !"kernel", i32 1} node
5442       addNVVMMetadata(F, "kernel", 1);
5443     }
5444     if (CUDALaunchBoundsAttr *Attr = FD->getAttr<CUDALaunchBoundsAttr>()) {
5445       // Create !{<func-ref>, metadata !"maxntidx", i32 <val>} node
5446       llvm::APSInt MaxThreads(32);
5447       MaxThreads = Attr->getMaxThreads()->EvaluateKnownConstInt(M.getContext());
5448       if (MaxThreads > 0)
5449         addNVVMMetadata(F, "maxntidx", MaxThreads.getExtValue());
5450 
5451       // min blocks is an optional argument for CUDALaunchBoundsAttr. If it was
5452       // not specified in __launch_bounds__ or if the user specified a 0 value,
5453       // we don't have to add a PTX directive.
5454       if (Attr->getMinBlocks()) {
5455         llvm::APSInt MinBlocks(32);
5456         MinBlocks = Attr->getMinBlocks()->EvaluateKnownConstInt(M.getContext());
5457         if (MinBlocks > 0)
5458           // Create !{<func-ref>, metadata !"minctasm", i32 <val>} node
5459           addNVVMMetadata(F, "minctasm", MinBlocks.getExtValue());
5460       }
5461     }
5462   }
5463 }
5464 
5465 void NVPTXTargetCodeGenInfo::addNVVMMetadata(llvm::Function *F, StringRef Name,
5466                                              int Operand) {
5467   llvm::Module *M = F->getParent();
5468   llvm::LLVMContext &Ctx = M->getContext();
5469 
5470   // Get "nvvm.annotations" metadata node
5471   llvm::NamedMDNode *MD = M->getOrInsertNamedMetadata("nvvm.annotations");
5472 
5473   llvm::Metadata *MDVals[] = {
5474       llvm::ConstantAsMetadata::get(F), llvm::MDString::get(Ctx, Name),
5475       llvm::ConstantAsMetadata::get(
5476           llvm::ConstantInt::get(llvm::Type::getInt32Ty(Ctx), Operand))};
5477   // Append metadata to nvvm.annotations
5478   MD->addOperand(llvm::MDNode::get(Ctx, MDVals));
5479 }
5480 }
5481 
5482 //===----------------------------------------------------------------------===//
5483 // SystemZ ABI Implementation
5484 //===----------------------------------------------------------------------===//
5485 
5486 namespace {
5487 
5488 class SystemZABIInfo : public ABIInfo {
5489   bool HasVector;
5490 
5491 public:
5492   SystemZABIInfo(CodeGenTypes &CGT, bool HV)
5493     : ABIInfo(CGT), HasVector(HV) {}
5494 
5495   bool isPromotableIntegerType(QualType Ty) const;
5496   bool isCompoundType(QualType Ty) const;
5497   bool isVectorArgumentType(QualType Ty) const;
5498   bool isFPArgumentType(QualType Ty) const;
5499   QualType GetSingleElementType(QualType Ty) const;
5500 
5501   ABIArgInfo classifyReturnType(QualType RetTy) const;
5502   ABIArgInfo classifyArgumentType(QualType ArgTy) const;
5503 
5504   void computeInfo(CGFunctionInfo &FI) const override {
5505     if (!getCXXABI().classifyReturnType(FI))
5506       FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
5507     for (auto &I : FI.arguments())
5508       I.info = classifyArgumentType(I.type);
5509   }
5510 
5511   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5512                     QualType Ty) const override;
5513 };
5514 
5515 class SystemZTargetCodeGenInfo : public TargetCodeGenInfo {
5516 public:
5517   SystemZTargetCodeGenInfo(CodeGenTypes &CGT, bool HasVector)
5518     : TargetCodeGenInfo(new SystemZABIInfo(CGT, HasVector)) {}
5519 };
5520 
5521 }
5522 
5523 bool SystemZABIInfo::isPromotableIntegerType(QualType Ty) const {
5524   // Treat an enum type as its underlying type.
5525   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
5526     Ty = EnumTy->getDecl()->getIntegerType();
5527 
5528   // Promotable integer types are required to be promoted by the ABI.
5529   if (Ty->isPromotableIntegerType())
5530     return true;
5531 
5532   // 32-bit values must also be promoted.
5533   if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
5534     switch (BT->getKind()) {
5535     case BuiltinType::Int:
5536     case BuiltinType::UInt:
5537       return true;
5538     default:
5539       return false;
5540     }
5541   return false;
5542 }
5543 
5544 bool SystemZABIInfo::isCompoundType(QualType Ty) const {
5545   return (Ty->isAnyComplexType() ||
5546           Ty->isVectorType() ||
5547           isAggregateTypeForABI(Ty));
5548 }
5549 
5550 bool SystemZABIInfo::isVectorArgumentType(QualType Ty) const {
5551   return (HasVector &&
5552           Ty->isVectorType() &&
5553           getContext().getTypeSize(Ty) <= 128);
5554 }
5555 
5556 bool SystemZABIInfo::isFPArgumentType(QualType Ty) const {
5557   if (const BuiltinType *BT = Ty->getAs<BuiltinType>())
5558     switch (BT->getKind()) {
5559     case BuiltinType::Float:
5560     case BuiltinType::Double:
5561       return true;
5562     default:
5563       return false;
5564     }
5565 
5566   return false;
5567 }
5568 
5569 QualType SystemZABIInfo::GetSingleElementType(QualType Ty) const {
5570   if (const RecordType *RT = Ty->getAsStructureType()) {
5571     const RecordDecl *RD = RT->getDecl();
5572     QualType Found;
5573 
5574     // If this is a C++ record, check the bases first.
5575     if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD))
5576       for (const auto &I : CXXRD->bases()) {
5577         QualType Base = I.getType();
5578 
5579         // Empty bases don't affect things either way.
5580         if (isEmptyRecord(getContext(), Base, true))
5581           continue;
5582 
5583         if (!Found.isNull())
5584           return Ty;
5585         Found = GetSingleElementType(Base);
5586       }
5587 
5588     // Check the fields.
5589     for (const auto *FD : RD->fields()) {
5590       // For compatibility with GCC, ignore empty bitfields in C++ mode.
5591       // Unlike isSingleElementStruct(), empty structure and array fields
5592       // do count.  So do anonymous bitfields that aren't zero-sized.
5593       if (getContext().getLangOpts().CPlusPlus &&
5594           FD->isBitField() && FD->getBitWidthValue(getContext()) == 0)
5595         continue;
5596 
5597       // Unlike isSingleElementStruct(), arrays do not count.
5598       // Nested structures still do though.
5599       if (!Found.isNull())
5600         return Ty;
5601       Found = GetSingleElementType(FD->getType());
5602     }
5603 
5604     // Unlike isSingleElementStruct(), trailing padding is allowed.
5605     // An 8-byte aligned struct s { float f; } is passed as a double.
5606     if (!Found.isNull())
5607       return Found;
5608   }
5609 
5610   return Ty;
5611 }
5612 
5613 Address SystemZABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5614                                   QualType Ty) const {
5615   // Assume that va_list type is correct; should be pointer to LLVM type:
5616   // struct {
5617   //   i64 __gpr;
5618   //   i64 __fpr;
5619   //   i8 *__overflow_arg_area;
5620   //   i8 *__reg_save_area;
5621   // };
5622 
5623   // Every non-vector argument occupies 8 bytes and is passed by preference
5624   // in either GPRs or FPRs.  Vector arguments occupy 8 or 16 bytes and are
5625   // always passed on the stack.
5626   Ty = getContext().getCanonicalType(Ty);
5627   auto TyInfo = getContext().getTypeInfoInChars(Ty);
5628   llvm::Type *ArgTy = CGF.ConvertTypeForMem(Ty);
5629   llvm::Type *DirectTy = ArgTy;
5630   ABIArgInfo AI = classifyArgumentType(Ty);
5631   bool IsIndirect = AI.isIndirect();
5632   bool InFPRs = false;
5633   bool IsVector = false;
5634   CharUnits UnpaddedSize;
5635   CharUnits DirectAlign;
5636   if (IsIndirect) {
5637     DirectTy = llvm::PointerType::getUnqual(DirectTy);
5638     UnpaddedSize = DirectAlign = CharUnits::fromQuantity(8);
5639   } else {
5640     if (AI.getCoerceToType())
5641       ArgTy = AI.getCoerceToType();
5642     InFPRs = ArgTy->isFloatTy() || ArgTy->isDoubleTy();
5643     IsVector = ArgTy->isVectorTy();
5644     UnpaddedSize = TyInfo.first;
5645     DirectAlign = TyInfo.second;
5646   }
5647   CharUnits PaddedSize = CharUnits::fromQuantity(8);
5648   if (IsVector && UnpaddedSize > PaddedSize)
5649     PaddedSize = CharUnits::fromQuantity(16);
5650   assert((UnpaddedSize <= PaddedSize) && "Invalid argument size.");
5651 
5652   CharUnits Padding = (PaddedSize - UnpaddedSize);
5653 
5654   llvm::Type *IndexTy = CGF.Int64Ty;
5655   llvm::Value *PaddedSizeV =
5656     llvm::ConstantInt::get(IndexTy, PaddedSize.getQuantity());
5657 
5658   if (IsVector) {
5659     // Work out the address of a vector argument on the stack.
5660     // Vector arguments are always passed in the high bits of a
5661     // single (8 byte) or double (16 byte) stack slot.
5662     Address OverflowArgAreaPtr =
5663       CGF.Builder.CreateStructGEP(VAListAddr, 2, CharUnits::fromQuantity(16),
5664                                   "overflow_arg_area_ptr");
5665     Address OverflowArgArea =
5666       Address(CGF.Builder.CreateLoad(OverflowArgAreaPtr, "overflow_arg_area"),
5667               TyInfo.second);
5668     Address MemAddr =
5669       CGF.Builder.CreateElementBitCast(OverflowArgArea, DirectTy, "mem_addr");
5670 
5671     // Update overflow_arg_area_ptr pointer
5672     llvm::Value *NewOverflowArgArea =
5673       CGF.Builder.CreateGEP(OverflowArgArea.getPointer(), PaddedSizeV,
5674                             "overflow_arg_area");
5675     CGF.Builder.CreateStore(NewOverflowArgArea, OverflowArgAreaPtr);
5676 
5677     return MemAddr;
5678   }
5679 
5680   assert(PaddedSize.getQuantity() == 8);
5681 
5682   unsigned MaxRegs, RegCountField, RegSaveIndex;
5683   CharUnits RegPadding;
5684   if (InFPRs) {
5685     MaxRegs = 4; // Maximum of 4 FPR arguments
5686     RegCountField = 1; // __fpr
5687     RegSaveIndex = 16; // save offset for f0
5688     RegPadding = CharUnits(); // floats are passed in the high bits of an FPR
5689   } else {
5690     MaxRegs = 5; // Maximum of 5 GPR arguments
5691     RegCountField = 0; // __gpr
5692     RegSaveIndex = 2; // save offset for r2
5693     RegPadding = Padding; // values are passed in the low bits of a GPR
5694   }
5695 
5696   Address RegCountPtr = CGF.Builder.CreateStructGEP(
5697       VAListAddr, RegCountField, RegCountField * CharUnits::fromQuantity(8),
5698       "reg_count_ptr");
5699   llvm::Value *RegCount = CGF.Builder.CreateLoad(RegCountPtr, "reg_count");
5700   llvm::Value *MaxRegsV = llvm::ConstantInt::get(IndexTy, MaxRegs);
5701   llvm::Value *InRegs = CGF.Builder.CreateICmpULT(RegCount, MaxRegsV,
5702                                                  "fits_in_regs");
5703 
5704   llvm::BasicBlock *InRegBlock = CGF.createBasicBlock("vaarg.in_reg");
5705   llvm::BasicBlock *InMemBlock = CGF.createBasicBlock("vaarg.in_mem");
5706   llvm::BasicBlock *ContBlock = CGF.createBasicBlock("vaarg.end");
5707   CGF.Builder.CreateCondBr(InRegs, InRegBlock, InMemBlock);
5708 
5709   // Emit code to load the value if it was passed in registers.
5710   CGF.EmitBlock(InRegBlock);
5711 
5712   // Work out the address of an argument register.
5713   llvm::Value *ScaledRegCount =
5714     CGF.Builder.CreateMul(RegCount, PaddedSizeV, "scaled_reg_count");
5715   llvm::Value *RegBase =
5716     llvm::ConstantInt::get(IndexTy, RegSaveIndex * PaddedSize.getQuantity()
5717                                       + RegPadding.getQuantity());
5718   llvm::Value *RegOffset =
5719     CGF.Builder.CreateAdd(ScaledRegCount, RegBase, "reg_offset");
5720   Address RegSaveAreaPtr =
5721       CGF.Builder.CreateStructGEP(VAListAddr, 3, CharUnits::fromQuantity(24),
5722                                   "reg_save_area_ptr");
5723   llvm::Value *RegSaveArea =
5724     CGF.Builder.CreateLoad(RegSaveAreaPtr, "reg_save_area");
5725   Address RawRegAddr(CGF.Builder.CreateGEP(RegSaveArea, RegOffset,
5726                                            "raw_reg_addr"),
5727                      PaddedSize);
5728   Address RegAddr =
5729     CGF.Builder.CreateElementBitCast(RawRegAddr, DirectTy, "reg_addr");
5730 
5731   // Update the register count
5732   llvm::Value *One = llvm::ConstantInt::get(IndexTy, 1);
5733   llvm::Value *NewRegCount =
5734     CGF.Builder.CreateAdd(RegCount, One, "reg_count");
5735   CGF.Builder.CreateStore(NewRegCount, RegCountPtr);
5736   CGF.EmitBranch(ContBlock);
5737 
5738   // Emit code to load the value if it was passed in memory.
5739   CGF.EmitBlock(InMemBlock);
5740 
5741   // Work out the address of a stack argument.
5742   Address OverflowArgAreaPtr = CGF.Builder.CreateStructGEP(
5743       VAListAddr, 2, CharUnits::fromQuantity(16), "overflow_arg_area_ptr");
5744   Address OverflowArgArea =
5745     Address(CGF.Builder.CreateLoad(OverflowArgAreaPtr, "overflow_arg_area"),
5746             PaddedSize);
5747   Address RawMemAddr =
5748     CGF.Builder.CreateConstByteGEP(OverflowArgArea, Padding, "raw_mem_addr");
5749   Address MemAddr =
5750     CGF.Builder.CreateElementBitCast(RawMemAddr, DirectTy, "mem_addr");
5751 
5752   // Update overflow_arg_area_ptr pointer
5753   llvm::Value *NewOverflowArgArea =
5754     CGF.Builder.CreateGEP(OverflowArgArea.getPointer(), PaddedSizeV,
5755                           "overflow_arg_area");
5756   CGF.Builder.CreateStore(NewOverflowArgArea, OverflowArgAreaPtr);
5757   CGF.EmitBranch(ContBlock);
5758 
5759   // Return the appropriate result.
5760   CGF.EmitBlock(ContBlock);
5761   Address ResAddr = emitMergePHI(CGF, RegAddr, InRegBlock,
5762                                  MemAddr, InMemBlock, "va_arg.addr");
5763 
5764   if (IsIndirect)
5765     ResAddr = Address(CGF.Builder.CreateLoad(ResAddr, "indirect_arg"),
5766                       TyInfo.second);
5767 
5768   return ResAddr;
5769 }
5770 
5771 ABIArgInfo SystemZABIInfo::classifyReturnType(QualType RetTy) const {
5772   if (RetTy->isVoidType())
5773     return ABIArgInfo::getIgnore();
5774   if (isVectorArgumentType(RetTy))
5775     return ABIArgInfo::getDirect();
5776   if (isCompoundType(RetTy) || getContext().getTypeSize(RetTy) > 64)
5777     return getNaturalAlignIndirect(RetTy);
5778   return (isPromotableIntegerType(RetTy) ?
5779           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
5780 }
5781 
5782 ABIArgInfo SystemZABIInfo::classifyArgumentType(QualType Ty) const {
5783   // Handle the generic C++ ABI.
5784   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
5785     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
5786 
5787   // Integers and enums are extended to full register width.
5788   if (isPromotableIntegerType(Ty))
5789     return ABIArgInfo::getExtend();
5790 
5791   // Handle vector types and vector-like structure types.  Note that
5792   // as opposed to float-like structure types, we do not allow any
5793   // padding for vector-like structures, so verify the sizes match.
5794   uint64_t Size = getContext().getTypeSize(Ty);
5795   QualType SingleElementTy = GetSingleElementType(Ty);
5796   if (isVectorArgumentType(SingleElementTy) &&
5797       getContext().getTypeSize(SingleElementTy) == Size)
5798     return ABIArgInfo::getDirect(CGT.ConvertType(SingleElementTy));
5799 
5800   // Values that are not 1, 2, 4 or 8 bytes in size are passed indirectly.
5801   if (Size != 8 && Size != 16 && Size != 32 && Size != 64)
5802     return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
5803 
5804   // Handle small structures.
5805   if (const RecordType *RT = Ty->getAs<RecordType>()) {
5806     // Structures with flexible arrays have variable length, so really
5807     // fail the size test above.
5808     const RecordDecl *RD = RT->getDecl();
5809     if (RD->hasFlexibleArrayMember())
5810       return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
5811 
5812     // The structure is passed as an unextended integer, a float, or a double.
5813     llvm::Type *PassTy;
5814     if (isFPArgumentType(SingleElementTy)) {
5815       assert(Size == 32 || Size == 64);
5816       if (Size == 32)
5817         PassTy = llvm::Type::getFloatTy(getVMContext());
5818       else
5819         PassTy = llvm::Type::getDoubleTy(getVMContext());
5820     } else
5821       PassTy = llvm::IntegerType::get(getVMContext(), Size);
5822     return ABIArgInfo::getDirect(PassTy);
5823   }
5824 
5825   // Non-structure compounds are passed indirectly.
5826   if (isCompoundType(Ty))
5827     return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
5828 
5829   return ABIArgInfo::getDirect(nullptr);
5830 }
5831 
5832 //===----------------------------------------------------------------------===//
5833 // MSP430 ABI Implementation
5834 //===----------------------------------------------------------------------===//
5835 
5836 namespace {
5837 
5838 class MSP430TargetCodeGenInfo : public TargetCodeGenInfo {
5839 public:
5840   MSP430TargetCodeGenInfo(CodeGenTypes &CGT)
5841     : TargetCodeGenInfo(new DefaultABIInfo(CGT)) {}
5842   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5843                            CodeGen::CodeGenModule &M) const override;
5844 };
5845 
5846 }
5847 
5848 void MSP430TargetCodeGenInfo::setTargetAttributes(const Decl *D,
5849                                                   llvm::GlobalValue *GV,
5850                                              CodeGen::CodeGenModule &M) const {
5851   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) {
5852     if (const MSP430InterruptAttr *attr = FD->getAttr<MSP430InterruptAttr>()) {
5853       // Handle 'interrupt' attribute:
5854       llvm::Function *F = cast<llvm::Function>(GV);
5855 
5856       // Step 1: Set ISR calling convention.
5857       F->setCallingConv(llvm::CallingConv::MSP430_INTR);
5858 
5859       // Step 2: Add attributes goodness.
5860       F->addFnAttr(llvm::Attribute::NoInline);
5861 
5862       // Step 3: Emit ISR vector alias.
5863       unsigned Num = attr->getNumber() / 2;
5864       llvm::GlobalAlias::create(llvm::Function::ExternalLinkage,
5865                                 "__isr_" + Twine(Num), F);
5866     }
5867   }
5868 }
5869 
5870 //===----------------------------------------------------------------------===//
5871 // MIPS ABI Implementation.  This works for both little-endian and
5872 // big-endian variants.
5873 //===----------------------------------------------------------------------===//
5874 
5875 namespace {
5876 class MipsABIInfo : public ABIInfo {
5877   bool IsO32;
5878   unsigned MinABIStackAlignInBytes, StackAlignInBytes;
5879   void CoerceToIntArgs(uint64_t TySize,
5880                        SmallVectorImpl<llvm::Type *> &ArgList) const;
5881   llvm::Type* HandleAggregates(QualType Ty, uint64_t TySize) const;
5882   llvm::Type* returnAggregateInRegs(QualType RetTy, uint64_t Size) const;
5883   llvm::Type* getPaddingType(uint64_t Align, uint64_t Offset) const;
5884 public:
5885   MipsABIInfo(CodeGenTypes &CGT, bool _IsO32) :
5886     ABIInfo(CGT), IsO32(_IsO32), MinABIStackAlignInBytes(IsO32 ? 4 : 8),
5887     StackAlignInBytes(IsO32 ? 8 : 16) {}
5888 
5889   ABIArgInfo classifyReturnType(QualType RetTy) const;
5890   ABIArgInfo classifyArgumentType(QualType RetTy, uint64_t &Offset) const;
5891   void computeInfo(CGFunctionInfo &FI) const override;
5892   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
5893                     QualType Ty) const override;
5894   bool shouldSignExtUnsignedType(QualType Ty) const override;
5895 };
5896 
5897 class MIPSTargetCodeGenInfo : public TargetCodeGenInfo {
5898   unsigned SizeOfUnwindException;
5899 public:
5900   MIPSTargetCodeGenInfo(CodeGenTypes &CGT, bool IsO32)
5901     : TargetCodeGenInfo(new MipsABIInfo(CGT, IsO32)),
5902       SizeOfUnwindException(IsO32 ? 24 : 32) {}
5903 
5904   int getDwarfEHStackPointer(CodeGen::CodeGenModule &CGM) const override {
5905     return 29;
5906   }
5907 
5908   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
5909                            CodeGen::CodeGenModule &CGM) const override {
5910     const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
5911     if (!FD) return;
5912     llvm::Function *Fn = cast<llvm::Function>(GV);
5913     if (FD->hasAttr<Mips16Attr>()) {
5914       Fn->addFnAttr("mips16");
5915     }
5916     else if (FD->hasAttr<NoMips16Attr>()) {
5917       Fn->addFnAttr("nomips16");
5918     }
5919 
5920     const MipsInterruptAttr *Attr = FD->getAttr<MipsInterruptAttr>();
5921     if (!Attr)
5922       return;
5923 
5924     const char *Kind;
5925     switch (Attr->getInterrupt()) {
5926     case MipsInterruptAttr::eic:     Kind = "eic"; break;
5927     case MipsInterruptAttr::sw0:     Kind = "sw0"; break;
5928     case MipsInterruptAttr::sw1:     Kind = "sw1"; break;
5929     case MipsInterruptAttr::hw0:     Kind = "hw0"; break;
5930     case MipsInterruptAttr::hw1:     Kind = "hw1"; break;
5931     case MipsInterruptAttr::hw2:     Kind = "hw2"; break;
5932     case MipsInterruptAttr::hw3:     Kind = "hw3"; break;
5933     case MipsInterruptAttr::hw4:     Kind = "hw4"; break;
5934     case MipsInterruptAttr::hw5:     Kind = "hw5"; break;
5935     }
5936 
5937     Fn->addFnAttr("interrupt", Kind);
5938 
5939   }
5940 
5941   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
5942                                llvm::Value *Address) const override;
5943 
5944   unsigned getSizeOfUnwindException() const override {
5945     return SizeOfUnwindException;
5946   }
5947 };
5948 }
5949 
5950 void MipsABIInfo::CoerceToIntArgs(
5951     uint64_t TySize, SmallVectorImpl<llvm::Type *> &ArgList) const {
5952   llvm::IntegerType *IntTy =
5953     llvm::IntegerType::get(getVMContext(), MinABIStackAlignInBytes * 8);
5954 
5955   // Add (TySize / MinABIStackAlignInBytes) args of IntTy.
5956   for (unsigned N = TySize / (MinABIStackAlignInBytes * 8); N; --N)
5957     ArgList.push_back(IntTy);
5958 
5959   // If necessary, add one more integer type to ArgList.
5960   unsigned R = TySize % (MinABIStackAlignInBytes * 8);
5961 
5962   if (R)
5963     ArgList.push_back(llvm::IntegerType::get(getVMContext(), R));
5964 }
5965 
5966 // In N32/64, an aligned double precision floating point field is passed in
5967 // a register.
5968 llvm::Type* MipsABIInfo::HandleAggregates(QualType Ty, uint64_t TySize) const {
5969   SmallVector<llvm::Type*, 8> ArgList, IntArgList;
5970 
5971   if (IsO32) {
5972     CoerceToIntArgs(TySize, ArgList);
5973     return llvm::StructType::get(getVMContext(), ArgList);
5974   }
5975 
5976   if (Ty->isComplexType())
5977     return CGT.ConvertType(Ty);
5978 
5979   const RecordType *RT = Ty->getAs<RecordType>();
5980 
5981   // Unions/vectors are passed in integer registers.
5982   if (!RT || !RT->isStructureOrClassType()) {
5983     CoerceToIntArgs(TySize, ArgList);
5984     return llvm::StructType::get(getVMContext(), ArgList);
5985   }
5986 
5987   const RecordDecl *RD = RT->getDecl();
5988   const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
5989   assert(!(TySize % 8) && "Size of structure must be multiple of 8.");
5990 
5991   uint64_t LastOffset = 0;
5992   unsigned idx = 0;
5993   llvm::IntegerType *I64 = llvm::IntegerType::get(getVMContext(), 64);
5994 
5995   // Iterate over fields in the struct/class and check if there are any aligned
5996   // double fields.
5997   for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
5998        i != e; ++i, ++idx) {
5999     const QualType Ty = i->getType();
6000     const BuiltinType *BT = Ty->getAs<BuiltinType>();
6001 
6002     if (!BT || BT->getKind() != BuiltinType::Double)
6003       continue;
6004 
6005     uint64_t Offset = Layout.getFieldOffset(idx);
6006     if (Offset % 64) // Ignore doubles that are not aligned.
6007       continue;
6008 
6009     // Add ((Offset - LastOffset) / 64) args of type i64.
6010     for (unsigned j = (Offset - LastOffset) / 64; j > 0; --j)
6011       ArgList.push_back(I64);
6012 
6013     // Add double type.
6014     ArgList.push_back(llvm::Type::getDoubleTy(getVMContext()));
6015     LastOffset = Offset + 64;
6016   }
6017 
6018   CoerceToIntArgs(TySize - LastOffset, IntArgList);
6019   ArgList.append(IntArgList.begin(), IntArgList.end());
6020 
6021   return llvm::StructType::get(getVMContext(), ArgList);
6022 }
6023 
6024 llvm::Type *MipsABIInfo::getPaddingType(uint64_t OrigOffset,
6025                                         uint64_t Offset) const {
6026   if (OrigOffset + MinABIStackAlignInBytes > Offset)
6027     return nullptr;
6028 
6029   return llvm::IntegerType::get(getVMContext(), (Offset - OrigOffset) * 8);
6030 }
6031 
6032 ABIArgInfo
6033 MipsABIInfo::classifyArgumentType(QualType Ty, uint64_t &Offset) const {
6034   Ty = useFirstFieldIfTransparentUnion(Ty);
6035 
6036   uint64_t OrigOffset = Offset;
6037   uint64_t TySize = getContext().getTypeSize(Ty);
6038   uint64_t Align = getContext().getTypeAlign(Ty) / 8;
6039 
6040   Align = std::min(std::max(Align, (uint64_t)MinABIStackAlignInBytes),
6041                    (uint64_t)StackAlignInBytes);
6042   unsigned CurrOffset = llvm::RoundUpToAlignment(Offset, Align);
6043   Offset = CurrOffset + llvm::RoundUpToAlignment(TySize, Align * 8) / 8;
6044 
6045   if (isAggregateTypeForABI(Ty) || Ty->isVectorType()) {
6046     // Ignore empty aggregates.
6047     if (TySize == 0)
6048       return ABIArgInfo::getIgnore();
6049 
6050     if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI())) {
6051       Offset = OrigOffset + MinABIStackAlignInBytes;
6052       return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
6053     }
6054 
6055     // If we have reached here, aggregates are passed directly by coercing to
6056     // another structure type. Padding is inserted if the offset of the
6057     // aggregate is unaligned.
6058     ABIArgInfo ArgInfo =
6059         ABIArgInfo::getDirect(HandleAggregates(Ty, TySize), 0,
6060                               getPaddingType(OrigOffset, CurrOffset));
6061     ArgInfo.setInReg(true);
6062     return ArgInfo;
6063   }
6064 
6065   // Treat an enum type as its underlying type.
6066   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
6067     Ty = EnumTy->getDecl()->getIntegerType();
6068 
6069   // All integral types are promoted to the GPR width.
6070   if (Ty->isIntegralOrEnumerationType())
6071     return ABIArgInfo::getExtend();
6072 
6073   return ABIArgInfo::getDirect(
6074       nullptr, 0, IsO32 ? nullptr : getPaddingType(OrigOffset, CurrOffset));
6075 }
6076 
6077 llvm::Type*
6078 MipsABIInfo::returnAggregateInRegs(QualType RetTy, uint64_t Size) const {
6079   const RecordType *RT = RetTy->getAs<RecordType>();
6080   SmallVector<llvm::Type*, 8> RTList;
6081 
6082   if (RT && RT->isStructureOrClassType()) {
6083     const RecordDecl *RD = RT->getDecl();
6084     const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD);
6085     unsigned FieldCnt = Layout.getFieldCount();
6086 
6087     // N32/64 returns struct/classes in floating point registers if the
6088     // following conditions are met:
6089     // 1. The size of the struct/class is no larger than 128-bit.
6090     // 2. The struct/class has one or two fields all of which are floating
6091     //    point types.
6092     // 3. The offset of the first field is zero (this follows what gcc does).
6093     //
6094     // Any other composite results are returned in integer registers.
6095     //
6096     if (FieldCnt && (FieldCnt <= 2) && !Layout.getFieldOffset(0)) {
6097       RecordDecl::field_iterator b = RD->field_begin(), e = RD->field_end();
6098       for (; b != e; ++b) {
6099         const BuiltinType *BT = b->getType()->getAs<BuiltinType>();
6100 
6101         if (!BT || !BT->isFloatingPoint())
6102           break;
6103 
6104         RTList.push_back(CGT.ConvertType(b->getType()));
6105       }
6106 
6107       if (b == e)
6108         return llvm::StructType::get(getVMContext(), RTList,
6109                                      RD->hasAttr<PackedAttr>());
6110 
6111       RTList.clear();
6112     }
6113   }
6114 
6115   CoerceToIntArgs(Size, RTList);
6116   return llvm::StructType::get(getVMContext(), RTList);
6117 }
6118 
6119 ABIArgInfo MipsABIInfo::classifyReturnType(QualType RetTy) const {
6120   uint64_t Size = getContext().getTypeSize(RetTy);
6121 
6122   if (RetTy->isVoidType())
6123     return ABIArgInfo::getIgnore();
6124 
6125   // O32 doesn't treat zero-sized structs differently from other structs.
6126   // However, N32/N64 ignores zero sized return values.
6127   if (!IsO32 && Size == 0)
6128     return ABIArgInfo::getIgnore();
6129 
6130   if (isAggregateTypeForABI(RetTy) || RetTy->isVectorType()) {
6131     if (Size <= 128) {
6132       if (RetTy->isAnyComplexType())
6133         return ABIArgInfo::getDirect();
6134 
6135       // O32 returns integer vectors in registers and N32/N64 returns all small
6136       // aggregates in registers.
6137       if (!IsO32 ||
6138           (RetTy->isVectorType() && !RetTy->hasFloatingRepresentation())) {
6139         ABIArgInfo ArgInfo =
6140             ABIArgInfo::getDirect(returnAggregateInRegs(RetTy, Size));
6141         ArgInfo.setInReg(true);
6142         return ArgInfo;
6143       }
6144     }
6145 
6146     return getNaturalAlignIndirect(RetTy);
6147   }
6148 
6149   // Treat an enum type as its underlying type.
6150   if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
6151     RetTy = EnumTy->getDecl()->getIntegerType();
6152 
6153   return (RetTy->isPromotableIntegerType() ?
6154           ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
6155 }
6156 
6157 void MipsABIInfo::computeInfo(CGFunctionInfo &FI) const {
6158   ABIArgInfo &RetInfo = FI.getReturnInfo();
6159   if (!getCXXABI().classifyReturnType(FI))
6160     RetInfo = classifyReturnType(FI.getReturnType());
6161 
6162   // Check if a pointer to an aggregate is passed as a hidden argument.
6163   uint64_t Offset = RetInfo.isIndirect() ? MinABIStackAlignInBytes : 0;
6164 
6165   for (auto &I : FI.arguments())
6166     I.info = classifyArgumentType(I.type, Offset);
6167 }
6168 
6169 Address MipsABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6170                                QualType OrigTy) const {
6171   QualType Ty = OrigTy;
6172 
6173   // Integer arguments are promoted to 32-bit on O32 and 64-bit on N32/N64.
6174   // Pointers are also promoted in the same way but this only matters for N32.
6175   unsigned SlotSizeInBits = IsO32 ? 32 : 64;
6176   unsigned PtrWidth = getTarget().getPointerWidth(0);
6177   bool DidPromote = false;
6178   if ((Ty->isIntegerType() &&
6179           getContext().getIntWidth(Ty) < SlotSizeInBits) ||
6180       (Ty->isPointerType() && PtrWidth < SlotSizeInBits)) {
6181     DidPromote = true;
6182     Ty = getContext().getIntTypeForBitwidth(SlotSizeInBits,
6183                                             Ty->isSignedIntegerType());
6184   }
6185 
6186   auto TyInfo = getContext().getTypeInfoInChars(Ty);
6187 
6188   // The alignment of things in the argument area is never larger than
6189   // StackAlignInBytes.
6190   TyInfo.second =
6191     std::min(TyInfo.second, CharUnits::fromQuantity(StackAlignInBytes));
6192 
6193   // MinABIStackAlignInBytes is the size of argument slots on the stack.
6194   CharUnits ArgSlotSize = CharUnits::fromQuantity(MinABIStackAlignInBytes);
6195 
6196   Address Addr = emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*indirect*/ false,
6197                           TyInfo, ArgSlotSize, /*AllowHigherAlign*/ true);
6198 
6199 
6200   // If there was a promotion, "unpromote" into a temporary.
6201   // TODO: can we just use a pointer into a subset of the original slot?
6202   if (DidPromote) {
6203     Address Temp = CGF.CreateMemTemp(OrigTy, "vaarg.promotion-temp");
6204     llvm::Value *Promoted = CGF.Builder.CreateLoad(Addr);
6205 
6206     // Truncate down to the right width.
6207     llvm::Type *IntTy = (OrigTy->isIntegerType() ? Temp.getElementType()
6208                                                  : CGF.IntPtrTy);
6209     llvm::Value *V = CGF.Builder.CreateTrunc(Promoted, IntTy);
6210     if (OrigTy->isPointerType())
6211       V = CGF.Builder.CreateIntToPtr(V, Temp.getElementType());
6212 
6213     CGF.Builder.CreateStore(V, Temp);
6214     Addr = Temp;
6215   }
6216 
6217   return Addr;
6218 }
6219 
6220 bool MipsABIInfo::shouldSignExtUnsignedType(QualType Ty) const {
6221   int TySize = getContext().getTypeSize(Ty);
6222 
6223   // MIPS64 ABI requires unsigned 32 bit integers to be sign extended.
6224   if (Ty->isUnsignedIntegerOrEnumerationType() && TySize == 32)
6225     return true;
6226 
6227   return false;
6228 }
6229 
6230 bool
6231 MIPSTargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
6232                                                llvm::Value *Address) const {
6233   // This information comes from gcc's implementation, which seems to
6234   // as canonical as it gets.
6235 
6236   // Everything on MIPS is 4 bytes.  Double-precision FP registers
6237   // are aliased to pairs of single-precision FP registers.
6238   llvm::Value *Four8 = llvm::ConstantInt::get(CGF.Int8Ty, 4);
6239 
6240   // 0-31 are the general purpose registers, $0 - $31.
6241   // 32-63 are the floating-point registers, $f0 - $f31.
6242   // 64 and 65 are the multiply/divide registers, $hi and $lo.
6243   // 66 is the (notional, I think) register for signal-handler return.
6244   AssignToArrayRange(CGF.Builder, Address, Four8, 0, 65);
6245 
6246   // 67-74 are the floating-point status registers, $fcc0 - $fcc7.
6247   // They are one bit wide and ignored here.
6248 
6249   // 80-111 are the coprocessor 0 registers, $c0r0 - $c0r31.
6250   // (coprocessor 1 is the FP unit)
6251   // 112-143 are the coprocessor 2 registers, $c2r0 - $c2r31.
6252   // 144-175 are the coprocessor 3 registers, $c3r0 - $c3r31.
6253   // 176-181 are the DSP accumulator registers.
6254   AssignToArrayRange(CGF.Builder, Address, Four8, 80, 181);
6255   return false;
6256 }
6257 
6258 //===----------------------------------------------------------------------===//
6259 // TCE ABI Implementation (see http://tce.cs.tut.fi). Uses mostly the defaults.
6260 // Currently subclassed only to implement custom OpenCL C function attribute
6261 // handling.
6262 //===----------------------------------------------------------------------===//
6263 
6264 namespace {
6265 
6266 class TCETargetCodeGenInfo : public DefaultTargetCodeGenInfo {
6267 public:
6268   TCETargetCodeGenInfo(CodeGenTypes &CGT)
6269     : DefaultTargetCodeGenInfo(CGT) {}
6270 
6271   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
6272                            CodeGen::CodeGenModule &M) const override;
6273 };
6274 
6275 void TCETargetCodeGenInfo::setTargetAttributes(
6276     const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &M) const {
6277   const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
6278   if (!FD) return;
6279 
6280   llvm::Function *F = cast<llvm::Function>(GV);
6281 
6282   if (M.getLangOpts().OpenCL) {
6283     if (FD->hasAttr<OpenCLKernelAttr>()) {
6284       // OpenCL C Kernel functions are not subject to inlining
6285       F->addFnAttr(llvm::Attribute::NoInline);
6286       const ReqdWorkGroupSizeAttr *Attr = FD->getAttr<ReqdWorkGroupSizeAttr>();
6287       if (Attr) {
6288         // Convert the reqd_work_group_size() attributes to metadata.
6289         llvm::LLVMContext &Context = F->getContext();
6290         llvm::NamedMDNode *OpenCLMetadata =
6291             M.getModule().getOrInsertNamedMetadata(
6292                 "opencl.kernel_wg_size_info");
6293 
6294         SmallVector<llvm::Metadata *, 5> Operands;
6295         Operands.push_back(llvm::ConstantAsMetadata::get(F));
6296 
6297         Operands.push_back(
6298             llvm::ConstantAsMetadata::get(llvm::Constant::getIntegerValue(
6299                 M.Int32Ty, llvm::APInt(32, Attr->getXDim()))));
6300         Operands.push_back(
6301             llvm::ConstantAsMetadata::get(llvm::Constant::getIntegerValue(
6302                 M.Int32Ty, llvm::APInt(32, Attr->getYDim()))));
6303         Operands.push_back(
6304             llvm::ConstantAsMetadata::get(llvm::Constant::getIntegerValue(
6305                 M.Int32Ty, llvm::APInt(32, Attr->getZDim()))));
6306 
6307         // Add a boolean constant operand for "required" (true) or "hint"
6308         // (false) for implementing the work_group_size_hint attr later.
6309         // Currently always true as the hint is not yet implemented.
6310         Operands.push_back(
6311             llvm::ConstantAsMetadata::get(llvm::ConstantInt::getTrue(Context)));
6312         OpenCLMetadata->addOperand(llvm::MDNode::get(Context, Operands));
6313       }
6314     }
6315   }
6316 }
6317 
6318 }
6319 
6320 //===----------------------------------------------------------------------===//
6321 // Hexagon ABI Implementation
6322 //===----------------------------------------------------------------------===//
6323 
6324 namespace {
6325 
6326 class HexagonABIInfo : public ABIInfo {
6327 
6328 
6329 public:
6330   HexagonABIInfo(CodeGenTypes &CGT) : ABIInfo(CGT) {}
6331 
6332 private:
6333 
6334   ABIArgInfo classifyReturnType(QualType RetTy) const;
6335   ABIArgInfo classifyArgumentType(QualType RetTy) const;
6336 
6337   void computeInfo(CGFunctionInfo &FI) const override;
6338 
6339   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6340                     QualType Ty) const override;
6341 };
6342 
6343 class HexagonTargetCodeGenInfo : public TargetCodeGenInfo {
6344 public:
6345   HexagonTargetCodeGenInfo(CodeGenTypes &CGT)
6346     :TargetCodeGenInfo(new HexagonABIInfo(CGT)) {}
6347 
6348   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
6349     return 29;
6350   }
6351 };
6352 
6353 }
6354 
6355 void HexagonABIInfo::computeInfo(CGFunctionInfo &FI) const {
6356   if (!getCXXABI().classifyReturnType(FI))
6357     FI.getReturnInfo() = classifyReturnType(FI.getReturnType());
6358   for (auto &I : FI.arguments())
6359     I.info = classifyArgumentType(I.type);
6360 }
6361 
6362 ABIArgInfo HexagonABIInfo::classifyArgumentType(QualType Ty) const {
6363   if (!isAggregateTypeForABI(Ty)) {
6364     // Treat an enum type as its underlying type.
6365     if (const EnumType *EnumTy = Ty->getAs<EnumType>())
6366       Ty = EnumTy->getDecl()->getIntegerType();
6367 
6368     return (Ty->isPromotableIntegerType() ?
6369             ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
6370   }
6371 
6372   // Ignore empty records.
6373   if (isEmptyRecord(getContext(), Ty, true))
6374     return ABIArgInfo::getIgnore();
6375 
6376   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
6377     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
6378 
6379   uint64_t Size = getContext().getTypeSize(Ty);
6380   if (Size > 64)
6381     return getNaturalAlignIndirect(Ty, /*ByVal=*/true);
6382     // Pass in the smallest viable integer type.
6383   else if (Size > 32)
6384       return ABIArgInfo::getDirect(llvm::Type::getInt64Ty(getVMContext()));
6385   else if (Size > 16)
6386       return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
6387   else if (Size > 8)
6388       return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
6389   else
6390       return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
6391 }
6392 
6393 ABIArgInfo HexagonABIInfo::classifyReturnType(QualType RetTy) const {
6394   if (RetTy->isVoidType())
6395     return ABIArgInfo::getIgnore();
6396 
6397   // Large vector types should be returned via memory.
6398   if (RetTy->isVectorType() && getContext().getTypeSize(RetTy) > 64)
6399     return getNaturalAlignIndirect(RetTy);
6400 
6401   if (!isAggregateTypeForABI(RetTy)) {
6402     // Treat an enum type as its underlying type.
6403     if (const EnumType *EnumTy = RetTy->getAs<EnumType>())
6404       RetTy = EnumTy->getDecl()->getIntegerType();
6405 
6406     return (RetTy->isPromotableIntegerType() ?
6407             ABIArgInfo::getExtend() : ABIArgInfo::getDirect());
6408   }
6409 
6410   if (isEmptyRecord(getContext(), RetTy, true))
6411     return ABIArgInfo::getIgnore();
6412 
6413   // Aggregates <= 8 bytes are returned in r0; other aggregates
6414   // are returned indirectly.
6415   uint64_t Size = getContext().getTypeSize(RetTy);
6416   if (Size <= 64) {
6417     // Return in the smallest viable integer type.
6418     if (Size <= 8)
6419       return ABIArgInfo::getDirect(llvm::Type::getInt8Ty(getVMContext()));
6420     if (Size <= 16)
6421       return ABIArgInfo::getDirect(llvm::Type::getInt16Ty(getVMContext()));
6422     if (Size <= 32)
6423       return ABIArgInfo::getDirect(llvm::Type::getInt32Ty(getVMContext()));
6424     return ABIArgInfo::getDirect(llvm::Type::getInt64Ty(getVMContext()));
6425   }
6426 
6427   return getNaturalAlignIndirect(RetTy, /*ByVal=*/true);
6428 }
6429 
6430 Address HexagonABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6431                                   QualType Ty) const {
6432   // FIXME: Someone needs to audit that this handle alignment correctly.
6433   return emitVoidPtrVAArg(CGF, VAListAddr, Ty, /*indirect*/ false,
6434                           getContext().getTypeInfoInChars(Ty),
6435                           CharUnits::fromQuantity(4),
6436                           /*AllowHigherAlign*/ true);
6437 }
6438 
6439 //===----------------------------------------------------------------------===//
6440 // AMDGPU ABI Implementation
6441 //===----------------------------------------------------------------------===//
6442 
6443 namespace {
6444 
6445 class AMDGPUTargetCodeGenInfo : public TargetCodeGenInfo {
6446 public:
6447   AMDGPUTargetCodeGenInfo(CodeGenTypes &CGT)
6448     : TargetCodeGenInfo(new DefaultABIInfo(CGT)) {}
6449   void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
6450                            CodeGen::CodeGenModule &M) const override;
6451 };
6452 
6453 }
6454 
6455 void AMDGPUTargetCodeGenInfo::setTargetAttributes(
6456   const Decl *D,
6457   llvm::GlobalValue *GV,
6458   CodeGen::CodeGenModule &M) const {
6459   const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
6460   if (!FD)
6461     return;
6462 
6463   if (const auto Attr = FD->getAttr<AMDGPUNumVGPRAttr>()) {
6464     llvm::Function *F = cast<llvm::Function>(GV);
6465     uint32_t NumVGPR = Attr->getNumVGPR();
6466     if (NumVGPR != 0)
6467       F->addFnAttr("amdgpu_num_vgpr", llvm::utostr(NumVGPR));
6468   }
6469 
6470   if (const auto Attr = FD->getAttr<AMDGPUNumSGPRAttr>()) {
6471     llvm::Function *F = cast<llvm::Function>(GV);
6472     unsigned NumSGPR = Attr->getNumSGPR();
6473     if (NumSGPR != 0)
6474       F->addFnAttr("amdgpu_num_sgpr", llvm::utostr(NumSGPR));
6475   }
6476 }
6477 
6478 
6479 //===----------------------------------------------------------------------===//
6480 // SPARC v9 ABI Implementation.
6481 // Based on the SPARC Compliance Definition version 2.4.1.
6482 //
6483 // Function arguments a mapped to a nominal "parameter array" and promoted to
6484 // registers depending on their type. Each argument occupies 8 or 16 bytes in
6485 // the array, structs larger than 16 bytes are passed indirectly.
6486 //
6487 // One case requires special care:
6488 //
6489 //   struct mixed {
6490 //     int i;
6491 //     float f;
6492 //   };
6493 //
6494 // When a struct mixed is passed by value, it only occupies 8 bytes in the
6495 // parameter array, but the int is passed in an integer register, and the float
6496 // is passed in a floating point register. This is represented as two arguments
6497 // with the LLVM IR inreg attribute:
6498 //
6499 //   declare void f(i32 inreg %i, float inreg %f)
6500 //
6501 // The code generator will only allocate 4 bytes from the parameter array for
6502 // the inreg arguments. All other arguments are allocated a multiple of 8
6503 // bytes.
6504 //
6505 namespace {
6506 class SparcV9ABIInfo : public ABIInfo {
6507 public:
6508   SparcV9ABIInfo(CodeGenTypes &CGT) : ABIInfo(CGT) {}
6509 
6510 private:
6511   ABIArgInfo classifyType(QualType RetTy, unsigned SizeLimit) const;
6512   void computeInfo(CGFunctionInfo &FI) const override;
6513   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6514                     QualType Ty) const override;
6515 
6516   // Coercion type builder for structs passed in registers. The coercion type
6517   // serves two purposes:
6518   //
6519   // 1. Pad structs to a multiple of 64 bits, so they are passed 'left-aligned'
6520   //    in registers.
6521   // 2. Expose aligned floating point elements as first-level elements, so the
6522   //    code generator knows to pass them in floating point registers.
6523   //
6524   // We also compute the InReg flag which indicates that the struct contains
6525   // aligned 32-bit floats.
6526   //
6527   struct CoerceBuilder {
6528     llvm::LLVMContext &Context;
6529     const llvm::DataLayout &DL;
6530     SmallVector<llvm::Type*, 8> Elems;
6531     uint64_t Size;
6532     bool InReg;
6533 
6534     CoerceBuilder(llvm::LLVMContext &c, const llvm::DataLayout &dl)
6535       : Context(c), DL(dl), Size(0), InReg(false) {}
6536 
6537     // Pad Elems with integers until Size is ToSize.
6538     void pad(uint64_t ToSize) {
6539       assert(ToSize >= Size && "Cannot remove elements");
6540       if (ToSize == Size)
6541         return;
6542 
6543       // Finish the current 64-bit word.
6544       uint64_t Aligned = llvm::RoundUpToAlignment(Size, 64);
6545       if (Aligned > Size && Aligned <= ToSize) {
6546         Elems.push_back(llvm::IntegerType::get(Context, Aligned - Size));
6547         Size = Aligned;
6548       }
6549 
6550       // Add whole 64-bit words.
6551       while (Size + 64 <= ToSize) {
6552         Elems.push_back(llvm::Type::getInt64Ty(Context));
6553         Size += 64;
6554       }
6555 
6556       // Final in-word padding.
6557       if (Size < ToSize) {
6558         Elems.push_back(llvm::IntegerType::get(Context, ToSize - Size));
6559         Size = ToSize;
6560       }
6561     }
6562 
6563     // Add a floating point element at Offset.
6564     void addFloat(uint64_t Offset, llvm::Type *Ty, unsigned Bits) {
6565       // Unaligned floats are treated as integers.
6566       if (Offset % Bits)
6567         return;
6568       // The InReg flag is only required if there are any floats < 64 bits.
6569       if (Bits < 64)
6570         InReg = true;
6571       pad(Offset);
6572       Elems.push_back(Ty);
6573       Size = Offset + Bits;
6574     }
6575 
6576     // Add a struct type to the coercion type, starting at Offset (in bits).
6577     void addStruct(uint64_t Offset, llvm::StructType *StrTy) {
6578       const llvm::StructLayout *Layout = DL.getStructLayout(StrTy);
6579       for (unsigned i = 0, e = StrTy->getNumElements(); i != e; ++i) {
6580         llvm::Type *ElemTy = StrTy->getElementType(i);
6581         uint64_t ElemOffset = Offset + Layout->getElementOffsetInBits(i);
6582         switch (ElemTy->getTypeID()) {
6583         case llvm::Type::StructTyID:
6584           addStruct(ElemOffset, cast<llvm::StructType>(ElemTy));
6585           break;
6586         case llvm::Type::FloatTyID:
6587           addFloat(ElemOffset, ElemTy, 32);
6588           break;
6589         case llvm::Type::DoubleTyID:
6590           addFloat(ElemOffset, ElemTy, 64);
6591           break;
6592         case llvm::Type::FP128TyID:
6593           addFloat(ElemOffset, ElemTy, 128);
6594           break;
6595         case llvm::Type::PointerTyID:
6596           if (ElemOffset % 64 == 0) {
6597             pad(ElemOffset);
6598             Elems.push_back(ElemTy);
6599             Size += 64;
6600           }
6601           break;
6602         default:
6603           break;
6604         }
6605       }
6606     }
6607 
6608     // Check if Ty is a usable substitute for the coercion type.
6609     bool isUsableType(llvm::StructType *Ty) const {
6610       return llvm::makeArrayRef(Elems) == Ty->elements();
6611     }
6612 
6613     // Get the coercion type as a literal struct type.
6614     llvm::Type *getType() const {
6615       if (Elems.size() == 1)
6616         return Elems.front();
6617       else
6618         return llvm::StructType::get(Context, Elems);
6619     }
6620   };
6621 };
6622 } // end anonymous namespace
6623 
6624 ABIArgInfo
6625 SparcV9ABIInfo::classifyType(QualType Ty, unsigned SizeLimit) const {
6626   if (Ty->isVoidType())
6627     return ABIArgInfo::getIgnore();
6628 
6629   uint64_t Size = getContext().getTypeSize(Ty);
6630 
6631   // Anything too big to fit in registers is passed with an explicit indirect
6632   // pointer / sret pointer.
6633   if (Size > SizeLimit)
6634     return getNaturalAlignIndirect(Ty, /*ByVal=*/false);
6635 
6636   // Treat an enum type as its underlying type.
6637   if (const EnumType *EnumTy = Ty->getAs<EnumType>())
6638     Ty = EnumTy->getDecl()->getIntegerType();
6639 
6640   // Integer types smaller than a register are extended.
6641   if (Size < 64 && Ty->isIntegerType())
6642     return ABIArgInfo::getExtend();
6643 
6644   // Other non-aggregates go in registers.
6645   if (!isAggregateTypeForABI(Ty))
6646     return ABIArgInfo::getDirect();
6647 
6648   // If a C++ object has either a non-trivial copy constructor or a non-trivial
6649   // destructor, it is passed with an explicit indirect pointer / sret pointer.
6650   if (CGCXXABI::RecordArgABI RAA = getRecordArgABI(Ty, getCXXABI()))
6651     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
6652 
6653   // This is a small aggregate type that should be passed in registers.
6654   // Build a coercion type from the LLVM struct type.
6655   llvm::StructType *StrTy = dyn_cast<llvm::StructType>(CGT.ConvertType(Ty));
6656   if (!StrTy)
6657     return ABIArgInfo::getDirect();
6658 
6659   CoerceBuilder CB(getVMContext(), getDataLayout());
6660   CB.addStruct(0, StrTy);
6661   CB.pad(llvm::RoundUpToAlignment(CB.DL.getTypeSizeInBits(StrTy), 64));
6662 
6663   // Try to use the original type for coercion.
6664   llvm::Type *CoerceTy = CB.isUsableType(StrTy) ? StrTy : CB.getType();
6665 
6666   if (CB.InReg)
6667     return ABIArgInfo::getDirectInReg(CoerceTy);
6668   else
6669     return ABIArgInfo::getDirect(CoerceTy);
6670 }
6671 
6672 Address SparcV9ABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6673                                   QualType Ty) const {
6674   ABIArgInfo AI = classifyType(Ty, 16 * 8);
6675   llvm::Type *ArgTy = CGT.ConvertType(Ty);
6676   if (AI.canHaveCoerceToType() && !AI.getCoerceToType())
6677     AI.setCoerceToType(ArgTy);
6678 
6679   CharUnits SlotSize = CharUnits::fromQuantity(8);
6680 
6681   CGBuilderTy &Builder = CGF.Builder;
6682   Address Addr(Builder.CreateLoad(VAListAddr, "ap.cur"), SlotSize);
6683   llvm::Type *ArgPtrTy = llvm::PointerType::getUnqual(ArgTy);
6684 
6685   auto TypeInfo = getContext().getTypeInfoInChars(Ty);
6686 
6687   Address ArgAddr = Address::invalid();
6688   CharUnits Stride;
6689   switch (AI.getKind()) {
6690   case ABIArgInfo::Expand:
6691   case ABIArgInfo::InAlloca:
6692     llvm_unreachable("Unsupported ABI kind for va_arg");
6693 
6694   case ABIArgInfo::Extend: {
6695     Stride = SlotSize;
6696     CharUnits Offset = SlotSize - TypeInfo.first;
6697     ArgAddr = Builder.CreateConstInBoundsByteGEP(Addr, Offset, "extend");
6698     break;
6699   }
6700 
6701   case ABIArgInfo::Direct: {
6702     auto AllocSize = getDataLayout().getTypeAllocSize(AI.getCoerceToType());
6703     Stride = CharUnits::fromQuantity(AllocSize).RoundUpToAlignment(SlotSize);
6704     ArgAddr = Addr;
6705     break;
6706   }
6707 
6708   case ABIArgInfo::Indirect:
6709     Stride = SlotSize;
6710     ArgAddr = Builder.CreateElementBitCast(Addr, ArgPtrTy, "indirect");
6711     ArgAddr = Address(Builder.CreateLoad(ArgAddr, "indirect.arg"),
6712                       TypeInfo.second);
6713     break;
6714 
6715   case ABIArgInfo::Ignore:
6716     return Address(llvm::UndefValue::get(ArgPtrTy), TypeInfo.second);
6717   }
6718 
6719   // Update VAList.
6720   llvm::Value *NextPtr =
6721     Builder.CreateConstInBoundsByteGEP(Addr.getPointer(), Stride, "ap.next");
6722   Builder.CreateStore(NextPtr, VAListAddr);
6723 
6724   return Builder.CreateBitCast(ArgAddr, ArgPtrTy, "arg.addr");
6725 }
6726 
6727 void SparcV9ABIInfo::computeInfo(CGFunctionInfo &FI) const {
6728   FI.getReturnInfo() = classifyType(FI.getReturnType(), 32 * 8);
6729   for (auto &I : FI.arguments())
6730     I.info = classifyType(I.type, 16 * 8);
6731 }
6732 
6733 namespace {
6734 class SparcV9TargetCodeGenInfo : public TargetCodeGenInfo {
6735 public:
6736   SparcV9TargetCodeGenInfo(CodeGenTypes &CGT)
6737     : TargetCodeGenInfo(new SparcV9ABIInfo(CGT)) {}
6738 
6739   int getDwarfEHStackPointer(CodeGen::CodeGenModule &M) const override {
6740     return 14;
6741   }
6742 
6743   bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
6744                                llvm::Value *Address) const override;
6745 };
6746 } // end anonymous namespace
6747 
6748 bool
6749 SparcV9TargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
6750                                                 llvm::Value *Address) const {
6751   // This is calculated from the LLVM and GCC tables and verified
6752   // against gcc output.  AFAIK all ABIs use the same encoding.
6753 
6754   CodeGen::CGBuilderTy &Builder = CGF.Builder;
6755 
6756   llvm::IntegerType *i8 = CGF.Int8Ty;
6757   llvm::Value *Four8 = llvm::ConstantInt::get(i8, 4);
6758   llvm::Value *Eight8 = llvm::ConstantInt::get(i8, 8);
6759 
6760   // 0-31: the 8-byte general-purpose registers
6761   AssignToArrayRange(Builder, Address, Eight8, 0, 31);
6762 
6763   // 32-63: f0-31, the 4-byte floating-point registers
6764   AssignToArrayRange(Builder, Address, Four8, 32, 63);
6765 
6766   //   Y   = 64
6767   //   PSR = 65
6768   //   WIM = 66
6769   //   TBR = 67
6770   //   PC  = 68
6771   //   NPC = 69
6772   //   FSR = 70
6773   //   CSR = 71
6774   AssignToArrayRange(Builder, Address, Eight8, 64, 71);
6775 
6776   // 72-87: d0-15, the 8-byte floating-point registers
6777   AssignToArrayRange(Builder, Address, Eight8, 72, 87);
6778 
6779   return false;
6780 }
6781 
6782 
6783 //===----------------------------------------------------------------------===//
6784 // XCore ABI Implementation
6785 //===----------------------------------------------------------------------===//
6786 
6787 namespace {
6788 
6789 /// A SmallStringEnc instance is used to build up the TypeString by passing
6790 /// it by reference between functions that append to it.
6791 typedef llvm::SmallString<128> SmallStringEnc;
6792 
6793 /// TypeStringCache caches the meta encodings of Types.
6794 ///
6795 /// The reason for caching TypeStrings is two fold:
6796 ///   1. To cache a type's encoding for later uses;
6797 ///   2. As a means to break recursive member type inclusion.
6798 ///
6799 /// A cache Entry can have a Status of:
6800 ///   NonRecursive:   The type encoding is not recursive;
6801 ///   Recursive:      The type encoding is recursive;
6802 ///   Incomplete:     An incomplete TypeString;
6803 ///   IncompleteUsed: An incomplete TypeString that has been used in a
6804 ///                   Recursive type encoding.
6805 ///
6806 /// A NonRecursive entry will have all of its sub-members expanded as fully
6807 /// as possible. Whilst it may contain types which are recursive, the type
6808 /// itself is not recursive and thus its encoding may be safely used whenever
6809 /// the type is encountered.
6810 ///
6811 /// A Recursive entry will have all of its sub-members expanded as fully as
6812 /// possible. The type itself is recursive and it may contain other types which
6813 /// are recursive. The Recursive encoding must not be used during the expansion
6814 /// of a recursive type's recursive branch. For simplicity the code uses
6815 /// IncompleteCount to reject all usage of Recursive encodings for member types.
6816 ///
6817 /// An Incomplete entry is always a RecordType and only encodes its
6818 /// identifier e.g. "s(S){}". Incomplete 'StubEnc' entries are ephemeral and
6819 /// are placed into the cache during type expansion as a means to identify and
6820 /// handle recursive inclusion of types as sub-members. If there is recursion
6821 /// the entry becomes IncompleteUsed.
6822 ///
6823 /// During the expansion of a RecordType's members:
6824 ///
6825 ///   If the cache contains a NonRecursive encoding for the member type, the
6826 ///   cached encoding is used;
6827 ///
6828 ///   If the cache contains a Recursive encoding for the member type, the
6829 ///   cached encoding is 'Swapped' out, as it may be incorrect, and...
6830 ///
6831 ///   If the member is a RecordType, an Incomplete encoding is placed into the
6832 ///   cache to break potential recursive inclusion of itself as a sub-member;
6833 ///
6834 ///   Once a member RecordType has been expanded, its temporary incomplete
6835 ///   entry is removed from the cache. If a Recursive encoding was swapped out
6836 ///   it is swapped back in;
6837 ///
6838 ///   If an incomplete entry is used to expand a sub-member, the incomplete
6839 ///   entry is marked as IncompleteUsed. The cache keeps count of how many
6840 ///   IncompleteUsed entries it currently contains in IncompleteUsedCount;
6841 ///
6842 ///   If a member's encoding is found to be a NonRecursive or Recursive viz:
6843 ///   IncompleteUsedCount==0, the member's encoding is added to the cache.
6844 ///   Else the member is part of a recursive type and thus the recursion has
6845 ///   been exited too soon for the encoding to be correct for the member.
6846 ///
6847 class TypeStringCache {
6848   enum Status {NonRecursive, Recursive, Incomplete, IncompleteUsed};
6849   struct Entry {
6850     std::string Str;     // The encoded TypeString for the type.
6851     enum Status State;   // Information about the encoding in 'Str'.
6852     std::string Swapped; // A temporary place holder for a Recursive encoding
6853                          // during the expansion of RecordType's members.
6854   };
6855   std::map<const IdentifierInfo *, struct Entry> Map;
6856   unsigned IncompleteCount;     // Number of Incomplete entries in the Map.
6857   unsigned IncompleteUsedCount; // Number of IncompleteUsed entries in the Map.
6858 public:
6859   TypeStringCache() : IncompleteCount(0), IncompleteUsedCount(0) {}
6860   void addIncomplete(const IdentifierInfo *ID, std::string StubEnc);
6861   bool removeIncomplete(const IdentifierInfo *ID);
6862   void addIfComplete(const IdentifierInfo *ID, StringRef Str,
6863                      bool IsRecursive);
6864   StringRef lookupStr(const IdentifierInfo *ID);
6865 };
6866 
6867 /// TypeString encodings for enum & union fields must be order.
6868 /// FieldEncoding is a helper for this ordering process.
6869 class FieldEncoding {
6870   bool HasName;
6871   std::string Enc;
6872 public:
6873   FieldEncoding(bool b, SmallStringEnc &e) : HasName(b), Enc(e.c_str()) {}
6874   StringRef str() {return Enc.c_str();}
6875   bool operator<(const FieldEncoding &rhs) const {
6876     if (HasName != rhs.HasName) return HasName;
6877     return Enc < rhs.Enc;
6878   }
6879 };
6880 
6881 class XCoreABIInfo : public DefaultABIInfo {
6882 public:
6883   XCoreABIInfo(CodeGen::CodeGenTypes &CGT) : DefaultABIInfo(CGT) {}
6884   Address EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6885                     QualType Ty) const override;
6886 };
6887 
6888 class XCoreTargetCodeGenInfo : public TargetCodeGenInfo {
6889   mutable TypeStringCache TSC;
6890 public:
6891   XCoreTargetCodeGenInfo(CodeGenTypes &CGT)
6892     :TargetCodeGenInfo(new XCoreABIInfo(CGT)) {}
6893   void emitTargetMD(const Decl *D, llvm::GlobalValue *GV,
6894                     CodeGen::CodeGenModule &M) const override;
6895 };
6896 
6897 } // End anonymous namespace.
6898 
6899 Address XCoreABIInfo::EmitVAArg(CodeGenFunction &CGF, Address VAListAddr,
6900                                 QualType Ty) const {
6901   CGBuilderTy &Builder = CGF.Builder;
6902 
6903   // Get the VAList.
6904   CharUnits SlotSize = CharUnits::fromQuantity(4);
6905   Address AP(Builder.CreateLoad(VAListAddr), SlotSize);
6906 
6907   // Handle the argument.
6908   ABIArgInfo AI = classifyArgumentType(Ty);
6909   CharUnits TypeAlign = getContext().getTypeAlignInChars(Ty);
6910   llvm::Type *ArgTy = CGT.ConvertType(Ty);
6911   if (AI.canHaveCoerceToType() && !AI.getCoerceToType())
6912     AI.setCoerceToType(ArgTy);
6913   llvm::Type *ArgPtrTy = llvm::PointerType::getUnqual(ArgTy);
6914 
6915   Address Val = Address::invalid();
6916   CharUnits ArgSize = CharUnits::Zero();
6917   switch (AI.getKind()) {
6918   case ABIArgInfo::Expand:
6919   case ABIArgInfo::InAlloca:
6920     llvm_unreachable("Unsupported ABI kind for va_arg");
6921   case ABIArgInfo::Ignore:
6922     Val = Address(llvm::UndefValue::get(ArgPtrTy), TypeAlign);
6923     ArgSize = CharUnits::Zero();
6924     break;
6925   case ABIArgInfo::Extend:
6926   case ABIArgInfo::Direct:
6927     Val = Builder.CreateBitCast(AP, ArgPtrTy);
6928     ArgSize = CharUnits::fromQuantity(
6929                        getDataLayout().getTypeAllocSize(AI.getCoerceToType()));
6930     ArgSize = ArgSize.RoundUpToAlignment(SlotSize);
6931     break;
6932   case ABIArgInfo::Indirect:
6933     Val = Builder.CreateElementBitCast(AP, ArgPtrTy);
6934     Val = Address(Builder.CreateLoad(Val), TypeAlign);
6935     ArgSize = SlotSize;
6936     break;
6937   }
6938 
6939   // Increment the VAList.
6940   if (!ArgSize.isZero()) {
6941     llvm::Value *APN =
6942       Builder.CreateConstInBoundsByteGEP(AP.getPointer(), ArgSize);
6943     Builder.CreateStore(APN, VAListAddr);
6944   }
6945 
6946   return Val;
6947 }
6948 
6949 /// During the expansion of a RecordType, an incomplete TypeString is placed
6950 /// into the cache as a means to identify and break recursion.
6951 /// If there is a Recursive encoding in the cache, it is swapped out and will
6952 /// be reinserted by removeIncomplete().
6953 /// All other types of encoding should have been used rather than arriving here.
6954 void TypeStringCache::addIncomplete(const IdentifierInfo *ID,
6955                                     std::string StubEnc) {
6956   if (!ID)
6957     return;
6958   Entry &E = Map[ID];
6959   assert( (E.Str.empty() || E.State == Recursive) &&
6960          "Incorrectly use of addIncomplete");
6961   assert(!StubEnc.empty() && "Passing an empty string to addIncomplete()");
6962   E.Swapped.swap(E.Str); // swap out the Recursive
6963   E.Str.swap(StubEnc);
6964   E.State = Incomplete;
6965   ++IncompleteCount;
6966 }
6967 
6968 /// Once the RecordType has been expanded, the temporary incomplete TypeString
6969 /// must be removed from the cache.
6970 /// If a Recursive was swapped out by addIncomplete(), it will be replaced.
6971 /// Returns true if the RecordType was defined recursively.
6972 bool TypeStringCache::removeIncomplete(const IdentifierInfo *ID) {
6973   if (!ID)
6974     return false;
6975   auto I = Map.find(ID);
6976   assert(I != Map.end() && "Entry not present");
6977   Entry &E = I->second;
6978   assert( (E.State == Incomplete ||
6979            E.State == IncompleteUsed) &&
6980          "Entry must be an incomplete type");
6981   bool IsRecursive = false;
6982   if (E.State == IncompleteUsed) {
6983     // We made use of our Incomplete encoding, thus we are recursive.
6984     IsRecursive = true;
6985     --IncompleteUsedCount;
6986   }
6987   if (E.Swapped.empty())
6988     Map.erase(I);
6989   else {
6990     // Swap the Recursive back.
6991     E.Swapped.swap(E.Str);
6992     E.Swapped.clear();
6993     E.State = Recursive;
6994   }
6995   --IncompleteCount;
6996   return IsRecursive;
6997 }
6998 
6999 /// Add the encoded TypeString to the cache only if it is NonRecursive or
7000 /// Recursive (viz: all sub-members were expanded as fully as possible).
7001 void TypeStringCache::addIfComplete(const IdentifierInfo *ID, StringRef Str,
7002                                     bool IsRecursive) {
7003   if (!ID || IncompleteUsedCount)
7004     return; // No key or it is is an incomplete sub-type so don't add.
7005   Entry &E = Map[ID];
7006   if (IsRecursive && !E.Str.empty()) {
7007     assert(E.State==Recursive && E.Str.size() == Str.size() &&
7008            "This is not the same Recursive entry");
7009     // The parent container was not recursive after all, so we could have used
7010     // this Recursive sub-member entry after all, but we assumed the worse when
7011     // we started viz: IncompleteCount!=0.
7012     return;
7013   }
7014   assert(E.Str.empty() && "Entry already present");
7015   E.Str = Str.str();
7016   E.State = IsRecursive? Recursive : NonRecursive;
7017 }
7018 
7019 /// Return a cached TypeString encoding for the ID. If there isn't one, or we
7020 /// are recursively expanding a type (IncompleteCount != 0) and the cached
7021 /// encoding is Recursive, return an empty StringRef.
7022 StringRef TypeStringCache::lookupStr(const IdentifierInfo *ID) {
7023   if (!ID)
7024     return StringRef();   // We have no key.
7025   auto I = Map.find(ID);
7026   if (I == Map.end())
7027     return StringRef();   // We have no encoding.
7028   Entry &E = I->second;
7029   if (E.State == Recursive && IncompleteCount)
7030     return StringRef();   // We don't use Recursive encodings for member types.
7031 
7032   if (E.State == Incomplete) {
7033     // The incomplete type is being used to break out of recursion.
7034     E.State = IncompleteUsed;
7035     ++IncompleteUsedCount;
7036   }
7037   return E.Str.c_str();
7038 }
7039 
7040 /// The XCore ABI includes a type information section that communicates symbol
7041 /// type information to the linker. The linker uses this information to verify
7042 /// safety/correctness of things such as array bound and pointers et al.
7043 /// The ABI only requires C (and XC) language modules to emit TypeStrings.
7044 /// This type information (TypeString) is emitted into meta data for all global
7045 /// symbols: definitions, declarations, functions & variables.
7046 ///
7047 /// The TypeString carries type, qualifier, name, size & value details.
7048 /// Please see 'Tools Development Guide' section 2.16.2 for format details:
7049 /// https://www.xmos.com/download/public/Tools-Development-Guide%28X9114A%29.pdf
7050 /// The output is tested by test/CodeGen/xcore-stringtype.c.
7051 ///
7052 static bool getTypeString(SmallStringEnc &Enc, const Decl *D,
7053                           CodeGen::CodeGenModule &CGM, TypeStringCache &TSC);
7054 
7055 /// XCore uses emitTargetMD to emit TypeString metadata for global symbols.
7056 void XCoreTargetCodeGenInfo::emitTargetMD(const Decl *D, llvm::GlobalValue *GV,
7057                                           CodeGen::CodeGenModule &CGM) const {
7058   SmallStringEnc Enc;
7059   if (getTypeString(Enc, D, CGM, TSC)) {
7060     llvm::LLVMContext &Ctx = CGM.getModule().getContext();
7061     llvm::SmallVector<llvm::Metadata *, 2> MDVals;
7062     MDVals.push_back(llvm::ConstantAsMetadata::get(GV));
7063     MDVals.push_back(llvm::MDString::get(Ctx, Enc.str()));
7064     llvm::NamedMDNode *MD =
7065       CGM.getModule().getOrInsertNamedMetadata("xcore.typestrings");
7066     MD->addOperand(llvm::MDNode::get(Ctx, MDVals));
7067   }
7068 }
7069 
7070 static bool appendType(SmallStringEnc &Enc, QualType QType,
7071                        const CodeGen::CodeGenModule &CGM,
7072                        TypeStringCache &TSC);
7073 
7074 /// Helper function for appendRecordType().
7075 /// Builds a SmallVector containing the encoded field types in declaration
7076 /// order.
7077 static bool extractFieldType(SmallVectorImpl<FieldEncoding> &FE,
7078                              const RecordDecl *RD,
7079                              const CodeGen::CodeGenModule &CGM,
7080                              TypeStringCache &TSC) {
7081   for (const auto *Field : RD->fields()) {
7082     SmallStringEnc Enc;
7083     Enc += "m(";
7084     Enc += Field->getName();
7085     Enc += "){";
7086     if (Field->isBitField()) {
7087       Enc += "b(";
7088       llvm::raw_svector_ostream OS(Enc);
7089       OS << Field->getBitWidthValue(CGM.getContext());
7090       Enc += ':';
7091     }
7092     if (!appendType(Enc, Field->getType(), CGM, TSC))
7093       return false;
7094     if (Field->isBitField())
7095       Enc += ')';
7096     Enc += '}';
7097     FE.emplace_back(!Field->getName().empty(), Enc);
7098   }
7099   return true;
7100 }
7101 
7102 /// Appends structure and union types to Enc and adds encoding to cache.
7103 /// Recursively calls appendType (via extractFieldType) for each field.
7104 /// Union types have their fields ordered according to the ABI.
7105 static bool appendRecordType(SmallStringEnc &Enc, const RecordType *RT,
7106                              const CodeGen::CodeGenModule &CGM,
7107                              TypeStringCache &TSC, const IdentifierInfo *ID) {
7108   // Append the cached TypeString if we have one.
7109   StringRef TypeString = TSC.lookupStr(ID);
7110   if (!TypeString.empty()) {
7111     Enc += TypeString;
7112     return true;
7113   }
7114 
7115   // Start to emit an incomplete TypeString.
7116   size_t Start = Enc.size();
7117   Enc += (RT->isUnionType()? 'u' : 's');
7118   Enc += '(';
7119   if (ID)
7120     Enc += ID->getName();
7121   Enc += "){";
7122 
7123   // We collect all encoded fields and order as necessary.
7124   bool IsRecursive = false;
7125   const RecordDecl *RD = RT->getDecl()->getDefinition();
7126   if (RD && !RD->field_empty()) {
7127     // An incomplete TypeString stub is placed in the cache for this RecordType
7128     // so that recursive calls to this RecordType will use it whilst building a
7129     // complete TypeString for this RecordType.
7130     SmallVector<FieldEncoding, 16> FE;
7131     std::string StubEnc(Enc.substr(Start).str());
7132     StubEnc += '}';  // StubEnc now holds a valid incomplete TypeString.
7133     TSC.addIncomplete(ID, std::move(StubEnc));
7134     if (!extractFieldType(FE, RD, CGM, TSC)) {
7135       (void) TSC.removeIncomplete(ID);
7136       return false;
7137     }
7138     IsRecursive = TSC.removeIncomplete(ID);
7139     // The ABI requires unions to be sorted but not structures.
7140     // See FieldEncoding::operator< for sort algorithm.
7141     if (RT->isUnionType())
7142       std::sort(FE.begin(), FE.end());
7143     // We can now complete the TypeString.
7144     unsigned E = FE.size();
7145     for (unsigned I = 0; I != E; ++I) {
7146       if (I)
7147         Enc += ',';
7148       Enc += FE[I].str();
7149     }
7150   }
7151   Enc += '}';
7152   TSC.addIfComplete(ID, Enc.substr(Start), IsRecursive);
7153   return true;
7154 }
7155 
7156 /// Appends enum types to Enc and adds the encoding to the cache.
7157 static bool appendEnumType(SmallStringEnc &Enc, const EnumType *ET,
7158                            TypeStringCache &TSC,
7159                            const IdentifierInfo *ID) {
7160   // Append the cached TypeString if we have one.
7161   StringRef TypeString = TSC.lookupStr(ID);
7162   if (!TypeString.empty()) {
7163     Enc += TypeString;
7164     return true;
7165   }
7166 
7167   size_t Start = Enc.size();
7168   Enc += "e(";
7169   if (ID)
7170     Enc += ID->getName();
7171   Enc += "){";
7172 
7173   // We collect all encoded enumerations and order them alphanumerically.
7174   if (const EnumDecl *ED = ET->getDecl()->getDefinition()) {
7175     SmallVector<FieldEncoding, 16> FE;
7176     for (auto I = ED->enumerator_begin(), E = ED->enumerator_end(); I != E;
7177          ++I) {
7178       SmallStringEnc EnumEnc;
7179       EnumEnc += "m(";
7180       EnumEnc += I->getName();
7181       EnumEnc += "){";
7182       I->getInitVal().toString(EnumEnc);
7183       EnumEnc += '}';
7184       FE.push_back(FieldEncoding(!I->getName().empty(), EnumEnc));
7185     }
7186     std::sort(FE.begin(), FE.end());
7187     unsigned E = FE.size();
7188     for (unsigned I = 0; I != E; ++I) {
7189       if (I)
7190         Enc += ',';
7191       Enc += FE[I].str();
7192     }
7193   }
7194   Enc += '}';
7195   TSC.addIfComplete(ID, Enc.substr(Start), false);
7196   return true;
7197 }
7198 
7199 /// Appends type's qualifier to Enc.
7200 /// This is done prior to appending the type's encoding.
7201 static void appendQualifier(SmallStringEnc &Enc, QualType QT) {
7202   // Qualifiers are emitted in alphabetical order.
7203   static const char *const Table[]={"","c:","r:","cr:","v:","cv:","rv:","crv:"};
7204   int Lookup = 0;
7205   if (QT.isConstQualified())
7206     Lookup += 1<<0;
7207   if (QT.isRestrictQualified())
7208     Lookup += 1<<1;
7209   if (QT.isVolatileQualified())
7210     Lookup += 1<<2;
7211   Enc += Table[Lookup];
7212 }
7213 
7214 /// Appends built-in types to Enc.
7215 static bool appendBuiltinType(SmallStringEnc &Enc, const BuiltinType *BT) {
7216   const char *EncType;
7217   switch (BT->getKind()) {
7218     case BuiltinType::Void:
7219       EncType = "0";
7220       break;
7221     case BuiltinType::Bool:
7222       EncType = "b";
7223       break;
7224     case BuiltinType::Char_U:
7225       EncType = "uc";
7226       break;
7227     case BuiltinType::UChar:
7228       EncType = "uc";
7229       break;
7230     case BuiltinType::SChar:
7231       EncType = "sc";
7232       break;
7233     case BuiltinType::UShort:
7234       EncType = "us";
7235       break;
7236     case BuiltinType::Short:
7237       EncType = "ss";
7238       break;
7239     case BuiltinType::UInt:
7240       EncType = "ui";
7241       break;
7242     case BuiltinType::Int:
7243       EncType = "si";
7244       break;
7245     case BuiltinType::ULong:
7246       EncType = "ul";
7247       break;
7248     case BuiltinType::Long:
7249       EncType = "sl";
7250       break;
7251     case BuiltinType::ULongLong:
7252       EncType = "ull";
7253       break;
7254     case BuiltinType::LongLong:
7255       EncType = "sll";
7256       break;
7257     case BuiltinType::Float:
7258       EncType = "ft";
7259       break;
7260     case BuiltinType::Double:
7261       EncType = "d";
7262       break;
7263     case BuiltinType::LongDouble:
7264       EncType = "ld";
7265       break;
7266     default:
7267       return false;
7268   }
7269   Enc += EncType;
7270   return true;
7271 }
7272 
7273 /// Appends a pointer encoding to Enc before calling appendType for the pointee.
7274 static bool appendPointerType(SmallStringEnc &Enc, const PointerType *PT,
7275                               const CodeGen::CodeGenModule &CGM,
7276                               TypeStringCache &TSC) {
7277   Enc += "p(";
7278   if (!appendType(Enc, PT->getPointeeType(), CGM, TSC))
7279     return false;
7280   Enc += ')';
7281   return true;
7282 }
7283 
7284 /// Appends array encoding to Enc before calling appendType for the element.
7285 static bool appendArrayType(SmallStringEnc &Enc, QualType QT,
7286                             const ArrayType *AT,
7287                             const CodeGen::CodeGenModule &CGM,
7288                             TypeStringCache &TSC, StringRef NoSizeEnc) {
7289   if (AT->getSizeModifier() != ArrayType::Normal)
7290     return false;
7291   Enc += "a(";
7292   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT))
7293     CAT->getSize().toStringUnsigned(Enc);
7294   else
7295     Enc += NoSizeEnc; // Global arrays use "*", otherwise it is "".
7296   Enc += ':';
7297   // The Qualifiers should be attached to the type rather than the array.
7298   appendQualifier(Enc, QT);
7299   if (!appendType(Enc, AT->getElementType(), CGM, TSC))
7300     return false;
7301   Enc += ')';
7302   return true;
7303 }
7304 
7305 /// Appends a function encoding to Enc, calling appendType for the return type
7306 /// and the arguments.
7307 static bool appendFunctionType(SmallStringEnc &Enc, const FunctionType *FT,
7308                              const CodeGen::CodeGenModule &CGM,
7309                              TypeStringCache &TSC) {
7310   Enc += "f{";
7311   if (!appendType(Enc, FT->getReturnType(), CGM, TSC))
7312     return false;
7313   Enc += "}(";
7314   if (const FunctionProtoType *FPT = FT->getAs<FunctionProtoType>()) {
7315     // N.B. we are only interested in the adjusted param types.
7316     auto I = FPT->param_type_begin();
7317     auto E = FPT->param_type_end();
7318     if (I != E) {
7319       do {
7320         if (!appendType(Enc, *I, CGM, TSC))
7321           return false;
7322         ++I;
7323         if (I != E)
7324           Enc += ',';
7325       } while (I != E);
7326       if (FPT->isVariadic())
7327         Enc += ",va";
7328     } else {
7329       if (FPT->isVariadic())
7330         Enc += "va";
7331       else
7332         Enc += '0';
7333     }
7334   }
7335   Enc += ')';
7336   return true;
7337 }
7338 
7339 /// Handles the type's qualifier before dispatching a call to handle specific
7340 /// type encodings.
7341 static bool appendType(SmallStringEnc &Enc, QualType QType,
7342                        const CodeGen::CodeGenModule &CGM,
7343                        TypeStringCache &TSC) {
7344 
7345   QualType QT = QType.getCanonicalType();
7346 
7347   if (const ArrayType *AT = QT->getAsArrayTypeUnsafe())
7348     // The Qualifiers should be attached to the type rather than the array.
7349     // Thus we don't call appendQualifier() here.
7350     return appendArrayType(Enc, QT, AT, CGM, TSC, "");
7351 
7352   appendQualifier(Enc, QT);
7353 
7354   if (const BuiltinType *BT = QT->getAs<BuiltinType>())
7355     return appendBuiltinType(Enc, BT);
7356 
7357   if (const PointerType *PT = QT->getAs<PointerType>())
7358     return appendPointerType(Enc, PT, CGM, TSC);
7359 
7360   if (const EnumType *ET = QT->getAs<EnumType>())
7361     return appendEnumType(Enc, ET, TSC, QT.getBaseTypeIdentifier());
7362 
7363   if (const RecordType *RT = QT->getAsStructureType())
7364     return appendRecordType(Enc, RT, CGM, TSC, QT.getBaseTypeIdentifier());
7365 
7366   if (const RecordType *RT = QT->getAsUnionType())
7367     return appendRecordType(Enc, RT, CGM, TSC, QT.getBaseTypeIdentifier());
7368 
7369   if (const FunctionType *FT = QT->getAs<FunctionType>())
7370     return appendFunctionType(Enc, FT, CGM, TSC);
7371 
7372   return false;
7373 }
7374 
7375 static bool getTypeString(SmallStringEnc &Enc, const Decl *D,
7376                           CodeGen::CodeGenModule &CGM, TypeStringCache &TSC) {
7377   if (!D)
7378     return false;
7379 
7380   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
7381     if (FD->getLanguageLinkage() != CLanguageLinkage)
7382       return false;
7383     return appendType(Enc, FD->getType(), CGM, TSC);
7384   }
7385 
7386   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
7387     if (VD->getLanguageLinkage() != CLanguageLinkage)
7388       return false;
7389     QualType QT = VD->getType().getCanonicalType();
7390     if (const ArrayType *AT = QT->getAsArrayTypeUnsafe()) {
7391       // Global ArrayTypes are given a size of '*' if the size is unknown.
7392       // The Qualifiers should be attached to the type rather than the array.
7393       // Thus we don't call appendQualifier() here.
7394       return appendArrayType(Enc, QT, AT, CGM, TSC, "*");
7395     }
7396     return appendType(Enc, QT, CGM, TSC);
7397   }
7398   return false;
7399 }
7400 
7401 
7402 //===----------------------------------------------------------------------===//
7403 // Driver code
7404 //===----------------------------------------------------------------------===//
7405 
7406 const llvm::Triple &CodeGenModule::getTriple() const {
7407   return getTarget().getTriple();
7408 }
7409 
7410 bool CodeGenModule::supportsCOMDAT() const {
7411   return !getTriple().isOSBinFormatMachO();
7412 }
7413 
7414 const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
7415   if (TheTargetCodeGenInfo)
7416     return *TheTargetCodeGenInfo;
7417 
7418   const llvm::Triple &Triple = getTarget().getTriple();
7419   switch (Triple.getArch()) {
7420   default:
7421     return *(TheTargetCodeGenInfo = new DefaultTargetCodeGenInfo(Types));
7422 
7423   case llvm::Triple::le32:
7424     return *(TheTargetCodeGenInfo = new PNaClTargetCodeGenInfo(Types));
7425   case llvm::Triple::mips:
7426   case llvm::Triple::mipsel:
7427     if (Triple.getOS() == llvm::Triple::NaCl)
7428       return *(TheTargetCodeGenInfo = new PNaClTargetCodeGenInfo(Types));
7429     return *(TheTargetCodeGenInfo = new MIPSTargetCodeGenInfo(Types, true));
7430 
7431   case llvm::Triple::mips64:
7432   case llvm::Triple::mips64el:
7433     return *(TheTargetCodeGenInfo = new MIPSTargetCodeGenInfo(Types, false));
7434 
7435   case llvm::Triple::aarch64:
7436   case llvm::Triple::aarch64_be: {
7437     AArch64ABIInfo::ABIKind Kind = AArch64ABIInfo::AAPCS;
7438     if (getTarget().getABI() == "darwinpcs")
7439       Kind = AArch64ABIInfo::DarwinPCS;
7440 
7441     return *(TheTargetCodeGenInfo = new AArch64TargetCodeGenInfo(Types, Kind));
7442   }
7443 
7444   case llvm::Triple::wasm32:
7445   case llvm::Triple::wasm64:
7446     return *(TheTargetCodeGenInfo = new WebAssemblyTargetCodeGenInfo(Types));
7447 
7448   case llvm::Triple::arm:
7449   case llvm::Triple::armeb:
7450   case llvm::Triple::thumb:
7451   case llvm::Triple::thumbeb:
7452     {
7453       if (Triple.getOS() == llvm::Triple::Win32) {
7454         TheTargetCodeGenInfo =
7455             new WindowsARMTargetCodeGenInfo(Types, ARMABIInfo::AAPCS_VFP);
7456         return *TheTargetCodeGenInfo;
7457       }
7458 
7459       ARMABIInfo::ABIKind Kind = ARMABIInfo::AAPCS;
7460       StringRef ABIStr = getTarget().getABI();
7461       if (ABIStr == "apcs-gnu")
7462         Kind = ARMABIInfo::APCS;
7463       else if (ABIStr == "aapcs16")
7464         Kind = ARMABIInfo::AAPCS16_VFP;
7465       else if (CodeGenOpts.FloatABI == "hard" ||
7466                (CodeGenOpts.FloatABI != "soft" &&
7467                 Triple.getEnvironment() == llvm::Triple::GNUEABIHF))
7468         Kind = ARMABIInfo::AAPCS_VFP;
7469 
7470       return *(TheTargetCodeGenInfo = new ARMTargetCodeGenInfo(Types, Kind));
7471     }
7472 
7473   case llvm::Triple::ppc:
7474     return *(TheTargetCodeGenInfo = new PPC32TargetCodeGenInfo(Types));
7475   case llvm::Triple::ppc64:
7476     if (Triple.isOSBinFormatELF()) {
7477       PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
7478       if (getTarget().getABI() == "elfv2")
7479         Kind = PPC64_SVR4_ABIInfo::ELFv2;
7480       bool HasQPX = getTarget().getABI() == "elfv1-qpx";
7481 
7482       return *(TheTargetCodeGenInfo =
7483                new PPC64_SVR4_TargetCodeGenInfo(Types, Kind, HasQPX));
7484     } else
7485       return *(TheTargetCodeGenInfo = new PPC64TargetCodeGenInfo(Types));
7486   case llvm::Triple::ppc64le: {
7487     assert(Triple.isOSBinFormatELF() && "PPC64 LE non-ELF not supported!");
7488     PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv2;
7489     if (getTarget().getABI() == "elfv1" || getTarget().getABI() == "elfv1-qpx")
7490       Kind = PPC64_SVR4_ABIInfo::ELFv1;
7491     bool HasQPX = getTarget().getABI() == "elfv1-qpx";
7492 
7493     return *(TheTargetCodeGenInfo =
7494              new PPC64_SVR4_TargetCodeGenInfo(Types, Kind, HasQPX));
7495   }
7496 
7497   case llvm::Triple::nvptx:
7498   case llvm::Triple::nvptx64:
7499     return *(TheTargetCodeGenInfo = new NVPTXTargetCodeGenInfo(Types));
7500 
7501   case llvm::Triple::msp430:
7502     return *(TheTargetCodeGenInfo = new MSP430TargetCodeGenInfo(Types));
7503 
7504   case llvm::Triple::systemz: {
7505     bool HasVector = getTarget().getABI() == "vector";
7506     return *(TheTargetCodeGenInfo = new SystemZTargetCodeGenInfo(Types,
7507                                                                  HasVector));
7508   }
7509 
7510   case llvm::Triple::tce:
7511     return *(TheTargetCodeGenInfo = new TCETargetCodeGenInfo(Types));
7512 
7513   case llvm::Triple::x86: {
7514     bool IsDarwinVectorABI = Triple.isOSDarwin();
7515     bool RetSmallStructInRegABI =
7516         X86_32TargetCodeGenInfo::isStructReturnInRegABI(Triple, CodeGenOpts);
7517     bool IsWin32FloatStructABI = Triple.isOSWindows() && !Triple.isOSCygMing();
7518 
7519     if (Triple.getOS() == llvm::Triple::Win32) {
7520       return *(TheTargetCodeGenInfo = new WinX86_32TargetCodeGenInfo(
7521                    Types, IsDarwinVectorABI, RetSmallStructInRegABI,
7522                    IsWin32FloatStructABI, CodeGenOpts.NumRegisterParameters));
7523     } else {
7524       return *(TheTargetCodeGenInfo = new X86_32TargetCodeGenInfo(
7525                    Types, IsDarwinVectorABI, RetSmallStructInRegABI,
7526                    IsWin32FloatStructABI, CodeGenOpts.NumRegisterParameters,
7527                    CodeGenOpts.FloatABI == "soft"));
7528     }
7529   }
7530 
7531   case llvm::Triple::x86_64: {
7532     StringRef ABI = getTarget().getABI();
7533     X86AVXABILevel AVXLevel = (ABI == "avx512" ? X86AVXABILevel::AVX512 :
7534                                ABI == "avx" ? X86AVXABILevel::AVX :
7535                                X86AVXABILevel::None);
7536 
7537     switch (Triple.getOS()) {
7538     case llvm::Triple::Win32:
7539       return *(TheTargetCodeGenInfo =
7540                    new WinX86_64TargetCodeGenInfo(Types, AVXLevel));
7541     case llvm::Triple::PS4:
7542       return *(TheTargetCodeGenInfo =
7543                    new PS4TargetCodeGenInfo(Types, AVXLevel));
7544     default:
7545       return *(TheTargetCodeGenInfo =
7546                    new X86_64TargetCodeGenInfo(Types, AVXLevel));
7547     }
7548   }
7549   case llvm::Triple::hexagon:
7550     return *(TheTargetCodeGenInfo = new HexagonTargetCodeGenInfo(Types));
7551   case llvm::Triple::r600:
7552     return *(TheTargetCodeGenInfo = new AMDGPUTargetCodeGenInfo(Types));
7553   case llvm::Triple::amdgcn:
7554     return *(TheTargetCodeGenInfo = new AMDGPUTargetCodeGenInfo(Types));
7555   case llvm::Triple::sparcv9:
7556     return *(TheTargetCodeGenInfo = new SparcV9TargetCodeGenInfo(Types));
7557   case llvm::Triple::xcore:
7558     return *(TheTargetCodeGenInfo = new XCoreTargetCodeGenInfo(Types));
7559   }
7560 }
7561