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