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