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