1 //===--- CGCall.cpp - Encapsulate calling convention details --------------===//
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 "CGCall.h"
16 #include "ABIInfo.h"
17 #include "CGCXXABI.h"
18 #include "CodeGenFunction.h"
19 #include "CodeGenModule.h"
20 #include "TargetInfo.h"
21 #include "clang/AST/Decl.h"
22 #include "clang/AST/DeclCXX.h"
23 #include "clang/AST/DeclObjC.h"
24 #include "clang/Basic/TargetInfo.h"
25 #include "clang/CodeGen/CGFunctionInfo.h"
26 #include "clang/Frontend/CodeGenOptions.h"
27 #include "llvm/ADT/StringExtras.h"
28 #include "llvm/IR/Attributes.h"
29 #include "llvm/IR/CallSite.h"
30 #include "llvm/IR/DataLayout.h"
31 #include "llvm/IR/InlineAsm.h"
32 #include "llvm/IR/Intrinsics.h"
33 #include "llvm/Transforms/Utils/Local.h"
34 using namespace clang;
35 using namespace CodeGen;
36 
37 /***/
38 
39 static unsigned ClangCallConvToLLVMCallConv(CallingConv CC) {
40   switch (CC) {
41   default: return llvm::CallingConv::C;
42   case CC_X86StdCall: return llvm::CallingConv::X86_StdCall;
43   case CC_X86FastCall: return llvm::CallingConv::X86_FastCall;
44   case CC_X86ThisCall: return llvm::CallingConv::X86_ThisCall;
45   case CC_X86_64Win64: return llvm::CallingConv::X86_64_Win64;
46   case CC_X86_64SysV: return llvm::CallingConv::X86_64_SysV;
47   case CC_AAPCS: return llvm::CallingConv::ARM_AAPCS;
48   case CC_AAPCS_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
49   case CC_IntelOclBicc: return llvm::CallingConv::Intel_OCL_BI;
50   // TODO: add support for CC_X86Pascal to llvm
51   }
52 }
53 
54 /// Derives the 'this' type for codegen purposes, i.e. ignoring method
55 /// qualification.
56 /// FIXME: address space qualification?
57 static CanQualType GetThisType(ASTContext &Context, const CXXRecordDecl *RD) {
58   QualType RecTy = Context.getTagDeclType(RD)->getCanonicalTypeInternal();
59   return Context.getPointerType(CanQualType::CreateUnsafe(RecTy));
60 }
61 
62 /// Returns the canonical formal type of the given C++ method.
63 static CanQual<FunctionProtoType> GetFormalType(const CXXMethodDecl *MD) {
64   return MD->getType()->getCanonicalTypeUnqualified()
65            .getAs<FunctionProtoType>();
66 }
67 
68 /// Returns the "extra-canonicalized" return type, which discards
69 /// qualifiers on the return type.  Codegen doesn't care about them,
70 /// and it makes ABI code a little easier to be able to assume that
71 /// all parameter and return types are top-level unqualified.
72 static CanQualType GetReturnType(QualType RetTy) {
73   return RetTy->getCanonicalTypeUnqualified().getUnqualifiedType();
74 }
75 
76 /// Arrange the argument and result information for a value of the given
77 /// unprototyped freestanding function type.
78 const CGFunctionInfo &
79 CodeGenTypes::arrangeFreeFunctionType(CanQual<FunctionNoProtoType> FTNP) {
80   // When translating an unprototyped function type, always use a
81   // variadic type.
82   return arrangeLLVMFunctionInfo(FTNP->getReturnType().getUnqualifiedType(),
83                                  false, None, FTNP->getExtInfo(),
84                                  RequiredArgs(0));
85 }
86 
87 /// Arrange the LLVM function layout for a value of the given function
88 /// type, on top of any implicit parameters already stored.  Use the
89 /// given ExtInfo instead of the ExtInfo from the function type.
90 static const CGFunctionInfo &arrangeLLVMFunctionInfo(CodeGenTypes &CGT,
91                                                      bool IsInstanceMethod,
92                                        SmallVectorImpl<CanQualType> &prefix,
93                                              CanQual<FunctionProtoType> FTP,
94                                               FunctionType::ExtInfo extInfo) {
95   RequiredArgs required = RequiredArgs::forPrototypePlus(FTP, prefix.size());
96   // FIXME: Kill copy.
97   for (unsigned i = 0, e = FTP->getNumParams(); i != e; ++i)
98     prefix.push_back(FTP->getParamType(i));
99   CanQualType resultType = FTP->getReturnType().getUnqualifiedType();
100   return CGT.arrangeLLVMFunctionInfo(resultType, IsInstanceMethod, prefix,
101                                      extInfo, required);
102 }
103 
104 /// Arrange the argument and result information for a free function (i.e.
105 /// not a C++ or ObjC instance method) of the given type.
106 static const CGFunctionInfo &arrangeFreeFunctionType(CodeGenTypes &CGT,
107                                       SmallVectorImpl<CanQualType> &prefix,
108                                             CanQual<FunctionProtoType> FTP) {
109   return arrangeLLVMFunctionInfo(CGT, false, prefix, FTP, FTP->getExtInfo());
110 }
111 
112 /// Arrange the argument and result information for a free function (i.e.
113 /// not a C++ or ObjC instance method) of the given type.
114 static const CGFunctionInfo &arrangeCXXMethodType(CodeGenTypes &CGT,
115                                       SmallVectorImpl<CanQualType> &prefix,
116                                             CanQual<FunctionProtoType> FTP) {
117   FunctionType::ExtInfo extInfo = FTP->getExtInfo();
118   return arrangeLLVMFunctionInfo(CGT, true, prefix, FTP, extInfo);
119 }
120 
121 /// Arrange the argument and result information for a value of the
122 /// given freestanding function type.
123 const CGFunctionInfo &
124 CodeGenTypes::arrangeFreeFunctionType(CanQual<FunctionProtoType> FTP) {
125   SmallVector<CanQualType, 16> argTypes;
126   return ::arrangeFreeFunctionType(*this, argTypes, FTP);
127 }
128 
129 static CallingConv getCallingConventionForDecl(const Decl *D, bool IsWindows) {
130   // Set the appropriate calling convention for the Function.
131   if (D->hasAttr<StdCallAttr>())
132     return CC_X86StdCall;
133 
134   if (D->hasAttr<FastCallAttr>())
135     return CC_X86FastCall;
136 
137   if (D->hasAttr<ThisCallAttr>())
138     return CC_X86ThisCall;
139 
140   if (D->hasAttr<PascalAttr>())
141     return CC_X86Pascal;
142 
143   if (PcsAttr *PCS = D->getAttr<PcsAttr>())
144     return (PCS->getPCS() == PcsAttr::AAPCS ? CC_AAPCS : CC_AAPCS_VFP);
145 
146   if (D->hasAttr<PnaclCallAttr>())
147     return CC_PnaclCall;
148 
149   if (D->hasAttr<IntelOclBiccAttr>())
150     return CC_IntelOclBicc;
151 
152   if (D->hasAttr<MSABIAttr>())
153     return IsWindows ? CC_C : CC_X86_64Win64;
154 
155   if (D->hasAttr<SysVABIAttr>())
156     return IsWindows ? CC_X86_64SysV : CC_C;
157 
158   return CC_C;
159 }
160 
161 static bool isAAPCSVFP(const CGFunctionInfo &FI, const TargetInfo &Target) {
162   switch (FI.getEffectiveCallingConvention()) {
163   case llvm::CallingConv::C:
164     switch (Target.getTriple().getEnvironment()) {
165     case llvm::Triple::EABIHF:
166     case llvm::Triple::GNUEABIHF:
167       return true;
168     default:
169       return false;
170     }
171   case llvm::CallingConv::ARM_AAPCS_VFP:
172     return true;
173   default:
174     return false;
175   }
176 }
177 
178 /// Arrange the argument and result information for a call to an
179 /// unknown C++ non-static member function of the given abstract type.
180 /// (Zero value of RD means we don't have any meaningful "this" argument type,
181 ///  so fall back to a generic pointer type).
182 /// The member function must be an ordinary function, i.e. not a
183 /// constructor or destructor.
184 const CGFunctionInfo &
185 CodeGenTypes::arrangeCXXMethodType(const CXXRecordDecl *RD,
186                                    const FunctionProtoType *FTP) {
187   SmallVector<CanQualType, 16> argTypes;
188 
189   // Add the 'this' pointer.
190   if (RD)
191     argTypes.push_back(GetThisType(Context, RD));
192   else
193     argTypes.push_back(Context.VoidPtrTy);
194 
195   return ::arrangeCXXMethodType(*this, argTypes,
196               FTP->getCanonicalTypeUnqualified().getAs<FunctionProtoType>());
197 }
198 
199 /// Arrange the argument and result information for a declaration or
200 /// definition of the given C++ non-static member function.  The
201 /// member function must be an ordinary function, i.e. not a
202 /// constructor or destructor.
203 const CGFunctionInfo &
204 CodeGenTypes::arrangeCXXMethodDeclaration(const CXXMethodDecl *MD) {
205   assert(!isa<CXXConstructorDecl>(MD) && "wrong method for constructors!");
206   assert(!isa<CXXDestructorDecl>(MD) && "wrong method for destructors!");
207 
208   CanQual<FunctionProtoType> prototype = GetFormalType(MD);
209 
210   if (MD->isInstance()) {
211     // The abstract case is perfectly fine.
212     const CXXRecordDecl *ThisType = TheCXXABI.getThisArgumentTypeForMethod(MD);
213     return arrangeCXXMethodType(ThisType, prototype.getTypePtr());
214   }
215 
216   return arrangeFreeFunctionType(prototype);
217 }
218 
219 /// Arrange the argument and result information for a declaration
220 /// or definition to the given constructor variant.
221 const CGFunctionInfo &
222 CodeGenTypes::arrangeCXXConstructorDeclaration(const CXXConstructorDecl *D,
223                                                CXXCtorType ctorKind) {
224   SmallVector<CanQualType, 16> argTypes;
225   argTypes.push_back(GetThisType(Context, D->getParent()));
226 
227   GlobalDecl GD(D, ctorKind);
228   CanQualType resultType =
229     TheCXXABI.HasThisReturn(GD) ? argTypes.front() : Context.VoidTy;
230 
231   CanQual<FunctionProtoType> FTP = GetFormalType(D);
232 
233   // Add the formal parameters.
234   for (unsigned i = 0, e = FTP->getNumParams(); i != e; ++i)
235     argTypes.push_back(FTP->getParamType(i));
236 
237   TheCXXABI.BuildConstructorSignature(D, ctorKind, resultType, argTypes);
238 
239   RequiredArgs required =
240       (D->isVariadic() ? RequiredArgs(argTypes.size()) : RequiredArgs::All);
241 
242   FunctionType::ExtInfo extInfo = FTP->getExtInfo();
243   return arrangeLLVMFunctionInfo(resultType, true, argTypes, extInfo, required);
244 }
245 
246 /// Arrange a call to a C++ method, passing the given arguments.
247 const CGFunctionInfo &
248 CodeGenTypes::arrangeCXXConstructorCall(const CallArgList &args,
249                                         const CXXConstructorDecl *D,
250                                         CXXCtorType CtorKind,
251                                         unsigned ExtraArgs) {
252   // FIXME: Kill copy.
253   SmallVector<CanQualType, 16> ArgTypes;
254   for (CallArgList::const_iterator i = args.begin(), e = args.end(); i != e;
255        ++i)
256     ArgTypes.push_back(Context.getCanonicalParamType(i->Ty));
257 
258   CanQual<FunctionProtoType> FPT = GetFormalType(D);
259   RequiredArgs Required = RequiredArgs::forPrototypePlus(FPT, 1 + ExtraArgs);
260   GlobalDecl GD(D, CtorKind);
261   CanQualType ResultType =
262       TheCXXABI.HasThisReturn(GD) ? ArgTypes.front() : Context.VoidTy;
263 
264   FunctionType::ExtInfo Info = FPT->getExtInfo();
265   return arrangeLLVMFunctionInfo(ResultType, true, ArgTypes, Info, Required);
266 }
267 
268 /// Arrange the argument and result information for a declaration,
269 /// definition, or call to the given destructor variant.  It so
270 /// happens that all three cases produce the same information.
271 const CGFunctionInfo &
272 CodeGenTypes::arrangeCXXDestructor(const CXXDestructorDecl *D,
273                                    CXXDtorType dtorKind) {
274   SmallVector<CanQualType, 2> argTypes;
275   argTypes.push_back(GetThisType(Context, D->getParent()));
276 
277   GlobalDecl GD(D, dtorKind);
278   CanQualType resultType =
279     TheCXXABI.HasThisReturn(GD) ? argTypes.front() : Context.VoidTy;
280 
281   TheCXXABI.BuildDestructorSignature(D, dtorKind, resultType, argTypes);
282 
283   CanQual<FunctionProtoType> FTP = GetFormalType(D);
284   assert(FTP->getNumParams() == 0 && "dtor with formal parameters");
285   assert(FTP->isVariadic() == 0 && "dtor with formal parameters");
286 
287   FunctionType::ExtInfo extInfo = FTP->getExtInfo();
288   return arrangeLLVMFunctionInfo(resultType, true, argTypes, extInfo,
289                                  RequiredArgs::All);
290 }
291 
292 /// Arrange the argument and result information for the declaration or
293 /// definition of the given function.
294 const CGFunctionInfo &
295 CodeGenTypes::arrangeFunctionDeclaration(const FunctionDecl *FD) {
296   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD))
297     if (MD->isInstance())
298       return arrangeCXXMethodDeclaration(MD);
299 
300   CanQualType FTy = FD->getType()->getCanonicalTypeUnqualified();
301 
302   assert(isa<FunctionType>(FTy));
303 
304   // When declaring a function without a prototype, always use a
305   // non-variadic type.
306   if (isa<FunctionNoProtoType>(FTy)) {
307     CanQual<FunctionNoProtoType> noProto = FTy.getAs<FunctionNoProtoType>();
308     return arrangeLLVMFunctionInfo(noProto->getReturnType(), false, None,
309                                    noProto->getExtInfo(), RequiredArgs::All);
310   }
311 
312   assert(isa<FunctionProtoType>(FTy));
313   return arrangeFreeFunctionType(FTy.getAs<FunctionProtoType>());
314 }
315 
316 /// Arrange the argument and result information for the declaration or
317 /// definition of an Objective-C method.
318 const CGFunctionInfo &
319 CodeGenTypes::arrangeObjCMethodDeclaration(const ObjCMethodDecl *MD) {
320   // It happens that this is the same as a call with no optional
321   // arguments, except also using the formal 'self' type.
322   return arrangeObjCMessageSendSignature(MD, MD->getSelfDecl()->getType());
323 }
324 
325 /// Arrange the argument and result information for the function type
326 /// through which to perform a send to the given Objective-C method,
327 /// using the given receiver type.  The receiver type is not always
328 /// the 'self' type of the method or even an Objective-C pointer type.
329 /// This is *not* the right method for actually performing such a
330 /// message send, due to the possibility of optional arguments.
331 const CGFunctionInfo &
332 CodeGenTypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
333                                               QualType receiverType) {
334   SmallVector<CanQualType, 16> argTys;
335   argTys.push_back(Context.getCanonicalParamType(receiverType));
336   argTys.push_back(Context.getCanonicalParamType(Context.getObjCSelType()));
337   // FIXME: Kill copy?
338   for (const auto *I : MD->params()) {
339     argTys.push_back(Context.getCanonicalParamType(I->getType()));
340   }
341 
342   FunctionType::ExtInfo einfo;
343   bool IsWindows = getContext().getTargetInfo().getTriple().isOSWindows();
344   einfo = einfo.withCallingConv(getCallingConventionForDecl(MD, IsWindows));
345 
346   if (getContext().getLangOpts().ObjCAutoRefCount &&
347       MD->hasAttr<NSReturnsRetainedAttr>())
348     einfo = einfo.withProducesResult(true);
349 
350   RequiredArgs required =
351     (MD->isVariadic() ? RequiredArgs(argTys.size()) : RequiredArgs::All);
352 
353   return arrangeLLVMFunctionInfo(GetReturnType(MD->getReturnType()), false,
354                                  argTys, einfo, required);
355 }
356 
357 const CGFunctionInfo &
358 CodeGenTypes::arrangeGlobalDeclaration(GlobalDecl GD) {
359   // FIXME: Do we need to handle ObjCMethodDecl?
360   const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
361 
362   if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
363     return arrangeCXXConstructorDeclaration(CD, GD.getCtorType());
364 
365   if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(FD))
366     return arrangeCXXDestructor(DD, GD.getDtorType());
367 
368   return arrangeFunctionDeclaration(FD);
369 }
370 
371 /// Arrange a call as unto a free function, except possibly with an
372 /// additional number of formal parameters considered required.
373 static const CGFunctionInfo &
374 arrangeFreeFunctionLikeCall(CodeGenTypes &CGT,
375                             CodeGenModule &CGM,
376                             const CallArgList &args,
377                             const FunctionType *fnType,
378                             unsigned numExtraRequiredArgs) {
379   assert(args.size() >= numExtraRequiredArgs);
380 
381   // In most cases, there are no optional arguments.
382   RequiredArgs required = RequiredArgs::All;
383 
384   // If we have a variadic prototype, the required arguments are the
385   // extra prefix plus the arguments in the prototype.
386   if (const FunctionProtoType *proto = dyn_cast<FunctionProtoType>(fnType)) {
387     if (proto->isVariadic())
388       required = RequiredArgs(proto->getNumParams() + numExtraRequiredArgs);
389 
390   // If we don't have a prototype at all, but we're supposed to
391   // explicitly use the variadic convention for unprototyped calls,
392   // treat all of the arguments as required but preserve the nominal
393   // possibility of variadics.
394   } else if (CGM.getTargetCodeGenInfo()
395                 .isNoProtoCallVariadic(args,
396                                        cast<FunctionNoProtoType>(fnType))) {
397     required = RequiredArgs(args.size());
398   }
399 
400   return CGT.arrangeFreeFunctionCall(fnType->getReturnType(), args,
401                                      fnType->getExtInfo(), required);
402 }
403 
404 /// Figure out the rules for calling a function with the given formal
405 /// type using the given arguments.  The arguments are necessary
406 /// because the function might be unprototyped, in which case it's
407 /// target-dependent in crazy ways.
408 const CGFunctionInfo &
409 CodeGenTypes::arrangeFreeFunctionCall(const CallArgList &args,
410                                       const FunctionType *fnType) {
411   return arrangeFreeFunctionLikeCall(*this, CGM, args, fnType, 0);
412 }
413 
414 /// A block function call is essentially a free-function call with an
415 /// extra implicit argument.
416 const CGFunctionInfo &
417 CodeGenTypes::arrangeBlockFunctionCall(const CallArgList &args,
418                                        const FunctionType *fnType) {
419   return arrangeFreeFunctionLikeCall(*this, CGM, args, fnType, 1);
420 }
421 
422 const CGFunctionInfo &
423 CodeGenTypes::arrangeFreeFunctionCall(QualType resultType,
424                                       const CallArgList &args,
425                                       FunctionType::ExtInfo info,
426                                       RequiredArgs required) {
427   // FIXME: Kill copy.
428   SmallVector<CanQualType, 16> argTypes;
429   for (CallArgList::const_iterator i = args.begin(), e = args.end();
430        i != e; ++i)
431     argTypes.push_back(Context.getCanonicalParamType(i->Ty));
432   return arrangeLLVMFunctionInfo(GetReturnType(resultType), false, argTypes,
433                                  info, required);
434 }
435 
436 /// Arrange a call to a C++ method, passing the given arguments.
437 const CGFunctionInfo &
438 CodeGenTypes::arrangeCXXMethodCall(const CallArgList &args,
439                                    const FunctionProtoType *FPT,
440                                    RequiredArgs required) {
441   // FIXME: Kill copy.
442   SmallVector<CanQualType, 16> argTypes;
443   for (CallArgList::const_iterator i = args.begin(), e = args.end();
444        i != e; ++i)
445     argTypes.push_back(Context.getCanonicalParamType(i->Ty));
446 
447   FunctionType::ExtInfo info = FPT->getExtInfo();
448   return arrangeLLVMFunctionInfo(GetReturnType(FPT->getReturnType()), true,
449                                  argTypes, info, required);
450 }
451 
452 const CGFunctionInfo &CodeGenTypes::arrangeFreeFunctionDeclaration(
453     QualType resultType, const FunctionArgList &args,
454     const FunctionType::ExtInfo &info, bool isVariadic) {
455   // FIXME: Kill copy.
456   SmallVector<CanQualType, 16> argTypes;
457   for (FunctionArgList::const_iterator i = args.begin(), e = args.end();
458        i != e; ++i)
459     argTypes.push_back(Context.getCanonicalParamType((*i)->getType()));
460 
461   RequiredArgs required =
462     (isVariadic ? RequiredArgs(args.size()) : RequiredArgs::All);
463   return arrangeLLVMFunctionInfo(GetReturnType(resultType), false, argTypes, info,
464                                  required);
465 }
466 
467 const CGFunctionInfo &CodeGenTypes::arrangeNullaryFunction() {
468   return arrangeLLVMFunctionInfo(getContext().VoidTy, false, None,
469                                  FunctionType::ExtInfo(), RequiredArgs::All);
470 }
471 
472 /// Arrange the argument and result information for an abstract value
473 /// of a given function type.  This is the method which all of the
474 /// above functions ultimately defer to.
475 const CGFunctionInfo &
476 CodeGenTypes::arrangeLLVMFunctionInfo(CanQualType resultType,
477                                       bool IsInstanceMethod,
478                                       ArrayRef<CanQualType> argTypes,
479                                       FunctionType::ExtInfo info,
480                                       RequiredArgs required) {
481 #ifndef NDEBUG
482   for (ArrayRef<CanQualType>::const_iterator
483          I = argTypes.begin(), E = argTypes.end(); I != E; ++I)
484     assert(I->isCanonicalAsParam());
485 #endif
486 
487   unsigned CC = ClangCallConvToLLVMCallConv(info.getCC());
488 
489   // Lookup or create unique function info.
490   llvm::FoldingSetNodeID ID;
491   CGFunctionInfo::Profile(ID, IsInstanceMethod, info, required, resultType,
492                           argTypes);
493 
494   void *insertPos = 0;
495   CGFunctionInfo *FI = FunctionInfos.FindNodeOrInsertPos(ID, insertPos);
496   if (FI)
497     return *FI;
498 
499   // Construct the function info.  We co-allocate the ArgInfos.
500   FI = CGFunctionInfo::create(CC, IsInstanceMethod, info, resultType, argTypes,
501                               required);
502   FunctionInfos.InsertNode(FI, insertPos);
503 
504   bool inserted = FunctionsBeingProcessed.insert(FI); (void)inserted;
505   assert(inserted && "Recursively being processed?");
506 
507   // Compute ABI information.
508   getABIInfo().computeInfo(*FI);
509 
510   // Loop over all of the computed argument and return value info.  If any of
511   // them are direct or extend without a specified coerce type, specify the
512   // default now.
513   ABIArgInfo &retInfo = FI->getReturnInfo();
514   if (retInfo.canHaveCoerceToType() && retInfo.getCoerceToType() == 0)
515     retInfo.setCoerceToType(ConvertType(FI->getReturnType()));
516 
517   for (auto &I : FI->arguments())
518     if (I.info.canHaveCoerceToType() && I.info.getCoerceToType() == 0)
519       I.info.setCoerceToType(ConvertType(I.type));
520 
521   bool erased = FunctionsBeingProcessed.erase(FI); (void)erased;
522   assert(erased && "Not in set?");
523 
524   return *FI;
525 }
526 
527 CGFunctionInfo *CGFunctionInfo::create(unsigned llvmCC,
528                                        bool IsInstanceMethod,
529                                        const FunctionType::ExtInfo &info,
530                                        CanQualType resultType,
531                                        ArrayRef<CanQualType> argTypes,
532                                        RequiredArgs required) {
533   void *buffer = operator new(sizeof(CGFunctionInfo) +
534                               sizeof(ArgInfo) * (argTypes.size() + 1));
535   CGFunctionInfo *FI = new(buffer) CGFunctionInfo();
536   FI->CallingConvention = llvmCC;
537   FI->EffectiveCallingConvention = llvmCC;
538   FI->ASTCallingConvention = info.getCC();
539   FI->InstanceMethod = IsInstanceMethod;
540   FI->NoReturn = info.getNoReturn();
541   FI->ReturnsRetained = info.getProducesResult();
542   FI->Required = required;
543   FI->HasRegParm = info.getHasRegParm();
544   FI->RegParm = info.getRegParm();
545   FI->ArgStruct = 0;
546   FI->NumArgs = argTypes.size();
547   FI->getArgsBuffer()[0].type = resultType;
548   for (unsigned i = 0, e = argTypes.size(); i != e; ++i)
549     FI->getArgsBuffer()[i + 1].type = argTypes[i];
550   return FI;
551 }
552 
553 /***/
554 
555 void CodeGenTypes::GetExpandedTypes(QualType type,
556                      SmallVectorImpl<llvm::Type*> &expandedTypes) {
557   if (const ConstantArrayType *AT = Context.getAsConstantArrayType(type)) {
558     uint64_t NumElts = AT->getSize().getZExtValue();
559     for (uint64_t Elt = 0; Elt < NumElts; ++Elt)
560       GetExpandedTypes(AT->getElementType(), expandedTypes);
561   } else if (const RecordType *RT = type->getAs<RecordType>()) {
562     const RecordDecl *RD = RT->getDecl();
563     assert(!RD->hasFlexibleArrayMember() &&
564            "Cannot expand structure with flexible array.");
565     if (RD->isUnion()) {
566       // Unions can be here only in degenerative cases - all the fields are same
567       // after flattening. Thus we have to use the "largest" field.
568       const FieldDecl *LargestFD = 0;
569       CharUnits UnionSize = CharUnits::Zero();
570 
571       for (const auto *FD : RD->fields()) {
572         assert(!FD->isBitField() &&
573                "Cannot expand structure with bit-field members.");
574         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
575         if (UnionSize < FieldSize) {
576           UnionSize = FieldSize;
577           LargestFD = FD;
578         }
579       }
580       if (LargestFD)
581         GetExpandedTypes(LargestFD->getType(), expandedTypes);
582     } else {
583       for (const auto *I : RD->fields()) {
584         assert(!I->isBitField() &&
585                "Cannot expand structure with bit-field members.");
586         GetExpandedTypes(I->getType(), expandedTypes);
587       }
588     }
589   } else if (const ComplexType *CT = type->getAs<ComplexType>()) {
590     llvm::Type *EltTy = ConvertType(CT->getElementType());
591     expandedTypes.push_back(EltTy);
592     expandedTypes.push_back(EltTy);
593   } else
594     expandedTypes.push_back(ConvertType(type));
595 }
596 
597 llvm::Function::arg_iterator
598 CodeGenFunction::ExpandTypeFromArgs(QualType Ty, LValue LV,
599                                     llvm::Function::arg_iterator AI) {
600   assert(LV.isSimple() &&
601          "Unexpected non-simple lvalue during struct expansion.");
602 
603   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
604     unsigned NumElts = AT->getSize().getZExtValue();
605     QualType EltTy = AT->getElementType();
606     for (unsigned Elt = 0; Elt < NumElts; ++Elt) {
607       llvm::Value *EltAddr = Builder.CreateConstGEP2_32(LV.getAddress(), 0, Elt);
608       LValue LV = MakeAddrLValue(EltAddr, EltTy);
609       AI = ExpandTypeFromArgs(EltTy, LV, AI);
610     }
611   } else if (const RecordType *RT = Ty->getAs<RecordType>()) {
612     RecordDecl *RD = RT->getDecl();
613     if (RD->isUnion()) {
614       // Unions can be here only in degenerative cases - all the fields are same
615       // after flattening. Thus we have to use the "largest" field.
616       const FieldDecl *LargestFD = 0;
617       CharUnits UnionSize = CharUnits::Zero();
618 
619       for (const auto *FD : RD->fields()) {
620         assert(!FD->isBitField() &&
621                "Cannot expand structure with bit-field members.");
622         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
623         if (UnionSize < FieldSize) {
624           UnionSize = FieldSize;
625           LargestFD = FD;
626         }
627       }
628       if (LargestFD) {
629         // FIXME: What are the right qualifiers here?
630         LValue SubLV = EmitLValueForField(LV, LargestFD);
631         AI = ExpandTypeFromArgs(LargestFD->getType(), SubLV, AI);
632       }
633     } else {
634       for (const auto *FD : RD->fields()) {
635         QualType FT = FD->getType();
636 
637         // FIXME: What are the right qualifiers here?
638         LValue SubLV = EmitLValueForField(LV, FD);
639         AI = ExpandTypeFromArgs(FT, SubLV, AI);
640       }
641     }
642   } else if (const ComplexType *CT = Ty->getAs<ComplexType>()) {
643     QualType EltTy = CT->getElementType();
644     llvm::Value *RealAddr = Builder.CreateStructGEP(LV.getAddress(), 0, "real");
645     EmitStoreThroughLValue(RValue::get(AI++), MakeAddrLValue(RealAddr, EltTy));
646     llvm::Value *ImagAddr = Builder.CreateStructGEP(LV.getAddress(), 1, "imag");
647     EmitStoreThroughLValue(RValue::get(AI++), MakeAddrLValue(ImagAddr, EltTy));
648   } else {
649     EmitStoreThroughLValue(RValue::get(AI), LV);
650     ++AI;
651   }
652 
653   return AI;
654 }
655 
656 /// EnterStructPointerForCoercedAccess - Given a struct pointer that we are
657 /// accessing some number of bytes out of it, try to gep into the struct to get
658 /// at its inner goodness.  Dive as deep as possible without entering an element
659 /// with an in-memory size smaller than DstSize.
660 static llvm::Value *
661 EnterStructPointerForCoercedAccess(llvm::Value *SrcPtr,
662                                    llvm::StructType *SrcSTy,
663                                    uint64_t DstSize, CodeGenFunction &CGF) {
664   // We can't dive into a zero-element struct.
665   if (SrcSTy->getNumElements() == 0) return SrcPtr;
666 
667   llvm::Type *FirstElt = SrcSTy->getElementType(0);
668 
669   // If the first elt is at least as large as what we're looking for, or if the
670   // first element is the same size as the whole struct, we can enter it.
671   uint64_t FirstEltSize =
672     CGF.CGM.getDataLayout().getTypeAllocSize(FirstElt);
673   if (FirstEltSize < DstSize &&
674       FirstEltSize < CGF.CGM.getDataLayout().getTypeAllocSize(SrcSTy))
675     return SrcPtr;
676 
677   // GEP into the first element.
678   SrcPtr = CGF.Builder.CreateConstGEP2_32(SrcPtr, 0, 0, "coerce.dive");
679 
680   // If the first element is a struct, recurse.
681   llvm::Type *SrcTy =
682     cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
683   if (llvm::StructType *SrcSTy = dyn_cast<llvm::StructType>(SrcTy))
684     return EnterStructPointerForCoercedAccess(SrcPtr, SrcSTy, DstSize, CGF);
685 
686   return SrcPtr;
687 }
688 
689 /// CoerceIntOrPtrToIntOrPtr - Convert a value Val to the specific Ty where both
690 /// are either integers or pointers.  This does a truncation of the value if it
691 /// is too large or a zero extension if it is too small.
692 ///
693 /// This behaves as if the value were coerced through memory, so on big-endian
694 /// targets the high bits are preserved in a truncation, while little-endian
695 /// targets preserve the low bits.
696 static llvm::Value *CoerceIntOrPtrToIntOrPtr(llvm::Value *Val,
697                                              llvm::Type *Ty,
698                                              CodeGenFunction &CGF) {
699   if (Val->getType() == Ty)
700     return Val;
701 
702   if (isa<llvm::PointerType>(Val->getType())) {
703     // If this is Pointer->Pointer avoid conversion to and from int.
704     if (isa<llvm::PointerType>(Ty))
705       return CGF.Builder.CreateBitCast(Val, Ty, "coerce.val");
706 
707     // Convert the pointer to an integer so we can play with its width.
708     Val = CGF.Builder.CreatePtrToInt(Val, CGF.IntPtrTy, "coerce.val.pi");
709   }
710 
711   llvm::Type *DestIntTy = Ty;
712   if (isa<llvm::PointerType>(DestIntTy))
713     DestIntTy = CGF.IntPtrTy;
714 
715   if (Val->getType() != DestIntTy) {
716     const llvm::DataLayout &DL = CGF.CGM.getDataLayout();
717     if (DL.isBigEndian()) {
718       // Preserve the high bits on big-endian targets.
719       // That is what memory coercion does.
720       uint64_t SrcSize = DL.getTypeSizeInBits(Val->getType());
721       uint64_t DstSize = DL.getTypeSizeInBits(DestIntTy);
722 
723       if (SrcSize > DstSize) {
724         Val = CGF.Builder.CreateLShr(Val, SrcSize - DstSize, "coerce.highbits");
725         Val = CGF.Builder.CreateTrunc(Val, DestIntTy, "coerce.val.ii");
726       } else {
727         Val = CGF.Builder.CreateZExt(Val, DestIntTy, "coerce.val.ii");
728         Val = CGF.Builder.CreateShl(Val, DstSize - SrcSize, "coerce.highbits");
729       }
730     } else {
731       // Little-endian targets preserve the low bits. No shifts required.
732       Val = CGF.Builder.CreateIntCast(Val, DestIntTy, false, "coerce.val.ii");
733     }
734   }
735 
736   if (isa<llvm::PointerType>(Ty))
737     Val = CGF.Builder.CreateIntToPtr(Val, Ty, "coerce.val.ip");
738   return Val;
739 }
740 
741 
742 
743 /// CreateCoercedLoad - Create a load from \arg SrcPtr interpreted as
744 /// a pointer to an object of type \arg Ty.
745 ///
746 /// This safely handles the case when the src type is smaller than the
747 /// destination type; in this situation the values of bits which not
748 /// present in the src are undefined.
749 static llvm::Value *CreateCoercedLoad(llvm::Value *SrcPtr,
750                                       llvm::Type *Ty,
751                                       CodeGenFunction &CGF) {
752   llvm::Type *SrcTy =
753     cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
754 
755   // If SrcTy and Ty are the same, just do a load.
756   if (SrcTy == Ty)
757     return CGF.Builder.CreateLoad(SrcPtr);
758 
759   uint64_t DstSize = CGF.CGM.getDataLayout().getTypeAllocSize(Ty);
760 
761   if (llvm::StructType *SrcSTy = dyn_cast<llvm::StructType>(SrcTy)) {
762     SrcPtr = EnterStructPointerForCoercedAccess(SrcPtr, SrcSTy, DstSize, CGF);
763     SrcTy = cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
764   }
765 
766   uint64_t SrcSize = CGF.CGM.getDataLayout().getTypeAllocSize(SrcTy);
767 
768   // If the source and destination are integer or pointer types, just do an
769   // extension or truncation to the desired type.
770   if ((isa<llvm::IntegerType>(Ty) || isa<llvm::PointerType>(Ty)) &&
771       (isa<llvm::IntegerType>(SrcTy) || isa<llvm::PointerType>(SrcTy))) {
772     llvm::LoadInst *Load = CGF.Builder.CreateLoad(SrcPtr);
773     return CoerceIntOrPtrToIntOrPtr(Load, Ty, CGF);
774   }
775 
776   // If load is legal, just bitcast the src pointer.
777   if (SrcSize >= DstSize) {
778     // Generally SrcSize is never greater than DstSize, since this means we are
779     // losing bits. However, this can happen in cases where the structure has
780     // additional padding, for example due to a user specified alignment.
781     //
782     // FIXME: Assert that we aren't truncating non-padding bits when have access
783     // to that information.
784     llvm::Value *Casted =
785       CGF.Builder.CreateBitCast(SrcPtr, llvm::PointerType::getUnqual(Ty));
786     llvm::LoadInst *Load = CGF.Builder.CreateLoad(Casted);
787     // FIXME: Use better alignment / avoid requiring aligned load.
788     Load->setAlignment(1);
789     return Load;
790   }
791 
792   // Otherwise do coercion through memory. This is stupid, but
793   // simple.
794   llvm::Value *Tmp = CGF.CreateTempAlloca(Ty);
795   llvm::Type *I8PtrTy = CGF.Builder.getInt8PtrTy();
796   llvm::Value *Casted = CGF.Builder.CreateBitCast(Tmp, I8PtrTy);
797   llvm::Value *SrcCasted = CGF.Builder.CreateBitCast(SrcPtr, I8PtrTy);
798   // FIXME: Use better alignment.
799   CGF.Builder.CreateMemCpy(Casted, SrcCasted,
800       llvm::ConstantInt::get(CGF.IntPtrTy, SrcSize),
801       1, false);
802   return CGF.Builder.CreateLoad(Tmp);
803 }
804 
805 // Function to store a first-class aggregate into memory.  We prefer to
806 // store the elements rather than the aggregate to be more friendly to
807 // fast-isel.
808 // FIXME: Do we need to recurse here?
809 static void BuildAggStore(CodeGenFunction &CGF, llvm::Value *Val,
810                           llvm::Value *DestPtr, bool DestIsVolatile,
811                           bool LowAlignment) {
812   // Prefer scalar stores to first-class aggregate stores.
813   if (llvm::StructType *STy =
814         dyn_cast<llvm::StructType>(Val->getType())) {
815     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
816       llvm::Value *EltPtr = CGF.Builder.CreateConstGEP2_32(DestPtr, 0, i);
817       llvm::Value *Elt = CGF.Builder.CreateExtractValue(Val, i);
818       llvm::StoreInst *SI = CGF.Builder.CreateStore(Elt, EltPtr,
819                                                     DestIsVolatile);
820       if (LowAlignment)
821         SI->setAlignment(1);
822     }
823   } else {
824     llvm::StoreInst *SI = CGF.Builder.CreateStore(Val, DestPtr, DestIsVolatile);
825     if (LowAlignment)
826       SI->setAlignment(1);
827   }
828 }
829 
830 /// CreateCoercedStore - Create a store to \arg DstPtr from \arg Src,
831 /// where the source and destination may have different types.
832 ///
833 /// This safely handles the case when the src type is larger than the
834 /// destination type; the upper bits of the src will be lost.
835 static void CreateCoercedStore(llvm::Value *Src,
836                                llvm::Value *DstPtr,
837                                bool DstIsVolatile,
838                                CodeGenFunction &CGF) {
839   llvm::Type *SrcTy = Src->getType();
840   llvm::Type *DstTy =
841     cast<llvm::PointerType>(DstPtr->getType())->getElementType();
842   if (SrcTy == DstTy) {
843     CGF.Builder.CreateStore(Src, DstPtr, DstIsVolatile);
844     return;
845   }
846 
847   uint64_t SrcSize = CGF.CGM.getDataLayout().getTypeAllocSize(SrcTy);
848 
849   if (llvm::StructType *DstSTy = dyn_cast<llvm::StructType>(DstTy)) {
850     DstPtr = EnterStructPointerForCoercedAccess(DstPtr, DstSTy, SrcSize, CGF);
851     DstTy = cast<llvm::PointerType>(DstPtr->getType())->getElementType();
852   }
853 
854   // If the source and destination are integer or pointer types, just do an
855   // extension or truncation to the desired type.
856   if ((isa<llvm::IntegerType>(SrcTy) || isa<llvm::PointerType>(SrcTy)) &&
857       (isa<llvm::IntegerType>(DstTy) || isa<llvm::PointerType>(DstTy))) {
858     Src = CoerceIntOrPtrToIntOrPtr(Src, DstTy, CGF);
859     CGF.Builder.CreateStore(Src, DstPtr, DstIsVolatile);
860     return;
861   }
862 
863   uint64_t DstSize = CGF.CGM.getDataLayout().getTypeAllocSize(DstTy);
864 
865   // If store is legal, just bitcast the src pointer.
866   if (SrcSize <= DstSize) {
867     llvm::Value *Casted =
868       CGF.Builder.CreateBitCast(DstPtr, llvm::PointerType::getUnqual(SrcTy));
869     // FIXME: Use better alignment / avoid requiring aligned store.
870     BuildAggStore(CGF, Src, Casted, DstIsVolatile, true);
871   } else {
872     // Otherwise do coercion through memory. This is stupid, but
873     // simple.
874 
875     // Generally SrcSize is never greater than DstSize, since this means we are
876     // losing bits. However, this can happen in cases where the structure has
877     // additional padding, for example due to a user specified alignment.
878     //
879     // FIXME: Assert that we aren't truncating non-padding bits when have access
880     // to that information.
881     llvm::Value *Tmp = CGF.CreateTempAlloca(SrcTy);
882     CGF.Builder.CreateStore(Src, Tmp);
883     llvm::Type *I8PtrTy = CGF.Builder.getInt8PtrTy();
884     llvm::Value *Casted = CGF.Builder.CreateBitCast(Tmp, I8PtrTy);
885     llvm::Value *DstCasted = CGF.Builder.CreateBitCast(DstPtr, I8PtrTy);
886     // FIXME: Use better alignment.
887     CGF.Builder.CreateMemCpy(DstCasted, Casted,
888         llvm::ConstantInt::get(CGF.IntPtrTy, DstSize),
889         1, false);
890   }
891 }
892 
893 /***/
894 
895 bool CodeGenModule::ReturnTypeUsesSRet(const CGFunctionInfo &FI) {
896   return FI.getReturnInfo().isIndirect();
897 }
898 
899 bool CodeGenModule::ReturnSlotInterferesWithArgs(const CGFunctionInfo &FI) {
900   return ReturnTypeUsesSRet(FI) &&
901          getTargetCodeGenInfo().doesReturnSlotInterfereWithArgs();
902 }
903 
904 bool CodeGenModule::ReturnTypeUsesFPRet(QualType ResultType) {
905   if (const BuiltinType *BT = ResultType->getAs<BuiltinType>()) {
906     switch (BT->getKind()) {
907     default:
908       return false;
909     case BuiltinType::Float:
910       return getTarget().useObjCFPRetForRealType(TargetInfo::Float);
911     case BuiltinType::Double:
912       return getTarget().useObjCFPRetForRealType(TargetInfo::Double);
913     case BuiltinType::LongDouble:
914       return getTarget().useObjCFPRetForRealType(TargetInfo::LongDouble);
915     }
916   }
917 
918   return false;
919 }
920 
921 bool CodeGenModule::ReturnTypeUsesFP2Ret(QualType ResultType) {
922   if (const ComplexType *CT = ResultType->getAs<ComplexType>()) {
923     if (const BuiltinType *BT = CT->getElementType()->getAs<BuiltinType>()) {
924       if (BT->getKind() == BuiltinType::LongDouble)
925         return getTarget().useObjCFP2RetForComplexLongDouble();
926     }
927   }
928 
929   return false;
930 }
931 
932 llvm::FunctionType *CodeGenTypes::GetFunctionType(GlobalDecl GD) {
933   const CGFunctionInfo &FI = arrangeGlobalDeclaration(GD);
934   return GetFunctionType(FI);
935 }
936 
937 llvm::FunctionType *
938 CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
939 
940   bool Inserted = FunctionsBeingProcessed.insert(&FI); (void)Inserted;
941   assert(Inserted && "Recursively being processed?");
942 
943   bool SwapThisWithSRet = false;
944   SmallVector<llvm::Type*, 8> argTypes;
945   llvm::Type *resultType = 0;
946 
947   const ABIArgInfo &retAI = FI.getReturnInfo();
948   switch (retAI.getKind()) {
949   case ABIArgInfo::Expand:
950     llvm_unreachable("Invalid ABI kind for return argument");
951 
952   case ABIArgInfo::Extend:
953   case ABIArgInfo::Direct:
954     resultType = retAI.getCoerceToType();
955     break;
956 
957   case ABIArgInfo::InAlloca:
958     if (retAI.getInAllocaSRet()) {
959       // sret things on win32 aren't void, they return the sret pointer.
960       QualType ret = FI.getReturnType();
961       llvm::Type *ty = ConvertType(ret);
962       unsigned addressSpace = Context.getTargetAddressSpace(ret);
963       resultType = llvm::PointerType::get(ty, addressSpace);
964     } else {
965       resultType = llvm::Type::getVoidTy(getLLVMContext());
966     }
967     break;
968 
969   case ABIArgInfo::Indirect: {
970     assert(!retAI.getIndirectAlign() && "Align unused on indirect return.");
971     resultType = llvm::Type::getVoidTy(getLLVMContext());
972 
973     QualType ret = FI.getReturnType();
974     llvm::Type *ty = ConvertType(ret);
975     unsigned addressSpace = Context.getTargetAddressSpace(ret);
976     argTypes.push_back(llvm::PointerType::get(ty, addressSpace));
977 
978     SwapThisWithSRet = retAI.isSRetAfterThis();
979     break;
980   }
981 
982   case ABIArgInfo::Ignore:
983     resultType = llvm::Type::getVoidTy(getLLVMContext());
984     break;
985   }
986 
987   // Add in all of the required arguments.
988   CGFunctionInfo::const_arg_iterator it = FI.arg_begin(), ie;
989   if (FI.isVariadic()) {
990     ie = it + FI.getRequiredArgs().getNumRequiredArgs();
991   } else {
992     ie = FI.arg_end();
993   }
994   for (; it != ie; ++it) {
995     const ABIArgInfo &argAI = it->info;
996 
997     // Insert a padding type to ensure proper alignment.
998     if (llvm::Type *PaddingType = argAI.getPaddingType())
999       argTypes.push_back(PaddingType);
1000 
1001     switch (argAI.getKind()) {
1002     case ABIArgInfo::Ignore:
1003     case ABIArgInfo::InAlloca:
1004       break;
1005 
1006     case ABIArgInfo::Indirect: {
1007       // indirect arguments are always on the stack, which is addr space #0.
1008       llvm::Type *LTy = ConvertTypeForMem(it->type);
1009       argTypes.push_back(LTy->getPointerTo());
1010       break;
1011     }
1012 
1013     case ABIArgInfo::Extend:
1014     case ABIArgInfo::Direct: {
1015       // If the coerce-to type is a first class aggregate, flatten it.  Either
1016       // way is semantically identical, but fast-isel and the optimizer
1017       // generally likes scalar values better than FCAs.
1018       // We cannot do this for functions using the AAPCS calling convention,
1019       // as structures are treated differently by that calling convention.
1020       llvm::Type *argType = argAI.getCoerceToType();
1021       llvm::StructType *st = dyn_cast<llvm::StructType>(argType);
1022       if (st && !isAAPCSVFP(FI, getTarget())) {
1023         for (unsigned i = 0, e = st->getNumElements(); i != e; ++i)
1024           argTypes.push_back(st->getElementType(i));
1025       } else {
1026         argTypes.push_back(argType);
1027       }
1028       break;
1029     }
1030 
1031     case ABIArgInfo::Expand:
1032       GetExpandedTypes(it->type, argTypes);
1033       break;
1034     }
1035   }
1036 
1037   // Add the inalloca struct as the last parameter type.
1038   if (llvm::StructType *ArgStruct = FI.getArgStruct())
1039     argTypes.push_back(ArgStruct->getPointerTo());
1040 
1041   if (SwapThisWithSRet)
1042     std::swap(argTypes[0], argTypes[1]);
1043 
1044   bool Erased = FunctionsBeingProcessed.erase(&FI); (void)Erased;
1045   assert(Erased && "Not in set?");
1046 
1047   return llvm::FunctionType::get(resultType, argTypes, FI.isVariadic());
1048 }
1049 
1050 llvm::Type *CodeGenTypes::GetFunctionTypeForVTable(GlobalDecl GD) {
1051   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
1052   const FunctionProtoType *FPT = MD->getType()->getAs<FunctionProtoType>();
1053 
1054   if (!isFuncTypeConvertible(FPT))
1055     return llvm::StructType::get(getLLVMContext());
1056 
1057   const CGFunctionInfo *Info;
1058   if (isa<CXXDestructorDecl>(MD))
1059     Info = &arrangeCXXDestructor(cast<CXXDestructorDecl>(MD), GD.getDtorType());
1060   else
1061     Info = &arrangeCXXMethodDeclaration(MD);
1062   return GetFunctionType(*Info);
1063 }
1064 
1065 void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
1066                                            const Decl *TargetDecl,
1067                                            AttributeListType &PAL,
1068                                            unsigned &CallingConv,
1069                                            bool AttrOnCallSite) {
1070   llvm::AttrBuilder FuncAttrs;
1071   llvm::AttrBuilder RetAttrs;
1072 
1073   CallingConv = FI.getEffectiveCallingConvention();
1074 
1075   if (FI.isNoReturn())
1076     FuncAttrs.addAttribute(llvm::Attribute::NoReturn);
1077 
1078   // FIXME: handle sseregparm someday...
1079   if (TargetDecl) {
1080     if (TargetDecl->hasAttr<ReturnsTwiceAttr>())
1081       FuncAttrs.addAttribute(llvm::Attribute::ReturnsTwice);
1082     if (TargetDecl->hasAttr<NoThrowAttr>())
1083       FuncAttrs.addAttribute(llvm::Attribute::NoUnwind);
1084     if (TargetDecl->hasAttr<NoReturnAttr>())
1085       FuncAttrs.addAttribute(llvm::Attribute::NoReturn);
1086     if (TargetDecl->hasAttr<NoDuplicateAttr>())
1087       FuncAttrs.addAttribute(llvm::Attribute::NoDuplicate);
1088 
1089     if (const FunctionDecl *Fn = dyn_cast<FunctionDecl>(TargetDecl)) {
1090       const FunctionProtoType *FPT = Fn->getType()->getAs<FunctionProtoType>();
1091       if (FPT && FPT->isNothrow(getContext()))
1092         FuncAttrs.addAttribute(llvm::Attribute::NoUnwind);
1093       // Don't use [[noreturn]] or _Noreturn for a call to a virtual function.
1094       // These attributes are not inherited by overloads.
1095       const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(Fn);
1096       if (Fn->isNoReturn() && !(AttrOnCallSite && MD && MD->isVirtual()))
1097         FuncAttrs.addAttribute(llvm::Attribute::NoReturn);
1098     }
1099 
1100     // 'const' and 'pure' attribute functions are also nounwind.
1101     if (TargetDecl->hasAttr<ConstAttr>()) {
1102       FuncAttrs.addAttribute(llvm::Attribute::ReadNone);
1103       FuncAttrs.addAttribute(llvm::Attribute::NoUnwind);
1104     } else if (TargetDecl->hasAttr<PureAttr>()) {
1105       FuncAttrs.addAttribute(llvm::Attribute::ReadOnly);
1106       FuncAttrs.addAttribute(llvm::Attribute::NoUnwind);
1107     }
1108     if (TargetDecl->hasAttr<MallocAttr>())
1109       RetAttrs.addAttribute(llvm::Attribute::NoAlias);
1110   }
1111 
1112   if (CodeGenOpts.OptimizeSize)
1113     FuncAttrs.addAttribute(llvm::Attribute::OptimizeForSize);
1114   if (CodeGenOpts.OptimizeSize == 2)
1115     FuncAttrs.addAttribute(llvm::Attribute::MinSize);
1116   if (CodeGenOpts.DisableRedZone)
1117     FuncAttrs.addAttribute(llvm::Attribute::NoRedZone);
1118   if (CodeGenOpts.NoImplicitFloat)
1119     FuncAttrs.addAttribute(llvm::Attribute::NoImplicitFloat);
1120   if (CodeGenOpts.EnableSegmentedStacks)
1121     FuncAttrs.addAttribute("split-stack");
1122 
1123   if (AttrOnCallSite) {
1124     // Attributes that should go on the call site only.
1125     if (!CodeGenOpts.SimplifyLibCalls)
1126       FuncAttrs.addAttribute(llvm::Attribute::NoBuiltin);
1127   } else {
1128     // Attributes that should go on the function, but not the call site.
1129     if (!CodeGenOpts.DisableFPElim) {
1130       FuncAttrs.addAttribute("no-frame-pointer-elim", "false");
1131     } else if (CodeGenOpts.OmitLeafFramePointer) {
1132       FuncAttrs.addAttribute("no-frame-pointer-elim", "false");
1133       FuncAttrs.addAttribute("no-frame-pointer-elim-non-leaf");
1134     } else {
1135       FuncAttrs.addAttribute("no-frame-pointer-elim", "true");
1136       FuncAttrs.addAttribute("no-frame-pointer-elim-non-leaf");
1137     }
1138 
1139     FuncAttrs.addAttribute("less-precise-fpmad",
1140                            llvm::toStringRef(CodeGenOpts.LessPreciseFPMAD));
1141     FuncAttrs.addAttribute("no-infs-fp-math",
1142                            llvm::toStringRef(CodeGenOpts.NoInfsFPMath));
1143     FuncAttrs.addAttribute("no-nans-fp-math",
1144                            llvm::toStringRef(CodeGenOpts.NoNaNsFPMath));
1145     FuncAttrs.addAttribute("unsafe-fp-math",
1146                            llvm::toStringRef(CodeGenOpts.UnsafeFPMath));
1147     FuncAttrs.addAttribute("use-soft-float",
1148                            llvm::toStringRef(CodeGenOpts.SoftFloat));
1149     FuncAttrs.addAttribute("stack-protector-buffer-size",
1150                            llvm::utostr(CodeGenOpts.SSPBufferSize));
1151 
1152     if (!CodeGenOpts.StackRealignment)
1153       FuncAttrs.addAttribute("no-realign-stack");
1154   }
1155 
1156   QualType RetTy = FI.getReturnType();
1157   unsigned Index = 1;
1158   bool SwapThisWithSRet = false;
1159   const ABIArgInfo &RetAI = FI.getReturnInfo();
1160   switch (RetAI.getKind()) {
1161   case ABIArgInfo::Extend:
1162     if (RetTy->hasSignedIntegerRepresentation())
1163       RetAttrs.addAttribute(llvm::Attribute::SExt);
1164     else if (RetTy->hasUnsignedIntegerRepresentation())
1165       RetAttrs.addAttribute(llvm::Attribute::ZExt);
1166     // FALL THROUGH
1167   case ABIArgInfo::Direct:
1168     if (RetAI.getInReg())
1169       RetAttrs.addAttribute(llvm::Attribute::InReg);
1170     break;
1171   case ABIArgInfo::Ignore:
1172     break;
1173 
1174   case ABIArgInfo::InAlloca: {
1175     // inalloca disables readnone and readonly
1176     FuncAttrs.removeAttribute(llvm::Attribute::ReadOnly)
1177       .removeAttribute(llvm::Attribute::ReadNone);
1178     break;
1179   }
1180 
1181   case ABIArgInfo::Indirect: {
1182     llvm::AttrBuilder SRETAttrs;
1183     SRETAttrs.addAttribute(llvm::Attribute::StructRet);
1184     if (RetAI.getInReg())
1185       SRETAttrs.addAttribute(llvm::Attribute::InReg);
1186     SwapThisWithSRet = RetAI.isSRetAfterThis();
1187     PAL.push_back(llvm::AttributeSet::get(
1188         getLLVMContext(), SwapThisWithSRet ? 2 : Index, SRETAttrs));
1189 
1190     if (!SwapThisWithSRet)
1191       ++Index;
1192     // sret disables readnone and readonly
1193     FuncAttrs.removeAttribute(llvm::Attribute::ReadOnly)
1194       .removeAttribute(llvm::Attribute::ReadNone);
1195     break;
1196   }
1197 
1198   case ABIArgInfo::Expand:
1199     llvm_unreachable("Invalid ABI kind for return argument");
1200   }
1201 
1202   if (RetAttrs.hasAttributes())
1203     PAL.push_back(llvm::
1204                   AttributeSet::get(getLLVMContext(),
1205                                     llvm::AttributeSet::ReturnIndex,
1206                                     RetAttrs));
1207 
1208   for (const auto &I : FI.arguments()) {
1209     QualType ParamType = I.type;
1210     const ABIArgInfo &AI = I.info;
1211     llvm::AttrBuilder Attrs;
1212 
1213     // Skip over the sret parameter when it comes second.  We already handled it
1214     // above.
1215     if (Index == 2 && SwapThisWithSRet)
1216       ++Index;
1217 
1218     if (AI.getPaddingType()) {
1219       if (AI.getPaddingInReg())
1220         PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index,
1221                                               llvm::Attribute::InReg));
1222       // Increment Index if there is padding.
1223       ++Index;
1224     }
1225 
1226     // 'restrict' -> 'noalias' is done in EmitFunctionProlog when we
1227     // have the corresponding parameter variable.  It doesn't make
1228     // sense to do it here because parameters are so messed up.
1229     switch (AI.getKind()) {
1230     case ABIArgInfo::Extend:
1231       if (ParamType->isSignedIntegerOrEnumerationType())
1232         Attrs.addAttribute(llvm::Attribute::SExt);
1233       else if (ParamType->isUnsignedIntegerOrEnumerationType())
1234         Attrs.addAttribute(llvm::Attribute::ZExt);
1235       // FALL THROUGH
1236     case ABIArgInfo::Direct: {
1237       if (AI.getInReg())
1238         Attrs.addAttribute(llvm::Attribute::InReg);
1239 
1240       // FIXME: handle sseregparm someday...
1241 
1242       llvm::StructType *STy =
1243           dyn_cast<llvm::StructType>(AI.getCoerceToType());
1244       if (!isAAPCSVFP(FI, getTarget()) && STy) {
1245         unsigned Extra = STy->getNumElements()-1;  // 1 will be added below.
1246         if (Attrs.hasAttributes())
1247           for (unsigned I = 0; I < Extra; ++I)
1248             PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index + I,
1249                                                   Attrs));
1250         Index += Extra;
1251       }
1252       break;
1253     }
1254     case ABIArgInfo::Indirect:
1255       if (AI.getInReg())
1256         Attrs.addAttribute(llvm::Attribute::InReg);
1257 
1258       if (AI.getIndirectByVal())
1259         Attrs.addAttribute(llvm::Attribute::ByVal);
1260 
1261       Attrs.addAlignmentAttr(AI.getIndirectAlign());
1262 
1263       // byval disables readnone and readonly.
1264       FuncAttrs.removeAttribute(llvm::Attribute::ReadOnly)
1265         .removeAttribute(llvm::Attribute::ReadNone);
1266       break;
1267 
1268     case ABIArgInfo::Ignore:
1269       // Skip increment, no matching LLVM parameter.
1270       continue;
1271 
1272     case ABIArgInfo::InAlloca:
1273       // inalloca disables readnone and readonly.
1274       FuncAttrs.removeAttribute(llvm::Attribute::ReadOnly)
1275           .removeAttribute(llvm::Attribute::ReadNone);
1276       // Skip increment, no matching LLVM parameter.
1277       continue;
1278 
1279     case ABIArgInfo::Expand: {
1280       SmallVector<llvm::Type*, 8> types;
1281       // FIXME: This is rather inefficient. Do we ever actually need to do
1282       // anything here? The result should be just reconstructed on the other
1283       // side, so extension should be a non-issue.
1284       getTypes().GetExpandedTypes(ParamType, types);
1285       Index += types.size();
1286       continue;
1287     }
1288     }
1289 
1290     if (Attrs.hasAttributes())
1291       PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index, Attrs));
1292     ++Index;
1293   }
1294 
1295   // Add the inalloca attribute to the trailing inalloca parameter if present.
1296   if (FI.usesInAlloca()) {
1297     llvm::AttrBuilder Attrs;
1298     Attrs.addAttribute(llvm::Attribute::InAlloca);
1299     PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index, Attrs));
1300   }
1301 
1302   if (FuncAttrs.hasAttributes())
1303     PAL.push_back(llvm::
1304                   AttributeSet::get(getLLVMContext(),
1305                                     llvm::AttributeSet::FunctionIndex,
1306                                     FuncAttrs));
1307 }
1308 
1309 /// An argument came in as a promoted argument; demote it back to its
1310 /// declared type.
1311 static llvm::Value *emitArgumentDemotion(CodeGenFunction &CGF,
1312                                          const VarDecl *var,
1313                                          llvm::Value *value) {
1314   llvm::Type *varType = CGF.ConvertType(var->getType());
1315 
1316   // This can happen with promotions that actually don't change the
1317   // underlying type, like the enum promotions.
1318   if (value->getType() == varType) return value;
1319 
1320   assert((varType->isIntegerTy() || varType->isFloatingPointTy())
1321          && "unexpected promotion type");
1322 
1323   if (isa<llvm::IntegerType>(varType))
1324     return CGF.Builder.CreateTrunc(value, varType, "arg.unpromote");
1325 
1326   return CGF.Builder.CreateFPCast(value, varType, "arg.unpromote");
1327 }
1328 
1329 void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
1330                                          llvm::Function *Fn,
1331                                          const FunctionArgList &Args) {
1332   // If this is an implicit-return-zero function, go ahead and
1333   // initialize the return value.  TODO: it might be nice to have
1334   // a more general mechanism for this that didn't require synthesized
1335   // return statements.
1336   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(CurCodeDecl)) {
1337     if (FD->hasImplicitReturnZero()) {
1338       QualType RetTy = FD->getReturnType().getUnqualifiedType();
1339       llvm::Type* LLVMTy = CGM.getTypes().ConvertType(RetTy);
1340       llvm::Constant* Zero = llvm::Constant::getNullValue(LLVMTy);
1341       Builder.CreateStore(Zero, ReturnValue);
1342     }
1343   }
1344 
1345   // FIXME: We no longer need the types from FunctionArgList; lift up and
1346   // simplify.
1347 
1348   // Emit allocs for param decls.  Give the LLVM Argument nodes names.
1349   llvm::Function::arg_iterator AI = Fn->arg_begin();
1350 
1351   // If we're using inalloca, all the memory arguments are GEPs off of the last
1352   // parameter, which is a pointer to the complete memory area.
1353   llvm::Value *ArgStruct = 0;
1354   if (FI.usesInAlloca()) {
1355     llvm::Function::arg_iterator EI = Fn->arg_end();
1356     --EI;
1357     ArgStruct = EI;
1358     assert(ArgStruct->getType() == FI.getArgStruct()->getPointerTo());
1359   }
1360 
1361   // Name the struct return parameter, which can come first or second.
1362   const ABIArgInfo &RetAI = FI.getReturnInfo();
1363   bool SwapThisWithSRet = false;
1364   if (RetAI.isIndirect()) {
1365     SwapThisWithSRet = RetAI.isSRetAfterThis();
1366     if (SwapThisWithSRet)
1367       ++AI;
1368     AI->setName("agg.result");
1369     AI->addAttr(llvm::AttributeSet::get(getLLVMContext(), AI->getArgNo() + 1,
1370                                         llvm::Attribute::NoAlias));
1371     if (SwapThisWithSRet)
1372       --AI;  // Go back to the beginning for 'this'.
1373     else
1374       ++AI;  // Skip the sret parameter.
1375   }
1376 
1377   // Track if we received the parameter as a pointer (indirect, byval, or
1378   // inalloca).  If already have a pointer, EmitParmDecl doesn't need to copy it
1379   // into a local alloca for us.
1380   enum ValOrPointer { HaveValue = 0, HavePointer = 1 };
1381   typedef llvm::PointerIntPair<llvm::Value *, 1> ValueAndIsPtr;
1382   SmallVector<ValueAndIsPtr, 16> ArgVals;
1383   ArgVals.reserve(Args.size());
1384 
1385   // Create a pointer value for every parameter declaration.  This usually
1386   // entails copying one or more LLVM IR arguments into an alloca.  Don't push
1387   // any cleanups or do anything that might unwind.  We do that separately, so
1388   // we can push the cleanups in the correct order for the ABI.
1389   assert(FI.arg_size() == Args.size() &&
1390          "Mismatch between function signature & arguments.");
1391   unsigned ArgNo = 1;
1392   CGFunctionInfo::const_arg_iterator info_it = FI.arg_begin();
1393   for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
1394        i != e; ++i, ++info_it, ++ArgNo) {
1395     const VarDecl *Arg = *i;
1396     QualType Ty = info_it->type;
1397     const ABIArgInfo &ArgI = info_it->info;
1398 
1399     bool isPromoted =
1400       isa<ParmVarDecl>(Arg) && cast<ParmVarDecl>(Arg)->isKNRPromoted();
1401 
1402     // Skip the dummy padding argument.
1403     if (ArgI.getPaddingType())
1404       ++AI;
1405 
1406     switch (ArgI.getKind()) {
1407     case ABIArgInfo::InAlloca: {
1408       llvm::Value *V = Builder.CreateStructGEP(
1409           ArgStruct, ArgI.getInAllocaFieldIndex(), Arg->getName());
1410       ArgVals.push_back(ValueAndIsPtr(V, HavePointer));
1411       continue;  // Don't increment AI!
1412     }
1413 
1414     case ABIArgInfo::Indirect: {
1415       llvm::Value *V = AI;
1416 
1417       if (!hasScalarEvaluationKind(Ty)) {
1418         // Aggregates and complex variables are accessed by reference.  All we
1419         // need to do is realign the value, if requested
1420         if (ArgI.getIndirectRealign()) {
1421           llvm::Value *AlignedTemp = CreateMemTemp(Ty, "coerce");
1422 
1423           // Copy from the incoming argument pointer to the temporary with the
1424           // appropriate alignment.
1425           //
1426           // FIXME: We should have a common utility for generating an aggregate
1427           // copy.
1428           llvm::Type *I8PtrTy = Builder.getInt8PtrTy();
1429           CharUnits Size = getContext().getTypeSizeInChars(Ty);
1430           llvm::Value *Dst = Builder.CreateBitCast(AlignedTemp, I8PtrTy);
1431           llvm::Value *Src = Builder.CreateBitCast(V, I8PtrTy);
1432           Builder.CreateMemCpy(Dst,
1433                                Src,
1434                                llvm::ConstantInt::get(IntPtrTy,
1435                                                       Size.getQuantity()),
1436                                ArgI.getIndirectAlign(),
1437                                false);
1438           V = AlignedTemp;
1439         }
1440         ArgVals.push_back(ValueAndIsPtr(V, HavePointer));
1441       } else {
1442         // Load scalar value from indirect argument.
1443         CharUnits Alignment = getContext().getTypeAlignInChars(Ty);
1444         V = EmitLoadOfScalar(V, false, Alignment.getQuantity(), Ty,
1445                              Arg->getLocStart());
1446 
1447         if (isPromoted)
1448           V = emitArgumentDemotion(*this, Arg, V);
1449         ArgVals.push_back(ValueAndIsPtr(V, HaveValue));
1450       }
1451       break;
1452     }
1453 
1454     case ABIArgInfo::Extend:
1455     case ABIArgInfo::Direct: {
1456 
1457       // If we have the trivial case, handle it with no muss and fuss.
1458       if (!isa<llvm::StructType>(ArgI.getCoerceToType()) &&
1459           ArgI.getCoerceToType() == ConvertType(Ty) &&
1460           ArgI.getDirectOffset() == 0) {
1461         assert(AI != Fn->arg_end() && "Argument mismatch!");
1462         llvm::Value *V = AI;
1463 
1464         if (Arg->getType().isRestrictQualified())
1465           AI->addAttr(llvm::AttributeSet::get(getLLVMContext(),
1466                                               AI->getArgNo() + 1,
1467                                               llvm::Attribute::NoAlias));
1468 
1469         // Ensure the argument is the correct type.
1470         if (V->getType() != ArgI.getCoerceToType())
1471           V = Builder.CreateBitCast(V, ArgI.getCoerceToType());
1472 
1473         if (isPromoted)
1474           V = emitArgumentDemotion(*this, Arg, V);
1475 
1476         if (const CXXMethodDecl *MD =
1477             dyn_cast_or_null<CXXMethodDecl>(CurCodeDecl)) {
1478           if (MD->isVirtual() && Arg == CXXABIThisDecl)
1479             V = CGM.getCXXABI().
1480                 adjustThisParameterInVirtualFunctionPrologue(*this, CurGD, V);
1481         }
1482 
1483         // Because of merging of function types from multiple decls it is
1484         // possible for the type of an argument to not match the corresponding
1485         // type in the function type. Since we are codegening the callee
1486         // in here, add a cast to the argument type.
1487         llvm::Type *LTy = ConvertType(Arg->getType());
1488         if (V->getType() != LTy)
1489           V = Builder.CreateBitCast(V, LTy);
1490 
1491         ArgVals.push_back(ValueAndIsPtr(V, HaveValue));
1492         break;
1493       }
1494 
1495       llvm::AllocaInst *Alloca = CreateMemTemp(Ty, Arg->getName());
1496 
1497       // The alignment we need to use is the max of the requested alignment for
1498       // the argument plus the alignment required by our access code below.
1499       unsigned AlignmentToUse =
1500         CGM.getDataLayout().getABITypeAlignment(ArgI.getCoerceToType());
1501       AlignmentToUse = std::max(AlignmentToUse,
1502                         (unsigned)getContext().getDeclAlign(Arg).getQuantity());
1503 
1504       Alloca->setAlignment(AlignmentToUse);
1505       llvm::Value *V = Alloca;
1506       llvm::Value *Ptr = V;    // Pointer to store into.
1507 
1508       // If the value is offset in memory, apply the offset now.
1509       if (unsigned Offs = ArgI.getDirectOffset()) {
1510         Ptr = Builder.CreateBitCast(Ptr, Builder.getInt8PtrTy());
1511         Ptr = Builder.CreateConstGEP1_32(Ptr, Offs);
1512         Ptr = Builder.CreateBitCast(Ptr,
1513                           llvm::PointerType::getUnqual(ArgI.getCoerceToType()));
1514       }
1515 
1516       // If the coerce-to type is a first class aggregate, we flatten it and
1517       // pass the elements. Either way is semantically identical, but fast-isel
1518       // and the optimizer generally likes scalar values better than FCAs.
1519       // We cannot do this for functions using the AAPCS calling convention,
1520       // as structures are treated differently by that calling convention.
1521       llvm::StructType *STy = dyn_cast<llvm::StructType>(ArgI.getCoerceToType());
1522       if (!isAAPCSVFP(FI, getTarget()) && STy && STy->getNumElements() > 1) {
1523         uint64_t SrcSize = CGM.getDataLayout().getTypeAllocSize(STy);
1524         llvm::Type *DstTy =
1525           cast<llvm::PointerType>(Ptr->getType())->getElementType();
1526         uint64_t DstSize = CGM.getDataLayout().getTypeAllocSize(DstTy);
1527 
1528         if (SrcSize <= DstSize) {
1529           Ptr = Builder.CreateBitCast(Ptr, llvm::PointerType::getUnqual(STy));
1530 
1531           for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
1532             assert(AI != Fn->arg_end() && "Argument mismatch!");
1533             AI->setName(Arg->getName() + ".coerce" + Twine(i));
1534             llvm::Value *EltPtr = Builder.CreateConstGEP2_32(Ptr, 0, i);
1535             Builder.CreateStore(AI++, EltPtr);
1536           }
1537         } else {
1538           llvm::AllocaInst *TempAlloca =
1539             CreateTempAlloca(ArgI.getCoerceToType(), "coerce");
1540           TempAlloca->setAlignment(AlignmentToUse);
1541           llvm::Value *TempV = TempAlloca;
1542 
1543           for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
1544             assert(AI != Fn->arg_end() && "Argument mismatch!");
1545             AI->setName(Arg->getName() + ".coerce" + Twine(i));
1546             llvm::Value *EltPtr = Builder.CreateConstGEP2_32(TempV, 0, i);
1547             Builder.CreateStore(AI++, EltPtr);
1548           }
1549 
1550           Builder.CreateMemCpy(Ptr, TempV, DstSize, AlignmentToUse);
1551         }
1552       } else {
1553         // Simple case, just do a coerced store of the argument into the alloca.
1554         assert(AI != Fn->arg_end() && "Argument mismatch!");
1555         AI->setName(Arg->getName() + ".coerce");
1556         CreateCoercedStore(AI++, Ptr, /*DestIsVolatile=*/false, *this);
1557       }
1558 
1559 
1560       // Match to what EmitParmDecl is expecting for this type.
1561       if (CodeGenFunction::hasScalarEvaluationKind(Ty)) {
1562         V = EmitLoadOfScalar(V, false, AlignmentToUse, Ty, Arg->getLocStart());
1563         if (isPromoted)
1564           V = emitArgumentDemotion(*this, Arg, V);
1565         ArgVals.push_back(ValueAndIsPtr(V, HaveValue));
1566       } else {
1567         ArgVals.push_back(ValueAndIsPtr(V, HavePointer));
1568       }
1569       continue;  // Skip ++AI increment, already done.
1570     }
1571 
1572     case ABIArgInfo::Expand: {
1573       // If this structure was expanded into multiple arguments then
1574       // we need to create a temporary and reconstruct it from the
1575       // arguments.
1576       llvm::AllocaInst *Alloca = CreateMemTemp(Ty);
1577       CharUnits Align = getContext().getDeclAlign(Arg);
1578       Alloca->setAlignment(Align.getQuantity());
1579       LValue LV = MakeAddrLValue(Alloca, Ty, Align);
1580       llvm::Function::arg_iterator End = ExpandTypeFromArgs(Ty, LV, AI);
1581       ArgVals.push_back(ValueAndIsPtr(Alloca, HavePointer));
1582 
1583       // Name the arguments used in expansion and increment AI.
1584       unsigned Index = 0;
1585       for (; AI != End; ++AI, ++Index)
1586         AI->setName(Arg->getName() + "." + Twine(Index));
1587       continue;
1588     }
1589 
1590     case ABIArgInfo::Ignore:
1591       // Initialize the local variable appropriately.
1592       if (!hasScalarEvaluationKind(Ty)) {
1593         ArgVals.push_back(ValueAndIsPtr(CreateMemTemp(Ty), HavePointer));
1594       } else {
1595         llvm::Value *U = llvm::UndefValue::get(ConvertType(Arg->getType()));
1596         ArgVals.push_back(ValueAndIsPtr(U, HaveValue));
1597       }
1598 
1599       // Skip increment, no matching LLVM parameter.
1600       continue;
1601     }
1602 
1603     ++AI;
1604 
1605     if (ArgNo == 1 && SwapThisWithSRet)
1606       ++AI;  // Skip the sret parameter.
1607   }
1608 
1609   if (FI.usesInAlloca())
1610     ++AI;
1611   assert(AI == Fn->arg_end() && "Argument mismatch!");
1612 
1613   if (getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) {
1614     for (int I = Args.size() - 1; I >= 0; --I)
1615       EmitParmDecl(*Args[I], ArgVals[I].getPointer(), ArgVals[I].getInt(),
1616                    I + 1);
1617   } else {
1618     for (unsigned I = 0, E = Args.size(); I != E; ++I)
1619       EmitParmDecl(*Args[I], ArgVals[I].getPointer(), ArgVals[I].getInt(),
1620                    I + 1);
1621   }
1622 }
1623 
1624 static void eraseUnusedBitCasts(llvm::Instruction *insn) {
1625   while (insn->use_empty()) {
1626     llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(insn);
1627     if (!bitcast) return;
1628 
1629     // This is "safe" because we would have used a ConstantExpr otherwise.
1630     insn = cast<llvm::Instruction>(bitcast->getOperand(0));
1631     bitcast->eraseFromParent();
1632   }
1633 }
1634 
1635 /// Try to emit a fused autorelease of a return result.
1636 static llvm::Value *tryEmitFusedAutoreleaseOfResult(CodeGenFunction &CGF,
1637                                                     llvm::Value *result) {
1638   // We must be immediately followed the cast.
1639   llvm::BasicBlock *BB = CGF.Builder.GetInsertBlock();
1640   if (BB->empty()) return 0;
1641   if (&BB->back() != result) return 0;
1642 
1643   llvm::Type *resultType = result->getType();
1644 
1645   // result is in a BasicBlock and is therefore an Instruction.
1646   llvm::Instruction *generator = cast<llvm::Instruction>(result);
1647 
1648   SmallVector<llvm::Instruction*,4> insnsToKill;
1649 
1650   // Look for:
1651   //  %generator = bitcast %type1* %generator2 to %type2*
1652   while (llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(generator)) {
1653     // We would have emitted this as a constant if the operand weren't
1654     // an Instruction.
1655     generator = cast<llvm::Instruction>(bitcast->getOperand(0));
1656 
1657     // Require the generator to be immediately followed by the cast.
1658     if (generator->getNextNode() != bitcast)
1659       return 0;
1660 
1661     insnsToKill.push_back(bitcast);
1662   }
1663 
1664   // Look for:
1665   //   %generator = call i8* @objc_retain(i8* %originalResult)
1666   // or
1667   //   %generator = call i8* @objc_retainAutoreleasedReturnValue(i8* %originalResult)
1668   llvm::CallInst *call = dyn_cast<llvm::CallInst>(generator);
1669   if (!call) return 0;
1670 
1671   bool doRetainAutorelease;
1672 
1673   if (call->getCalledValue() == CGF.CGM.getARCEntrypoints().objc_retain) {
1674     doRetainAutorelease = true;
1675   } else if (call->getCalledValue() == CGF.CGM.getARCEntrypoints()
1676                                           .objc_retainAutoreleasedReturnValue) {
1677     doRetainAutorelease = false;
1678 
1679     // If we emitted an assembly marker for this call (and the
1680     // ARCEntrypoints field should have been set if so), go looking
1681     // for that call.  If we can't find it, we can't do this
1682     // optimization.  But it should always be the immediately previous
1683     // instruction, unless we needed bitcasts around the call.
1684     if (CGF.CGM.getARCEntrypoints().retainAutoreleasedReturnValueMarker) {
1685       llvm::Instruction *prev = call->getPrevNode();
1686       assert(prev);
1687       if (isa<llvm::BitCastInst>(prev)) {
1688         prev = prev->getPrevNode();
1689         assert(prev);
1690       }
1691       assert(isa<llvm::CallInst>(prev));
1692       assert(cast<llvm::CallInst>(prev)->getCalledValue() ==
1693                CGF.CGM.getARCEntrypoints().retainAutoreleasedReturnValueMarker);
1694       insnsToKill.push_back(prev);
1695     }
1696   } else {
1697     return 0;
1698   }
1699 
1700   result = call->getArgOperand(0);
1701   insnsToKill.push_back(call);
1702 
1703   // Keep killing bitcasts, for sanity.  Note that we no longer care
1704   // about precise ordering as long as there's exactly one use.
1705   while (llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(result)) {
1706     if (!bitcast->hasOneUse()) break;
1707     insnsToKill.push_back(bitcast);
1708     result = bitcast->getOperand(0);
1709   }
1710 
1711   // Delete all the unnecessary instructions, from latest to earliest.
1712   for (SmallVectorImpl<llvm::Instruction*>::iterator
1713          i = insnsToKill.begin(), e = insnsToKill.end(); i != e; ++i)
1714     (*i)->eraseFromParent();
1715 
1716   // Do the fused retain/autorelease if we were asked to.
1717   if (doRetainAutorelease)
1718     result = CGF.EmitARCRetainAutoreleaseReturnValue(result);
1719 
1720   // Cast back to the result type.
1721   return CGF.Builder.CreateBitCast(result, resultType);
1722 }
1723 
1724 /// If this is a +1 of the value of an immutable 'self', remove it.
1725 static llvm::Value *tryRemoveRetainOfSelf(CodeGenFunction &CGF,
1726                                           llvm::Value *result) {
1727   // This is only applicable to a method with an immutable 'self'.
1728   const ObjCMethodDecl *method =
1729     dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl);
1730   if (!method) return 0;
1731   const VarDecl *self = method->getSelfDecl();
1732   if (!self->getType().isConstQualified()) return 0;
1733 
1734   // Look for a retain call.
1735   llvm::CallInst *retainCall =
1736     dyn_cast<llvm::CallInst>(result->stripPointerCasts());
1737   if (!retainCall ||
1738       retainCall->getCalledValue() != CGF.CGM.getARCEntrypoints().objc_retain)
1739     return 0;
1740 
1741   // Look for an ordinary load of 'self'.
1742   llvm::Value *retainedValue = retainCall->getArgOperand(0);
1743   llvm::LoadInst *load =
1744     dyn_cast<llvm::LoadInst>(retainedValue->stripPointerCasts());
1745   if (!load || load->isAtomic() || load->isVolatile() ||
1746       load->getPointerOperand() != CGF.GetAddrOfLocalVar(self))
1747     return 0;
1748 
1749   // Okay!  Burn it all down.  This relies for correctness on the
1750   // assumption that the retain is emitted as part of the return and
1751   // that thereafter everything is used "linearly".
1752   llvm::Type *resultType = result->getType();
1753   eraseUnusedBitCasts(cast<llvm::Instruction>(result));
1754   assert(retainCall->use_empty());
1755   retainCall->eraseFromParent();
1756   eraseUnusedBitCasts(cast<llvm::Instruction>(retainedValue));
1757 
1758   return CGF.Builder.CreateBitCast(load, resultType);
1759 }
1760 
1761 /// Emit an ARC autorelease of the result of a function.
1762 ///
1763 /// \return the value to actually return from the function
1764 static llvm::Value *emitAutoreleaseOfResult(CodeGenFunction &CGF,
1765                                             llvm::Value *result) {
1766   // If we're returning 'self', kill the initial retain.  This is a
1767   // heuristic attempt to "encourage correctness" in the really unfortunate
1768   // case where we have a return of self during a dealloc and we desperately
1769   // need to avoid the possible autorelease.
1770   if (llvm::Value *self = tryRemoveRetainOfSelf(CGF, result))
1771     return self;
1772 
1773   // At -O0, try to emit a fused retain/autorelease.
1774   if (CGF.shouldUseFusedARCCalls())
1775     if (llvm::Value *fused = tryEmitFusedAutoreleaseOfResult(CGF, result))
1776       return fused;
1777 
1778   return CGF.EmitARCAutoreleaseReturnValue(result);
1779 }
1780 
1781 /// Heuristically search for a dominating store to the return-value slot.
1782 static llvm::StoreInst *findDominatingStoreToReturnValue(CodeGenFunction &CGF) {
1783   // If there are multiple uses of the return-value slot, just check
1784   // for something immediately preceding the IP.  Sometimes this can
1785   // happen with how we generate implicit-returns; it can also happen
1786   // with noreturn cleanups.
1787   if (!CGF.ReturnValue->hasOneUse()) {
1788     llvm::BasicBlock *IP = CGF.Builder.GetInsertBlock();
1789     if (IP->empty()) return 0;
1790     llvm::StoreInst *store = dyn_cast<llvm::StoreInst>(&IP->back());
1791     if (!store) return 0;
1792     if (store->getPointerOperand() != CGF.ReturnValue) return 0;
1793     assert(!store->isAtomic() && !store->isVolatile()); // see below
1794     return store;
1795   }
1796 
1797   llvm::StoreInst *store =
1798     dyn_cast<llvm::StoreInst>(CGF.ReturnValue->user_back());
1799   if (!store) return 0;
1800 
1801   // These aren't actually possible for non-coerced returns, and we
1802   // only care about non-coerced returns on this code path.
1803   assert(!store->isAtomic() && !store->isVolatile());
1804 
1805   // Now do a first-and-dirty dominance check: just walk up the
1806   // single-predecessors chain from the current insertion point.
1807   llvm::BasicBlock *StoreBB = store->getParent();
1808   llvm::BasicBlock *IP = CGF.Builder.GetInsertBlock();
1809   while (IP != StoreBB) {
1810     if (!(IP = IP->getSinglePredecessor()))
1811       return 0;
1812   }
1813 
1814   // Okay, the store's basic block dominates the insertion point; we
1815   // can do our thing.
1816   return store;
1817 }
1818 
1819 void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI,
1820                                          bool EmitRetDbgLoc,
1821                                          SourceLocation EndLoc) {
1822   // Functions with no result always return void.
1823   if (ReturnValue == 0) {
1824     Builder.CreateRetVoid();
1825     return;
1826   }
1827 
1828   llvm::DebugLoc RetDbgLoc;
1829   llvm::Value *RV = 0;
1830   QualType RetTy = FI.getReturnType();
1831   const ABIArgInfo &RetAI = FI.getReturnInfo();
1832 
1833   switch (RetAI.getKind()) {
1834   case ABIArgInfo::InAlloca:
1835     // Aggregrates get evaluated directly into the destination.  Sometimes we
1836     // need to return the sret value in a register, though.
1837     assert(hasAggregateEvaluationKind(RetTy));
1838     if (RetAI.getInAllocaSRet()) {
1839       llvm::Function::arg_iterator EI = CurFn->arg_end();
1840       --EI;
1841       llvm::Value *ArgStruct = EI;
1842       llvm::Value *SRet =
1843           Builder.CreateStructGEP(ArgStruct, RetAI.getInAllocaFieldIndex());
1844       RV = Builder.CreateLoad(SRet, "sret");
1845     }
1846     break;
1847 
1848   case ABIArgInfo::Indirect: {
1849     auto AI = CurFn->arg_begin();
1850     if (RetAI.isSRetAfterThis())
1851       ++AI;
1852     switch (getEvaluationKind(RetTy)) {
1853     case TEK_Complex: {
1854       ComplexPairTy RT =
1855         EmitLoadOfComplex(MakeNaturalAlignAddrLValue(ReturnValue, RetTy),
1856                           EndLoc);
1857       EmitStoreOfComplex(RT, MakeNaturalAlignAddrLValue(AI, RetTy),
1858                          /*isInit*/ true);
1859       break;
1860     }
1861     case TEK_Aggregate:
1862       // Do nothing; aggregrates get evaluated directly into the destination.
1863       break;
1864     case TEK_Scalar:
1865       EmitStoreOfScalar(Builder.CreateLoad(ReturnValue),
1866                         MakeNaturalAlignAddrLValue(AI, RetTy),
1867                         /*isInit*/ true);
1868       break;
1869     }
1870     break;
1871   }
1872 
1873   case ABIArgInfo::Extend:
1874   case ABIArgInfo::Direct:
1875     if (RetAI.getCoerceToType() == ConvertType(RetTy) &&
1876         RetAI.getDirectOffset() == 0) {
1877       // The internal return value temp always will have pointer-to-return-type
1878       // type, just do a load.
1879 
1880       // If there is a dominating store to ReturnValue, we can elide
1881       // the load, zap the store, and usually zap the alloca.
1882       if (llvm::StoreInst *SI = findDominatingStoreToReturnValue(*this)) {
1883         // Reuse the debug location from the store unless there is
1884         // cleanup code to be emitted between the store and return
1885         // instruction.
1886         if (EmitRetDbgLoc && !AutoreleaseResult)
1887           RetDbgLoc = SI->getDebugLoc();
1888         // Get the stored value and nuke the now-dead store.
1889         RV = SI->getValueOperand();
1890         SI->eraseFromParent();
1891 
1892         // If that was the only use of the return value, nuke it as well now.
1893         if (ReturnValue->use_empty() && isa<llvm::AllocaInst>(ReturnValue)) {
1894           cast<llvm::AllocaInst>(ReturnValue)->eraseFromParent();
1895           ReturnValue = 0;
1896         }
1897 
1898       // Otherwise, we have to do a simple load.
1899       } else {
1900         RV = Builder.CreateLoad(ReturnValue);
1901       }
1902     } else {
1903       llvm::Value *V = ReturnValue;
1904       // If the value is offset in memory, apply the offset now.
1905       if (unsigned Offs = RetAI.getDirectOffset()) {
1906         V = Builder.CreateBitCast(V, Builder.getInt8PtrTy());
1907         V = Builder.CreateConstGEP1_32(V, Offs);
1908         V = Builder.CreateBitCast(V,
1909                          llvm::PointerType::getUnqual(RetAI.getCoerceToType()));
1910       }
1911 
1912       RV = CreateCoercedLoad(V, RetAI.getCoerceToType(), *this);
1913     }
1914 
1915     // In ARC, end functions that return a retainable type with a call
1916     // to objc_autoreleaseReturnValue.
1917     if (AutoreleaseResult) {
1918       assert(getLangOpts().ObjCAutoRefCount &&
1919              !FI.isReturnsRetained() &&
1920              RetTy->isObjCRetainableType());
1921       RV = emitAutoreleaseOfResult(*this, RV);
1922     }
1923 
1924     break;
1925 
1926   case ABIArgInfo::Ignore:
1927     break;
1928 
1929   case ABIArgInfo::Expand:
1930     llvm_unreachable("Invalid ABI kind for return argument");
1931   }
1932 
1933   llvm::Instruction *Ret = RV ? Builder.CreateRet(RV) : Builder.CreateRetVoid();
1934   if (!RetDbgLoc.isUnknown())
1935     Ret->setDebugLoc(RetDbgLoc);
1936 }
1937 
1938 static bool isInAllocaArgument(CGCXXABI &ABI, QualType type) {
1939   const CXXRecordDecl *RD = type->getAsCXXRecordDecl();
1940   return RD && ABI.getRecordArgABI(RD) == CGCXXABI::RAA_DirectInMemory;
1941 }
1942 
1943 static AggValueSlot createPlaceholderSlot(CodeGenFunction &CGF, QualType Ty) {
1944   // FIXME: Generate IR in one pass, rather than going back and fixing up these
1945   // placeholders.
1946   llvm::Type *IRTy = CGF.ConvertTypeForMem(Ty);
1947   llvm::Value *Placeholder =
1948       llvm::UndefValue::get(IRTy->getPointerTo()->getPointerTo());
1949   Placeholder = CGF.Builder.CreateLoad(Placeholder);
1950   return AggValueSlot::forAddr(Placeholder, CharUnits::Zero(),
1951                                Ty.getQualifiers(),
1952                                AggValueSlot::IsNotDestructed,
1953                                AggValueSlot::DoesNotNeedGCBarriers,
1954                                AggValueSlot::IsNotAliased);
1955 }
1956 
1957 void CodeGenFunction::EmitDelegateCallArg(CallArgList &args,
1958                                           const VarDecl *param,
1959                                           SourceLocation loc) {
1960   // StartFunction converted the ABI-lowered parameter(s) into a
1961   // local alloca.  We need to turn that into an r-value suitable
1962   // for EmitCall.
1963   llvm::Value *local = GetAddrOfLocalVar(param);
1964 
1965   QualType type = param->getType();
1966 
1967   // For the most part, we just need to load the alloca, except:
1968   // 1) aggregate r-values are actually pointers to temporaries, and
1969   // 2) references to non-scalars are pointers directly to the aggregate.
1970   // I don't know why references to scalars are different here.
1971   if (const ReferenceType *ref = type->getAs<ReferenceType>()) {
1972     if (!hasScalarEvaluationKind(ref->getPointeeType()))
1973       return args.add(RValue::getAggregate(local), type);
1974 
1975     // Locals which are references to scalars are represented
1976     // with allocas holding the pointer.
1977     return args.add(RValue::get(Builder.CreateLoad(local)), type);
1978   }
1979 
1980   if (isInAllocaArgument(CGM.getCXXABI(), type)) {
1981     AggValueSlot Slot = createPlaceholderSlot(*this, type);
1982     Slot.setExternallyDestructed();
1983 
1984     // FIXME: Either emit a copy constructor call, or figure out how to do
1985     // guaranteed tail calls with perfect forwarding in LLVM.
1986     CGM.ErrorUnsupported(param, "non-trivial argument copy for thunk");
1987     EmitNullInitialization(Slot.getAddr(), type);
1988 
1989     RValue RV = Slot.asRValue();
1990     args.add(RV, type);
1991     return;
1992   }
1993 
1994   args.add(convertTempToRValue(local, type, loc), type);
1995 }
1996 
1997 static bool isProvablyNull(llvm::Value *addr) {
1998   return isa<llvm::ConstantPointerNull>(addr);
1999 }
2000 
2001 static bool isProvablyNonNull(llvm::Value *addr) {
2002   return isa<llvm::AllocaInst>(addr);
2003 }
2004 
2005 /// Emit the actual writing-back of a writeback.
2006 static void emitWriteback(CodeGenFunction &CGF,
2007                           const CallArgList::Writeback &writeback) {
2008   const LValue &srcLV = writeback.Source;
2009   llvm::Value *srcAddr = srcLV.getAddress();
2010   assert(!isProvablyNull(srcAddr) &&
2011          "shouldn't have writeback for provably null argument");
2012 
2013   llvm::BasicBlock *contBB = 0;
2014 
2015   // If the argument wasn't provably non-null, we need to null check
2016   // before doing the store.
2017   bool provablyNonNull = isProvablyNonNull(srcAddr);
2018   if (!provablyNonNull) {
2019     llvm::BasicBlock *writebackBB = CGF.createBasicBlock("icr.writeback");
2020     contBB = CGF.createBasicBlock("icr.done");
2021 
2022     llvm::Value *isNull = CGF.Builder.CreateIsNull(srcAddr, "icr.isnull");
2023     CGF.Builder.CreateCondBr(isNull, contBB, writebackBB);
2024     CGF.EmitBlock(writebackBB);
2025   }
2026 
2027   // Load the value to writeback.
2028   llvm::Value *value = CGF.Builder.CreateLoad(writeback.Temporary);
2029 
2030   // Cast it back, in case we're writing an id to a Foo* or something.
2031   value = CGF.Builder.CreateBitCast(value,
2032                cast<llvm::PointerType>(srcAddr->getType())->getElementType(),
2033                             "icr.writeback-cast");
2034 
2035   // Perform the writeback.
2036 
2037   // If we have a "to use" value, it's something we need to emit a use
2038   // of.  This has to be carefully threaded in: if it's done after the
2039   // release it's potentially undefined behavior (and the optimizer
2040   // will ignore it), and if it happens before the retain then the
2041   // optimizer could move the release there.
2042   if (writeback.ToUse) {
2043     assert(srcLV.getObjCLifetime() == Qualifiers::OCL_Strong);
2044 
2045     // Retain the new value.  No need to block-copy here:  the block's
2046     // being passed up the stack.
2047     value = CGF.EmitARCRetainNonBlock(value);
2048 
2049     // Emit the intrinsic use here.
2050     CGF.EmitARCIntrinsicUse(writeback.ToUse);
2051 
2052     // Load the old value (primitively).
2053     llvm::Value *oldValue = CGF.EmitLoadOfScalar(srcLV, SourceLocation());
2054 
2055     // Put the new value in place (primitively).
2056     CGF.EmitStoreOfScalar(value, srcLV, /*init*/ false);
2057 
2058     // Release the old value.
2059     CGF.EmitARCRelease(oldValue, srcLV.isARCPreciseLifetime());
2060 
2061   // Otherwise, we can just do a normal lvalue store.
2062   } else {
2063     CGF.EmitStoreThroughLValue(RValue::get(value), srcLV);
2064   }
2065 
2066   // Jump to the continuation block.
2067   if (!provablyNonNull)
2068     CGF.EmitBlock(contBB);
2069 }
2070 
2071 static void emitWritebacks(CodeGenFunction &CGF,
2072                            const CallArgList &args) {
2073   for (const auto &I : args.writebacks())
2074     emitWriteback(CGF, I);
2075 }
2076 
2077 static void deactivateArgCleanupsBeforeCall(CodeGenFunction &CGF,
2078                                             const CallArgList &CallArgs) {
2079   assert(CGF.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee());
2080   ArrayRef<CallArgList::CallArgCleanup> Cleanups =
2081     CallArgs.getCleanupsToDeactivate();
2082   // Iterate in reverse to increase the likelihood of popping the cleanup.
2083   for (ArrayRef<CallArgList::CallArgCleanup>::reverse_iterator
2084          I = Cleanups.rbegin(), E = Cleanups.rend(); I != E; ++I) {
2085     CGF.DeactivateCleanupBlock(I->Cleanup, I->IsActiveIP);
2086     I->IsActiveIP->eraseFromParent();
2087   }
2088 }
2089 
2090 static const Expr *maybeGetUnaryAddrOfOperand(const Expr *E) {
2091   if (const UnaryOperator *uop = dyn_cast<UnaryOperator>(E->IgnoreParens()))
2092     if (uop->getOpcode() == UO_AddrOf)
2093       return uop->getSubExpr();
2094   return 0;
2095 }
2096 
2097 /// Emit an argument that's being passed call-by-writeback.  That is,
2098 /// we are passing the address of
2099 static void emitWritebackArg(CodeGenFunction &CGF, CallArgList &args,
2100                              const ObjCIndirectCopyRestoreExpr *CRE) {
2101   LValue srcLV;
2102 
2103   // Make an optimistic effort to emit the address as an l-value.
2104   // This can fail if the the argument expression is more complicated.
2105   if (const Expr *lvExpr = maybeGetUnaryAddrOfOperand(CRE->getSubExpr())) {
2106     srcLV = CGF.EmitLValue(lvExpr);
2107 
2108   // Otherwise, just emit it as a scalar.
2109   } else {
2110     llvm::Value *srcAddr = CGF.EmitScalarExpr(CRE->getSubExpr());
2111 
2112     QualType srcAddrType =
2113       CRE->getSubExpr()->getType()->castAs<PointerType>()->getPointeeType();
2114     srcLV = CGF.MakeNaturalAlignAddrLValue(srcAddr, srcAddrType);
2115   }
2116   llvm::Value *srcAddr = srcLV.getAddress();
2117 
2118   // The dest and src types don't necessarily match in LLVM terms
2119   // because of the crazy ObjC compatibility rules.
2120 
2121   llvm::PointerType *destType =
2122     cast<llvm::PointerType>(CGF.ConvertType(CRE->getType()));
2123 
2124   // If the address is a constant null, just pass the appropriate null.
2125   if (isProvablyNull(srcAddr)) {
2126     args.add(RValue::get(llvm::ConstantPointerNull::get(destType)),
2127              CRE->getType());
2128     return;
2129   }
2130 
2131   // Create the temporary.
2132   llvm::Value *temp = CGF.CreateTempAlloca(destType->getElementType(),
2133                                            "icr.temp");
2134   // Loading an l-value can introduce a cleanup if the l-value is __weak,
2135   // and that cleanup will be conditional if we can't prove that the l-value
2136   // isn't null, so we need to register a dominating point so that the cleanups
2137   // system will make valid IR.
2138   CodeGenFunction::ConditionalEvaluation condEval(CGF);
2139 
2140   // Zero-initialize it if we're not doing a copy-initialization.
2141   bool shouldCopy = CRE->shouldCopy();
2142   if (!shouldCopy) {
2143     llvm::Value *null =
2144       llvm::ConstantPointerNull::get(
2145         cast<llvm::PointerType>(destType->getElementType()));
2146     CGF.Builder.CreateStore(null, temp);
2147   }
2148 
2149   llvm::BasicBlock *contBB = 0;
2150   llvm::BasicBlock *originBB = 0;
2151 
2152   // If the address is *not* known to be non-null, we need to switch.
2153   llvm::Value *finalArgument;
2154 
2155   bool provablyNonNull = isProvablyNonNull(srcAddr);
2156   if (provablyNonNull) {
2157     finalArgument = temp;
2158   } else {
2159     llvm::Value *isNull = CGF.Builder.CreateIsNull(srcAddr, "icr.isnull");
2160 
2161     finalArgument = CGF.Builder.CreateSelect(isNull,
2162                                    llvm::ConstantPointerNull::get(destType),
2163                                              temp, "icr.argument");
2164 
2165     // If we need to copy, then the load has to be conditional, which
2166     // means we need control flow.
2167     if (shouldCopy) {
2168       originBB = CGF.Builder.GetInsertBlock();
2169       contBB = CGF.createBasicBlock("icr.cont");
2170       llvm::BasicBlock *copyBB = CGF.createBasicBlock("icr.copy");
2171       CGF.Builder.CreateCondBr(isNull, contBB, copyBB);
2172       CGF.EmitBlock(copyBB);
2173       condEval.begin(CGF);
2174     }
2175   }
2176 
2177   llvm::Value *valueToUse = 0;
2178 
2179   // Perform a copy if necessary.
2180   if (shouldCopy) {
2181     RValue srcRV = CGF.EmitLoadOfLValue(srcLV, SourceLocation());
2182     assert(srcRV.isScalar());
2183 
2184     llvm::Value *src = srcRV.getScalarVal();
2185     src = CGF.Builder.CreateBitCast(src, destType->getElementType(),
2186                                     "icr.cast");
2187 
2188     // Use an ordinary store, not a store-to-lvalue.
2189     CGF.Builder.CreateStore(src, temp);
2190 
2191     // If optimization is enabled, and the value was held in a
2192     // __strong variable, we need to tell the optimizer that this
2193     // value has to stay alive until we're doing the store back.
2194     // This is because the temporary is effectively unretained,
2195     // and so otherwise we can violate the high-level semantics.
2196     if (CGF.CGM.getCodeGenOpts().OptimizationLevel != 0 &&
2197         srcLV.getObjCLifetime() == Qualifiers::OCL_Strong) {
2198       valueToUse = src;
2199     }
2200   }
2201 
2202   // Finish the control flow if we needed it.
2203   if (shouldCopy && !provablyNonNull) {
2204     llvm::BasicBlock *copyBB = CGF.Builder.GetInsertBlock();
2205     CGF.EmitBlock(contBB);
2206 
2207     // Make a phi for the value to intrinsically use.
2208     if (valueToUse) {
2209       llvm::PHINode *phiToUse = CGF.Builder.CreatePHI(valueToUse->getType(), 2,
2210                                                       "icr.to-use");
2211       phiToUse->addIncoming(valueToUse, copyBB);
2212       phiToUse->addIncoming(llvm::UndefValue::get(valueToUse->getType()),
2213                             originBB);
2214       valueToUse = phiToUse;
2215     }
2216 
2217     condEval.end(CGF);
2218   }
2219 
2220   args.addWriteback(srcLV, temp, valueToUse);
2221   args.add(RValue::get(finalArgument), CRE->getType());
2222 }
2223 
2224 void CallArgList::allocateArgumentMemory(CodeGenFunction &CGF) {
2225   assert(!StackBase && !StackCleanup.isValid());
2226 
2227   // Save the stack.
2228   llvm::Function *F = CGF.CGM.getIntrinsic(llvm::Intrinsic::stacksave);
2229   StackBase = CGF.Builder.CreateCall(F, "inalloca.save");
2230 
2231   // Control gets really tied up in landing pads, so we have to spill the
2232   // stacksave to an alloca to avoid violating SSA form.
2233   // TODO: This is dead if we never emit the cleanup.  We should create the
2234   // alloca and store lazily on the first cleanup emission.
2235   StackBaseMem = CGF.CreateTempAlloca(CGF.Int8PtrTy, "inalloca.spmem");
2236   CGF.Builder.CreateStore(StackBase, StackBaseMem);
2237   CGF.pushStackRestore(EHCleanup, StackBaseMem);
2238   StackCleanup = CGF.EHStack.getInnermostEHScope();
2239   assert(StackCleanup.isValid());
2240 }
2241 
2242 void CallArgList::freeArgumentMemory(CodeGenFunction &CGF) const {
2243   if (StackBase) {
2244     CGF.DeactivateCleanupBlock(StackCleanup, StackBase);
2245     llvm::Value *F = CGF.CGM.getIntrinsic(llvm::Intrinsic::stackrestore);
2246     // We could load StackBase from StackBaseMem, but in the non-exceptional
2247     // case we can skip it.
2248     CGF.Builder.CreateCall(F, StackBase);
2249   }
2250 }
2251 
2252 void CodeGenFunction::EmitCallArgs(CallArgList &Args,
2253                                    ArrayRef<QualType> ArgTypes,
2254                                    CallExpr::const_arg_iterator ArgBeg,
2255                                    CallExpr::const_arg_iterator ArgEnd,
2256                                    bool ForceColumnInfo) {
2257   CGDebugInfo *DI = getDebugInfo();
2258   SourceLocation CallLoc;
2259   if (DI) CallLoc = DI->getLocation();
2260 
2261   // We *have* to evaluate arguments from right to left in the MS C++ ABI,
2262   // because arguments are destroyed left to right in the callee.
2263   if (CGM.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) {
2264     // Insert a stack save if we're going to need any inalloca args.
2265     bool HasInAllocaArgs = false;
2266     for (ArrayRef<QualType>::iterator I = ArgTypes.begin(), E = ArgTypes.end();
2267          I != E && !HasInAllocaArgs; ++I)
2268       HasInAllocaArgs = isInAllocaArgument(CGM.getCXXABI(), *I);
2269     if (HasInAllocaArgs) {
2270       assert(getTarget().getTriple().getArch() == llvm::Triple::x86);
2271       Args.allocateArgumentMemory(*this);
2272     }
2273 
2274     // Evaluate each argument.
2275     size_t CallArgsStart = Args.size();
2276     for (int I = ArgTypes.size() - 1; I >= 0; --I) {
2277       CallExpr::const_arg_iterator Arg = ArgBeg + I;
2278       EmitCallArg(Args, *Arg, ArgTypes[I]);
2279       // Restore the debug location.
2280       if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
2281     }
2282 
2283     // Un-reverse the arguments we just evaluated so they match up with the LLVM
2284     // IR function.
2285     std::reverse(Args.begin() + CallArgsStart, Args.end());
2286     return;
2287   }
2288 
2289   for (unsigned I = 0, E = ArgTypes.size(); I != E; ++I) {
2290     CallExpr::const_arg_iterator Arg = ArgBeg + I;
2291     assert(Arg != ArgEnd);
2292     EmitCallArg(Args, *Arg, ArgTypes[I]);
2293     // Restore the debug location.
2294     if (DI) DI->EmitLocation(Builder, CallLoc, ForceColumnInfo);
2295   }
2296 }
2297 
2298 namespace {
2299 
2300 struct DestroyUnpassedArg : EHScopeStack::Cleanup {
2301   DestroyUnpassedArg(llvm::Value *Addr, QualType Ty)
2302       : Addr(Addr), Ty(Ty) {}
2303 
2304   llvm::Value *Addr;
2305   QualType Ty;
2306 
2307   void Emit(CodeGenFunction &CGF, Flags flags) override {
2308     const CXXDestructorDecl *Dtor = Ty->getAsCXXRecordDecl()->getDestructor();
2309     assert(!Dtor->isTrivial());
2310     CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, /*for vbase*/ false,
2311                               /*Delegating=*/false, Addr);
2312   }
2313 };
2314 
2315 }
2316 
2317 void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E,
2318                                   QualType type) {
2319   if (const ObjCIndirectCopyRestoreExpr *CRE
2320         = dyn_cast<ObjCIndirectCopyRestoreExpr>(E)) {
2321     assert(getLangOpts().ObjCAutoRefCount);
2322     assert(getContext().hasSameType(E->getType(), type));
2323     return emitWritebackArg(*this, args, CRE);
2324   }
2325 
2326   assert(type->isReferenceType() == E->isGLValue() &&
2327          "reference binding to unmaterialized r-value!");
2328 
2329   if (E->isGLValue()) {
2330     assert(E->getObjectKind() == OK_Ordinary);
2331     return args.add(EmitReferenceBindingToExpr(E), type);
2332   }
2333 
2334   bool HasAggregateEvalKind = hasAggregateEvaluationKind(type);
2335 
2336   // In the Microsoft C++ ABI, aggregate arguments are destructed by the callee.
2337   // However, we still have to push an EH-only cleanup in case we unwind before
2338   // we make it to the call.
2339   if (HasAggregateEvalKind &&
2340       CGM.getTarget().getCXXABI().areArgsDestroyedLeftToRightInCallee()) {
2341     // If we're using inalloca, use the argument memory.  Otherwise, use a
2342     // temporary.
2343     AggValueSlot Slot;
2344     if (args.isUsingInAlloca())
2345       Slot = createPlaceholderSlot(*this, type);
2346     else
2347       Slot = CreateAggTemp(type, "agg.tmp");
2348 
2349     const CXXRecordDecl *RD = type->getAsCXXRecordDecl();
2350     bool DestroyedInCallee =
2351         RD && RD->hasNonTrivialDestructor() &&
2352         CGM.getCXXABI().getRecordArgABI(RD) != CGCXXABI::RAA_Default;
2353     if (DestroyedInCallee)
2354       Slot.setExternallyDestructed();
2355 
2356     EmitAggExpr(E, Slot);
2357     RValue RV = Slot.asRValue();
2358     args.add(RV, type);
2359 
2360     if (DestroyedInCallee) {
2361       // Create a no-op GEP between the placeholder and the cleanup so we can
2362       // RAUW it successfully.  It also serves as a marker of the first
2363       // instruction where the cleanup is active.
2364       pushFullExprCleanup<DestroyUnpassedArg>(EHCleanup, Slot.getAddr(), type);
2365       // This unreachable is a temporary marker which will be removed later.
2366       llvm::Instruction *IsActive = Builder.CreateUnreachable();
2367       args.addArgCleanupDeactivation(EHStack.getInnermostEHScope(), IsActive);
2368     }
2369     return;
2370   }
2371 
2372   if (HasAggregateEvalKind && isa<ImplicitCastExpr>(E) &&
2373       cast<CastExpr>(E)->getCastKind() == CK_LValueToRValue) {
2374     LValue L = EmitLValue(cast<CastExpr>(E)->getSubExpr());
2375     assert(L.isSimple());
2376     if (L.getAlignment() >= getContext().getTypeAlignInChars(type)) {
2377       args.add(L.asAggregateRValue(), type, /*NeedsCopy*/true);
2378     } else {
2379       // We can't represent a misaligned lvalue in the CallArgList, so copy
2380       // to an aligned temporary now.
2381       llvm::Value *tmp = CreateMemTemp(type);
2382       EmitAggregateCopy(tmp, L.getAddress(), type, L.isVolatile(),
2383                         L.getAlignment());
2384       args.add(RValue::getAggregate(tmp), type);
2385     }
2386     return;
2387   }
2388 
2389   args.add(EmitAnyExprToTemp(E), type);
2390 }
2391 
2392 // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
2393 // optimizer it can aggressively ignore unwind edges.
2394 void
2395 CodeGenFunction::AddObjCARCExceptionMetadata(llvm::Instruction *Inst) {
2396   if (CGM.getCodeGenOpts().OptimizationLevel != 0 &&
2397       !CGM.getCodeGenOpts().ObjCAutoRefCountExceptions)
2398     Inst->setMetadata("clang.arc.no_objc_arc_exceptions",
2399                       CGM.getNoObjCARCExceptionsMetadata());
2400 }
2401 
2402 /// Emits a call to the given no-arguments nounwind runtime function.
2403 llvm::CallInst *
2404 CodeGenFunction::EmitNounwindRuntimeCall(llvm::Value *callee,
2405                                          const llvm::Twine &name) {
2406   return EmitNounwindRuntimeCall(callee, ArrayRef<llvm::Value*>(), name);
2407 }
2408 
2409 /// Emits a call to the given nounwind runtime function.
2410 llvm::CallInst *
2411 CodeGenFunction::EmitNounwindRuntimeCall(llvm::Value *callee,
2412                                          ArrayRef<llvm::Value*> args,
2413                                          const llvm::Twine &name) {
2414   llvm::CallInst *call = EmitRuntimeCall(callee, args, name);
2415   call->setDoesNotThrow();
2416   return call;
2417 }
2418 
2419 /// Emits a simple call (never an invoke) to the given no-arguments
2420 /// runtime function.
2421 llvm::CallInst *
2422 CodeGenFunction::EmitRuntimeCall(llvm::Value *callee,
2423                                  const llvm::Twine &name) {
2424   return EmitRuntimeCall(callee, ArrayRef<llvm::Value*>(), name);
2425 }
2426 
2427 /// Emits a simple call (never an invoke) to the given runtime
2428 /// function.
2429 llvm::CallInst *
2430 CodeGenFunction::EmitRuntimeCall(llvm::Value *callee,
2431                                  ArrayRef<llvm::Value*> args,
2432                                  const llvm::Twine &name) {
2433   llvm::CallInst *call = Builder.CreateCall(callee, args, name);
2434   call->setCallingConv(getRuntimeCC());
2435   return call;
2436 }
2437 
2438 /// Emits a call or invoke to the given noreturn runtime function.
2439 void CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke(llvm::Value *callee,
2440                                                ArrayRef<llvm::Value*> args) {
2441   if (getInvokeDest()) {
2442     llvm::InvokeInst *invoke =
2443       Builder.CreateInvoke(callee,
2444                            getUnreachableBlock(),
2445                            getInvokeDest(),
2446                            args);
2447     invoke->setDoesNotReturn();
2448     invoke->setCallingConv(getRuntimeCC());
2449   } else {
2450     llvm::CallInst *call = Builder.CreateCall(callee, args);
2451     call->setDoesNotReturn();
2452     call->setCallingConv(getRuntimeCC());
2453     Builder.CreateUnreachable();
2454   }
2455   PGO.setCurrentRegionUnreachable();
2456 }
2457 
2458 /// Emits a call or invoke instruction to the given nullary runtime
2459 /// function.
2460 llvm::CallSite
2461 CodeGenFunction::EmitRuntimeCallOrInvoke(llvm::Value *callee,
2462                                          const Twine &name) {
2463   return EmitRuntimeCallOrInvoke(callee, ArrayRef<llvm::Value*>(), name);
2464 }
2465 
2466 /// Emits a call or invoke instruction to the given runtime function.
2467 llvm::CallSite
2468 CodeGenFunction::EmitRuntimeCallOrInvoke(llvm::Value *callee,
2469                                          ArrayRef<llvm::Value*> args,
2470                                          const Twine &name) {
2471   llvm::CallSite callSite = EmitCallOrInvoke(callee, args, name);
2472   callSite.setCallingConv(getRuntimeCC());
2473   return callSite;
2474 }
2475 
2476 llvm::CallSite
2477 CodeGenFunction::EmitCallOrInvoke(llvm::Value *Callee,
2478                                   const Twine &Name) {
2479   return EmitCallOrInvoke(Callee, ArrayRef<llvm::Value *>(), Name);
2480 }
2481 
2482 /// Emits a call or invoke instruction to the given function, depending
2483 /// on the current state of the EH stack.
2484 llvm::CallSite
2485 CodeGenFunction::EmitCallOrInvoke(llvm::Value *Callee,
2486                                   ArrayRef<llvm::Value *> Args,
2487                                   const Twine &Name) {
2488   llvm::BasicBlock *InvokeDest = getInvokeDest();
2489 
2490   llvm::Instruction *Inst;
2491   if (!InvokeDest)
2492     Inst = Builder.CreateCall(Callee, Args, Name);
2493   else {
2494     llvm::BasicBlock *ContBB = createBasicBlock("invoke.cont");
2495     Inst = Builder.CreateInvoke(Callee, ContBB, InvokeDest, Args, Name);
2496     EmitBlock(ContBB);
2497   }
2498 
2499   // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
2500   // optimizer it can aggressively ignore unwind edges.
2501   if (CGM.getLangOpts().ObjCAutoRefCount)
2502     AddObjCARCExceptionMetadata(Inst);
2503 
2504   return Inst;
2505 }
2506 
2507 static void checkArgMatches(llvm::Value *Elt, unsigned &ArgNo,
2508                             llvm::FunctionType *FTy) {
2509   if (ArgNo < FTy->getNumParams())
2510     assert(Elt->getType() == FTy->getParamType(ArgNo));
2511   else
2512     assert(FTy->isVarArg());
2513   ++ArgNo;
2514 }
2515 
2516 void CodeGenFunction::ExpandTypeToArgs(QualType Ty, RValue RV,
2517                                        SmallVectorImpl<llvm::Value *> &Args,
2518                                        llvm::FunctionType *IRFuncTy) {
2519   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
2520     unsigned NumElts = AT->getSize().getZExtValue();
2521     QualType EltTy = AT->getElementType();
2522     llvm::Value *Addr = RV.getAggregateAddr();
2523     for (unsigned Elt = 0; Elt < NumElts; ++Elt) {
2524       llvm::Value *EltAddr = Builder.CreateConstGEP2_32(Addr, 0, Elt);
2525       RValue EltRV = convertTempToRValue(EltAddr, EltTy, SourceLocation());
2526       ExpandTypeToArgs(EltTy, EltRV, Args, IRFuncTy);
2527     }
2528   } else if (const RecordType *RT = Ty->getAs<RecordType>()) {
2529     RecordDecl *RD = RT->getDecl();
2530     assert(RV.isAggregate() && "Unexpected rvalue during struct expansion");
2531     LValue LV = MakeAddrLValue(RV.getAggregateAddr(), Ty);
2532 
2533     if (RD->isUnion()) {
2534       const FieldDecl *LargestFD = 0;
2535       CharUnits UnionSize = CharUnits::Zero();
2536 
2537       for (const auto *FD : RD->fields()) {
2538         assert(!FD->isBitField() &&
2539                "Cannot expand structure with bit-field members.");
2540         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
2541         if (UnionSize < FieldSize) {
2542           UnionSize = FieldSize;
2543           LargestFD = FD;
2544         }
2545       }
2546       if (LargestFD) {
2547         RValue FldRV = EmitRValueForField(LV, LargestFD, SourceLocation());
2548         ExpandTypeToArgs(LargestFD->getType(), FldRV, Args, IRFuncTy);
2549       }
2550     } else {
2551       for (const auto *FD : RD->fields()) {
2552         RValue FldRV = EmitRValueForField(LV, FD, SourceLocation());
2553         ExpandTypeToArgs(FD->getType(), FldRV, Args, IRFuncTy);
2554       }
2555     }
2556   } else if (Ty->isAnyComplexType()) {
2557     ComplexPairTy CV = RV.getComplexVal();
2558     Args.push_back(CV.first);
2559     Args.push_back(CV.second);
2560   } else {
2561     assert(RV.isScalar() &&
2562            "Unexpected non-scalar rvalue during struct expansion.");
2563 
2564     // Insert a bitcast as needed.
2565     llvm::Value *V = RV.getScalarVal();
2566     if (Args.size() < IRFuncTy->getNumParams() &&
2567         V->getType() != IRFuncTy->getParamType(Args.size()))
2568       V = Builder.CreateBitCast(V, IRFuncTy->getParamType(Args.size()));
2569 
2570     Args.push_back(V);
2571   }
2572 }
2573 
2574 /// \brief Store a non-aggregate value to an address to initialize it.  For
2575 /// initialization, a non-atomic store will be used.
2576 static void EmitInitStoreOfNonAggregate(CodeGenFunction &CGF, RValue Src,
2577                                         LValue Dst) {
2578   if (Src.isScalar())
2579     CGF.EmitStoreOfScalar(Src.getScalarVal(), Dst, /*init=*/true);
2580   else
2581     CGF.EmitStoreOfComplex(Src.getComplexVal(), Dst, /*init=*/true);
2582 }
2583 
2584 void CodeGenFunction::deferPlaceholderReplacement(llvm::Instruction *Old,
2585                                                   llvm::Value *New) {
2586   DeferredReplacements.push_back(std::make_pair(Old, New));
2587 }
2588 
2589 RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
2590                                  llvm::Value *Callee,
2591                                  ReturnValueSlot ReturnValue,
2592                                  const CallArgList &CallArgs,
2593                                  const Decl *TargetDecl,
2594                                  llvm::Instruction **callOrInvoke) {
2595   // FIXME: We no longer need the types from CallArgs; lift up and simplify.
2596   SmallVector<llvm::Value*, 16> Args;
2597 
2598   // Handle struct-return functions by passing a pointer to the
2599   // location that we would like to return into.
2600   QualType RetTy = CallInfo.getReturnType();
2601   const ABIArgInfo &RetAI = CallInfo.getReturnInfo();
2602 
2603   // IRArgNo - Keep track of the argument number in the callee we're looking at.
2604   unsigned IRArgNo = 0;
2605   llvm::FunctionType *IRFuncTy =
2606     cast<llvm::FunctionType>(
2607                   cast<llvm::PointerType>(Callee->getType())->getElementType());
2608 
2609   // If we're using inalloca, insert the allocation after the stack save.
2610   // FIXME: Do this earlier rather than hacking it in here!
2611   llvm::Value *ArgMemory = 0;
2612   if (llvm::StructType *ArgStruct = CallInfo.getArgStruct()) {
2613     llvm::Instruction *IP = CallArgs.getStackBase();
2614     llvm::AllocaInst *AI;
2615     if (IP) {
2616       IP = IP->getNextNode();
2617       AI = new llvm::AllocaInst(ArgStruct, "argmem", IP);
2618     } else {
2619       AI = CreateTempAlloca(ArgStruct, "argmem");
2620     }
2621     AI->setUsedWithInAlloca(true);
2622     assert(AI->isUsedWithInAlloca() && !AI->isStaticAlloca());
2623     ArgMemory = AI;
2624   }
2625 
2626   // If the call returns a temporary with struct return, create a temporary
2627   // alloca to hold the result, unless one is given to us.
2628   llvm::Value *SRetPtr = 0;
2629   bool SwapThisWithSRet = false;
2630   if (RetAI.isIndirect() || RetAI.isInAlloca()) {
2631     SRetPtr = ReturnValue.getValue();
2632     if (!SRetPtr)
2633       SRetPtr = CreateMemTemp(RetTy);
2634     if (RetAI.isIndirect()) {
2635       Args.push_back(SRetPtr);
2636       SwapThisWithSRet = RetAI.isSRetAfterThis();
2637       if (SwapThisWithSRet)
2638         IRArgNo = 1;
2639       checkArgMatches(SRetPtr, IRArgNo, IRFuncTy);
2640       if (SwapThisWithSRet)
2641         IRArgNo = 0;
2642     } else {
2643       llvm::Value *Addr =
2644           Builder.CreateStructGEP(ArgMemory, RetAI.getInAllocaFieldIndex());
2645       Builder.CreateStore(SRetPtr, Addr);
2646     }
2647   }
2648 
2649   assert(CallInfo.arg_size() == CallArgs.size() &&
2650          "Mismatch between function signature & arguments.");
2651   CGFunctionInfo::const_arg_iterator info_it = CallInfo.arg_begin();
2652   for (CallArgList::const_iterator I = CallArgs.begin(), E = CallArgs.end();
2653        I != E; ++I, ++info_it) {
2654     const ABIArgInfo &ArgInfo = info_it->info;
2655     RValue RV = I->RV;
2656 
2657     // Skip 'sret' if it came second.
2658     if (IRArgNo == 1 && SwapThisWithSRet)
2659       ++IRArgNo;
2660 
2661     CharUnits TypeAlign = getContext().getTypeAlignInChars(I->Ty);
2662 
2663     // Insert a padding argument to ensure proper alignment.
2664     if (llvm::Type *PaddingType = ArgInfo.getPaddingType()) {
2665       Args.push_back(llvm::UndefValue::get(PaddingType));
2666       ++IRArgNo;
2667     }
2668 
2669     switch (ArgInfo.getKind()) {
2670     case ABIArgInfo::InAlloca: {
2671       assert(getTarget().getTriple().getArch() == llvm::Triple::x86);
2672       if (RV.isAggregate()) {
2673         // Replace the placeholder with the appropriate argument slot GEP.
2674         llvm::Instruction *Placeholder =
2675             cast<llvm::Instruction>(RV.getAggregateAddr());
2676         CGBuilderTy::InsertPoint IP = Builder.saveIP();
2677         Builder.SetInsertPoint(Placeholder);
2678         llvm::Value *Addr = Builder.CreateStructGEP(
2679             ArgMemory, ArgInfo.getInAllocaFieldIndex());
2680         Builder.restoreIP(IP);
2681         deferPlaceholderReplacement(Placeholder, Addr);
2682       } else {
2683         // Store the RValue into the argument struct.
2684         llvm::Value *Addr =
2685             Builder.CreateStructGEP(ArgMemory, ArgInfo.getInAllocaFieldIndex());
2686         unsigned AS = Addr->getType()->getPointerAddressSpace();
2687         llvm::Type *MemType = ConvertTypeForMem(I->Ty)->getPointerTo(AS);
2688         // There are some cases where a trivial bitcast is not avoidable.  The
2689         // definition of a type later in a translation unit may change it's type
2690         // from {}* to (%struct.foo*)*.
2691         if (Addr->getType() != MemType)
2692           Addr = Builder.CreateBitCast(Addr, MemType);
2693         LValue argLV = MakeAddrLValue(Addr, I->Ty, TypeAlign);
2694         EmitInitStoreOfNonAggregate(*this, RV, argLV);
2695       }
2696       break; // Don't increment IRArgNo!
2697     }
2698 
2699     case ABIArgInfo::Indirect: {
2700       if (RV.isScalar() || RV.isComplex()) {
2701         // Make a temporary alloca to pass the argument.
2702         llvm::AllocaInst *AI = CreateMemTemp(I->Ty);
2703         if (ArgInfo.getIndirectAlign() > AI->getAlignment())
2704           AI->setAlignment(ArgInfo.getIndirectAlign());
2705         Args.push_back(AI);
2706 
2707         LValue argLV = MakeAddrLValue(Args.back(), I->Ty, TypeAlign);
2708         EmitInitStoreOfNonAggregate(*this, RV, argLV);
2709 
2710         // Validate argument match.
2711         checkArgMatches(AI, IRArgNo, IRFuncTy);
2712       } else {
2713         // We want to avoid creating an unnecessary temporary+copy here;
2714         // however, we need one in three cases:
2715         // 1. If the argument is not byval, and we are required to copy the
2716         //    source.  (This case doesn't occur on any common architecture.)
2717         // 2. If the argument is byval, RV is not sufficiently aligned, and
2718         //    we cannot force it to be sufficiently aligned.
2719         // 3. If the argument is byval, but RV is located in an address space
2720         //    different than that of the argument (0).
2721         llvm::Value *Addr = RV.getAggregateAddr();
2722         unsigned Align = ArgInfo.getIndirectAlign();
2723         const llvm::DataLayout *TD = &CGM.getDataLayout();
2724         const unsigned RVAddrSpace = Addr->getType()->getPointerAddressSpace();
2725         const unsigned ArgAddrSpace = (IRArgNo < IRFuncTy->getNumParams() ?
2726           IRFuncTy->getParamType(IRArgNo)->getPointerAddressSpace() : 0);
2727         if ((!ArgInfo.getIndirectByVal() && I->NeedsCopy) ||
2728             (ArgInfo.getIndirectByVal() && TypeAlign.getQuantity() < Align &&
2729              llvm::getOrEnforceKnownAlignment(Addr, Align, TD) < Align) ||
2730              (ArgInfo.getIndirectByVal() && (RVAddrSpace != ArgAddrSpace))) {
2731           // Create an aligned temporary, and copy to it.
2732           llvm::AllocaInst *AI = CreateMemTemp(I->Ty);
2733           if (Align > AI->getAlignment())
2734             AI->setAlignment(Align);
2735           Args.push_back(AI);
2736           EmitAggregateCopy(AI, Addr, I->Ty, RV.isVolatileQualified());
2737 
2738           // Validate argument match.
2739           checkArgMatches(AI, IRArgNo, IRFuncTy);
2740         } else {
2741           // Skip the extra memcpy call.
2742           Args.push_back(Addr);
2743 
2744           // Validate argument match.
2745           checkArgMatches(Addr, IRArgNo, IRFuncTy);
2746         }
2747       }
2748       break;
2749     }
2750 
2751     case ABIArgInfo::Ignore:
2752       break;
2753 
2754     case ABIArgInfo::Extend:
2755     case ABIArgInfo::Direct: {
2756       if (!isa<llvm::StructType>(ArgInfo.getCoerceToType()) &&
2757           ArgInfo.getCoerceToType() == ConvertType(info_it->type) &&
2758           ArgInfo.getDirectOffset() == 0) {
2759         llvm::Value *V;
2760         if (RV.isScalar())
2761           V = RV.getScalarVal();
2762         else
2763           V = Builder.CreateLoad(RV.getAggregateAddr());
2764 
2765         // If the argument doesn't match, perform a bitcast to coerce it.  This
2766         // can happen due to trivial type mismatches.
2767         if (IRArgNo < IRFuncTy->getNumParams() &&
2768             V->getType() != IRFuncTy->getParamType(IRArgNo))
2769           V = Builder.CreateBitCast(V, IRFuncTy->getParamType(IRArgNo));
2770         Args.push_back(V);
2771 
2772         checkArgMatches(V, IRArgNo, IRFuncTy);
2773         break;
2774       }
2775 
2776       // FIXME: Avoid the conversion through memory if possible.
2777       llvm::Value *SrcPtr;
2778       if (RV.isScalar() || RV.isComplex()) {
2779         SrcPtr = CreateMemTemp(I->Ty, "coerce");
2780         LValue SrcLV = MakeAddrLValue(SrcPtr, I->Ty, TypeAlign);
2781         EmitInitStoreOfNonAggregate(*this, RV, SrcLV);
2782       } else
2783         SrcPtr = RV.getAggregateAddr();
2784 
2785       // If the value is offset in memory, apply the offset now.
2786       if (unsigned Offs = ArgInfo.getDirectOffset()) {
2787         SrcPtr = Builder.CreateBitCast(SrcPtr, Builder.getInt8PtrTy());
2788         SrcPtr = Builder.CreateConstGEP1_32(SrcPtr, Offs);
2789         SrcPtr = Builder.CreateBitCast(SrcPtr,
2790                        llvm::PointerType::getUnqual(ArgInfo.getCoerceToType()));
2791 
2792       }
2793 
2794       // If the coerce-to type is a first class aggregate, we flatten it and
2795       // pass the elements. Either way is semantically identical, but fast-isel
2796       // and the optimizer generally likes scalar values better than FCAs.
2797       // We cannot do this for functions using the AAPCS calling convention,
2798       // as structures are treated differently by that calling convention.
2799       llvm::StructType *STy =
2800             dyn_cast<llvm::StructType>(ArgInfo.getCoerceToType());
2801       if (STy && !isAAPCSVFP(CallInfo, getTarget())) {
2802         llvm::Type *SrcTy =
2803           cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
2804         uint64_t SrcSize = CGM.getDataLayout().getTypeAllocSize(SrcTy);
2805         uint64_t DstSize = CGM.getDataLayout().getTypeAllocSize(STy);
2806 
2807         // If the source type is smaller than the destination type of the
2808         // coerce-to logic, copy the source value into a temp alloca the size
2809         // of the destination type to allow loading all of it. The bits past
2810         // the source value are left undef.
2811         if (SrcSize < DstSize) {
2812           llvm::AllocaInst *TempAlloca
2813             = CreateTempAlloca(STy, SrcPtr->getName() + ".coerce");
2814           Builder.CreateMemCpy(TempAlloca, SrcPtr, SrcSize, 0);
2815           SrcPtr = TempAlloca;
2816         } else {
2817           SrcPtr = Builder.CreateBitCast(SrcPtr,
2818                                          llvm::PointerType::getUnqual(STy));
2819         }
2820 
2821         for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
2822           llvm::Value *EltPtr = Builder.CreateConstGEP2_32(SrcPtr, 0, i);
2823           llvm::LoadInst *LI = Builder.CreateLoad(EltPtr);
2824           // We don't know what we're loading from.
2825           LI->setAlignment(1);
2826           Args.push_back(LI);
2827 
2828           // Validate argument match.
2829           checkArgMatches(LI, IRArgNo, IRFuncTy);
2830         }
2831       } else {
2832         // In the simple case, just pass the coerced loaded value.
2833         Args.push_back(CreateCoercedLoad(SrcPtr, ArgInfo.getCoerceToType(),
2834                                          *this));
2835 
2836         // Validate argument match.
2837         checkArgMatches(Args.back(), IRArgNo, IRFuncTy);
2838       }
2839 
2840       break;
2841     }
2842 
2843     case ABIArgInfo::Expand:
2844       ExpandTypeToArgs(I->Ty, RV, Args, IRFuncTy);
2845       IRArgNo = Args.size();
2846       break;
2847     }
2848   }
2849 
2850   if (SwapThisWithSRet)
2851     std::swap(Args[0], Args[1]);
2852 
2853   if (ArgMemory) {
2854     llvm::Value *Arg = ArgMemory;
2855     llvm::Type *LastParamTy =
2856         IRFuncTy->getParamType(IRFuncTy->getNumParams() - 1);
2857     if (Arg->getType() != LastParamTy) {
2858 #ifndef NDEBUG
2859       // Assert that these structs have equivalent element types.
2860       llvm::StructType *FullTy = CallInfo.getArgStruct();
2861       llvm::StructType *Prefix = cast<llvm::StructType>(
2862           cast<llvm::PointerType>(LastParamTy)->getElementType());
2863 
2864       // For variadic functions, the caller might supply a larger struct than
2865       // the callee expects, and that's OK.
2866       assert(Prefix->getNumElements() == FullTy->getNumElements() ||
2867              (CallInfo.isVariadic() &&
2868               Prefix->getNumElements() <= FullTy->getNumElements()));
2869 
2870       for (llvm::StructType::element_iterator PI = Prefix->element_begin(),
2871                                               PE = Prefix->element_end(),
2872                                               FI = FullTy->element_begin();
2873            PI != PE; ++PI, ++FI)
2874         assert(*PI == *FI);
2875 #endif
2876       Arg = Builder.CreateBitCast(Arg, LastParamTy);
2877     }
2878     Args.push_back(Arg);
2879   }
2880 
2881   if (!CallArgs.getCleanupsToDeactivate().empty())
2882     deactivateArgCleanupsBeforeCall(*this, CallArgs);
2883 
2884   // If the callee is a bitcast of a function to a varargs pointer to function
2885   // type, check to see if we can remove the bitcast.  This handles some cases
2886   // with unprototyped functions.
2887   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Callee))
2888     if (llvm::Function *CalleeF = dyn_cast<llvm::Function>(CE->getOperand(0))) {
2889       llvm::PointerType *CurPT=cast<llvm::PointerType>(Callee->getType());
2890       llvm::FunctionType *CurFT =
2891         cast<llvm::FunctionType>(CurPT->getElementType());
2892       llvm::FunctionType *ActualFT = CalleeF->getFunctionType();
2893 
2894       if (CE->getOpcode() == llvm::Instruction::BitCast &&
2895           ActualFT->getReturnType() == CurFT->getReturnType() &&
2896           ActualFT->getNumParams() == CurFT->getNumParams() &&
2897           ActualFT->getNumParams() == Args.size() &&
2898           (CurFT->isVarArg() || !ActualFT->isVarArg())) {
2899         bool ArgsMatch = true;
2900         for (unsigned i = 0, e = ActualFT->getNumParams(); i != e; ++i)
2901           if (ActualFT->getParamType(i) != CurFT->getParamType(i)) {
2902             ArgsMatch = false;
2903             break;
2904           }
2905 
2906         // Strip the cast if we can get away with it.  This is a nice cleanup,
2907         // but also allows us to inline the function at -O0 if it is marked
2908         // always_inline.
2909         if (ArgsMatch)
2910           Callee = CalleeF;
2911       }
2912     }
2913 
2914   unsigned CallingConv;
2915   CodeGen::AttributeListType AttributeList;
2916   CGM.ConstructAttributeList(CallInfo, TargetDecl, AttributeList,
2917                              CallingConv, true);
2918   llvm::AttributeSet Attrs = llvm::AttributeSet::get(getLLVMContext(),
2919                                                      AttributeList);
2920 
2921   llvm::BasicBlock *InvokeDest = 0;
2922   if (!Attrs.hasAttribute(llvm::AttributeSet::FunctionIndex,
2923                           llvm::Attribute::NoUnwind))
2924     InvokeDest = getInvokeDest();
2925 
2926   llvm::CallSite CS;
2927   if (!InvokeDest) {
2928     CS = Builder.CreateCall(Callee, Args);
2929   } else {
2930     llvm::BasicBlock *Cont = createBasicBlock("invoke.cont");
2931     CS = Builder.CreateInvoke(Callee, Cont, InvokeDest, Args);
2932     EmitBlock(Cont);
2933   }
2934   if (callOrInvoke)
2935     *callOrInvoke = CS.getInstruction();
2936 
2937   CS.setAttributes(Attrs);
2938   CS.setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
2939 
2940   // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
2941   // optimizer it can aggressively ignore unwind edges.
2942   if (CGM.getLangOpts().ObjCAutoRefCount)
2943     AddObjCARCExceptionMetadata(CS.getInstruction());
2944 
2945   // If the call doesn't return, finish the basic block and clear the
2946   // insertion point; this allows the rest of IRgen to discard
2947   // unreachable code.
2948   if (CS.doesNotReturn()) {
2949     Builder.CreateUnreachable();
2950     Builder.ClearInsertionPoint();
2951 
2952     // FIXME: For now, emit a dummy basic block because expr emitters in
2953     // generally are not ready to handle emitting expressions at unreachable
2954     // points.
2955     EnsureInsertPoint();
2956 
2957     // Return a reasonable RValue.
2958     return GetUndefRValue(RetTy);
2959   }
2960 
2961   llvm::Instruction *CI = CS.getInstruction();
2962   if (Builder.isNamePreserving() && !CI->getType()->isVoidTy())
2963     CI->setName("call");
2964 
2965   // Emit any writebacks immediately.  Arguably this should happen
2966   // after any return-value munging.
2967   if (CallArgs.hasWritebacks())
2968     emitWritebacks(*this, CallArgs);
2969 
2970   // The stack cleanup for inalloca arguments has to run out of the normal
2971   // lexical order, so deactivate it and run it manually here.
2972   CallArgs.freeArgumentMemory(*this);
2973 
2974   switch (RetAI.getKind()) {
2975   case ABIArgInfo::InAlloca:
2976   case ABIArgInfo::Indirect:
2977     return convertTempToRValue(SRetPtr, RetTy, SourceLocation());
2978 
2979   case ABIArgInfo::Ignore:
2980     // If we are ignoring an argument that had a result, make sure to
2981     // construct the appropriate return value for our caller.
2982     return GetUndefRValue(RetTy);
2983 
2984   case ABIArgInfo::Extend:
2985   case ABIArgInfo::Direct: {
2986     llvm::Type *RetIRTy = ConvertType(RetTy);
2987     if (RetAI.getCoerceToType() == RetIRTy && RetAI.getDirectOffset() == 0) {
2988       switch (getEvaluationKind(RetTy)) {
2989       case TEK_Complex: {
2990         llvm::Value *Real = Builder.CreateExtractValue(CI, 0);
2991         llvm::Value *Imag = Builder.CreateExtractValue(CI, 1);
2992         return RValue::getComplex(std::make_pair(Real, Imag));
2993       }
2994       case TEK_Aggregate: {
2995         llvm::Value *DestPtr = ReturnValue.getValue();
2996         bool DestIsVolatile = ReturnValue.isVolatile();
2997 
2998         if (!DestPtr) {
2999           DestPtr = CreateMemTemp(RetTy, "agg.tmp");
3000           DestIsVolatile = false;
3001         }
3002         BuildAggStore(*this, CI, DestPtr, DestIsVolatile, false);
3003         return RValue::getAggregate(DestPtr);
3004       }
3005       case TEK_Scalar: {
3006         // If the argument doesn't match, perform a bitcast to coerce it.  This
3007         // can happen due to trivial type mismatches.
3008         llvm::Value *V = CI;
3009         if (V->getType() != RetIRTy)
3010           V = Builder.CreateBitCast(V, RetIRTy);
3011         return RValue::get(V);
3012       }
3013       }
3014       llvm_unreachable("bad evaluation kind");
3015     }
3016 
3017     llvm::Value *DestPtr = ReturnValue.getValue();
3018     bool DestIsVolatile = ReturnValue.isVolatile();
3019 
3020     if (!DestPtr) {
3021       DestPtr = CreateMemTemp(RetTy, "coerce");
3022       DestIsVolatile = false;
3023     }
3024 
3025     // If the value is offset in memory, apply the offset now.
3026     llvm::Value *StorePtr = DestPtr;
3027     if (unsigned Offs = RetAI.getDirectOffset()) {
3028       StorePtr = Builder.CreateBitCast(StorePtr, Builder.getInt8PtrTy());
3029       StorePtr = Builder.CreateConstGEP1_32(StorePtr, Offs);
3030       StorePtr = Builder.CreateBitCast(StorePtr,
3031                          llvm::PointerType::getUnqual(RetAI.getCoerceToType()));
3032     }
3033     CreateCoercedStore(CI, StorePtr, DestIsVolatile, *this);
3034 
3035     return convertTempToRValue(DestPtr, RetTy, SourceLocation());
3036   }
3037 
3038   case ABIArgInfo::Expand:
3039     llvm_unreachable("Invalid ABI kind for return argument");
3040   }
3041 
3042   llvm_unreachable("Unhandled ABIArgInfo::Kind");
3043 }
3044 
3045 /* VarArg handling */
3046 
3047 llvm::Value *CodeGenFunction::EmitVAArg(llvm::Value *VAListAddr, QualType Ty) {
3048   return CGM.getTypes().getABIInfo().EmitVAArg(VAListAddr, Ty, *this);
3049 }
3050