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