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