1 //===--- CGCall.cpp - Encapsulate calling convention details ----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // These classes wrap the information about a call or function
11 // definition used to handle ABI compliancy.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "CGCall.h"
16 #include "CGCXXABI.h"
17 #include "ABIInfo.h"
18 #include "CodeGenFunction.h"
19 #include "CodeGenModule.h"
20 #include "TargetInfo.h"
21 #include "clang/Basic/TargetInfo.h"
22 #include "clang/AST/Decl.h"
23 #include "clang/AST/DeclCXX.h"
24 #include "clang/AST/DeclObjC.h"
25 #include "clang/Frontend/CodeGenOptions.h"
26 #include "llvm/Attributes.h"
27 #include "llvm/Support/CallSite.h"
28 #include "llvm/Target/TargetData.h"
29 #include "llvm/InlineAsm.h"
30 #include "llvm/Transforms/Utils/Local.h"
31 using namespace clang;
32 using namespace CodeGen;
33 
34 /***/
35 
36 static unsigned ClangCallConvToLLVMCallConv(CallingConv CC) {
37   switch (CC) {
38   default: return llvm::CallingConv::C;
39   case CC_X86StdCall: return llvm::CallingConv::X86_StdCall;
40   case CC_X86FastCall: return llvm::CallingConv::X86_FastCall;
41   case CC_X86ThisCall: return llvm::CallingConv::X86_ThisCall;
42   case CC_AAPCS: return llvm::CallingConv::ARM_AAPCS;
43   case CC_AAPCS_VFP: return llvm::CallingConv::ARM_AAPCS_VFP;
44   // TODO: add support for CC_X86Pascal to llvm
45   }
46 }
47 
48 /// Derives the 'this' type for codegen purposes, i.e. ignoring method
49 /// qualification.
50 /// FIXME: address space qualification?
51 static CanQualType GetThisType(ASTContext &Context, const CXXRecordDecl *RD) {
52   QualType RecTy = Context.getTagDeclType(RD)->getCanonicalTypeInternal();
53   return Context.getPointerType(CanQualType::CreateUnsafe(RecTy));
54 }
55 
56 /// Returns the canonical formal type of the given C++ method.
57 static CanQual<FunctionProtoType> GetFormalType(const CXXMethodDecl *MD) {
58   return MD->getType()->getCanonicalTypeUnqualified()
59            .getAs<FunctionProtoType>();
60 }
61 
62 /// Returns the "extra-canonicalized" return type, which discards
63 /// qualifiers on the return type.  Codegen doesn't care about them,
64 /// and it makes ABI code a little easier to be able to assume that
65 /// all parameter and return types are top-level unqualified.
66 static CanQualType GetReturnType(QualType RetTy) {
67   return RetTy->getCanonicalTypeUnqualified().getUnqualifiedType();
68 }
69 
70 /// Arrange the argument and result information for a value of the
71 /// given unprototyped function type.
72 const CGFunctionInfo &
73 CodeGenTypes::arrangeFunctionType(CanQual<FunctionNoProtoType> FTNP) {
74   // When translating an unprototyped function type, always use a
75   // variadic type.
76   return arrangeFunctionType(FTNP->getResultType().getUnqualifiedType(),
77                              ArrayRef<CanQualType>(),
78                              FTNP->getExtInfo(),
79                              RequiredArgs(0));
80 }
81 
82 /// Arrange the argument and result information for a value of the
83 /// given function type, on top of any implicit parameters already
84 /// stored.
85 static const CGFunctionInfo &arrangeFunctionType(CodeGenTypes &CGT,
86                                   SmallVectorImpl<CanQualType> &argTypes,
87                                              CanQual<FunctionProtoType> FTP) {
88   RequiredArgs required = RequiredArgs::forPrototypePlus(FTP, argTypes.size());
89   // FIXME: Kill copy.
90   for (unsigned i = 0, e = FTP->getNumArgs(); i != e; ++i)
91     argTypes.push_back(FTP->getArgType(i));
92   CanQualType resultType = FTP->getResultType().getUnqualifiedType();
93   return CGT.arrangeFunctionType(resultType, argTypes,
94                                  FTP->getExtInfo(), required);
95 }
96 
97 /// Arrange the argument and result information for a value of the
98 /// given function type.
99 const CGFunctionInfo &
100 CodeGenTypes::arrangeFunctionType(CanQual<FunctionProtoType> FTP) {
101   SmallVector<CanQualType, 16> argTypes;
102   return ::arrangeFunctionType(*this, argTypes, FTP);
103 }
104 
105 static CallingConv getCallingConventionForDecl(const Decl *D) {
106   // Set the appropriate calling convention for the Function.
107   if (D->hasAttr<StdCallAttr>())
108     return CC_X86StdCall;
109 
110   if (D->hasAttr<FastCallAttr>())
111     return CC_X86FastCall;
112 
113   if (D->hasAttr<ThisCallAttr>())
114     return CC_X86ThisCall;
115 
116   if (D->hasAttr<PascalAttr>())
117     return CC_X86Pascal;
118 
119   if (PcsAttr *PCS = D->getAttr<PcsAttr>())
120     return (PCS->getPCS() == PcsAttr::AAPCS ? CC_AAPCS : CC_AAPCS_VFP);
121 
122   return CC_C;
123 }
124 
125 /// Arrange the argument and result information for a call to an
126 /// unknown C++ non-static member function of the given abstract type.
127 /// The member function must be an ordinary function, i.e. not a
128 /// constructor or destructor.
129 const CGFunctionInfo &
130 CodeGenTypes::arrangeCXXMethodType(const CXXRecordDecl *RD,
131                                    const FunctionProtoType *FTP) {
132   SmallVector<CanQualType, 16> argTypes;
133 
134   // Add the 'this' pointer.
135   argTypes.push_back(GetThisType(Context, RD));
136 
137   return ::arrangeFunctionType(*this, argTypes,
138               FTP->getCanonicalTypeUnqualified().getAs<FunctionProtoType>());
139 }
140 
141 /// Arrange the argument and result information for a declaration or
142 /// definition of the given C++ non-static member function.  The
143 /// member function must be an ordinary function, i.e. not a
144 /// constructor or destructor.
145 const CGFunctionInfo &
146 CodeGenTypes::arrangeCXXMethodDeclaration(const CXXMethodDecl *MD) {
147   assert(!isa<CXXConstructorDecl>(MD) && "wrong method for contructors!");
148   assert(!isa<CXXDestructorDecl>(MD) && "wrong method for destructors!");
149 
150   CanQual<FunctionProtoType> prototype = GetFormalType(MD);
151 
152   if (MD->isInstance()) {
153     // The abstract case is perfectly fine.
154     return arrangeCXXMethodType(MD->getParent(), prototype.getTypePtr());
155   }
156 
157   return arrangeFunctionType(prototype);
158 }
159 
160 /// Arrange the argument and result information for a declaration
161 /// or definition to the given constructor variant.
162 const CGFunctionInfo &
163 CodeGenTypes::arrangeCXXConstructorDeclaration(const CXXConstructorDecl *D,
164                                                CXXCtorType ctorKind) {
165   SmallVector<CanQualType, 16> argTypes;
166   argTypes.push_back(GetThisType(Context, D->getParent()));
167   CanQualType resultType = Context.VoidTy;
168 
169   TheCXXABI.BuildConstructorSignature(D, ctorKind, resultType, argTypes);
170 
171   CanQual<FunctionProtoType> FTP = GetFormalType(D);
172 
173   RequiredArgs required = RequiredArgs::forPrototypePlus(FTP, argTypes.size());
174 
175   // Add the formal parameters.
176   for (unsigned i = 0, e = FTP->getNumArgs(); i != e; ++i)
177     argTypes.push_back(FTP->getArgType(i));
178 
179   return arrangeFunctionType(resultType, argTypes, FTP->getExtInfo(), required);
180 }
181 
182 /// Arrange the argument and result information for a declaration,
183 /// definition, or call to the given destructor variant.  It so
184 /// happens that all three cases produce the same information.
185 const CGFunctionInfo &
186 CodeGenTypes::arrangeCXXDestructor(const CXXDestructorDecl *D,
187                                    CXXDtorType dtorKind) {
188   SmallVector<CanQualType, 2> argTypes;
189   argTypes.push_back(GetThisType(Context, D->getParent()));
190   CanQualType resultType = Context.VoidTy;
191 
192   TheCXXABI.BuildDestructorSignature(D, dtorKind, resultType, argTypes);
193 
194   CanQual<FunctionProtoType> FTP = GetFormalType(D);
195   assert(FTP->getNumArgs() == 0 && "dtor with formal parameters");
196 
197   return arrangeFunctionType(resultType, argTypes, FTP->getExtInfo(),
198                              RequiredArgs::All);
199 }
200 
201 /// Arrange the argument and result information for the declaration or
202 /// definition of the given function.
203 const CGFunctionInfo &
204 CodeGenTypes::arrangeFunctionDeclaration(const FunctionDecl *FD) {
205   if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD))
206     if (MD->isInstance())
207       return arrangeCXXMethodDeclaration(MD);
208 
209   CanQualType FTy = FD->getType()->getCanonicalTypeUnqualified();
210 
211   assert(isa<FunctionType>(FTy));
212 
213   // When declaring a function without a prototype, always use a
214   // non-variadic type.
215   if (isa<FunctionNoProtoType>(FTy)) {
216     CanQual<FunctionNoProtoType> noProto = FTy.getAs<FunctionNoProtoType>();
217     return arrangeFunctionType(noProto->getResultType(),
218                                ArrayRef<CanQualType>(),
219                                noProto->getExtInfo(),
220                                RequiredArgs::All);
221   }
222 
223   assert(isa<FunctionProtoType>(FTy));
224   return arrangeFunctionType(FTy.getAs<FunctionProtoType>());
225 }
226 
227 /// Arrange the argument and result information for the declaration or
228 /// definition of an Objective-C method.
229 const CGFunctionInfo &
230 CodeGenTypes::arrangeObjCMethodDeclaration(const ObjCMethodDecl *MD) {
231   // It happens that this is the same as a call with no optional
232   // arguments, except also using the formal 'self' type.
233   return arrangeObjCMessageSendSignature(MD, MD->getSelfDecl()->getType());
234 }
235 
236 /// Arrange the argument and result information for the function type
237 /// through which to perform a send to the given Objective-C method,
238 /// using the given receiver type.  The receiver type is not always
239 /// the 'self' type of the method or even an Objective-C pointer type.
240 /// This is *not* the right method for actually performing such a
241 /// message send, due to the possibility of optional arguments.
242 const CGFunctionInfo &
243 CodeGenTypes::arrangeObjCMessageSendSignature(const ObjCMethodDecl *MD,
244                                               QualType receiverType) {
245   SmallVector<CanQualType, 16> argTys;
246   argTys.push_back(Context.getCanonicalParamType(receiverType));
247   argTys.push_back(Context.getCanonicalParamType(Context.getObjCSelType()));
248   // FIXME: Kill copy?
249   for (ObjCMethodDecl::param_const_iterator i = MD->param_begin(),
250          e = MD->param_end(); i != e; ++i) {
251     argTys.push_back(Context.getCanonicalParamType((*i)->getType()));
252   }
253 
254   FunctionType::ExtInfo einfo;
255   einfo = einfo.withCallingConv(getCallingConventionForDecl(MD));
256 
257   if (getContext().getLangOpts().ObjCAutoRefCount &&
258       MD->hasAttr<NSReturnsRetainedAttr>())
259     einfo = einfo.withProducesResult(true);
260 
261   RequiredArgs required =
262     (MD->isVariadic() ? RequiredArgs(argTys.size()) : RequiredArgs::All);
263 
264   return arrangeFunctionType(GetReturnType(MD->getResultType()), argTys,
265                              einfo, required);
266 }
267 
268 const CGFunctionInfo &
269 CodeGenTypes::arrangeGlobalDeclaration(GlobalDecl GD) {
270   // FIXME: Do we need to handle ObjCMethodDecl?
271   const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl());
272 
273   if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(FD))
274     return arrangeCXXConstructorDeclaration(CD, GD.getCtorType());
275 
276   if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(FD))
277     return arrangeCXXDestructor(DD, GD.getDtorType());
278 
279   return arrangeFunctionDeclaration(FD);
280 }
281 
282 /// Figure out the rules for calling a function with the given formal
283 /// type using the given arguments.  The arguments are necessary
284 /// because the function might be unprototyped, in which case it's
285 /// target-dependent in crazy ways.
286 const CGFunctionInfo &
287 CodeGenTypes::arrangeFunctionCall(const CallArgList &args,
288                                   const FunctionType *fnType) {
289   RequiredArgs required = RequiredArgs::All;
290   if (const FunctionProtoType *proto = dyn_cast<FunctionProtoType>(fnType)) {
291     if (proto->isVariadic())
292       required = RequiredArgs(proto->getNumArgs());
293   } else if (CGM.getTargetCodeGenInfo()
294                .isNoProtoCallVariadic(args, cast<FunctionNoProtoType>(fnType))) {
295     required = RequiredArgs(0);
296   }
297 
298   return arrangeFunctionCall(fnType->getResultType(), args,
299                              fnType->getExtInfo(), required);
300 }
301 
302 const CGFunctionInfo &
303 CodeGenTypes::arrangeFunctionCall(QualType resultType,
304                                   const CallArgList &args,
305                                   const FunctionType::ExtInfo &info,
306                                   RequiredArgs required) {
307   // FIXME: Kill copy.
308   SmallVector<CanQualType, 16> argTypes;
309   for (CallArgList::const_iterator i = args.begin(), e = args.end();
310        i != e; ++i)
311     argTypes.push_back(Context.getCanonicalParamType(i->Ty));
312   return arrangeFunctionType(GetReturnType(resultType), argTypes, info,
313                              required);
314 }
315 
316 const CGFunctionInfo &
317 CodeGenTypes::arrangeFunctionDeclaration(QualType resultType,
318                                          const FunctionArgList &args,
319                                          const FunctionType::ExtInfo &info,
320                                          bool isVariadic) {
321   // FIXME: Kill copy.
322   SmallVector<CanQualType, 16> argTypes;
323   for (FunctionArgList::const_iterator i = args.begin(), e = args.end();
324        i != e; ++i)
325     argTypes.push_back(Context.getCanonicalParamType((*i)->getType()));
326 
327   RequiredArgs required =
328     (isVariadic ? RequiredArgs(args.size()) : RequiredArgs::All);
329   return arrangeFunctionType(GetReturnType(resultType), argTypes, info,
330                              required);
331 }
332 
333 const CGFunctionInfo &CodeGenTypes::arrangeNullaryFunction() {
334   return arrangeFunctionType(getContext().VoidTy, ArrayRef<CanQualType>(),
335                              FunctionType::ExtInfo(), RequiredArgs::All);
336 }
337 
338 /// Arrange the argument and result information for an abstract value
339 /// of a given function type.  This is the method which all of the
340 /// above functions ultimately defer to.
341 const CGFunctionInfo &
342 CodeGenTypes::arrangeFunctionType(CanQualType resultType,
343                                   ArrayRef<CanQualType> argTypes,
344                                   const FunctionType::ExtInfo &info,
345                                   RequiredArgs required) {
346 #ifndef NDEBUG
347   for (ArrayRef<CanQualType>::const_iterator
348          I = argTypes.begin(), E = argTypes.end(); I != E; ++I)
349     assert(I->isCanonicalAsParam());
350 #endif
351 
352   unsigned CC = ClangCallConvToLLVMCallConv(info.getCC());
353 
354   // Lookup or create unique function info.
355   llvm::FoldingSetNodeID ID;
356   CGFunctionInfo::Profile(ID, info, required, resultType, argTypes);
357 
358   void *insertPos = 0;
359   CGFunctionInfo *FI = FunctionInfos.FindNodeOrInsertPos(ID, insertPos);
360   if (FI)
361     return *FI;
362 
363   // Construct the function info.  We co-allocate the ArgInfos.
364   FI = CGFunctionInfo::create(CC, info, resultType, argTypes, required);
365   FunctionInfos.InsertNode(FI, insertPos);
366 
367   bool inserted = FunctionsBeingProcessed.insert(FI); (void)inserted;
368   assert(inserted && "Recursively being processed?");
369 
370   // Compute ABI information.
371   getABIInfo().computeInfo(*FI);
372 
373   // Loop over all of the computed argument and return value info.  If any of
374   // them are direct or extend without a specified coerce type, specify the
375   // default now.
376   ABIArgInfo &retInfo = FI->getReturnInfo();
377   if (retInfo.canHaveCoerceToType() && retInfo.getCoerceToType() == 0)
378     retInfo.setCoerceToType(ConvertType(FI->getReturnType()));
379 
380   for (CGFunctionInfo::arg_iterator I = FI->arg_begin(), E = FI->arg_end();
381        I != E; ++I)
382     if (I->info.canHaveCoerceToType() && I->info.getCoerceToType() == 0)
383       I->info.setCoerceToType(ConvertType(I->type));
384 
385   bool erased = FunctionsBeingProcessed.erase(FI); (void)erased;
386   assert(erased && "Not in set?");
387 
388   return *FI;
389 }
390 
391 CGFunctionInfo *CGFunctionInfo::create(unsigned llvmCC,
392                                        const FunctionType::ExtInfo &info,
393                                        CanQualType resultType,
394                                        ArrayRef<CanQualType> argTypes,
395                                        RequiredArgs required) {
396   void *buffer = operator new(sizeof(CGFunctionInfo) +
397                               sizeof(ArgInfo) * (argTypes.size() + 1));
398   CGFunctionInfo *FI = new(buffer) CGFunctionInfo();
399   FI->CallingConvention = llvmCC;
400   FI->EffectiveCallingConvention = llvmCC;
401   FI->ASTCallingConvention = info.getCC();
402   FI->NoReturn = info.getNoReturn();
403   FI->ReturnsRetained = info.getProducesResult();
404   FI->Required = required;
405   FI->HasRegParm = info.getHasRegParm();
406   FI->RegParm = info.getRegParm();
407   FI->NumArgs = argTypes.size();
408   FI->getArgsBuffer()[0].type = resultType;
409   for (unsigned i = 0, e = argTypes.size(); i != e; ++i)
410     FI->getArgsBuffer()[i + 1].type = argTypes[i];
411   return FI;
412 }
413 
414 /***/
415 
416 void CodeGenTypes::GetExpandedTypes(QualType type,
417                      SmallVectorImpl<llvm::Type*> &expandedTypes) {
418   if (const ConstantArrayType *AT = Context.getAsConstantArrayType(type)) {
419     uint64_t NumElts = AT->getSize().getZExtValue();
420     for (uint64_t Elt = 0; Elt < NumElts; ++Elt)
421       GetExpandedTypes(AT->getElementType(), expandedTypes);
422   } else if (const RecordType *RT = type->getAs<RecordType>()) {
423     const RecordDecl *RD = RT->getDecl();
424     assert(!RD->hasFlexibleArrayMember() &&
425            "Cannot expand structure with flexible array.");
426     if (RD->isUnion()) {
427       // Unions can be here only in degenerative cases - all the fields are same
428       // after flattening. Thus we have to use the "largest" field.
429       const FieldDecl *LargestFD = 0;
430       CharUnits UnionSize = CharUnits::Zero();
431 
432       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
433            i != e; ++i) {
434         const FieldDecl *FD = *i;
435         assert(!FD->isBitField() &&
436                "Cannot expand structure with bit-field members.");
437         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
438         if (UnionSize < FieldSize) {
439           UnionSize = FieldSize;
440           LargestFD = FD;
441         }
442       }
443       if (LargestFD)
444         GetExpandedTypes(LargestFD->getType(), expandedTypes);
445     } else {
446       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
447            i != e; ++i) {
448         assert(!i->isBitField() &&
449                "Cannot expand structure with bit-field members.");
450         GetExpandedTypes(i->getType(), expandedTypes);
451       }
452     }
453   } else if (const ComplexType *CT = type->getAs<ComplexType>()) {
454     llvm::Type *EltTy = ConvertType(CT->getElementType());
455     expandedTypes.push_back(EltTy);
456     expandedTypes.push_back(EltTy);
457   } else
458     expandedTypes.push_back(ConvertType(type));
459 }
460 
461 llvm::Function::arg_iterator
462 CodeGenFunction::ExpandTypeFromArgs(QualType Ty, LValue LV,
463                                     llvm::Function::arg_iterator AI) {
464   assert(LV.isSimple() &&
465          "Unexpected non-simple lvalue during struct expansion.");
466 
467   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
468     unsigned NumElts = AT->getSize().getZExtValue();
469     QualType EltTy = AT->getElementType();
470     for (unsigned Elt = 0; Elt < NumElts; ++Elt) {
471       llvm::Value *EltAddr = Builder.CreateConstGEP2_32(LV.getAddress(), 0, Elt);
472       LValue LV = MakeAddrLValue(EltAddr, EltTy);
473       AI = ExpandTypeFromArgs(EltTy, LV, AI);
474     }
475   } else if (const RecordType *RT = Ty->getAs<RecordType>()) {
476     RecordDecl *RD = RT->getDecl();
477     if (RD->isUnion()) {
478       // Unions can be here only in degenerative cases - all the fields are same
479       // after flattening. Thus we have to use the "largest" field.
480       const FieldDecl *LargestFD = 0;
481       CharUnits UnionSize = CharUnits::Zero();
482 
483       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
484            i != e; ++i) {
485         const FieldDecl *FD = *i;
486         assert(!FD->isBitField() &&
487                "Cannot expand structure with bit-field members.");
488         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
489         if (UnionSize < FieldSize) {
490           UnionSize = FieldSize;
491           LargestFD = FD;
492         }
493       }
494       if (LargestFD) {
495         // FIXME: What are the right qualifiers here?
496         LValue SubLV = EmitLValueForField(LV, LargestFD);
497         AI = ExpandTypeFromArgs(LargestFD->getType(), SubLV, AI);
498       }
499     } else {
500       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
501            i != e; ++i) {
502         FieldDecl *FD = *i;
503         QualType FT = FD->getType();
504 
505         // FIXME: What are the right qualifiers here?
506         LValue SubLV = EmitLValueForField(LV, FD);
507         AI = ExpandTypeFromArgs(FT, SubLV, AI);
508       }
509     }
510   } else if (const ComplexType *CT = Ty->getAs<ComplexType>()) {
511     QualType EltTy = CT->getElementType();
512     llvm::Value *RealAddr = Builder.CreateStructGEP(LV.getAddress(), 0, "real");
513     EmitStoreThroughLValue(RValue::get(AI++), MakeAddrLValue(RealAddr, EltTy));
514     llvm::Value *ImagAddr = Builder.CreateStructGEP(LV.getAddress(), 1, "imag");
515     EmitStoreThroughLValue(RValue::get(AI++), MakeAddrLValue(ImagAddr, EltTy));
516   } else {
517     EmitStoreThroughLValue(RValue::get(AI), LV);
518     ++AI;
519   }
520 
521   return AI;
522 }
523 
524 /// EnterStructPointerForCoercedAccess - Given a struct pointer that we are
525 /// accessing some number of bytes out of it, try to gep into the struct to get
526 /// at its inner goodness.  Dive as deep as possible without entering an element
527 /// with an in-memory size smaller than DstSize.
528 static llvm::Value *
529 EnterStructPointerForCoercedAccess(llvm::Value *SrcPtr,
530                                    llvm::StructType *SrcSTy,
531                                    uint64_t DstSize, CodeGenFunction &CGF) {
532   // We can't dive into a zero-element struct.
533   if (SrcSTy->getNumElements() == 0) return SrcPtr;
534 
535   llvm::Type *FirstElt = SrcSTy->getElementType(0);
536 
537   // If the first elt is at least as large as what we're looking for, or if the
538   // first element is the same size as the whole struct, we can enter it.
539   uint64_t FirstEltSize =
540     CGF.CGM.getTargetData().getTypeAllocSize(FirstElt);
541   if (FirstEltSize < DstSize &&
542       FirstEltSize < CGF.CGM.getTargetData().getTypeAllocSize(SrcSTy))
543     return SrcPtr;
544 
545   // GEP into the first element.
546   SrcPtr = CGF.Builder.CreateConstGEP2_32(SrcPtr, 0, 0, "coerce.dive");
547 
548   // If the first element is a struct, recurse.
549   llvm::Type *SrcTy =
550     cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
551   if (llvm::StructType *SrcSTy = dyn_cast<llvm::StructType>(SrcTy))
552     return EnterStructPointerForCoercedAccess(SrcPtr, SrcSTy, DstSize, CGF);
553 
554   return SrcPtr;
555 }
556 
557 /// CoerceIntOrPtrToIntOrPtr - Convert a value Val to the specific Ty where both
558 /// are either integers or pointers.  This does a truncation of the value if it
559 /// is too large or a zero extension if it is too small.
560 static llvm::Value *CoerceIntOrPtrToIntOrPtr(llvm::Value *Val,
561                                              llvm::Type *Ty,
562                                              CodeGenFunction &CGF) {
563   if (Val->getType() == Ty)
564     return Val;
565 
566   if (isa<llvm::PointerType>(Val->getType())) {
567     // If this is Pointer->Pointer avoid conversion to and from int.
568     if (isa<llvm::PointerType>(Ty))
569       return CGF.Builder.CreateBitCast(Val, Ty, "coerce.val");
570 
571     // Convert the pointer to an integer so we can play with its width.
572     Val = CGF.Builder.CreatePtrToInt(Val, CGF.IntPtrTy, "coerce.val.pi");
573   }
574 
575   llvm::Type *DestIntTy = Ty;
576   if (isa<llvm::PointerType>(DestIntTy))
577     DestIntTy = CGF.IntPtrTy;
578 
579   if (Val->getType() != DestIntTy)
580     Val = CGF.Builder.CreateIntCast(Val, DestIntTy, false, "coerce.val.ii");
581 
582   if (isa<llvm::PointerType>(Ty))
583     Val = CGF.Builder.CreateIntToPtr(Val, Ty, "coerce.val.ip");
584   return Val;
585 }
586 
587 
588 
589 /// CreateCoercedLoad - Create a load from \arg SrcPtr interpreted as
590 /// a pointer to an object of type \arg Ty.
591 ///
592 /// This safely handles the case when the src type is smaller than the
593 /// destination type; in this situation the values of bits which not
594 /// present in the src are undefined.
595 static llvm::Value *CreateCoercedLoad(llvm::Value *SrcPtr,
596                                       llvm::Type *Ty,
597                                       CodeGenFunction &CGF) {
598   llvm::Type *SrcTy =
599     cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
600 
601   // If SrcTy and Ty are the same, just do a load.
602   if (SrcTy == Ty)
603     return CGF.Builder.CreateLoad(SrcPtr);
604 
605   uint64_t DstSize = CGF.CGM.getTargetData().getTypeAllocSize(Ty);
606 
607   if (llvm::StructType *SrcSTy = dyn_cast<llvm::StructType>(SrcTy)) {
608     SrcPtr = EnterStructPointerForCoercedAccess(SrcPtr, SrcSTy, DstSize, CGF);
609     SrcTy = cast<llvm::PointerType>(SrcPtr->getType())->getElementType();
610   }
611 
612   uint64_t SrcSize = CGF.CGM.getTargetData().getTypeAllocSize(SrcTy);
613 
614   // If the source and destination are integer or pointer types, just do an
615   // extension or truncation to the desired type.
616   if ((isa<llvm::IntegerType>(Ty) || isa<llvm::PointerType>(Ty)) &&
617       (isa<llvm::IntegerType>(SrcTy) || isa<llvm::PointerType>(SrcTy))) {
618     llvm::LoadInst *Load = CGF.Builder.CreateLoad(SrcPtr);
619     return CoerceIntOrPtrToIntOrPtr(Load, Ty, CGF);
620   }
621 
622   // If load is legal, just bitcast the src pointer.
623   if (SrcSize >= DstSize) {
624     // Generally SrcSize is never greater than DstSize, since this means we are
625     // losing bits. However, this can happen in cases where the structure has
626     // additional padding, for example due to a user specified alignment.
627     //
628     // FIXME: Assert that we aren't truncating non-padding bits when have access
629     // to that information.
630     llvm::Value *Casted =
631       CGF.Builder.CreateBitCast(SrcPtr, llvm::PointerType::getUnqual(Ty));
632     llvm::LoadInst *Load = CGF.Builder.CreateLoad(Casted);
633     // FIXME: Use better alignment / avoid requiring aligned load.
634     Load->setAlignment(1);
635     return Load;
636   }
637 
638   // Otherwise do coercion through memory. This is stupid, but
639   // simple.
640   llvm::Value *Tmp = CGF.CreateTempAlloca(Ty);
641   llvm::Value *Casted =
642     CGF.Builder.CreateBitCast(Tmp, llvm::PointerType::getUnqual(SrcTy));
643   llvm::StoreInst *Store =
644     CGF.Builder.CreateStore(CGF.Builder.CreateLoad(SrcPtr), Casted);
645   // FIXME: Use better alignment / avoid requiring aligned store.
646   Store->setAlignment(1);
647   return CGF.Builder.CreateLoad(Tmp);
648 }
649 
650 // Function to store a first-class aggregate into memory.  We prefer to
651 // store the elements rather than the aggregate to be more friendly to
652 // fast-isel.
653 // FIXME: Do we need to recurse here?
654 static void BuildAggStore(CodeGenFunction &CGF, llvm::Value *Val,
655                           llvm::Value *DestPtr, bool DestIsVolatile,
656                           bool LowAlignment) {
657   // Prefer scalar stores to first-class aggregate stores.
658   if (llvm::StructType *STy =
659         dyn_cast<llvm::StructType>(Val->getType())) {
660     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
661       llvm::Value *EltPtr = CGF.Builder.CreateConstGEP2_32(DestPtr, 0, i);
662       llvm::Value *Elt = CGF.Builder.CreateExtractValue(Val, i);
663       llvm::StoreInst *SI = CGF.Builder.CreateStore(Elt, EltPtr,
664                                                     DestIsVolatile);
665       if (LowAlignment)
666         SI->setAlignment(1);
667     }
668   } else {
669     llvm::StoreInst *SI = CGF.Builder.CreateStore(Val, DestPtr, DestIsVolatile);
670     if (LowAlignment)
671       SI->setAlignment(1);
672   }
673 }
674 
675 /// CreateCoercedStore - Create a store to \arg DstPtr from \arg Src,
676 /// where the source and destination may have different types.
677 ///
678 /// This safely handles the case when the src type is larger than the
679 /// destination type; the upper bits of the src will be lost.
680 static void CreateCoercedStore(llvm::Value *Src,
681                                llvm::Value *DstPtr,
682                                bool DstIsVolatile,
683                                CodeGenFunction &CGF) {
684   llvm::Type *SrcTy = Src->getType();
685   llvm::Type *DstTy =
686     cast<llvm::PointerType>(DstPtr->getType())->getElementType();
687   if (SrcTy == DstTy) {
688     CGF.Builder.CreateStore(Src, DstPtr, DstIsVolatile);
689     return;
690   }
691 
692   uint64_t SrcSize = CGF.CGM.getTargetData().getTypeAllocSize(SrcTy);
693 
694   if (llvm::StructType *DstSTy = dyn_cast<llvm::StructType>(DstTy)) {
695     DstPtr = EnterStructPointerForCoercedAccess(DstPtr, DstSTy, SrcSize, CGF);
696     DstTy = cast<llvm::PointerType>(DstPtr->getType())->getElementType();
697   }
698 
699   // If the source and destination are integer or pointer types, just do an
700   // extension or truncation to the desired type.
701   if ((isa<llvm::IntegerType>(SrcTy) || isa<llvm::PointerType>(SrcTy)) &&
702       (isa<llvm::IntegerType>(DstTy) || isa<llvm::PointerType>(DstTy))) {
703     Src = CoerceIntOrPtrToIntOrPtr(Src, DstTy, CGF);
704     CGF.Builder.CreateStore(Src, DstPtr, DstIsVolatile);
705     return;
706   }
707 
708   uint64_t DstSize = CGF.CGM.getTargetData().getTypeAllocSize(DstTy);
709 
710   // If store is legal, just bitcast the src pointer.
711   if (SrcSize <= DstSize) {
712     llvm::Value *Casted =
713       CGF.Builder.CreateBitCast(DstPtr, llvm::PointerType::getUnqual(SrcTy));
714     // FIXME: Use better alignment / avoid requiring aligned store.
715     BuildAggStore(CGF, Src, Casted, DstIsVolatile, true);
716   } else {
717     // Otherwise do coercion through memory. This is stupid, but
718     // simple.
719 
720     // Generally SrcSize is never greater than DstSize, since this means we are
721     // losing bits. However, this can happen in cases where the structure has
722     // additional padding, for example due to a user specified alignment.
723     //
724     // FIXME: Assert that we aren't truncating non-padding bits when have access
725     // to that information.
726     llvm::Value *Tmp = CGF.CreateTempAlloca(SrcTy);
727     CGF.Builder.CreateStore(Src, Tmp);
728     llvm::Value *Casted =
729       CGF.Builder.CreateBitCast(Tmp, llvm::PointerType::getUnqual(DstTy));
730     llvm::LoadInst *Load = CGF.Builder.CreateLoad(Casted);
731     // FIXME: Use better alignment / avoid requiring aligned load.
732     Load->setAlignment(1);
733     CGF.Builder.CreateStore(Load, DstPtr, DstIsVolatile);
734   }
735 }
736 
737 /***/
738 
739 bool CodeGenModule::ReturnTypeUsesSRet(const CGFunctionInfo &FI) {
740   return FI.getReturnInfo().isIndirect();
741 }
742 
743 bool CodeGenModule::ReturnTypeUsesFPRet(QualType ResultType) {
744   if (const BuiltinType *BT = ResultType->getAs<BuiltinType>()) {
745     switch (BT->getKind()) {
746     default:
747       return false;
748     case BuiltinType::Float:
749       return getContext().getTargetInfo().useObjCFPRetForRealType(TargetInfo::Float);
750     case BuiltinType::Double:
751       return getContext().getTargetInfo().useObjCFPRetForRealType(TargetInfo::Double);
752     case BuiltinType::LongDouble:
753       return getContext().getTargetInfo().useObjCFPRetForRealType(
754         TargetInfo::LongDouble);
755     }
756   }
757 
758   return false;
759 }
760 
761 bool CodeGenModule::ReturnTypeUsesFP2Ret(QualType ResultType) {
762   if (const ComplexType *CT = ResultType->getAs<ComplexType>()) {
763     if (const BuiltinType *BT = CT->getElementType()->getAs<BuiltinType>()) {
764       if (BT->getKind() == BuiltinType::LongDouble)
765         return getContext().getTargetInfo().useObjCFP2RetForComplexLongDouble();
766     }
767   }
768 
769   return false;
770 }
771 
772 llvm::FunctionType *CodeGenTypes::GetFunctionType(GlobalDecl GD) {
773   const CGFunctionInfo &FI = arrangeGlobalDeclaration(GD);
774   return GetFunctionType(FI);
775 }
776 
777 llvm::FunctionType *
778 CodeGenTypes::GetFunctionType(const CGFunctionInfo &FI) {
779 
780   bool Inserted = FunctionsBeingProcessed.insert(&FI); (void)Inserted;
781   assert(Inserted && "Recursively being processed?");
782 
783   SmallVector<llvm::Type*, 8> argTypes;
784   llvm::Type *resultType = 0;
785 
786   const ABIArgInfo &retAI = FI.getReturnInfo();
787   switch (retAI.getKind()) {
788   case ABIArgInfo::Expand:
789     llvm_unreachable("Invalid ABI kind for return argument");
790 
791   case ABIArgInfo::Extend:
792   case ABIArgInfo::Direct:
793     resultType = retAI.getCoerceToType();
794     break;
795 
796   case ABIArgInfo::Indirect: {
797     assert(!retAI.getIndirectAlign() && "Align unused on indirect return.");
798     resultType = llvm::Type::getVoidTy(getLLVMContext());
799 
800     QualType ret = FI.getReturnType();
801     llvm::Type *ty = ConvertType(ret);
802     unsigned addressSpace = Context.getTargetAddressSpace(ret);
803     argTypes.push_back(llvm::PointerType::get(ty, addressSpace));
804     break;
805   }
806 
807   case ABIArgInfo::Ignore:
808     resultType = llvm::Type::getVoidTy(getLLVMContext());
809     break;
810   }
811 
812   for (CGFunctionInfo::const_arg_iterator it = FI.arg_begin(),
813          ie = FI.arg_end(); it != ie; ++it) {
814     const ABIArgInfo &argAI = it->info;
815 
816     switch (argAI.getKind()) {
817     case ABIArgInfo::Ignore:
818       break;
819 
820     case ABIArgInfo::Indirect: {
821       // indirect arguments are always on the stack, which is addr space #0.
822       llvm::Type *LTy = ConvertTypeForMem(it->type);
823       argTypes.push_back(LTy->getPointerTo());
824       break;
825     }
826 
827     case ABIArgInfo::Extend:
828     case ABIArgInfo::Direct: {
829       // Insert a padding type to ensure proper alignment.
830       if (llvm::Type *PaddingType = argAI.getPaddingType())
831         argTypes.push_back(PaddingType);
832       // If the coerce-to type is a first class aggregate, flatten it.  Either
833       // way is semantically identical, but fast-isel and the optimizer
834       // generally likes scalar values better than FCAs.
835       llvm::Type *argType = argAI.getCoerceToType();
836       if (llvm::StructType *st = dyn_cast<llvm::StructType>(argType)) {
837         for (unsigned i = 0, e = st->getNumElements(); i != e; ++i)
838           argTypes.push_back(st->getElementType(i));
839       } else {
840         argTypes.push_back(argType);
841       }
842       break;
843     }
844 
845     case ABIArgInfo::Expand:
846       GetExpandedTypes(it->type, argTypes);
847       break;
848     }
849   }
850 
851   bool Erased = FunctionsBeingProcessed.erase(&FI); (void)Erased;
852   assert(Erased && "Not in set?");
853 
854   return llvm::FunctionType::get(resultType, argTypes, FI.isVariadic());
855 }
856 
857 llvm::Type *CodeGenTypes::GetFunctionTypeForVTable(GlobalDecl GD) {
858   const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
859   const FunctionProtoType *FPT = MD->getType()->getAs<FunctionProtoType>();
860 
861   if (!isFuncTypeConvertible(FPT))
862     return llvm::StructType::get(getLLVMContext());
863 
864   const CGFunctionInfo *Info;
865   if (isa<CXXDestructorDecl>(MD))
866     Info = &arrangeCXXDestructor(cast<CXXDestructorDecl>(MD), GD.getDtorType());
867   else
868     Info = &arrangeCXXMethodDeclaration(MD);
869   return GetFunctionType(*Info);
870 }
871 
872 void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
873                                            const Decl *TargetDecl,
874                                            AttributeListType &PAL,
875                                            unsigned &CallingConv) {
876   llvm::Attributes FuncAttrs;
877   llvm::Attributes RetAttrs;
878 
879   CallingConv = FI.getEffectiveCallingConvention();
880 
881   if (FI.isNoReturn())
882     FuncAttrs |= llvm::Attribute::NoReturn;
883 
884   // FIXME: handle sseregparm someday...
885   if (TargetDecl) {
886     if (TargetDecl->hasAttr<ReturnsTwiceAttr>())
887       FuncAttrs |= llvm::Attribute::ReturnsTwice;
888     if (TargetDecl->hasAttr<NoThrowAttr>())
889       FuncAttrs |= llvm::Attribute::NoUnwind;
890     else if (const FunctionDecl *Fn = dyn_cast<FunctionDecl>(TargetDecl)) {
891       const FunctionProtoType *FPT = Fn->getType()->getAs<FunctionProtoType>();
892       if (FPT && FPT->isNothrow(getContext()))
893         FuncAttrs |= llvm::Attribute::NoUnwind;
894     }
895 
896     if (TargetDecl->hasAttr<NoReturnAttr>())
897       FuncAttrs |= llvm::Attribute::NoReturn;
898 
899     if (TargetDecl->hasAttr<ReturnsTwiceAttr>())
900       FuncAttrs |= llvm::Attribute::ReturnsTwice;
901 
902     // 'const' and 'pure' attribute functions are also nounwind.
903     if (TargetDecl->hasAttr<ConstAttr>()) {
904       FuncAttrs |= llvm::Attribute::ReadNone;
905       FuncAttrs |= llvm::Attribute::NoUnwind;
906     } else if (TargetDecl->hasAttr<PureAttr>()) {
907       FuncAttrs |= llvm::Attribute::ReadOnly;
908       FuncAttrs |= llvm::Attribute::NoUnwind;
909     }
910     if (TargetDecl->hasAttr<MallocAttr>())
911       RetAttrs |= llvm::Attribute::NoAlias;
912   }
913 
914   if (CodeGenOpts.OptimizeSize)
915     FuncAttrs |= llvm::Attribute::OptimizeForSize;
916   if (CodeGenOpts.DisableRedZone)
917     FuncAttrs |= llvm::Attribute::NoRedZone;
918   if (CodeGenOpts.NoImplicitFloat)
919     FuncAttrs |= llvm::Attribute::NoImplicitFloat;
920 
921   QualType RetTy = FI.getReturnType();
922   unsigned Index = 1;
923   const ABIArgInfo &RetAI = FI.getReturnInfo();
924   switch (RetAI.getKind()) {
925   case ABIArgInfo::Extend:
926    if (RetTy->hasSignedIntegerRepresentation())
927      RetAttrs |= llvm::Attribute::SExt;
928    else if (RetTy->hasUnsignedIntegerRepresentation())
929      RetAttrs |= llvm::Attribute::ZExt;
930     break;
931   case ABIArgInfo::Direct:
932   case ABIArgInfo::Ignore:
933     break;
934 
935   case ABIArgInfo::Indirect:
936     PAL.push_back(llvm::AttributeWithIndex::get(Index,
937                                                 llvm::Attribute::StructRet));
938     ++Index;
939     // sret disables readnone and readonly
940     FuncAttrs &= ~(llvm::Attribute::ReadOnly |
941                    llvm::Attribute::ReadNone);
942     break;
943 
944   case ABIArgInfo::Expand:
945     llvm_unreachable("Invalid ABI kind for return argument");
946   }
947 
948   if (RetAttrs)
949     PAL.push_back(llvm::AttributeWithIndex::get(0, RetAttrs));
950 
951   // FIXME: RegParm should be reduced in case of global register variable.
952   signed RegParm;
953   if (FI.getHasRegParm())
954     RegParm = FI.getRegParm();
955   else
956     RegParm = CodeGenOpts.NumRegisterParameters;
957 
958   unsigned PointerWidth = getContext().getTargetInfo().getPointerWidth(0);
959   for (CGFunctionInfo::const_arg_iterator it = FI.arg_begin(),
960          ie = FI.arg_end(); it != ie; ++it) {
961     QualType ParamType = it->type;
962     const ABIArgInfo &AI = it->info;
963     llvm::Attributes Attrs;
964 
965     // 'restrict' -> 'noalias' is done in EmitFunctionProlog when we
966     // have the corresponding parameter variable.  It doesn't make
967     // sense to do it here because parameters are so messed up.
968     switch (AI.getKind()) {
969     case ABIArgInfo::Extend:
970       if (ParamType->isSignedIntegerOrEnumerationType())
971         Attrs |= llvm::Attribute::SExt;
972       else if (ParamType->isUnsignedIntegerOrEnumerationType())
973         Attrs |= llvm::Attribute::ZExt;
974       // FALL THROUGH
975     case ABIArgInfo::Direct:
976       if (RegParm > 0 &&
977           (ParamType->isIntegerType() || ParamType->isPointerType() ||
978            ParamType->isReferenceType())) {
979         RegParm -=
980         (Context.getTypeSize(ParamType) + PointerWidth - 1) / PointerWidth;
981         if (RegParm >= 0)
982           Attrs |= llvm::Attribute::InReg;
983       }
984       // FIXME: handle sseregparm someday...
985 
986       // Increment Index if there is padding.
987       Index += (AI.getPaddingType() != 0);
988 
989       if (llvm::StructType *STy =
990             dyn_cast<llvm::StructType>(AI.getCoerceToType()))
991         Index += STy->getNumElements()-1;  // 1 will be added below.
992       break;
993 
994     case ABIArgInfo::Indirect:
995       if (AI.getIndirectByVal())
996         Attrs |= llvm::Attribute::ByVal;
997 
998       Attrs |=
999         llvm::Attribute::constructAlignmentFromInt(AI.getIndirectAlign());
1000       // byval disables readnone and readonly.
1001       FuncAttrs &= ~(llvm::Attribute::ReadOnly |
1002                      llvm::Attribute::ReadNone);
1003       break;
1004 
1005     case ABIArgInfo::Ignore:
1006       // Skip increment, no matching LLVM parameter.
1007       continue;
1008 
1009     case ABIArgInfo::Expand: {
1010       SmallVector<llvm::Type*, 8> types;
1011       // FIXME: This is rather inefficient. Do we ever actually need to do
1012       // anything here? The result should be just reconstructed on the other
1013       // side, so extension should be a non-issue.
1014       getTypes().GetExpandedTypes(ParamType, types);
1015       Index += types.size();
1016       continue;
1017     }
1018     }
1019 
1020     if (Attrs)
1021       PAL.push_back(llvm::AttributeWithIndex::get(Index, Attrs));
1022     ++Index;
1023   }
1024   if (FuncAttrs)
1025     PAL.push_back(llvm::AttributeWithIndex::get(~0, FuncAttrs));
1026 }
1027 
1028 /// An argument came in as a promoted argument; demote it back to its
1029 /// declared type.
1030 static llvm::Value *emitArgumentDemotion(CodeGenFunction &CGF,
1031                                          const VarDecl *var,
1032                                          llvm::Value *value) {
1033   llvm::Type *varType = CGF.ConvertType(var->getType());
1034 
1035   // This can happen with promotions that actually don't change the
1036   // underlying type, like the enum promotions.
1037   if (value->getType() == varType) return value;
1038 
1039   assert((varType->isIntegerTy() || varType->isFloatingPointTy())
1040          && "unexpected promotion type");
1041 
1042   if (isa<llvm::IntegerType>(varType))
1043     return CGF.Builder.CreateTrunc(value, varType, "arg.unpromote");
1044 
1045   return CGF.Builder.CreateFPCast(value, varType, "arg.unpromote");
1046 }
1047 
1048 void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
1049                                          llvm::Function *Fn,
1050                                          const FunctionArgList &Args) {
1051   // If this is an implicit-return-zero function, go ahead and
1052   // initialize the return value.  TODO: it might be nice to have
1053   // a more general mechanism for this that didn't require synthesized
1054   // return statements.
1055   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(CurFuncDecl)) {
1056     if (FD->hasImplicitReturnZero()) {
1057       QualType RetTy = FD->getResultType().getUnqualifiedType();
1058       llvm::Type* LLVMTy = CGM.getTypes().ConvertType(RetTy);
1059       llvm::Constant* Zero = llvm::Constant::getNullValue(LLVMTy);
1060       Builder.CreateStore(Zero, ReturnValue);
1061     }
1062   }
1063 
1064   // FIXME: We no longer need the types from FunctionArgList; lift up and
1065   // simplify.
1066 
1067   // Emit allocs for param decls.  Give the LLVM Argument nodes names.
1068   llvm::Function::arg_iterator AI = Fn->arg_begin();
1069 
1070   // Name the struct return argument.
1071   if (CGM.ReturnTypeUsesSRet(FI)) {
1072     AI->setName("agg.result");
1073     AI->addAttr(llvm::Attribute::NoAlias);
1074     ++AI;
1075   }
1076 
1077   assert(FI.arg_size() == Args.size() &&
1078          "Mismatch between function signature & arguments.");
1079   unsigned ArgNo = 1;
1080   CGFunctionInfo::const_arg_iterator info_it = FI.arg_begin();
1081   for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end();
1082        i != e; ++i, ++info_it, ++ArgNo) {
1083     const VarDecl *Arg = *i;
1084     QualType Ty = info_it->type;
1085     const ABIArgInfo &ArgI = info_it->info;
1086 
1087     bool isPromoted =
1088       isa<ParmVarDecl>(Arg) && cast<ParmVarDecl>(Arg)->isKNRPromoted();
1089 
1090     switch (ArgI.getKind()) {
1091     case ABIArgInfo::Indirect: {
1092       llvm::Value *V = AI;
1093 
1094       if (hasAggregateLLVMType(Ty)) {
1095         // Aggregates and complex variables are accessed by reference.  All we
1096         // need to do is realign the value, if requested
1097         if (ArgI.getIndirectRealign()) {
1098           llvm::Value *AlignedTemp = CreateMemTemp(Ty, "coerce");
1099 
1100           // Copy from the incoming argument pointer to the temporary with the
1101           // appropriate alignment.
1102           //
1103           // FIXME: We should have a common utility for generating an aggregate
1104           // copy.
1105           llvm::Type *I8PtrTy = Builder.getInt8PtrTy();
1106           CharUnits Size = getContext().getTypeSizeInChars(Ty);
1107           llvm::Value *Dst = Builder.CreateBitCast(AlignedTemp, I8PtrTy);
1108           llvm::Value *Src = Builder.CreateBitCast(V, I8PtrTy);
1109           Builder.CreateMemCpy(Dst,
1110                                Src,
1111                                llvm::ConstantInt::get(IntPtrTy,
1112                                                       Size.getQuantity()),
1113                                ArgI.getIndirectAlign(),
1114                                false);
1115           V = AlignedTemp;
1116         }
1117       } else {
1118         // Load scalar value from indirect argument.
1119         CharUnits Alignment = getContext().getTypeAlignInChars(Ty);
1120         V = EmitLoadOfScalar(V, false, Alignment.getQuantity(), Ty);
1121 
1122         if (isPromoted)
1123           V = emitArgumentDemotion(*this, Arg, V);
1124       }
1125       EmitParmDecl(*Arg, V, ArgNo);
1126       break;
1127     }
1128 
1129     case ABIArgInfo::Extend:
1130     case ABIArgInfo::Direct: {
1131       // Skip the dummy padding argument.
1132       if (ArgI.getPaddingType())
1133         ++AI;
1134 
1135       // If we have the trivial case, handle it with no muss and fuss.
1136       if (!isa<llvm::StructType>(ArgI.getCoerceToType()) &&
1137           ArgI.getCoerceToType() == ConvertType(Ty) &&
1138           ArgI.getDirectOffset() == 0) {
1139         assert(AI != Fn->arg_end() && "Argument mismatch!");
1140         llvm::Value *V = AI;
1141 
1142         if (Arg->getType().isRestrictQualified())
1143           AI->addAttr(llvm::Attribute::NoAlias);
1144 
1145         // Ensure the argument is the correct type.
1146         if (V->getType() != ArgI.getCoerceToType())
1147           V = Builder.CreateBitCast(V, ArgI.getCoerceToType());
1148 
1149         if (isPromoted)
1150           V = emitArgumentDemotion(*this, Arg, V);
1151 
1152         EmitParmDecl(*Arg, V, ArgNo);
1153         break;
1154       }
1155 
1156       llvm::AllocaInst *Alloca = CreateMemTemp(Ty, Arg->getName());
1157 
1158       // The alignment we need to use is the max of the requested alignment for
1159       // the argument plus the alignment required by our access code below.
1160       unsigned AlignmentToUse =
1161         CGM.getTargetData().getABITypeAlignment(ArgI.getCoerceToType());
1162       AlignmentToUse = std::max(AlignmentToUse,
1163                         (unsigned)getContext().getDeclAlign(Arg).getQuantity());
1164 
1165       Alloca->setAlignment(AlignmentToUse);
1166       llvm::Value *V = Alloca;
1167       llvm::Value *Ptr = V;    // Pointer to store into.
1168 
1169       // If the value is offset in memory, apply the offset now.
1170       if (unsigned Offs = ArgI.getDirectOffset()) {
1171         Ptr = Builder.CreateBitCast(Ptr, Builder.getInt8PtrTy());
1172         Ptr = Builder.CreateConstGEP1_32(Ptr, Offs);
1173         Ptr = Builder.CreateBitCast(Ptr,
1174                           llvm::PointerType::getUnqual(ArgI.getCoerceToType()));
1175       }
1176 
1177       // If the coerce-to type is a first class aggregate, we flatten it and
1178       // pass the elements. Either way is semantically identical, but fast-isel
1179       // and the optimizer generally likes scalar values better than FCAs.
1180       llvm::StructType *STy = dyn_cast<llvm::StructType>(ArgI.getCoerceToType());
1181       if (STy && STy->getNumElements() > 1) {
1182         uint64_t SrcSize = CGM.getTargetData().getTypeAllocSize(STy);
1183         llvm::Type *DstTy =
1184           cast<llvm::PointerType>(Ptr->getType())->getElementType();
1185         uint64_t DstSize = CGM.getTargetData().getTypeAllocSize(DstTy);
1186 
1187         if (SrcSize <= DstSize) {
1188           Ptr = Builder.CreateBitCast(Ptr, llvm::PointerType::getUnqual(STy));
1189 
1190           for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
1191             assert(AI != Fn->arg_end() && "Argument mismatch!");
1192             AI->setName(Arg->getName() + ".coerce" + Twine(i));
1193             llvm::Value *EltPtr = Builder.CreateConstGEP2_32(Ptr, 0, i);
1194             Builder.CreateStore(AI++, EltPtr);
1195           }
1196         } else {
1197           llvm::AllocaInst *TempAlloca =
1198             CreateTempAlloca(ArgI.getCoerceToType(), "coerce");
1199           TempAlloca->setAlignment(AlignmentToUse);
1200           llvm::Value *TempV = TempAlloca;
1201 
1202           for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
1203             assert(AI != Fn->arg_end() && "Argument mismatch!");
1204             AI->setName(Arg->getName() + ".coerce" + Twine(i));
1205             llvm::Value *EltPtr = Builder.CreateConstGEP2_32(TempV, 0, i);
1206             Builder.CreateStore(AI++, EltPtr);
1207           }
1208 
1209           Builder.CreateMemCpy(Ptr, TempV, DstSize, AlignmentToUse);
1210         }
1211       } else {
1212         // Simple case, just do a coerced store of the argument into the alloca.
1213         assert(AI != Fn->arg_end() && "Argument mismatch!");
1214         AI->setName(Arg->getName() + ".coerce");
1215         CreateCoercedStore(AI++, Ptr, /*DestIsVolatile=*/false, *this);
1216       }
1217 
1218 
1219       // Match to what EmitParmDecl is expecting for this type.
1220       if (!CodeGenFunction::hasAggregateLLVMType(Ty)) {
1221         V = EmitLoadOfScalar(V, false, AlignmentToUse, Ty);
1222         if (isPromoted)
1223           V = emitArgumentDemotion(*this, Arg, V);
1224       }
1225       EmitParmDecl(*Arg, V, ArgNo);
1226       continue;  // Skip ++AI increment, already done.
1227     }
1228 
1229     case ABIArgInfo::Expand: {
1230       // If this structure was expanded into multiple arguments then
1231       // we need to create a temporary and reconstruct it from the
1232       // arguments.
1233       llvm::AllocaInst *Alloca = CreateMemTemp(Ty);
1234       CharUnits Align = getContext().getDeclAlign(Arg);
1235       Alloca->setAlignment(Align.getQuantity());
1236       LValue LV = MakeAddrLValue(Alloca, Ty, Align);
1237       llvm::Function::arg_iterator End = ExpandTypeFromArgs(Ty, LV, AI);
1238       EmitParmDecl(*Arg, Alloca, ArgNo);
1239 
1240       // Name the arguments used in expansion and increment AI.
1241       unsigned Index = 0;
1242       for (; AI != End; ++AI, ++Index)
1243         AI->setName(Arg->getName() + "." + Twine(Index));
1244       continue;
1245     }
1246 
1247     case ABIArgInfo::Ignore:
1248       // Initialize the local variable appropriately.
1249       if (hasAggregateLLVMType(Ty))
1250         EmitParmDecl(*Arg, CreateMemTemp(Ty), ArgNo);
1251       else
1252         EmitParmDecl(*Arg, llvm::UndefValue::get(ConvertType(Arg->getType())),
1253                      ArgNo);
1254 
1255       // Skip increment, no matching LLVM parameter.
1256       continue;
1257     }
1258 
1259     ++AI;
1260   }
1261   assert(AI == Fn->arg_end() && "Argument mismatch!");
1262 }
1263 
1264 static void eraseUnusedBitCasts(llvm::Instruction *insn) {
1265   while (insn->use_empty()) {
1266     llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(insn);
1267     if (!bitcast) return;
1268 
1269     // This is "safe" because we would have used a ConstantExpr otherwise.
1270     insn = cast<llvm::Instruction>(bitcast->getOperand(0));
1271     bitcast->eraseFromParent();
1272   }
1273 }
1274 
1275 /// Try to emit a fused autorelease of a return result.
1276 static llvm::Value *tryEmitFusedAutoreleaseOfResult(CodeGenFunction &CGF,
1277                                                     llvm::Value *result) {
1278   // We must be immediately followed the cast.
1279   llvm::BasicBlock *BB = CGF.Builder.GetInsertBlock();
1280   if (BB->empty()) return 0;
1281   if (&BB->back() != result) return 0;
1282 
1283   llvm::Type *resultType = result->getType();
1284 
1285   // result is in a BasicBlock and is therefore an Instruction.
1286   llvm::Instruction *generator = cast<llvm::Instruction>(result);
1287 
1288   SmallVector<llvm::Instruction*,4> insnsToKill;
1289 
1290   // Look for:
1291   //  %generator = bitcast %type1* %generator2 to %type2*
1292   while (llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(generator)) {
1293     // We would have emitted this as a constant if the operand weren't
1294     // an Instruction.
1295     generator = cast<llvm::Instruction>(bitcast->getOperand(0));
1296 
1297     // Require the generator to be immediately followed by the cast.
1298     if (generator->getNextNode() != bitcast)
1299       return 0;
1300 
1301     insnsToKill.push_back(bitcast);
1302   }
1303 
1304   // Look for:
1305   //   %generator = call i8* @objc_retain(i8* %originalResult)
1306   // or
1307   //   %generator = call i8* @objc_retainAutoreleasedReturnValue(i8* %originalResult)
1308   llvm::CallInst *call = dyn_cast<llvm::CallInst>(generator);
1309   if (!call) return 0;
1310 
1311   bool doRetainAutorelease;
1312 
1313   if (call->getCalledValue() == CGF.CGM.getARCEntrypoints().objc_retain) {
1314     doRetainAutorelease = true;
1315   } else if (call->getCalledValue() == CGF.CGM.getARCEntrypoints()
1316                                           .objc_retainAutoreleasedReturnValue) {
1317     doRetainAutorelease = false;
1318 
1319     // Look for an inline asm immediately preceding the call and kill it, too.
1320     llvm::Instruction *prev = call->getPrevNode();
1321     if (llvm::CallInst *asmCall = dyn_cast_or_null<llvm::CallInst>(prev))
1322       if (asmCall->getCalledValue()
1323             == CGF.CGM.getARCEntrypoints().retainAutoreleasedReturnValueMarker)
1324         insnsToKill.push_back(prev);
1325   } else {
1326     return 0;
1327   }
1328 
1329   result = call->getArgOperand(0);
1330   insnsToKill.push_back(call);
1331 
1332   // Keep killing bitcasts, for sanity.  Note that we no longer care
1333   // about precise ordering as long as there's exactly one use.
1334   while (llvm::BitCastInst *bitcast = dyn_cast<llvm::BitCastInst>(result)) {
1335     if (!bitcast->hasOneUse()) break;
1336     insnsToKill.push_back(bitcast);
1337     result = bitcast->getOperand(0);
1338   }
1339 
1340   // Delete all the unnecessary instructions, from latest to earliest.
1341   for (SmallVectorImpl<llvm::Instruction*>::iterator
1342          i = insnsToKill.begin(), e = insnsToKill.end(); i != e; ++i)
1343     (*i)->eraseFromParent();
1344 
1345   // Do the fused retain/autorelease if we were asked to.
1346   if (doRetainAutorelease)
1347     result = CGF.EmitARCRetainAutoreleaseReturnValue(result);
1348 
1349   // Cast back to the result type.
1350   return CGF.Builder.CreateBitCast(result, resultType);
1351 }
1352 
1353 /// If this is a +1 of the value of an immutable 'self', remove it.
1354 static llvm::Value *tryRemoveRetainOfSelf(CodeGenFunction &CGF,
1355                                           llvm::Value *result) {
1356   // This is only applicable to a method with an immutable 'self'.
1357   const ObjCMethodDecl *method = dyn_cast<ObjCMethodDecl>(CGF.CurCodeDecl);
1358   if (!method) return 0;
1359   const VarDecl *self = method->getSelfDecl();
1360   if (!self->getType().isConstQualified()) return 0;
1361 
1362   // Look for a retain call.
1363   llvm::CallInst *retainCall =
1364     dyn_cast<llvm::CallInst>(result->stripPointerCasts());
1365   if (!retainCall ||
1366       retainCall->getCalledValue() != CGF.CGM.getARCEntrypoints().objc_retain)
1367     return 0;
1368 
1369   // Look for an ordinary load of 'self'.
1370   llvm::Value *retainedValue = retainCall->getArgOperand(0);
1371   llvm::LoadInst *load =
1372     dyn_cast<llvm::LoadInst>(retainedValue->stripPointerCasts());
1373   if (!load || load->isAtomic() || load->isVolatile() ||
1374       load->getPointerOperand() != CGF.GetAddrOfLocalVar(self))
1375     return 0;
1376 
1377   // Okay!  Burn it all down.  This relies for correctness on the
1378   // assumption that the retain is emitted as part of the return and
1379   // that thereafter everything is used "linearly".
1380   llvm::Type *resultType = result->getType();
1381   eraseUnusedBitCasts(cast<llvm::Instruction>(result));
1382   assert(retainCall->use_empty());
1383   retainCall->eraseFromParent();
1384   eraseUnusedBitCasts(cast<llvm::Instruction>(retainedValue));
1385 
1386   return CGF.Builder.CreateBitCast(load, resultType);
1387 }
1388 
1389 /// Emit an ARC autorelease of the result of a function.
1390 ///
1391 /// \return the value to actually return from the function
1392 static llvm::Value *emitAutoreleaseOfResult(CodeGenFunction &CGF,
1393                                             llvm::Value *result) {
1394   // If we're returning 'self', kill the initial retain.  This is a
1395   // heuristic attempt to "encourage correctness" in the really unfortunate
1396   // case where we have a return of self during a dealloc and we desperately
1397   // need to avoid the possible autorelease.
1398   if (llvm::Value *self = tryRemoveRetainOfSelf(CGF, result))
1399     return self;
1400 
1401   // At -O0, try to emit a fused retain/autorelease.
1402   if (CGF.shouldUseFusedARCCalls())
1403     if (llvm::Value *fused = tryEmitFusedAutoreleaseOfResult(CGF, result))
1404       return fused;
1405 
1406   return CGF.EmitARCAutoreleaseReturnValue(result);
1407 }
1408 
1409 /// Heuristically search for a dominating store to the return-value slot.
1410 static llvm::StoreInst *findDominatingStoreToReturnValue(CodeGenFunction &CGF) {
1411   // If there are multiple uses of the return-value slot, just check
1412   // for something immediately preceding the IP.  Sometimes this can
1413   // happen with how we generate implicit-returns; it can also happen
1414   // with noreturn cleanups.
1415   if (!CGF.ReturnValue->hasOneUse()) {
1416     llvm::BasicBlock *IP = CGF.Builder.GetInsertBlock();
1417     if (IP->empty()) return 0;
1418     llvm::StoreInst *store = dyn_cast<llvm::StoreInst>(&IP->back());
1419     if (!store) return 0;
1420     if (store->getPointerOperand() != CGF.ReturnValue) return 0;
1421     assert(!store->isAtomic() && !store->isVolatile()); // see below
1422     return store;
1423   }
1424 
1425   llvm::StoreInst *store =
1426     dyn_cast<llvm::StoreInst>(CGF.ReturnValue->use_back());
1427   if (!store) return 0;
1428 
1429   // These aren't actually possible for non-coerced returns, and we
1430   // only care about non-coerced returns on this code path.
1431   assert(!store->isAtomic() && !store->isVolatile());
1432 
1433   // Now do a first-and-dirty dominance check: just walk up the
1434   // single-predecessors chain from the current insertion point.
1435   llvm::BasicBlock *StoreBB = store->getParent();
1436   llvm::BasicBlock *IP = CGF.Builder.GetInsertBlock();
1437   while (IP != StoreBB) {
1438     if (!(IP = IP->getSinglePredecessor()))
1439       return 0;
1440   }
1441 
1442   // Okay, the store's basic block dominates the insertion point; we
1443   // can do our thing.
1444   return store;
1445 }
1446 
1447 void CodeGenFunction::EmitFunctionEpilog(const CGFunctionInfo &FI) {
1448   // Functions with no result always return void.
1449   if (ReturnValue == 0) {
1450     Builder.CreateRetVoid();
1451     return;
1452   }
1453 
1454   llvm::DebugLoc RetDbgLoc;
1455   llvm::Value *RV = 0;
1456   QualType RetTy = FI.getReturnType();
1457   const ABIArgInfo &RetAI = FI.getReturnInfo();
1458 
1459   switch (RetAI.getKind()) {
1460   case ABIArgInfo::Indirect: {
1461     unsigned Alignment = getContext().getTypeAlignInChars(RetTy).getQuantity();
1462     if (RetTy->isAnyComplexType()) {
1463       ComplexPairTy RT = LoadComplexFromAddr(ReturnValue, false);
1464       StoreComplexToAddr(RT, CurFn->arg_begin(), false);
1465     } else if (CodeGenFunction::hasAggregateLLVMType(RetTy)) {
1466       // Do nothing; aggregrates get evaluated directly into the destination.
1467     } else {
1468       EmitStoreOfScalar(Builder.CreateLoad(ReturnValue), CurFn->arg_begin(),
1469                         false, Alignment, RetTy);
1470     }
1471     break;
1472   }
1473 
1474   case ABIArgInfo::Extend:
1475   case ABIArgInfo::Direct:
1476     if (RetAI.getCoerceToType() == ConvertType(RetTy) &&
1477         RetAI.getDirectOffset() == 0) {
1478       // The internal return value temp always will have pointer-to-return-type
1479       // type, just do a load.
1480 
1481       // If there is a dominating store to ReturnValue, we can elide
1482       // the load, zap the store, and usually zap the alloca.
1483       if (llvm::StoreInst *SI = findDominatingStoreToReturnValue(*this)) {
1484         // Get the stored value and nuke the now-dead store.
1485         RetDbgLoc = SI->getDebugLoc();
1486         RV = SI->getValueOperand();
1487         SI->eraseFromParent();
1488 
1489         // If that was the only use of the return value, nuke it as well now.
1490         if (ReturnValue->use_empty() && isa<llvm::AllocaInst>(ReturnValue)) {
1491           cast<llvm::AllocaInst>(ReturnValue)->eraseFromParent();
1492           ReturnValue = 0;
1493         }
1494 
1495       // Otherwise, we have to do a simple load.
1496       } else {
1497         RV = Builder.CreateLoad(ReturnValue);
1498       }
1499     } else {
1500       llvm::Value *V = ReturnValue;
1501       // If the value is offset in memory, apply the offset now.
1502       if (unsigned Offs = RetAI.getDirectOffset()) {
1503         V = Builder.CreateBitCast(V, Builder.getInt8PtrTy());
1504         V = Builder.CreateConstGEP1_32(V, Offs);
1505         V = Builder.CreateBitCast(V,
1506                          llvm::PointerType::getUnqual(RetAI.getCoerceToType()));
1507       }
1508 
1509       RV = CreateCoercedLoad(V, RetAI.getCoerceToType(), *this);
1510     }
1511 
1512     // In ARC, end functions that return a retainable type with a call
1513     // to objc_autoreleaseReturnValue.
1514     if (AutoreleaseResult) {
1515       assert(getLangOpts().ObjCAutoRefCount &&
1516              !FI.isReturnsRetained() &&
1517              RetTy->isObjCRetainableType());
1518       RV = emitAutoreleaseOfResult(*this, RV);
1519     }
1520 
1521     break;
1522 
1523   case ABIArgInfo::Ignore:
1524     break;
1525 
1526   case ABIArgInfo::Expand:
1527     llvm_unreachable("Invalid ABI kind for return argument");
1528   }
1529 
1530   llvm::Instruction *Ret = RV ? Builder.CreateRet(RV) : Builder.CreateRetVoid();
1531   if (!RetDbgLoc.isUnknown())
1532     Ret->setDebugLoc(RetDbgLoc);
1533 }
1534 
1535 void CodeGenFunction::EmitDelegateCallArg(CallArgList &args,
1536                                           const VarDecl *param) {
1537   // StartFunction converted the ABI-lowered parameter(s) into a
1538   // local alloca.  We need to turn that into an r-value suitable
1539   // for EmitCall.
1540   llvm::Value *local = GetAddrOfLocalVar(param);
1541 
1542   QualType type = param->getType();
1543 
1544   // For the most part, we just need to load the alloca, except:
1545   // 1) aggregate r-values are actually pointers to temporaries, and
1546   // 2) references to aggregates are pointers directly to the aggregate.
1547   // I don't know why references to non-aggregates are different here.
1548   if (const ReferenceType *ref = type->getAs<ReferenceType>()) {
1549     if (hasAggregateLLVMType(ref->getPointeeType()))
1550       return args.add(RValue::getAggregate(local), type);
1551 
1552     // Locals which are references to scalars are represented
1553     // with allocas holding the pointer.
1554     return args.add(RValue::get(Builder.CreateLoad(local)), type);
1555   }
1556 
1557   if (type->isAnyComplexType()) {
1558     ComplexPairTy complex = LoadComplexFromAddr(local, /*volatile*/ false);
1559     return args.add(RValue::getComplex(complex), type);
1560   }
1561 
1562   if (hasAggregateLLVMType(type))
1563     return args.add(RValue::getAggregate(local), type);
1564 
1565   unsigned alignment = getContext().getDeclAlign(param).getQuantity();
1566   llvm::Value *value = EmitLoadOfScalar(local, false, alignment, type);
1567   return args.add(RValue::get(value), type);
1568 }
1569 
1570 static bool isProvablyNull(llvm::Value *addr) {
1571   return isa<llvm::ConstantPointerNull>(addr);
1572 }
1573 
1574 static bool isProvablyNonNull(llvm::Value *addr) {
1575   return isa<llvm::AllocaInst>(addr);
1576 }
1577 
1578 /// Emit the actual writing-back of a writeback.
1579 static void emitWriteback(CodeGenFunction &CGF,
1580                           const CallArgList::Writeback &writeback) {
1581   llvm::Value *srcAddr = writeback.Address;
1582   assert(!isProvablyNull(srcAddr) &&
1583          "shouldn't have writeback for provably null argument");
1584 
1585   llvm::BasicBlock *contBB = 0;
1586 
1587   // If the argument wasn't provably non-null, we need to null check
1588   // before doing the store.
1589   bool provablyNonNull = isProvablyNonNull(srcAddr);
1590   if (!provablyNonNull) {
1591     llvm::BasicBlock *writebackBB = CGF.createBasicBlock("icr.writeback");
1592     contBB = CGF.createBasicBlock("icr.done");
1593 
1594     llvm::Value *isNull = CGF.Builder.CreateIsNull(srcAddr, "icr.isnull");
1595     CGF.Builder.CreateCondBr(isNull, contBB, writebackBB);
1596     CGF.EmitBlock(writebackBB);
1597   }
1598 
1599   // Load the value to writeback.
1600   llvm::Value *value = CGF.Builder.CreateLoad(writeback.Temporary);
1601 
1602   // Cast it back, in case we're writing an id to a Foo* or something.
1603   value = CGF.Builder.CreateBitCast(value,
1604                cast<llvm::PointerType>(srcAddr->getType())->getElementType(),
1605                             "icr.writeback-cast");
1606 
1607   // Perform the writeback.
1608   QualType srcAddrType = writeback.AddressType;
1609   CGF.EmitStoreThroughLValue(RValue::get(value),
1610                              CGF.MakeAddrLValue(srcAddr, srcAddrType));
1611 
1612   // Jump to the continuation block.
1613   if (!provablyNonNull)
1614     CGF.EmitBlock(contBB);
1615 }
1616 
1617 static void emitWritebacks(CodeGenFunction &CGF,
1618                            const CallArgList &args) {
1619   for (CallArgList::writeback_iterator
1620          i = args.writeback_begin(), e = args.writeback_end(); i != e; ++i)
1621     emitWriteback(CGF, *i);
1622 }
1623 
1624 /// Emit an argument that's being passed call-by-writeback.  That is,
1625 /// we are passing the address of
1626 static void emitWritebackArg(CodeGenFunction &CGF, CallArgList &args,
1627                              const ObjCIndirectCopyRestoreExpr *CRE) {
1628   llvm::Value *srcAddr = CGF.EmitScalarExpr(CRE->getSubExpr());
1629 
1630   // The dest and src types don't necessarily match in LLVM terms
1631   // because of the crazy ObjC compatibility rules.
1632 
1633   llvm::PointerType *destType =
1634     cast<llvm::PointerType>(CGF.ConvertType(CRE->getType()));
1635 
1636   // If the address is a constant null, just pass the appropriate null.
1637   if (isProvablyNull(srcAddr)) {
1638     args.add(RValue::get(llvm::ConstantPointerNull::get(destType)),
1639              CRE->getType());
1640     return;
1641   }
1642 
1643   QualType srcAddrType =
1644     CRE->getSubExpr()->getType()->castAs<PointerType>()->getPointeeType();
1645 
1646   // Create the temporary.
1647   llvm::Value *temp = CGF.CreateTempAlloca(destType->getElementType(),
1648                                            "icr.temp");
1649 
1650   // Zero-initialize it if we're not doing a copy-initialization.
1651   bool shouldCopy = CRE->shouldCopy();
1652   if (!shouldCopy) {
1653     llvm::Value *null =
1654       llvm::ConstantPointerNull::get(
1655         cast<llvm::PointerType>(destType->getElementType()));
1656     CGF.Builder.CreateStore(null, temp);
1657   }
1658 
1659   llvm::BasicBlock *contBB = 0;
1660 
1661   // If the address is *not* known to be non-null, we need to switch.
1662   llvm::Value *finalArgument;
1663 
1664   bool provablyNonNull = isProvablyNonNull(srcAddr);
1665   if (provablyNonNull) {
1666     finalArgument = temp;
1667   } else {
1668     llvm::Value *isNull = CGF.Builder.CreateIsNull(srcAddr, "icr.isnull");
1669 
1670     finalArgument = CGF.Builder.CreateSelect(isNull,
1671                                    llvm::ConstantPointerNull::get(destType),
1672                                              temp, "icr.argument");
1673 
1674     // If we need to copy, then the load has to be conditional, which
1675     // means we need control flow.
1676     if (shouldCopy) {
1677       contBB = CGF.createBasicBlock("icr.cont");
1678       llvm::BasicBlock *copyBB = CGF.createBasicBlock("icr.copy");
1679       CGF.Builder.CreateCondBr(isNull, contBB, copyBB);
1680       CGF.EmitBlock(copyBB);
1681     }
1682   }
1683 
1684   // Perform a copy if necessary.
1685   if (shouldCopy) {
1686     LValue srcLV = CGF.MakeAddrLValue(srcAddr, srcAddrType);
1687     RValue srcRV = CGF.EmitLoadOfLValue(srcLV);
1688     assert(srcRV.isScalar());
1689 
1690     llvm::Value *src = srcRV.getScalarVal();
1691     src = CGF.Builder.CreateBitCast(src, destType->getElementType(),
1692                                     "icr.cast");
1693 
1694     // Use an ordinary store, not a store-to-lvalue.
1695     CGF.Builder.CreateStore(src, temp);
1696   }
1697 
1698   // Finish the control flow if we needed it.
1699   if (shouldCopy && !provablyNonNull)
1700     CGF.EmitBlock(contBB);
1701 
1702   args.addWriteback(srcAddr, srcAddrType, temp);
1703   args.add(RValue::get(finalArgument), CRE->getType());
1704 }
1705 
1706 void CodeGenFunction::EmitCallArg(CallArgList &args, const Expr *E,
1707                                   QualType type) {
1708   if (const ObjCIndirectCopyRestoreExpr *CRE
1709         = dyn_cast<ObjCIndirectCopyRestoreExpr>(E)) {
1710     assert(getContext().getLangOpts().ObjCAutoRefCount);
1711     assert(getContext().hasSameType(E->getType(), type));
1712     return emitWritebackArg(*this, args, CRE);
1713   }
1714 
1715   assert(type->isReferenceType() == E->isGLValue() &&
1716          "reference binding to unmaterialized r-value!");
1717 
1718   if (E->isGLValue()) {
1719     assert(E->getObjectKind() == OK_Ordinary);
1720     return args.add(EmitReferenceBindingToExpr(E, /*InitializedDecl=*/0),
1721                     type);
1722   }
1723 
1724   if (hasAggregateLLVMType(type) && !E->getType()->isAnyComplexType() &&
1725       isa<ImplicitCastExpr>(E) &&
1726       cast<CastExpr>(E)->getCastKind() == CK_LValueToRValue) {
1727     LValue L = EmitLValue(cast<CastExpr>(E)->getSubExpr());
1728     assert(L.isSimple());
1729     args.add(L.asAggregateRValue(), type, /*NeedsCopy*/true);
1730     return;
1731   }
1732 
1733   args.add(EmitAnyExprToTemp(E), type);
1734 }
1735 
1736 // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
1737 // optimizer it can aggressively ignore unwind edges.
1738 void
1739 CodeGenFunction::AddObjCARCExceptionMetadata(llvm::Instruction *Inst) {
1740   if (CGM.getCodeGenOpts().OptimizationLevel != 0 &&
1741       !CGM.getCodeGenOpts().ObjCAutoRefCountExceptions)
1742     Inst->setMetadata("clang.arc.no_objc_arc_exceptions",
1743                       CGM.getNoObjCARCExceptionsMetadata());
1744 }
1745 
1746 /// Emits a call or invoke instruction to the given function, depending
1747 /// on the current state of the EH stack.
1748 llvm::CallSite
1749 CodeGenFunction::EmitCallOrInvoke(llvm::Value *Callee,
1750                                   ArrayRef<llvm::Value *> Args,
1751                                   const Twine &Name) {
1752   llvm::BasicBlock *InvokeDest = getInvokeDest();
1753 
1754   llvm::Instruction *Inst;
1755   if (!InvokeDest)
1756     Inst = Builder.CreateCall(Callee, Args, Name);
1757   else {
1758     llvm::BasicBlock *ContBB = createBasicBlock("invoke.cont");
1759     Inst = Builder.CreateInvoke(Callee, ContBB, InvokeDest, Args, Name);
1760     EmitBlock(ContBB);
1761   }
1762 
1763   // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
1764   // optimizer it can aggressively ignore unwind edges.
1765   if (CGM.getLangOpts().ObjCAutoRefCount)
1766     AddObjCARCExceptionMetadata(Inst);
1767 
1768   return Inst;
1769 }
1770 
1771 llvm::CallSite
1772 CodeGenFunction::EmitCallOrInvoke(llvm::Value *Callee,
1773                                   const Twine &Name) {
1774   return EmitCallOrInvoke(Callee, ArrayRef<llvm::Value *>(), Name);
1775 }
1776 
1777 static void checkArgMatches(llvm::Value *Elt, unsigned &ArgNo,
1778                             llvm::FunctionType *FTy) {
1779   if (ArgNo < FTy->getNumParams())
1780     assert(Elt->getType() == FTy->getParamType(ArgNo));
1781   else
1782     assert(FTy->isVarArg());
1783   ++ArgNo;
1784 }
1785 
1786 void CodeGenFunction::ExpandTypeToArgs(QualType Ty, RValue RV,
1787                                        SmallVector<llvm::Value*,16> &Args,
1788                                        llvm::FunctionType *IRFuncTy) {
1789   if (const ConstantArrayType *AT = getContext().getAsConstantArrayType(Ty)) {
1790     unsigned NumElts = AT->getSize().getZExtValue();
1791     QualType EltTy = AT->getElementType();
1792     llvm::Value *Addr = RV.getAggregateAddr();
1793     for (unsigned Elt = 0; Elt < NumElts; ++Elt) {
1794       llvm::Value *EltAddr = Builder.CreateConstGEP2_32(Addr, 0, Elt);
1795       LValue LV = MakeAddrLValue(EltAddr, EltTy);
1796       RValue EltRV;
1797       if (EltTy->isAnyComplexType())
1798         // FIXME: Volatile?
1799         EltRV = RValue::getComplex(LoadComplexFromAddr(LV.getAddress(), false));
1800       else if (CodeGenFunction::hasAggregateLLVMType(EltTy))
1801         EltRV = LV.asAggregateRValue();
1802       else
1803         EltRV = EmitLoadOfLValue(LV);
1804       ExpandTypeToArgs(EltTy, EltRV, Args, IRFuncTy);
1805     }
1806   } else if (const RecordType *RT = Ty->getAs<RecordType>()) {
1807     RecordDecl *RD = RT->getDecl();
1808     assert(RV.isAggregate() && "Unexpected rvalue during struct expansion");
1809     LValue LV = MakeAddrLValue(RV.getAggregateAddr(), Ty);
1810 
1811     if (RD->isUnion()) {
1812       const FieldDecl *LargestFD = 0;
1813       CharUnits UnionSize = CharUnits::Zero();
1814 
1815       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
1816            i != e; ++i) {
1817         const FieldDecl *FD = *i;
1818         assert(!FD->isBitField() &&
1819                "Cannot expand structure with bit-field members.");
1820         CharUnits FieldSize = getContext().getTypeSizeInChars(FD->getType());
1821         if (UnionSize < FieldSize) {
1822           UnionSize = FieldSize;
1823           LargestFD = FD;
1824         }
1825       }
1826       if (LargestFD) {
1827         RValue FldRV = EmitRValueForField(LV, LargestFD);
1828         ExpandTypeToArgs(LargestFD->getType(), FldRV, Args, IRFuncTy);
1829       }
1830     } else {
1831       for (RecordDecl::field_iterator i = RD->field_begin(), e = RD->field_end();
1832            i != e; ++i) {
1833         FieldDecl *FD = *i;
1834 
1835         RValue FldRV = EmitRValueForField(LV, FD);
1836         ExpandTypeToArgs(FD->getType(), FldRV, Args, IRFuncTy);
1837       }
1838     }
1839   } else if (Ty->isAnyComplexType()) {
1840     ComplexPairTy CV = RV.getComplexVal();
1841     Args.push_back(CV.first);
1842     Args.push_back(CV.second);
1843   } else {
1844     assert(RV.isScalar() &&
1845            "Unexpected non-scalar rvalue during struct expansion.");
1846 
1847     // Insert a bitcast as needed.
1848     llvm::Value *V = RV.getScalarVal();
1849     if (Args.size() < IRFuncTy->getNumParams() &&
1850         V->getType() != IRFuncTy->getParamType(Args.size()))
1851       V = Builder.CreateBitCast(V, IRFuncTy->getParamType(Args.size()));
1852 
1853     Args.push_back(V);
1854   }
1855 }
1856 
1857 
1858 RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
1859                                  llvm::Value *Callee,
1860                                  ReturnValueSlot ReturnValue,
1861                                  const CallArgList &CallArgs,
1862                                  const Decl *TargetDecl,
1863                                  llvm::Instruction **callOrInvoke) {
1864   // FIXME: We no longer need the types from CallArgs; lift up and simplify.
1865   SmallVector<llvm::Value*, 16> Args;
1866 
1867   // Handle struct-return functions by passing a pointer to the
1868   // location that we would like to return into.
1869   QualType RetTy = CallInfo.getReturnType();
1870   const ABIArgInfo &RetAI = CallInfo.getReturnInfo();
1871 
1872   // IRArgNo - Keep track of the argument number in the callee we're looking at.
1873   unsigned IRArgNo = 0;
1874   llvm::FunctionType *IRFuncTy =
1875     cast<llvm::FunctionType>(
1876                   cast<llvm::PointerType>(Callee->getType())->getElementType());
1877 
1878   // If the call returns a temporary with struct return, create a temporary
1879   // alloca to hold the result, unless one is given to us.
1880   if (CGM.ReturnTypeUsesSRet(CallInfo)) {
1881     llvm::Value *Value = ReturnValue.getValue();
1882     if (!Value)
1883       Value = CreateMemTemp(RetTy);
1884     Args.push_back(Value);
1885     checkArgMatches(Value, IRArgNo, IRFuncTy);
1886   }
1887 
1888   assert(CallInfo.arg_size() == CallArgs.size() &&
1889          "Mismatch between function signature & arguments.");
1890   CGFunctionInfo::const_arg_iterator info_it = CallInfo.arg_begin();
1891   for (CallArgList::const_iterator I = CallArgs.begin(), E = CallArgs.end();
1892        I != E; ++I, ++info_it) {
1893     const ABIArgInfo &ArgInfo = info_it->info;
1894     RValue RV = I->RV;
1895 
1896     unsigned TypeAlign =
1897       getContext().getTypeAlignInChars(I->Ty).getQuantity();
1898     switch (ArgInfo.getKind()) {
1899     case ABIArgInfo::Indirect: {
1900       if (RV.isScalar() || RV.isComplex()) {
1901         // Make a temporary alloca to pass the argument.
1902         llvm::AllocaInst *AI = CreateMemTemp(I->Ty);
1903         if (ArgInfo.getIndirectAlign() > AI->getAlignment())
1904           AI->setAlignment(ArgInfo.getIndirectAlign());
1905         Args.push_back(AI);
1906 
1907         if (RV.isScalar())
1908           EmitStoreOfScalar(RV.getScalarVal(), Args.back(), false,
1909                             TypeAlign, I->Ty);
1910         else
1911           StoreComplexToAddr(RV.getComplexVal(), Args.back(), false);
1912 
1913         // Validate argument match.
1914         checkArgMatches(AI, IRArgNo, IRFuncTy);
1915       } else {
1916         // We want to avoid creating an unnecessary temporary+copy here;
1917         // however, we need one in two cases:
1918         // 1. If the argument is not byval, and we are required to copy the
1919         //    source.  (This case doesn't occur on any common architecture.)
1920         // 2. If the argument is byval, RV is not sufficiently aligned, and
1921         //    we cannot force it to be sufficiently aligned.
1922         llvm::Value *Addr = RV.getAggregateAddr();
1923         unsigned Align = ArgInfo.getIndirectAlign();
1924         const llvm::TargetData *TD = &CGM.getTargetData();
1925         if ((!ArgInfo.getIndirectByVal() && I->NeedsCopy) ||
1926             (ArgInfo.getIndirectByVal() && TypeAlign < Align &&
1927              llvm::getOrEnforceKnownAlignment(Addr, Align, TD) < Align)) {
1928           // Create an aligned temporary, and copy to it.
1929           llvm::AllocaInst *AI = CreateMemTemp(I->Ty);
1930           if (Align > AI->getAlignment())
1931             AI->setAlignment(Align);
1932           Args.push_back(AI);
1933           EmitAggregateCopy(AI, Addr, I->Ty, RV.isVolatileQualified());
1934 
1935           // Validate argument match.
1936           checkArgMatches(AI, IRArgNo, IRFuncTy);
1937         } else {
1938           // Skip the extra memcpy call.
1939           Args.push_back(Addr);
1940 
1941           // Validate argument match.
1942           checkArgMatches(Addr, IRArgNo, IRFuncTy);
1943         }
1944       }
1945       break;
1946     }
1947 
1948     case ABIArgInfo::Ignore:
1949       break;
1950 
1951     case ABIArgInfo::Extend:
1952     case ABIArgInfo::Direct: {
1953       // Insert a padding argument to ensure proper alignment.
1954       if (llvm::Type *PaddingType = ArgInfo.getPaddingType()) {
1955         Args.push_back(llvm::UndefValue::get(PaddingType));
1956         ++IRArgNo;
1957       }
1958 
1959       if (!isa<llvm::StructType>(ArgInfo.getCoerceToType()) &&
1960           ArgInfo.getCoerceToType() == ConvertType(info_it->type) &&
1961           ArgInfo.getDirectOffset() == 0) {
1962         llvm::Value *V;
1963         if (RV.isScalar())
1964           V = RV.getScalarVal();
1965         else
1966           V = Builder.CreateLoad(RV.getAggregateAddr());
1967 
1968         // If the argument doesn't match, perform a bitcast to coerce it.  This
1969         // can happen due to trivial type mismatches.
1970         if (IRArgNo < IRFuncTy->getNumParams() &&
1971             V->getType() != IRFuncTy->getParamType(IRArgNo))
1972           V = Builder.CreateBitCast(V, IRFuncTy->getParamType(IRArgNo));
1973         Args.push_back(V);
1974 
1975         checkArgMatches(V, IRArgNo, IRFuncTy);
1976         break;
1977       }
1978 
1979       // FIXME: Avoid the conversion through memory if possible.
1980       llvm::Value *SrcPtr;
1981       if (RV.isScalar()) {
1982         SrcPtr = CreateMemTemp(I->Ty, "coerce");
1983         EmitStoreOfScalar(RV.getScalarVal(), SrcPtr, false, TypeAlign, I->Ty);
1984       } else if (RV.isComplex()) {
1985         SrcPtr = CreateMemTemp(I->Ty, "coerce");
1986         StoreComplexToAddr(RV.getComplexVal(), SrcPtr, false);
1987       } else
1988         SrcPtr = RV.getAggregateAddr();
1989 
1990       // If the value is offset in memory, apply the offset now.
1991       if (unsigned Offs = ArgInfo.getDirectOffset()) {
1992         SrcPtr = Builder.CreateBitCast(SrcPtr, Builder.getInt8PtrTy());
1993         SrcPtr = Builder.CreateConstGEP1_32(SrcPtr, Offs);
1994         SrcPtr = Builder.CreateBitCast(SrcPtr,
1995                        llvm::PointerType::getUnqual(ArgInfo.getCoerceToType()));
1996 
1997       }
1998 
1999       // If the coerce-to type is a first class aggregate, we flatten it and
2000       // pass the elements. Either way is semantically identical, but fast-isel
2001       // and the optimizer generally likes scalar values better than FCAs.
2002       if (llvm::StructType *STy =
2003             dyn_cast<llvm::StructType>(ArgInfo.getCoerceToType())) {
2004         SrcPtr = Builder.CreateBitCast(SrcPtr,
2005                                        llvm::PointerType::getUnqual(STy));
2006         for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
2007           llvm::Value *EltPtr = Builder.CreateConstGEP2_32(SrcPtr, 0, i);
2008           llvm::LoadInst *LI = Builder.CreateLoad(EltPtr);
2009           // We don't know what we're loading from.
2010           LI->setAlignment(1);
2011           Args.push_back(LI);
2012 
2013           // Validate argument match.
2014           checkArgMatches(LI, IRArgNo, IRFuncTy);
2015         }
2016       } else {
2017         // In the simple case, just pass the coerced loaded value.
2018         Args.push_back(CreateCoercedLoad(SrcPtr, ArgInfo.getCoerceToType(),
2019                                          *this));
2020 
2021         // Validate argument match.
2022         checkArgMatches(Args.back(), IRArgNo, IRFuncTy);
2023       }
2024 
2025       break;
2026     }
2027 
2028     case ABIArgInfo::Expand:
2029       ExpandTypeToArgs(I->Ty, RV, Args, IRFuncTy);
2030       IRArgNo = Args.size();
2031       break;
2032     }
2033   }
2034 
2035   // If the callee is a bitcast of a function to a varargs pointer to function
2036   // type, check to see if we can remove the bitcast.  This handles some cases
2037   // with unprototyped functions.
2038   if (llvm::ConstantExpr *CE = dyn_cast<llvm::ConstantExpr>(Callee))
2039     if (llvm::Function *CalleeF = dyn_cast<llvm::Function>(CE->getOperand(0))) {
2040       llvm::PointerType *CurPT=cast<llvm::PointerType>(Callee->getType());
2041       llvm::FunctionType *CurFT =
2042         cast<llvm::FunctionType>(CurPT->getElementType());
2043       llvm::FunctionType *ActualFT = CalleeF->getFunctionType();
2044 
2045       if (CE->getOpcode() == llvm::Instruction::BitCast &&
2046           ActualFT->getReturnType() == CurFT->getReturnType() &&
2047           ActualFT->getNumParams() == CurFT->getNumParams() &&
2048           ActualFT->getNumParams() == Args.size() &&
2049           (CurFT->isVarArg() || !ActualFT->isVarArg())) {
2050         bool ArgsMatch = true;
2051         for (unsigned i = 0, e = ActualFT->getNumParams(); i != e; ++i)
2052           if (ActualFT->getParamType(i) != CurFT->getParamType(i)) {
2053             ArgsMatch = false;
2054             break;
2055           }
2056 
2057         // Strip the cast if we can get away with it.  This is a nice cleanup,
2058         // but also allows us to inline the function at -O0 if it is marked
2059         // always_inline.
2060         if (ArgsMatch)
2061           Callee = CalleeF;
2062       }
2063     }
2064 
2065   unsigned CallingConv;
2066   CodeGen::AttributeListType AttributeList;
2067   CGM.ConstructAttributeList(CallInfo, TargetDecl, AttributeList, CallingConv);
2068   llvm::AttrListPtr Attrs = llvm::AttrListPtr::get(AttributeList);
2069 
2070   llvm::BasicBlock *InvokeDest = 0;
2071   if (!(Attrs.getFnAttributes() & llvm::Attribute::NoUnwind))
2072     InvokeDest = getInvokeDest();
2073 
2074   llvm::CallSite CS;
2075   if (!InvokeDest) {
2076     CS = Builder.CreateCall(Callee, Args);
2077   } else {
2078     llvm::BasicBlock *Cont = createBasicBlock("invoke.cont");
2079     CS = Builder.CreateInvoke(Callee, Cont, InvokeDest, Args);
2080     EmitBlock(Cont);
2081   }
2082   if (callOrInvoke)
2083     *callOrInvoke = CS.getInstruction();
2084 
2085   CS.setAttributes(Attrs);
2086   CS.setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
2087 
2088   // add metadata for __attribute__((alloc_size(foo)))
2089   if (TargetDecl) {
2090     if (const AllocSizeAttr* Attr = TargetDecl->getAttr<AllocSizeAttr>()) {
2091       SmallVector<llvm::Value*, 4> Args;
2092       llvm::IntegerType *Ty = llvm::IntegerType::getInt32Ty(getLLVMContext());
2093       bool isMethod = false;
2094       if (const CXXMethodDecl *MDecl = dyn_cast<CXXMethodDecl>(TargetDecl))
2095         isMethod = MDecl->isInstance();
2096 
2097       for (AllocSizeAttr::args_iterator I = Attr->args_begin(),
2098            E = Attr->args_end(); I != E; ++I) {
2099         Args.push_back(llvm::ConstantInt::get(Ty, *I + isMethod));
2100       }
2101 
2102       llvm::MDNode *MD = llvm::MDNode::get(getLLVMContext(), Args);
2103       CS.getInstruction()->setMetadata("alloc_size", MD);
2104     }
2105   }
2106 
2107   // In ObjC ARC mode with no ObjC ARC exception safety, tell the ARC
2108   // optimizer it can aggressively ignore unwind edges.
2109   if (CGM.getLangOpts().ObjCAutoRefCount)
2110     AddObjCARCExceptionMetadata(CS.getInstruction());
2111 
2112   // If the call doesn't return, finish the basic block and clear the
2113   // insertion point; this allows the rest of IRgen to discard
2114   // unreachable code.
2115   if (CS.doesNotReturn()) {
2116     Builder.CreateUnreachable();
2117     Builder.ClearInsertionPoint();
2118 
2119     // FIXME: For now, emit a dummy basic block because expr emitters in
2120     // generally are not ready to handle emitting expressions at unreachable
2121     // points.
2122     EnsureInsertPoint();
2123 
2124     // Return a reasonable RValue.
2125     return GetUndefRValue(RetTy);
2126   }
2127 
2128   llvm::Instruction *CI = CS.getInstruction();
2129   if (Builder.isNamePreserving() && !CI->getType()->isVoidTy())
2130     CI->setName("call");
2131 
2132   // Emit any writebacks immediately.  Arguably this should happen
2133   // after any return-value munging.
2134   if (CallArgs.hasWritebacks())
2135     emitWritebacks(*this, CallArgs);
2136 
2137   switch (RetAI.getKind()) {
2138   case ABIArgInfo::Indirect: {
2139     unsigned Alignment = getContext().getTypeAlignInChars(RetTy).getQuantity();
2140     if (RetTy->isAnyComplexType())
2141       return RValue::getComplex(LoadComplexFromAddr(Args[0], false));
2142     if (CodeGenFunction::hasAggregateLLVMType(RetTy))
2143       return RValue::getAggregate(Args[0]);
2144     return RValue::get(EmitLoadOfScalar(Args[0], false, Alignment, RetTy));
2145   }
2146 
2147   case ABIArgInfo::Ignore:
2148     // If we are ignoring an argument that had a result, make sure to
2149     // construct the appropriate return value for our caller.
2150     return GetUndefRValue(RetTy);
2151 
2152   case ABIArgInfo::Extend:
2153   case ABIArgInfo::Direct: {
2154     llvm::Type *RetIRTy = ConvertType(RetTy);
2155     if (RetAI.getCoerceToType() == RetIRTy && RetAI.getDirectOffset() == 0) {
2156       if (RetTy->isAnyComplexType()) {
2157         llvm::Value *Real = Builder.CreateExtractValue(CI, 0);
2158         llvm::Value *Imag = Builder.CreateExtractValue(CI, 1);
2159         return RValue::getComplex(std::make_pair(Real, Imag));
2160       }
2161       if (CodeGenFunction::hasAggregateLLVMType(RetTy)) {
2162         llvm::Value *DestPtr = ReturnValue.getValue();
2163         bool DestIsVolatile = ReturnValue.isVolatile();
2164 
2165         if (!DestPtr) {
2166           DestPtr = CreateMemTemp(RetTy, "agg.tmp");
2167           DestIsVolatile = false;
2168         }
2169         BuildAggStore(*this, CI, DestPtr, DestIsVolatile, false);
2170         return RValue::getAggregate(DestPtr);
2171       }
2172 
2173       // If the argument doesn't match, perform a bitcast to coerce it.  This
2174       // can happen due to trivial type mismatches.
2175       llvm::Value *V = CI;
2176       if (V->getType() != RetIRTy)
2177         V = Builder.CreateBitCast(V, RetIRTy);
2178       return RValue::get(V);
2179     }
2180 
2181     llvm::Value *DestPtr = ReturnValue.getValue();
2182     bool DestIsVolatile = ReturnValue.isVolatile();
2183 
2184     if (!DestPtr) {
2185       DestPtr = CreateMemTemp(RetTy, "coerce");
2186       DestIsVolatile = false;
2187     }
2188 
2189     // If the value is offset in memory, apply the offset now.
2190     llvm::Value *StorePtr = DestPtr;
2191     if (unsigned Offs = RetAI.getDirectOffset()) {
2192       StorePtr = Builder.CreateBitCast(StorePtr, Builder.getInt8PtrTy());
2193       StorePtr = Builder.CreateConstGEP1_32(StorePtr, Offs);
2194       StorePtr = Builder.CreateBitCast(StorePtr,
2195                          llvm::PointerType::getUnqual(RetAI.getCoerceToType()));
2196     }
2197     CreateCoercedStore(CI, StorePtr, DestIsVolatile, *this);
2198 
2199     unsigned Alignment = getContext().getTypeAlignInChars(RetTy).getQuantity();
2200     if (RetTy->isAnyComplexType())
2201       return RValue::getComplex(LoadComplexFromAddr(DestPtr, false));
2202     if (CodeGenFunction::hasAggregateLLVMType(RetTy))
2203       return RValue::getAggregate(DestPtr);
2204     return RValue::get(EmitLoadOfScalar(DestPtr, false, Alignment, RetTy));
2205   }
2206 
2207   case ABIArgInfo::Expand:
2208     llvm_unreachable("Invalid ABI kind for return argument");
2209   }
2210 
2211   llvm_unreachable("Unhandled ABIArgInfo::Kind");
2212 }
2213 
2214 /* VarArg handling */
2215 
2216 llvm::Value *CodeGenFunction::EmitVAArg(llvm::Value *VAListAddr, QualType Ty) {
2217   return CGM.getTypes().getABIInfo().EmitVAArg(VAListAddr, Ty, *this);
2218 }
2219