1 //===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===//
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 // This contains code to emit Expr nodes as LLVM code.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "CodeGenFunction.h"
15 #include "CodeGenModule.h"
16 #include "CGCall.h"
17 #include "CGCXXABI.h"
18 #include "CGDebugInfo.h"
19 #include "CGRecordLayout.h"
20 #include "CGObjCRuntime.h"
21 #include "TargetInfo.h"
22 #include "clang/AST/ASTContext.h"
23 #include "clang/AST/DeclObjC.h"
24 #include "clang/Frontend/CodeGenOptions.h"
25 #include "llvm/Intrinsics.h"
26 #include "llvm/LLVMContext.h"
27 #include "llvm/Target/TargetData.h"
28 using namespace clang;
29 using namespace CodeGen;
30 
31 //===--------------------------------------------------------------------===//
32 //                        Miscellaneous Helper Methods
33 //===--------------------------------------------------------------------===//
34 
35 llvm::Value *CodeGenFunction::EmitCastToVoidPtr(llvm::Value *value) {
36   unsigned addressSpace =
37     cast<llvm::PointerType>(value->getType())->getAddressSpace();
38 
39   llvm::PointerType *destType = Int8PtrTy;
40   if (addressSpace)
41     destType = llvm::Type::getInt8PtrTy(getLLVMContext(), addressSpace);
42 
43   if (value->getType() == destType) return value;
44   return Builder.CreateBitCast(value, destType);
45 }
46 
47 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
48 /// block.
49 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(llvm::Type *Ty,
50                                                     const Twine &Name) {
51   if (!Builder.isNamePreserving())
52     return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt);
53   return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt);
54 }
55 
56 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var,
57                                      llvm::Value *Init) {
58   llvm::StoreInst *Store = new llvm::StoreInst(Init, Var);
59   llvm::BasicBlock *Block = AllocaInsertPt->getParent();
60   Block->getInstList().insertAfter(&*AllocaInsertPt, Store);
61 }
62 
63 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty,
64                                                 const Twine &Name) {
65   llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name);
66   // FIXME: Should we prefer the preferred type alignment here?
67   CharUnits Align = getContext().getTypeAlignInChars(Ty);
68   Alloc->setAlignment(Align.getQuantity());
69   return Alloc;
70 }
71 
72 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty,
73                                                  const Twine &Name) {
74   llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name);
75   // FIXME: Should we prefer the preferred type alignment here?
76   CharUnits Align = getContext().getTypeAlignInChars(Ty);
77   Alloc->setAlignment(Align.getQuantity());
78   return Alloc;
79 }
80 
81 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified
82 /// expression and compare the result against zero, returning an Int1Ty value.
83 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) {
84   if (const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>()) {
85     llvm::Value *MemPtr = EmitScalarExpr(E);
86     return CGM.getCXXABI().EmitMemberPointerIsNotNull(*this, MemPtr, MPT);
87   }
88 
89   QualType BoolTy = getContext().BoolTy;
90   if (!E->getType()->isAnyComplexType())
91     return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy);
92 
93   return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy);
94 }
95 
96 /// EmitIgnoredExpr - Emit code to compute the specified expression,
97 /// ignoring the result.
98 void CodeGenFunction::EmitIgnoredExpr(const Expr *E) {
99   if (E->isRValue())
100     return (void) EmitAnyExpr(E, AggValueSlot::ignored(), true);
101 
102   // Just emit it as an l-value and drop the result.
103   EmitLValue(E);
104 }
105 
106 /// EmitAnyExpr - Emit code to compute the specified expression which
107 /// can have any type.  The result is returned as an RValue struct.
108 /// If this is an aggregate expression, AggSlot indicates where the
109 /// result should be returned.
110 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, AggValueSlot AggSlot,
111                                     bool IgnoreResult) {
112   if (!hasAggregateLLVMType(E->getType()))
113     return RValue::get(EmitScalarExpr(E, IgnoreResult));
114   else if (E->getType()->isAnyComplexType())
115     return RValue::getComplex(EmitComplexExpr(E, IgnoreResult, IgnoreResult));
116 
117   EmitAggExpr(E, AggSlot, IgnoreResult);
118   return AggSlot.asRValue();
119 }
120 
121 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will
122 /// always be accessible even if no aggregate location is provided.
123 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E) {
124   AggValueSlot AggSlot = AggValueSlot::ignored();
125 
126   if (hasAggregateLLVMType(E->getType()) &&
127       !E->getType()->isAnyComplexType())
128     AggSlot = CreateAggTemp(E->getType(), "agg.tmp");
129   return EmitAnyExpr(E, AggSlot);
130 }
131 
132 /// EmitAnyExprToMem - Evaluate an expression into a given memory
133 /// location.
134 void CodeGenFunction::EmitAnyExprToMem(const Expr *E,
135                                        llvm::Value *Location,
136                                        Qualifiers Quals) {
137   // FIXME: This function should take an LValue as an argument.
138   if (E->getType()->isAnyComplexType()) {
139     EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile());
140   } else if (hasAggregateLLVMType(E->getType())) {
141     CharUnits Alignment = getContext().getTypeAlignInChars(E->getType());
142     EmitAggExpr(E, AggValueSlot::forAddr(Location, Alignment, Quals,
143                                          AggValueSlot::IsDestructed,
144                                          AggValueSlot::DoesNotNeedGCBarriers,
145                                          AggValueSlot::IsNotAliased,
146                                          AggValueSlot::IsCompleteObject));
147   } else {
148     RValue RV = RValue::get(EmitScalarExpr(E, /*Ignore*/ false));
149     LValue LV = MakeAddrLValue(Location, E->getType());
150     EmitStoreThroughLValue(RV, LV);
151   }
152 }
153 
154 namespace {
155 /// \brief An adjustment to be made to the temporary created when emitting a
156 /// reference binding, which accesses a particular subobject of that temporary.
157   struct SubobjectAdjustment {
158     enum { DerivedToBaseAdjustment, FieldAdjustment } Kind;
159 
160     union {
161       struct {
162         const CastExpr *BasePath;
163         const CXXRecordDecl *DerivedClass;
164       } DerivedToBase;
165 
166       FieldDecl *Field;
167     };
168 
169     SubobjectAdjustment(const CastExpr *BasePath,
170                         const CXXRecordDecl *DerivedClass)
171       : Kind(DerivedToBaseAdjustment) {
172       DerivedToBase.BasePath = BasePath;
173       DerivedToBase.DerivedClass = DerivedClass;
174     }
175 
176     SubobjectAdjustment(FieldDecl *Field)
177       : Kind(FieldAdjustment) {
178       this->Field = Field;
179     }
180   };
181 }
182 
183 static llvm::Value *
184 CreateReferenceTemporary(CodeGenFunction &CGF, QualType Type,
185                          const NamedDecl *InitializedDecl) {
186   if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) {
187     if (VD->hasGlobalStorage()) {
188       SmallString<256> Name;
189       llvm::raw_svector_ostream Out(Name);
190       CGF.CGM.getCXXABI().getMangleContext().mangleReferenceTemporary(VD, Out);
191       Out.flush();
192 
193       llvm::Type *RefTempTy = CGF.ConvertTypeForMem(Type);
194 
195       // Create the reference temporary.
196       llvm::GlobalValue *RefTemp =
197         new llvm::GlobalVariable(CGF.CGM.getModule(),
198                                  RefTempTy, /*isConstant=*/false,
199                                  llvm::GlobalValue::InternalLinkage,
200                                  llvm::Constant::getNullValue(RefTempTy),
201                                  Name.str());
202       return RefTemp;
203     }
204   }
205 
206   return CGF.CreateMemTemp(Type, "ref.tmp");
207 }
208 
209 static llvm::Value *
210 EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E,
211                             llvm::Value *&ReferenceTemporary,
212                             const CXXDestructorDecl *&ReferenceTemporaryDtor,
213                             QualType &ObjCARCReferenceLifetimeType,
214                             const NamedDecl *InitializedDecl) {
215   // Look through single-element init lists that claim to be lvalues. They're
216   // just syntactic wrappers in this case.
217   if (const InitListExpr *ILE = dyn_cast<InitListExpr>(E)) {
218     if (ILE->getNumInits() == 1 && ILE->isGLValue())
219       E = ILE->getInit(0);
220   }
221 
222   // Look through expressions for materialized temporaries (for now).
223   if (const MaterializeTemporaryExpr *M
224                                       = dyn_cast<MaterializeTemporaryExpr>(E)) {
225     // Objective-C++ ARC:
226     //   If we are binding a reference to a temporary that has ownership, we
227     //   need to perform retain/release operations on the temporary.
228     if (CGF.getContext().getLangOpts().ObjCAutoRefCount &&
229         E->getType()->isObjCLifetimeType() &&
230         (E->getType().getObjCLifetime() == Qualifiers::OCL_Strong ||
231          E->getType().getObjCLifetime() == Qualifiers::OCL_Weak ||
232          E->getType().getObjCLifetime() == Qualifiers::OCL_Autoreleasing))
233       ObjCARCReferenceLifetimeType = E->getType();
234 
235     E = M->GetTemporaryExpr();
236   }
237 
238   if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E))
239     E = DAE->getExpr();
240 
241   if (const ExprWithCleanups *EWC = dyn_cast<ExprWithCleanups>(E)) {
242     CGF.enterFullExpression(EWC);
243     CodeGenFunction::RunCleanupsScope Scope(CGF);
244 
245     return EmitExprForReferenceBinding(CGF, EWC->getSubExpr(),
246                                        ReferenceTemporary,
247                                        ReferenceTemporaryDtor,
248                                        ObjCARCReferenceLifetimeType,
249                                        InitializedDecl);
250   }
251 
252   RValue RV;
253   if (E->isGLValue()) {
254     // Emit the expression as an lvalue.
255     LValue LV = CGF.EmitLValue(E);
256 
257     if (LV.isSimple())
258       return LV.getAddress();
259 
260     // We have to load the lvalue.
261     RV = CGF.EmitLoadOfLValue(LV);
262   } else {
263     if (!ObjCARCReferenceLifetimeType.isNull()) {
264       ReferenceTemporary = CreateReferenceTemporary(CGF,
265                                                   ObjCARCReferenceLifetimeType,
266                                                     InitializedDecl);
267 
268 
269       LValue RefTempDst = CGF.MakeAddrLValue(ReferenceTemporary,
270                                              ObjCARCReferenceLifetimeType);
271 
272       CGF.EmitScalarInit(E, dyn_cast_or_null<ValueDecl>(InitializedDecl),
273                          RefTempDst, false);
274 
275       bool ExtendsLifeOfTemporary = false;
276       if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(InitializedDecl)) {
277         if (Var->extendsLifetimeOfTemporary())
278           ExtendsLifeOfTemporary = true;
279       } else if (InitializedDecl && isa<FieldDecl>(InitializedDecl)) {
280         ExtendsLifeOfTemporary = true;
281       }
282 
283       if (!ExtendsLifeOfTemporary) {
284         // Since the lifetime of this temporary isn't going to be extended,
285         // we need to clean it up ourselves at the end of the full expression.
286         switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) {
287         case Qualifiers::OCL_None:
288         case Qualifiers::OCL_ExplicitNone:
289         case Qualifiers::OCL_Autoreleasing:
290           break;
291 
292         case Qualifiers::OCL_Strong: {
293           assert(!ObjCARCReferenceLifetimeType->isArrayType());
294           CleanupKind cleanupKind = CGF.getARCCleanupKind();
295           CGF.pushDestroy(cleanupKind,
296                           ReferenceTemporary,
297                           ObjCARCReferenceLifetimeType,
298                           CodeGenFunction::destroyARCStrongImprecise,
299                           cleanupKind & EHCleanup);
300           break;
301         }
302 
303         case Qualifiers::OCL_Weak:
304           assert(!ObjCARCReferenceLifetimeType->isArrayType());
305           CGF.pushDestroy(NormalAndEHCleanup,
306                           ReferenceTemporary,
307                           ObjCARCReferenceLifetimeType,
308                           CodeGenFunction::destroyARCWeak,
309                           /*useEHCleanupForArray*/ true);
310           break;
311         }
312 
313         ObjCARCReferenceLifetimeType = QualType();
314       }
315 
316       return ReferenceTemporary;
317     }
318 
319     SmallVector<SubobjectAdjustment, 2> Adjustments;
320     while (true) {
321       E = E->IgnoreParens();
322 
323       if (const CastExpr *CE = dyn_cast<CastExpr>(E)) {
324         if ((CE->getCastKind() == CK_DerivedToBase ||
325              CE->getCastKind() == CK_UncheckedDerivedToBase) &&
326             E->getType()->isRecordType()) {
327           E = CE->getSubExpr();
328           CXXRecordDecl *Derived
329             = cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl());
330           Adjustments.push_back(SubobjectAdjustment(CE, Derived));
331           continue;
332         }
333 
334         if (CE->getCastKind() == CK_NoOp) {
335           E = CE->getSubExpr();
336           continue;
337         }
338       } else if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
339         if (!ME->isArrow() && ME->getBase()->isRValue()) {
340           assert(ME->getBase()->getType()->isRecordType());
341           if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) {
342             E = ME->getBase();
343             Adjustments.push_back(SubobjectAdjustment(Field));
344             continue;
345           }
346         }
347       }
348 
349       if (const OpaqueValueExpr *opaque = dyn_cast<OpaqueValueExpr>(E))
350         if (opaque->getType()->isRecordType())
351           return CGF.EmitOpaqueValueLValue(opaque).getAddress();
352 
353       // Nothing changed.
354       break;
355     }
356 
357     // Create a reference temporary if necessary.
358     AggValueSlot AggSlot = AggValueSlot::ignored();
359     if (CGF.hasAggregateLLVMType(E->getType()) &&
360         !E->getType()->isAnyComplexType()) {
361       ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(),
362                                                     InitializedDecl);
363       CharUnits Alignment = CGF.getContext().getTypeAlignInChars(E->getType());
364       AggValueSlot::IsDestructed_t isDestructed
365         = AggValueSlot::IsDestructed_t(InitializedDecl != 0);
366       AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Alignment,
367                                       Qualifiers(), isDestructed,
368                                       AggValueSlot::DoesNotNeedGCBarriers,
369                                       AggValueSlot::IsNotAliased,
370                                       AggValueSlot::IsCompleteObject);
371     }
372 
373     if (InitializedDecl) {
374       // Get the destructor for the reference temporary.
375       if (const RecordType *RT = E->getType()->getAs<RecordType>()) {
376         CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl());
377         if (!ClassDecl->hasTrivialDestructor())
378           ReferenceTemporaryDtor = ClassDecl->getDestructor();
379       }
380     }
381 
382     RV = CGF.EmitAnyExpr(E, AggSlot);
383 
384     // Check if need to perform derived-to-base casts and/or field accesses, to
385     // get from the temporary object we created (and, potentially, for which we
386     // extended the lifetime) to the subobject we're binding the reference to.
387     if (!Adjustments.empty()) {
388       llvm::Value *Object = RV.getAggregateAddr();
389       for (unsigned I = Adjustments.size(); I != 0; --I) {
390         SubobjectAdjustment &Adjustment = Adjustments[I-1];
391         switch (Adjustment.Kind) {
392         case SubobjectAdjustment::DerivedToBaseAdjustment:
393           Object =
394               CGF.GetAddressOfBaseClass(Object,
395                                         Adjustment.DerivedToBase.DerivedClass,
396                               Adjustment.DerivedToBase.BasePath->path_begin(),
397                               Adjustment.DerivedToBase.BasePath->path_end(),
398                                         /*NullCheckValue=*/false);
399           break;
400 
401         case SubobjectAdjustment::FieldAdjustment: {
402           LValue LV =
403             CGF.EmitLValueForField(Object, Adjustment.Field, 0);
404           if (LV.isSimple()) {
405             Object = LV.getAddress();
406             break;
407           }
408 
409           // For non-simple lvalues, we actually have to create a copy of
410           // the object we're binding to.
411           QualType T = Adjustment.Field->getType().getNonReferenceType()
412                                                   .getUnqualifiedType();
413           Object = CreateReferenceTemporary(CGF, T, InitializedDecl);
414           LValue TempLV = CGF.MakeAddrLValue(Object,
415                                              Adjustment.Field->getType());
416           CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV), TempLV);
417           break;
418         }
419 
420         }
421       }
422 
423       return Object;
424     }
425   }
426 
427   if (RV.isAggregate())
428     return RV.getAggregateAddr();
429 
430   // Create a temporary variable that we can bind the reference to.
431   ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(),
432                                                 InitializedDecl);
433 
434 
435   unsigned Alignment =
436     CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity();
437   if (RV.isScalar())
438     CGF.EmitStoreOfScalar(RV.getScalarVal(), ReferenceTemporary,
439                           /*Volatile=*/false, Alignment, E->getType());
440   else
441     CGF.StoreComplexToAddr(RV.getComplexVal(), ReferenceTemporary,
442                            /*Volatile=*/false);
443   return ReferenceTemporary;
444 }
445 
446 RValue
447 CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E,
448                                             const NamedDecl *InitializedDecl) {
449   llvm::Value *ReferenceTemporary = 0;
450   const CXXDestructorDecl *ReferenceTemporaryDtor = 0;
451   QualType ObjCARCReferenceLifetimeType;
452   llvm::Value *Value = EmitExprForReferenceBinding(*this, E, ReferenceTemporary,
453                                                    ReferenceTemporaryDtor,
454                                                    ObjCARCReferenceLifetimeType,
455                                                    InitializedDecl);
456   if (!ReferenceTemporaryDtor && ObjCARCReferenceLifetimeType.isNull())
457     return RValue::get(Value);
458 
459   // Make sure to call the destructor for the reference temporary.
460   const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl);
461   if (VD && VD->hasGlobalStorage()) {
462     if (ReferenceTemporaryDtor) {
463       llvm::Constant *DtorFn =
464         CGM.GetAddrOfCXXDestructor(ReferenceTemporaryDtor, Dtor_Complete);
465       EmitCXXGlobalDtorRegistration(DtorFn,
466                                     cast<llvm::Constant>(ReferenceTemporary));
467     } else {
468       assert(!ObjCARCReferenceLifetimeType.isNull());
469       // Note: We intentionally do not register a global "destructor" to
470       // release the object.
471     }
472 
473     return RValue::get(Value);
474   }
475 
476   if (ReferenceTemporaryDtor)
477     PushDestructorCleanup(ReferenceTemporaryDtor, ReferenceTemporary);
478   else {
479     switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) {
480     case Qualifiers::OCL_None:
481       llvm_unreachable(
482                       "Not a reference temporary that needs to be deallocated");
483     case Qualifiers::OCL_ExplicitNone:
484     case Qualifiers::OCL_Autoreleasing:
485       // Nothing to do.
486       break;
487 
488     case Qualifiers::OCL_Strong: {
489       bool precise = VD && VD->hasAttr<ObjCPreciseLifetimeAttr>();
490       CleanupKind cleanupKind = getARCCleanupKind();
491       pushDestroy(cleanupKind, ReferenceTemporary, ObjCARCReferenceLifetimeType,
492                   precise ? destroyARCStrongPrecise : destroyARCStrongImprecise,
493                   cleanupKind & EHCleanup);
494       break;
495     }
496 
497     case Qualifiers::OCL_Weak: {
498       // __weak objects always get EH cleanups; otherwise, exceptions
499       // could cause really nasty crashes instead of mere leaks.
500       pushDestroy(NormalAndEHCleanup, ReferenceTemporary,
501                   ObjCARCReferenceLifetimeType, destroyARCWeak, true);
502       break;
503     }
504     }
505   }
506 
507   return RValue::get(Value);
508 }
509 
510 
511 /// getAccessedFieldNo - Given an encoded value and a result number, return the
512 /// input field number being accessed.
513 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx,
514                                              const llvm::Constant *Elts) {
515   return cast<llvm::ConstantInt>(Elts->getAggregateElement(Idx))
516       ->getZExtValue();
517 }
518 
519 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) {
520   if (!CatchUndefined)
521     return;
522 
523   // This needs to be to the standard address space.
524   Address = Builder.CreateBitCast(Address, Int8PtrTy);
525 
526   llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy);
527 
528   // In time, people may want to control this and use a 1 here.
529   llvm::Value *Arg = Builder.getFalse();
530   llvm::Value *C = Builder.CreateCall2(F, Address, Arg);
531   llvm::BasicBlock *Cont = createBasicBlock();
532   llvm::BasicBlock *Check = createBasicBlock();
533   llvm::Value *NegativeOne = llvm::ConstantInt::get(IntPtrTy, -1ULL);
534   Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check);
535 
536   EmitBlock(Check);
537   Builder.CreateCondBr(Builder.CreateICmpUGE(C,
538                                         llvm::ConstantInt::get(IntPtrTy, Size)),
539                        Cont, getTrapBB());
540   EmitBlock(Cont);
541 }
542 
543 
544 CodeGenFunction::ComplexPairTy CodeGenFunction::
545 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV,
546                          bool isInc, bool isPre) {
547   ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(),
548                                             LV.isVolatileQualified());
549 
550   llvm::Value *NextVal;
551   if (isa<llvm::IntegerType>(InVal.first->getType())) {
552     uint64_t AmountVal = isInc ? 1 : -1;
553     NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true);
554 
555     // Add the inc/dec to the real part.
556     NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec");
557   } else {
558     QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType();
559     llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1);
560     if (!isInc)
561       FVal.changeSign();
562     NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal);
563 
564     // Add the inc/dec to the real part.
565     NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec");
566   }
567 
568   ComplexPairTy IncVal(NextVal, InVal.second);
569 
570   // Store the updated result through the lvalue.
571   StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified());
572 
573   // If this is a postinc, return the value read from memory, otherwise use the
574   // updated value.
575   return isPre ? IncVal : InVal;
576 }
577 
578 
579 //===----------------------------------------------------------------------===//
580 //                         LValue Expression Emission
581 //===----------------------------------------------------------------------===//
582 
583 RValue CodeGenFunction::GetUndefRValue(QualType Ty) {
584   if (Ty->isVoidType())
585     return RValue::get(0);
586 
587   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
588     llvm::Type *EltTy = ConvertType(CTy->getElementType());
589     llvm::Value *U = llvm::UndefValue::get(EltTy);
590     return RValue::getComplex(std::make_pair(U, U));
591   }
592 
593   // If this is a use of an undefined aggregate type, the aggregate must have an
594   // identifiable address.  Just because the contents of the value are undefined
595   // doesn't mean that the address can't be taken and compared.
596   if (hasAggregateLLVMType(Ty)) {
597     llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp");
598     return RValue::getAggregate(DestPtr);
599   }
600 
601   return RValue::get(llvm::UndefValue::get(ConvertType(Ty)));
602 }
603 
604 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E,
605                                               const char *Name) {
606   ErrorUnsupported(E, Name);
607   return GetUndefRValue(E->getType());
608 }
609 
610 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E,
611                                               const char *Name) {
612   ErrorUnsupported(E, Name);
613   llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType()));
614   return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType());
615 }
616 
617 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) {
618   LValue LV = EmitLValue(E);
619   if (!isa<DeclRefExpr>(E) && !LV.isBitField() && LV.isSimple())
620     EmitCheck(LV.getAddress(),
621               getContext().getTypeSizeInChars(E->getType()).getQuantity());
622   return LV;
623 }
624 
625 /// EmitLValue - Emit code to compute a designator that specifies the location
626 /// of the expression.
627 ///
628 /// This can return one of two things: a simple address or a bitfield reference.
629 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be
630 /// an LLVM pointer type.
631 ///
632 /// If this returns a bitfield reference, nothing about the pointee type of the
633 /// LLVM value is known: For example, it may not be a pointer to an integer.
634 ///
635 /// If this returns a normal address, and if the lvalue's C type is fixed size,
636 /// this method guarantees that the returned pointer type will point to an LLVM
637 /// type of the same size of the lvalue's type.  If the lvalue has a variable
638 /// length type, this is not possible.
639 ///
640 LValue CodeGenFunction::EmitLValue(const Expr *E) {
641   switch (E->getStmtClass()) {
642   default: return EmitUnsupportedLValue(E, "l-value expression");
643 
644   case Expr::ObjCPropertyRefExprClass:
645     llvm_unreachable("cannot emit a property reference directly");
646 
647   case Expr::ObjCSelectorExprClass:
648   return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E));
649   case Expr::ObjCIsaExprClass:
650     return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E));
651   case Expr::BinaryOperatorClass:
652     return EmitBinaryOperatorLValue(cast<BinaryOperator>(E));
653   case Expr::CompoundAssignOperatorClass:
654     if (!E->getType()->isAnyComplexType())
655       return EmitCompoundAssignmentLValue(cast<CompoundAssignOperator>(E));
656     return EmitComplexCompoundAssignmentLValue(cast<CompoundAssignOperator>(E));
657   case Expr::CallExprClass:
658   case Expr::CXXMemberCallExprClass:
659   case Expr::CXXOperatorCallExprClass:
660   case Expr::UserDefinedLiteralClass:
661     return EmitCallExprLValue(cast<CallExpr>(E));
662   case Expr::VAArgExprClass:
663     return EmitVAArgExprLValue(cast<VAArgExpr>(E));
664   case Expr::DeclRefExprClass:
665     return EmitDeclRefLValue(cast<DeclRefExpr>(E));
666   case Expr::ParenExprClass:
667     return EmitLValue(cast<ParenExpr>(E)->getSubExpr());
668   case Expr::GenericSelectionExprClass:
669     return EmitLValue(cast<GenericSelectionExpr>(E)->getResultExpr());
670   case Expr::PredefinedExprClass:
671     return EmitPredefinedLValue(cast<PredefinedExpr>(E));
672   case Expr::StringLiteralClass:
673     return EmitStringLiteralLValue(cast<StringLiteral>(E));
674   case Expr::ObjCEncodeExprClass:
675     return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E));
676   case Expr::PseudoObjectExprClass:
677     return EmitPseudoObjectLValue(cast<PseudoObjectExpr>(E));
678   case Expr::InitListExprClass:
679     assert(cast<InitListExpr>(E)->getNumInits() == 1 &&
680            "Only single-element init list can be lvalue.");
681     return EmitLValue(cast<InitListExpr>(E)->getInit(0));
682 
683   case Expr::CXXTemporaryObjectExprClass:
684   case Expr::CXXConstructExprClass:
685     return EmitCXXConstructLValue(cast<CXXConstructExpr>(E));
686   case Expr::CXXBindTemporaryExprClass:
687     return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E));
688   case Expr::LambdaExprClass:
689     return EmitLambdaLValue(cast<LambdaExpr>(E));
690 
691   case Expr::ExprWithCleanupsClass: {
692     const ExprWithCleanups *cleanups = cast<ExprWithCleanups>(E);
693     enterFullExpression(cleanups);
694     RunCleanupsScope Scope(*this);
695     return EmitLValue(cleanups->getSubExpr());
696   }
697 
698   case Expr::CXXScalarValueInitExprClass:
699     return EmitNullInitializationLValue(cast<CXXScalarValueInitExpr>(E));
700   case Expr::CXXDefaultArgExprClass:
701     return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr());
702   case Expr::CXXTypeidExprClass:
703     return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E));
704 
705   case Expr::ObjCMessageExprClass:
706     return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E));
707   case Expr::ObjCIvarRefExprClass:
708     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
709   case Expr::StmtExprClass:
710     return EmitStmtExprLValue(cast<StmtExpr>(E));
711   case Expr::UnaryOperatorClass:
712     return EmitUnaryOpLValue(cast<UnaryOperator>(E));
713   case Expr::ArraySubscriptExprClass:
714     return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E));
715   case Expr::ExtVectorElementExprClass:
716     return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E));
717   case Expr::MemberExprClass:
718     return EmitMemberExpr(cast<MemberExpr>(E));
719   case Expr::CompoundLiteralExprClass:
720     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
721   case Expr::ConditionalOperatorClass:
722     return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E));
723   case Expr::BinaryConditionalOperatorClass:
724     return EmitConditionalOperatorLValue(cast<BinaryConditionalOperator>(E));
725   case Expr::ChooseExprClass:
726     return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext()));
727   case Expr::OpaqueValueExprClass:
728     return EmitOpaqueValueLValue(cast<OpaqueValueExpr>(E));
729   case Expr::SubstNonTypeTemplateParmExprClass:
730     return EmitLValue(cast<SubstNonTypeTemplateParmExpr>(E)->getReplacement());
731   case Expr::ImplicitCastExprClass:
732   case Expr::CStyleCastExprClass:
733   case Expr::CXXFunctionalCastExprClass:
734   case Expr::CXXStaticCastExprClass:
735   case Expr::CXXDynamicCastExprClass:
736   case Expr::CXXReinterpretCastExprClass:
737   case Expr::CXXConstCastExprClass:
738   case Expr::ObjCBridgedCastExprClass:
739     return EmitCastLValue(cast<CastExpr>(E));
740 
741   case Expr::MaterializeTemporaryExprClass:
742     return EmitMaterializeTemporaryExpr(cast<MaterializeTemporaryExpr>(E));
743   }
744 }
745 
746 /// Given an object of the given canonical type, can we safely copy a
747 /// value out of it based on its initializer?
748 static bool isConstantEmittableObjectType(QualType type) {
749   assert(type.isCanonical());
750   assert(!type->isReferenceType());
751 
752   // Must be const-qualified but non-volatile.
753   Qualifiers qs = type.getLocalQualifiers();
754   if (!qs.hasConst() || qs.hasVolatile()) return false;
755 
756   // Otherwise, all object types satisfy this except C++ classes with
757   // mutable subobjects or non-trivial copy/destroy behavior.
758   if (const RecordType *RT = dyn_cast<RecordType>(type))
759     if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl()))
760       if (RD->hasMutableFields() || !RD->isTrivial())
761         return false;
762 
763   return true;
764 }
765 
766 /// Can we constant-emit a load of a reference to a variable of the
767 /// given type?  This is different from predicates like
768 /// Decl::isUsableInConstantExpressions because we do want it to apply
769 /// in situations that don't necessarily satisfy the language's rules
770 /// for this (e.g. C++'s ODR-use rules).  For example, we want to able
771 /// to do this with const float variables even if those variables
772 /// aren't marked 'constexpr'.
773 enum ConstantEmissionKind {
774   CEK_None,
775   CEK_AsReferenceOnly,
776   CEK_AsValueOrReference,
777   CEK_AsValueOnly
778 };
779 static ConstantEmissionKind checkVarTypeForConstantEmission(QualType type) {
780   type = type.getCanonicalType();
781   if (const ReferenceType *ref = dyn_cast<ReferenceType>(type)) {
782     if (isConstantEmittableObjectType(ref->getPointeeType()))
783       return CEK_AsValueOrReference;
784     return CEK_AsReferenceOnly;
785   }
786   if (isConstantEmittableObjectType(type))
787     return CEK_AsValueOnly;
788   return CEK_None;
789 }
790 
791 /// Try to emit a reference to the given value without producing it as
792 /// an l-value.  This is actually more than an optimization: we can't
793 /// produce an l-value for variables that we never actually captured
794 /// in a block or lambda, which means const int variables or constexpr
795 /// literals or similar.
796 CodeGenFunction::ConstantEmission
797 CodeGenFunction::tryEmitAsConstant(DeclRefExpr *refExpr) {
798   ValueDecl *value = refExpr->getDecl();
799 
800   // The value needs to be an enum constant or a constant variable.
801   ConstantEmissionKind CEK;
802   if (isa<ParmVarDecl>(value)) {
803     CEK = CEK_None;
804   } else if (VarDecl *var = dyn_cast<VarDecl>(value)) {
805     CEK = checkVarTypeForConstantEmission(var->getType());
806   } else if (isa<EnumConstantDecl>(value)) {
807     CEK = CEK_AsValueOnly;
808   } else {
809     CEK = CEK_None;
810   }
811   if (CEK == CEK_None) return ConstantEmission();
812 
813   Expr::EvalResult result;
814   bool resultIsReference;
815   QualType resultType;
816 
817   // It's best to evaluate all the way as an r-value if that's permitted.
818   if (CEK != CEK_AsReferenceOnly &&
819       refExpr->EvaluateAsRValue(result, getContext())) {
820     resultIsReference = false;
821     resultType = refExpr->getType();
822 
823   // Otherwise, try to evaluate as an l-value.
824   } else if (CEK != CEK_AsValueOnly &&
825              refExpr->EvaluateAsLValue(result, getContext())) {
826     resultIsReference = true;
827     resultType = value->getType();
828 
829   // Failure.
830   } else {
831     return ConstantEmission();
832   }
833 
834   // In any case, if the initializer has side-effects, abandon ship.
835   if (result.HasSideEffects)
836     return ConstantEmission();
837 
838   // Emit as a constant.
839   llvm::Constant *C = CGM.EmitConstantValue(result.Val, resultType, this);
840 
841   // Make sure we emit a debug reference to the global variable.
842   // This should probably fire even for
843   if (isa<VarDecl>(value)) {
844     if (!getContext().DeclMustBeEmitted(cast<VarDecl>(value)))
845       EmitDeclRefExprDbgValue(refExpr, C);
846   } else {
847     assert(isa<EnumConstantDecl>(value));
848     EmitDeclRefExprDbgValue(refExpr, C);
849   }
850 
851   // If we emitted a reference constant, we need to dereference that.
852   if (resultIsReference)
853     return ConstantEmission::forReference(C);
854 
855   return ConstantEmission::forValue(C);
856 }
857 
858 llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue) {
859   return EmitLoadOfScalar(lvalue.getAddress(), lvalue.isVolatile(),
860                           lvalue.getAlignment().getQuantity(),
861                           lvalue.getType(), lvalue.getTBAAInfo());
862 }
863 
864 static bool hasBooleanRepresentation(QualType Ty) {
865   if (Ty->isBooleanType())
866     return true;
867 
868   if (const EnumType *ET = Ty->getAs<EnumType>())
869     return ET->getDecl()->getIntegerType()->isBooleanType();
870 
871   return false;
872 }
873 
874 llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(QualType Ty) {
875   const EnumType *ET = Ty->getAs<EnumType>();
876   bool IsRegularCPlusPlusEnum = (getLangOpts().CPlusPlus && ET &&
877                                  CGM.getCodeGenOpts().StrictEnums &&
878                                  !ET->getDecl()->isFixed());
879   bool IsBool = hasBooleanRepresentation(Ty);
880   llvm::Type *LTy;
881   if (!IsBool && !IsRegularCPlusPlusEnum)
882     return NULL;
883 
884   llvm::APInt Min;
885   llvm::APInt End;
886   if (IsBool) {
887     Min = llvm::APInt(8, 0);
888     End = llvm::APInt(8, 2);
889     LTy = Int8Ty;
890   } else {
891     const EnumDecl *ED = ET->getDecl();
892     LTy = ConvertTypeForMem(ED->getIntegerType());
893     unsigned Bitwidth = LTy->getScalarSizeInBits();
894     unsigned NumNegativeBits = ED->getNumNegativeBits();
895     unsigned NumPositiveBits = ED->getNumPositiveBits();
896 
897     if (NumNegativeBits) {
898       unsigned NumBits = std::max(NumNegativeBits, NumPositiveBits + 1);
899       assert(NumBits <= Bitwidth);
900       End = llvm::APInt(Bitwidth, 1) << (NumBits - 1);
901       Min = -End;
902     } else {
903       assert(NumPositiveBits <= Bitwidth);
904       End = llvm::APInt(Bitwidth, 1) << NumPositiveBits;
905       Min = llvm::APInt(Bitwidth, 0);
906     }
907   }
908 
909   if (End == Min)
910     return NULL;
911 
912   llvm::Value *LowAndHigh[2];
913   LowAndHigh[0] = llvm::ConstantInt::get(LTy, Min);
914   LowAndHigh[1] = llvm::ConstantInt::get(LTy, End);
915 
916   llvm::LLVMContext &C = getLLVMContext();
917   llvm::MDNode *Range = llvm::MDNode::get(C, LowAndHigh);
918   return Range;
919 }
920 
921 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile,
922                                               unsigned Alignment, QualType Ty,
923                                               llvm::MDNode *TBAAInfo) {
924   llvm::LoadInst *Load = Builder.CreateLoad(Addr);
925   if (Volatile)
926     Load->setVolatile(true);
927   if (Alignment)
928     Load->setAlignment(Alignment);
929   if (TBAAInfo)
930     CGM.DecorateInstruction(Load, TBAAInfo);
931   // If this is an atomic type, all normal reads must be atomic
932   if (Ty->isAtomicType())
933     Load->setAtomic(llvm::SequentiallyConsistent);
934 
935   if (CGM.getCodeGenOpts().OptimizationLevel > 0)
936     if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty))
937       Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
938 
939   return EmitFromMemory(Load, Ty);
940 }
941 
942 llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) {
943   // Bool has a different representation in memory than in registers.
944   if (hasBooleanRepresentation(Ty)) {
945     // This should really always be an i1, but sometimes it's already
946     // an i8, and it's awkward to track those cases down.
947     if (Value->getType()->isIntegerTy(1))
948       return Builder.CreateZExt(Value, Builder.getInt8Ty(), "frombool");
949     assert(Value->getType()->isIntegerTy(8) && "value rep of bool not i1/i8");
950   }
951 
952   return Value;
953 }
954 
955 llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) {
956   // Bool has a different representation in memory than in registers.
957   if (hasBooleanRepresentation(Ty)) {
958     assert(Value->getType()->isIntegerTy(8) && "memory rep of bool not i8");
959     return Builder.CreateTrunc(Value, Builder.getInt1Ty(), "tobool");
960   }
961 
962   return Value;
963 }
964 
965 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr,
966                                         bool Volatile, unsigned Alignment,
967                                         QualType Ty,
968                                         llvm::MDNode *TBAAInfo,
969                                         bool isInit) {
970   Value = EmitToMemory(Value, Ty);
971 
972   llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile);
973   if (Alignment)
974     Store->setAlignment(Alignment);
975   if (TBAAInfo)
976     CGM.DecorateInstruction(Store, TBAAInfo);
977   if (!isInit && Ty->isAtomicType())
978     Store->setAtomic(llvm::SequentiallyConsistent);
979 }
980 
981 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *value, LValue lvalue,
982     bool isInit) {
983   EmitStoreOfScalar(value, lvalue.getAddress(), lvalue.isVolatile(),
984                     lvalue.getAlignment().getQuantity(), lvalue.getType(),
985                     lvalue.getTBAAInfo(), isInit);
986 }
987 
988 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this
989 /// method emits the address of the lvalue, then loads the result as an rvalue,
990 /// returning the rvalue.
991 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV) {
992   if (LV.isObjCWeak()) {
993     // load of a __weak object.
994     llvm::Value *AddrWeakObj = LV.getAddress();
995     return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this,
996                                                              AddrWeakObj));
997   }
998   if (LV.getQuals().getObjCLifetime() == Qualifiers::OCL_Weak)
999     return RValue::get(EmitARCLoadWeak(LV.getAddress()));
1000 
1001   if (LV.isSimple()) {
1002     assert(!LV.getType()->isFunctionType());
1003 
1004     // Everything needs a load.
1005     return RValue::get(EmitLoadOfScalar(LV));
1006   }
1007 
1008   if (LV.isVectorElt()) {
1009     llvm::LoadInst *Load = Builder.CreateLoad(LV.getVectorAddr(),
1010                                               LV.isVolatileQualified());
1011     Load->setAlignment(LV.getAlignment().getQuantity());
1012     return RValue::get(Builder.CreateExtractElement(Load, LV.getVectorIdx(),
1013                                                     "vecext"));
1014   }
1015 
1016   // If this is a reference to a subset of the elements of a vector, either
1017   // shuffle the input or extract/insert them as appropriate.
1018   if (LV.isExtVectorElt())
1019     return EmitLoadOfExtVectorElementLValue(LV);
1020 
1021   assert(LV.isBitField() && "Unknown LValue type!");
1022   return EmitLoadOfBitfieldLValue(LV);
1023 }
1024 
1025 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV) {
1026   const CGBitFieldInfo &Info = LV.getBitFieldInfo();
1027 
1028   // Get the output type.
1029   llvm::Type *ResLTy = ConvertType(LV.getType());
1030   unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy);
1031 
1032   // Compute the result as an OR of all of the individual component accesses.
1033   llvm::Value *Res = 0;
1034   for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) {
1035     const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i);
1036 
1037     // Get the field pointer.
1038     llvm::Value *Ptr = LV.getBitFieldBaseAddr();
1039 
1040     // Only offset by the field index if used, so that incoming values are not
1041     // required to be structures.
1042     if (AI.FieldIndex)
1043       Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field");
1044 
1045     // Offset by the byte offset, if used.
1046     if (!AI.FieldByteOffset.isZero()) {
1047       Ptr = EmitCastToVoidPtr(Ptr);
1048       Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(),
1049                                        "bf.field.offs");
1050     }
1051 
1052     // Cast to the access type.
1053     llvm::Type *PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), AI.AccessWidth,
1054                        CGM.getContext().getTargetAddressSpace(LV.getType()));
1055     Ptr = Builder.CreateBitCast(Ptr, PTy);
1056 
1057     // Perform the load.
1058     llvm::LoadInst *Load = Builder.CreateLoad(Ptr, LV.isVolatileQualified());
1059     if (!AI.AccessAlignment.isZero())
1060       Load->setAlignment(AI.AccessAlignment.getQuantity());
1061 
1062     // Shift out unused low bits and mask out unused high bits.
1063     llvm::Value *Val = Load;
1064     if (AI.FieldBitStart)
1065       Val = Builder.CreateLShr(Load, AI.FieldBitStart);
1066     Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(AI.AccessWidth,
1067                                                             AI.TargetBitWidth),
1068                             "bf.clear");
1069 
1070     // Extend or truncate to the target size.
1071     if (AI.AccessWidth < ResSizeInBits)
1072       Val = Builder.CreateZExt(Val, ResLTy);
1073     else if (AI.AccessWidth > ResSizeInBits)
1074       Val = Builder.CreateTrunc(Val, ResLTy);
1075 
1076     // Shift into place, and OR into the result.
1077     if (AI.TargetBitOffset)
1078       Val = Builder.CreateShl(Val, AI.TargetBitOffset);
1079     Res = Res ? Builder.CreateOr(Res, Val) : Val;
1080   }
1081 
1082   // If the bit-field is signed, perform the sign-extension.
1083   //
1084   // FIXME: This can easily be folded into the load of the high bits, which
1085   // could also eliminate the mask of high bits in some situations.
1086   if (Info.isSigned()) {
1087     unsigned ExtraBits = ResSizeInBits - Info.getSize();
1088     if (ExtraBits)
1089       Res = Builder.CreateAShr(Builder.CreateShl(Res, ExtraBits),
1090                                ExtraBits, "bf.val.sext");
1091   }
1092 
1093   return RValue::get(Res);
1094 }
1095 
1096 // If this is a reference to a subset of the elements of a vector, create an
1097 // appropriate shufflevector.
1098 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV) {
1099   llvm::LoadInst *Load = Builder.CreateLoad(LV.getExtVectorAddr(),
1100                                             LV.isVolatileQualified());
1101   Load->setAlignment(LV.getAlignment().getQuantity());
1102   llvm::Value *Vec = Load;
1103 
1104   const llvm::Constant *Elts = LV.getExtVectorElts();
1105 
1106   // If the result of the expression is a non-vector type, we must be extracting
1107   // a single element.  Just codegen as an extractelement.
1108   const VectorType *ExprVT = LV.getType()->getAs<VectorType>();
1109   if (!ExprVT) {
1110     unsigned InIdx = getAccessedFieldNo(0, Elts);
1111     llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx);
1112     return RValue::get(Builder.CreateExtractElement(Vec, Elt));
1113   }
1114 
1115   // Always use shuffle vector to try to retain the original program structure
1116   unsigned NumResultElts = ExprVT->getNumElements();
1117 
1118   SmallVector<llvm::Constant*, 4> Mask;
1119   for (unsigned i = 0; i != NumResultElts; ++i)
1120     Mask.push_back(Builder.getInt32(getAccessedFieldNo(i, Elts)));
1121 
1122   llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1123   Vec = Builder.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()),
1124                                     MaskV);
1125   return RValue::get(Vec);
1126 }
1127 
1128 
1129 
1130 /// EmitStoreThroughLValue - Store the specified rvalue into the specified
1131 /// lvalue, where both are guaranteed to the have the same type, and that type
1132 /// is 'Ty'.
1133 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, bool isInit) {
1134   if (!Dst.isSimple()) {
1135     if (Dst.isVectorElt()) {
1136       // Read/modify/write the vector, inserting the new element.
1137       llvm::LoadInst *Load = Builder.CreateLoad(Dst.getVectorAddr(),
1138                                                 Dst.isVolatileQualified());
1139       Load->setAlignment(Dst.getAlignment().getQuantity());
1140       llvm::Value *Vec = Load;
1141       Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(),
1142                                         Dst.getVectorIdx(), "vecins");
1143       llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getVectorAddr(),
1144                                                    Dst.isVolatileQualified());
1145       Store->setAlignment(Dst.getAlignment().getQuantity());
1146       return;
1147     }
1148 
1149     // If this is an update of extended vector elements, insert them as
1150     // appropriate.
1151     if (Dst.isExtVectorElt())
1152       return EmitStoreThroughExtVectorComponentLValue(Src, Dst);
1153 
1154     assert(Dst.isBitField() && "Unknown LValue type");
1155     return EmitStoreThroughBitfieldLValue(Src, Dst);
1156   }
1157 
1158   // There's special magic for assigning into an ARC-qualified l-value.
1159   if (Qualifiers::ObjCLifetime Lifetime = Dst.getQuals().getObjCLifetime()) {
1160     switch (Lifetime) {
1161     case Qualifiers::OCL_None:
1162       llvm_unreachable("present but none");
1163 
1164     case Qualifiers::OCL_ExplicitNone:
1165       // nothing special
1166       break;
1167 
1168     case Qualifiers::OCL_Strong:
1169       EmitARCStoreStrong(Dst, Src.getScalarVal(), /*ignore*/ true);
1170       return;
1171 
1172     case Qualifiers::OCL_Weak:
1173       EmitARCStoreWeak(Dst.getAddress(), Src.getScalarVal(), /*ignore*/ true);
1174       return;
1175 
1176     case Qualifiers::OCL_Autoreleasing:
1177       Src = RValue::get(EmitObjCExtendObjectLifetime(Dst.getType(),
1178                                                      Src.getScalarVal()));
1179       // fall into the normal path
1180       break;
1181     }
1182   }
1183 
1184   if (Dst.isObjCWeak() && !Dst.isNonGC()) {
1185     // load of a __weak object.
1186     llvm::Value *LvalueDst = Dst.getAddress();
1187     llvm::Value *src = Src.getScalarVal();
1188      CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
1189     return;
1190   }
1191 
1192   if (Dst.isObjCStrong() && !Dst.isNonGC()) {
1193     // load of a __strong object.
1194     llvm::Value *LvalueDst = Dst.getAddress();
1195     llvm::Value *src = Src.getScalarVal();
1196     if (Dst.isObjCIvar()) {
1197       assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL");
1198       llvm::Type *ResultType = ConvertType(getContext().LongTy);
1199       llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp());
1200       llvm::Value *dst = RHS;
1201       RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast");
1202       llvm::Value *LHS =
1203         Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast");
1204       llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset");
1205       CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst,
1206                                               BytesBetween);
1207     } else if (Dst.isGlobalObjCRef()) {
1208       CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst,
1209                                                 Dst.isThreadLocalRef());
1210     }
1211     else
1212       CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst);
1213     return;
1214   }
1215 
1216   assert(Src.isScalar() && "Can't emit an agg store with this method");
1217   EmitStoreOfScalar(Src.getScalarVal(), Dst, isInit);
1218 }
1219 
1220 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
1221                                                      llvm::Value **Result) {
1222   const CGBitFieldInfo &Info = Dst.getBitFieldInfo();
1223 
1224   // Get the output type.
1225   llvm::Type *ResLTy = ConvertTypeForMem(Dst.getType());
1226   unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy);
1227 
1228   // Get the source value, truncated to the width of the bit-field.
1229   llvm::Value *SrcVal = Src.getScalarVal();
1230 
1231   if (Dst.getType()->isBooleanType())
1232     SrcVal = Builder.CreateIntCast(SrcVal, ResLTy, /*IsSigned=*/false);
1233 
1234   SrcVal = Builder.CreateAnd(SrcVal, llvm::APInt::getLowBitsSet(ResSizeInBits,
1235                                                                 Info.getSize()),
1236                              "bf.value");
1237 
1238   // Return the new value of the bit-field, if requested.
1239   if (Result) {
1240     // Cast back to the proper type for result.
1241     llvm::Type *SrcTy = Src.getScalarVal()->getType();
1242     llvm::Value *ReloadVal = Builder.CreateIntCast(SrcVal, SrcTy, false,
1243                                                    "bf.reload.val");
1244 
1245     // Sign extend if necessary.
1246     if (Info.isSigned()) {
1247       unsigned ExtraBits = ResSizeInBits - Info.getSize();
1248       if (ExtraBits)
1249         ReloadVal = Builder.CreateAShr(Builder.CreateShl(ReloadVal, ExtraBits),
1250                                        ExtraBits, "bf.reload.sext");
1251     }
1252 
1253     *Result = ReloadVal;
1254   }
1255 
1256   // Iterate over the components, writing each piece to memory.
1257   for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) {
1258     const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i);
1259 
1260     // Get the field pointer.
1261     llvm::Value *Ptr = Dst.getBitFieldBaseAddr();
1262     unsigned addressSpace =
1263       cast<llvm::PointerType>(Ptr->getType())->getAddressSpace();
1264 
1265     // Only offset by the field index if used, so that incoming values are not
1266     // required to be structures.
1267     if (AI.FieldIndex)
1268       Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field");
1269 
1270     // Offset by the byte offset, if used.
1271     if (!AI.FieldByteOffset.isZero()) {
1272       Ptr = EmitCastToVoidPtr(Ptr);
1273       Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(),
1274                                        "bf.field.offs");
1275     }
1276 
1277     // Cast to the access type.
1278     llvm::Type *AccessLTy =
1279       llvm::Type::getIntNTy(getLLVMContext(), AI.AccessWidth);
1280 
1281     llvm::Type *PTy = AccessLTy->getPointerTo(addressSpace);
1282     Ptr = Builder.CreateBitCast(Ptr, PTy);
1283 
1284     // Extract the piece of the bit-field value to write in this access, limited
1285     // to the values that are part of this access.
1286     llvm::Value *Val = SrcVal;
1287     if (AI.TargetBitOffset)
1288       Val = Builder.CreateLShr(Val, AI.TargetBitOffset);
1289     Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(ResSizeInBits,
1290                                                             AI.TargetBitWidth));
1291 
1292     // Extend or truncate to the access size.
1293     if (ResSizeInBits < AI.AccessWidth)
1294       Val = Builder.CreateZExt(Val, AccessLTy);
1295     else if (ResSizeInBits > AI.AccessWidth)
1296       Val = Builder.CreateTrunc(Val, AccessLTy);
1297 
1298     // Shift into the position in memory.
1299     if (AI.FieldBitStart)
1300       Val = Builder.CreateShl(Val, AI.FieldBitStart);
1301 
1302     // If necessary, load and OR in bits that are outside of the bit-field.
1303     if (AI.TargetBitWidth != AI.AccessWidth) {
1304       llvm::LoadInst *Load = Builder.CreateLoad(Ptr, Dst.isVolatileQualified());
1305       if (!AI.AccessAlignment.isZero())
1306         Load->setAlignment(AI.AccessAlignment.getQuantity());
1307 
1308       // Compute the mask for zeroing the bits that are part of the bit-field.
1309       llvm::APInt InvMask =
1310         ~llvm::APInt::getBitsSet(AI.AccessWidth, AI.FieldBitStart,
1311                                  AI.FieldBitStart + AI.TargetBitWidth);
1312 
1313       // Apply the mask and OR in to the value to write.
1314       Val = Builder.CreateOr(Builder.CreateAnd(Load, InvMask), Val);
1315     }
1316 
1317     // Write the value.
1318     llvm::StoreInst *Store = Builder.CreateStore(Val, Ptr,
1319                                                  Dst.isVolatileQualified());
1320     if (!AI.AccessAlignment.isZero())
1321       Store->setAlignment(AI.AccessAlignment.getQuantity());
1322   }
1323 }
1324 
1325 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
1326                                                                LValue Dst) {
1327   // This access turns into a read/modify/write of the vector.  Load the input
1328   // value now.
1329   llvm::LoadInst *Load = Builder.CreateLoad(Dst.getExtVectorAddr(),
1330                                             Dst.isVolatileQualified());
1331   Load->setAlignment(Dst.getAlignment().getQuantity());
1332   llvm::Value *Vec = Load;
1333   const llvm::Constant *Elts = Dst.getExtVectorElts();
1334 
1335   llvm::Value *SrcVal = Src.getScalarVal();
1336 
1337   if (const VectorType *VTy = Dst.getType()->getAs<VectorType>()) {
1338     unsigned NumSrcElts = VTy->getNumElements();
1339     unsigned NumDstElts =
1340        cast<llvm::VectorType>(Vec->getType())->getNumElements();
1341     if (NumDstElts == NumSrcElts) {
1342       // Use shuffle vector is the src and destination are the same number of
1343       // elements and restore the vector mask since it is on the side it will be
1344       // stored.
1345       SmallVector<llvm::Constant*, 4> Mask(NumDstElts);
1346       for (unsigned i = 0; i != NumSrcElts; ++i)
1347         Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i);
1348 
1349       llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1350       Vec = Builder.CreateShuffleVector(SrcVal,
1351                                         llvm::UndefValue::get(Vec->getType()),
1352                                         MaskV);
1353     } else if (NumDstElts > NumSrcElts) {
1354       // Extended the source vector to the same length and then shuffle it
1355       // into the destination.
1356       // FIXME: since we're shuffling with undef, can we just use the indices
1357       //        into that?  This could be simpler.
1358       SmallVector<llvm::Constant*, 4> ExtMask;
1359       for (unsigned i = 0; i != NumSrcElts; ++i)
1360         ExtMask.push_back(Builder.getInt32(i));
1361       ExtMask.resize(NumDstElts, llvm::UndefValue::get(Int32Ty));
1362       llvm::Value *ExtMaskV = llvm::ConstantVector::get(ExtMask);
1363       llvm::Value *ExtSrcVal =
1364         Builder.CreateShuffleVector(SrcVal,
1365                                     llvm::UndefValue::get(SrcVal->getType()),
1366                                     ExtMaskV);
1367       // build identity
1368       SmallVector<llvm::Constant*, 4> Mask;
1369       for (unsigned i = 0; i != NumDstElts; ++i)
1370         Mask.push_back(Builder.getInt32(i));
1371 
1372       // modify when what gets shuffled in
1373       for (unsigned i = 0; i != NumSrcElts; ++i)
1374         Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i+NumDstElts);
1375       llvm::Value *MaskV = llvm::ConstantVector::get(Mask);
1376       Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV);
1377     } else {
1378       // We should never shorten the vector
1379       llvm_unreachable("unexpected shorten vector length");
1380     }
1381   } else {
1382     // If the Src is a scalar (not a vector) it must be updating one element.
1383     unsigned InIdx = getAccessedFieldNo(0, Elts);
1384     llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx);
1385     Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt);
1386   }
1387 
1388   llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getExtVectorAddr(),
1389                                                Dst.isVolatileQualified());
1390   Store->setAlignment(Dst.getAlignment().getQuantity());
1391 }
1392 
1393 // setObjCGCLValueClass - sets class of he lvalue for the purpose of
1394 // generating write-barries API. It is currently a global, ivar,
1395 // or neither.
1396 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E,
1397                                  LValue &LV,
1398                                  bool IsMemberAccess=false) {
1399   if (Ctx.getLangOpts().getGC() == LangOptions::NonGC)
1400     return;
1401 
1402   if (isa<ObjCIvarRefExpr>(E)) {
1403     QualType ExpTy = E->getType();
1404     if (IsMemberAccess && ExpTy->isPointerType()) {
1405       // If ivar is a structure pointer, assigning to field of
1406       // this struct follows gcc's behavior and makes it a non-ivar
1407       // writer-barrier conservatively.
1408       ExpTy = ExpTy->getAs<PointerType>()->getPointeeType();
1409       if (ExpTy->isRecordType()) {
1410         LV.setObjCIvar(false);
1411         return;
1412       }
1413     }
1414     LV.setObjCIvar(true);
1415     ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E));
1416     LV.setBaseIvarExp(Exp->getBase());
1417     LV.setObjCArray(E->getType()->isArrayType());
1418     return;
1419   }
1420 
1421   if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) {
1422     if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) {
1423       if (VD->hasGlobalStorage()) {
1424         LV.setGlobalObjCRef(true);
1425         LV.setThreadLocalRef(VD->isThreadSpecified());
1426       }
1427     }
1428     LV.setObjCArray(E->getType()->isArrayType());
1429     return;
1430   }
1431 
1432   if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) {
1433     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);
1434     return;
1435   }
1436 
1437   if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) {
1438     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);
1439     if (LV.isObjCIvar()) {
1440       // If cast is to a structure pointer, follow gcc's behavior and make it
1441       // a non-ivar write-barrier.
1442       QualType ExpTy = E->getType();
1443       if (ExpTy->isPointerType())
1444         ExpTy = ExpTy->getAs<PointerType>()->getPointeeType();
1445       if (ExpTy->isRecordType())
1446         LV.setObjCIvar(false);
1447     }
1448     return;
1449   }
1450 
1451   if (const GenericSelectionExpr *Exp = dyn_cast<GenericSelectionExpr>(E)) {
1452     setObjCGCLValueClass(Ctx, Exp->getResultExpr(), LV);
1453     return;
1454   }
1455 
1456   if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) {
1457     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);
1458     return;
1459   }
1460 
1461   if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) {
1462     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);
1463     return;
1464   }
1465 
1466   if (const ObjCBridgedCastExpr *Exp = dyn_cast<ObjCBridgedCastExpr>(E)) {
1467     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess);
1468     return;
1469   }
1470 
1471   if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) {
1472     setObjCGCLValueClass(Ctx, Exp->getBase(), LV);
1473     if (LV.isObjCIvar() && !LV.isObjCArray())
1474       // Using array syntax to assigning to what an ivar points to is not
1475       // same as assigning to the ivar itself. {id *Names;} Names[i] = 0;
1476       LV.setObjCIvar(false);
1477     else if (LV.isGlobalObjCRef() && !LV.isObjCArray())
1478       // Using array syntax to assigning to what global points to is not
1479       // same as assigning to the global itself. {id *G;} G[i] = 0;
1480       LV.setGlobalObjCRef(false);
1481     return;
1482   }
1483 
1484   if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) {
1485     setObjCGCLValueClass(Ctx, Exp->getBase(), LV, true);
1486     // We don't know if member is an 'ivar', but this flag is looked at
1487     // only in the context of LV.isObjCIvar().
1488     LV.setObjCArray(E->getType()->isArrayType());
1489     return;
1490   }
1491 }
1492 
1493 static llvm::Value *
1494 EmitBitCastOfLValueToProperType(CodeGenFunction &CGF,
1495                                 llvm::Value *V, llvm::Type *IRType,
1496                                 StringRef Name = StringRef()) {
1497   unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace();
1498   return CGF.Builder.CreateBitCast(V, IRType->getPointerTo(AS), Name);
1499 }
1500 
1501 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF,
1502                                       const Expr *E, const VarDecl *VD) {
1503   assert((VD->hasExternalStorage() || VD->isFileVarDecl()) &&
1504          "Var decl must have external storage or be a file var decl!");
1505 
1506   llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD);
1507   llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType());
1508   V = EmitBitCastOfLValueToProperType(CGF, V, RealVarTy);
1509   CharUnits Alignment = CGF.getContext().getDeclAlign(VD);
1510   QualType T = E->getType();
1511   LValue LV;
1512   if (VD->getType()->isReferenceType()) {
1513     llvm::LoadInst *LI = CGF.Builder.CreateLoad(V);
1514     LI->setAlignment(Alignment.getQuantity());
1515     V = LI;
1516     LV = CGF.MakeNaturalAlignAddrLValue(V, T);
1517   } else {
1518     LV = CGF.MakeAddrLValue(V, E->getType(), Alignment);
1519   }
1520   setObjCGCLValueClass(CGF.getContext(), E, LV);
1521   return LV;
1522 }
1523 
1524 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF,
1525                                      const Expr *E, const FunctionDecl *FD) {
1526   llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD);
1527   if (!FD->hasPrototype()) {
1528     if (const FunctionProtoType *Proto =
1529             FD->getType()->getAs<FunctionProtoType>()) {
1530       // Ugly case: for a K&R-style definition, the type of the definition
1531       // isn't the same as the type of a use.  Correct for this with a
1532       // bitcast.
1533       QualType NoProtoType =
1534           CGF.getContext().getFunctionNoProtoType(Proto->getResultType());
1535       NoProtoType = CGF.getContext().getPointerType(NoProtoType);
1536       V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType));
1537     }
1538   }
1539   CharUnits Alignment = CGF.getContext().getDeclAlign(FD);
1540   return CGF.MakeAddrLValue(V, E->getType(), Alignment);
1541 }
1542 
1543 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
1544   const NamedDecl *ND = E->getDecl();
1545   CharUnits Alignment = getContext().getDeclAlign(ND);
1546   QualType T = E->getType();
1547 
1548   // FIXME: We should be able to assert this for FunctionDecls as well!
1549   // FIXME: We should be able to assert this for all DeclRefExprs, not just
1550   // those with a valid source location.
1551   assert((ND->isUsed(false) || !isa<VarDecl>(ND) ||
1552           !E->getLocation().isValid()) &&
1553          "Should not use decl without marking it used!");
1554 
1555   if (ND->hasAttr<WeakRefAttr>()) {
1556     const ValueDecl *VD = cast<ValueDecl>(ND);
1557     llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD);
1558     return MakeAddrLValue(Aliasee, E->getType(), Alignment);
1559   }
1560 
1561   if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) {
1562     // Check if this is a global variable.
1563     if (VD->hasExternalStorage() || VD->isFileVarDecl())
1564       return EmitGlobalVarDeclLValue(*this, E, VD);
1565 
1566     bool isBlockVariable = VD->hasAttr<BlocksAttr>();
1567 
1568     bool NonGCable = VD->hasLocalStorage() &&
1569                      !VD->getType()->isReferenceType() &&
1570                      !isBlockVariable;
1571 
1572     llvm::Value *V = LocalDeclMap[VD];
1573     if (!V && VD->isStaticLocal())
1574       V = CGM.getStaticLocalDeclAddress(VD);
1575 
1576     // Use special handling for lambdas.
1577     if (!V) {
1578       if (FieldDecl *FD = LambdaCaptureFields.lookup(VD))
1579         return EmitLValueForField(CXXABIThisValue, FD, 0);
1580 
1581       assert(isa<BlockDecl>(CurCodeDecl) && E->refersToEnclosingLocal());
1582       CharUnits alignment = getContext().getDeclAlign(VD);
1583       return MakeAddrLValue(GetAddrOfBlockDecl(VD, isBlockVariable),
1584                             E->getType(), alignment);
1585     }
1586 
1587     assert(V && "DeclRefExpr not entered in LocalDeclMap?");
1588 
1589     if (isBlockVariable)
1590       V = BuildBlockByrefAddress(V, VD);
1591 
1592     LValue LV;
1593     if (VD->getType()->isReferenceType()) {
1594       llvm::LoadInst *LI = Builder.CreateLoad(V);
1595       LI->setAlignment(Alignment.getQuantity());
1596       V = LI;
1597       LV = MakeNaturalAlignAddrLValue(V, T);
1598     } else {
1599       LV = MakeAddrLValue(V, T, Alignment);
1600     }
1601 
1602     if (NonGCable) {
1603       LV.getQuals().removeObjCGCAttr();
1604       LV.setNonGC(true);
1605     }
1606     setObjCGCLValueClass(getContext(), E, LV);
1607     return LV;
1608   }
1609 
1610   if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(ND))
1611     return EmitFunctionDeclLValue(*this, E, fn);
1612 
1613   llvm_unreachable("Unhandled DeclRefExpr");
1614 }
1615 
1616 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) {
1617   // __extension__ doesn't affect lvalue-ness.
1618   if (E->getOpcode() == UO_Extension)
1619     return EmitLValue(E->getSubExpr());
1620 
1621   QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType());
1622   switch (E->getOpcode()) {
1623   default: llvm_unreachable("Unknown unary operator lvalue!");
1624   case UO_Deref: {
1625     QualType T = E->getSubExpr()->getType()->getPointeeType();
1626     assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type");
1627 
1628     LValue LV = MakeNaturalAlignAddrLValue(EmitScalarExpr(E->getSubExpr()), T);
1629     LV.getQuals().setAddressSpace(ExprTy.getAddressSpace());
1630 
1631     // We should not generate __weak write barrier on indirect reference
1632     // of a pointer to object; as in void foo (__weak id *param); *param = 0;
1633     // But, we continue to generate __strong write barrier on indirect write
1634     // into a pointer to object.
1635     if (getContext().getLangOpts().ObjC1 &&
1636         getContext().getLangOpts().getGC() != LangOptions::NonGC &&
1637         LV.isObjCWeak())
1638       LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
1639     return LV;
1640   }
1641   case UO_Real:
1642   case UO_Imag: {
1643     LValue LV = EmitLValue(E->getSubExpr());
1644     assert(LV.isSimple() && "real/imag on non-ordinary l-value");
1645     llvm::Value *Addr = LV.getAddress();
1646 
1647     // __real is valid on scalars.  This is a faster way of testing that.
1648     // __imag can only produce an rvalue on scalars.
1649     if (E->getOpcode() == UO_Real &&
1650         !cast<llvm::PointerType>(Addr->getType())
1651            ->getElementType()->isStructTy()) {
1652       assert(E->getSubExpr()->getType()->isArithmeticType());
1653       return LV;
1654     }
1655 
1656     assert(E->getSubExpr()->getType()->isAnyComplexType());
1657 
1658     unsigned Idx = E->getOpcode() == UO_Imag;
1659     return MakeAddrLValue(Builder.CreateStructGEP(LV.getAddress(),
1660                                                   Idx, "idx"),
1661                           ExprTy);
1662   }
1663   case UO_PreInc:
1664   case UO_PreDec: {
1665     LValue LV = EmitLValue(E->getSubExpr());
1666     bool isInc = E->getOpcode() == UO_PreInc;
1667 
1668     if (E->getType()->isAnyComplexType())
1669       EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/);
1670     else
1671       EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/);
1672     return LV;
1673   }
1674   }
1675 }
1676 
1677 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) {
1678   return MakeAddrLValue(CGM.GetAddrOfConstantStringFromLiteral(E),
1679                         E->getType());
1680 }
1681 
1682 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) {
1683   return MakeAddrLValue(CGM.GetAddrOfConstantStringFromObjCEncode(E),
1684                         E->getType());
1685 }
1686 
1687 
1688 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
1689   switch (E->getIdentType()) {
1690   default:
1691     return EmitUnsupportedLValue(E, "predefined expression");
1692 
1693   case PredefinedExpr::Func:
1694   case PredefinedExpr::Function:
1695   case PredefinedExpr::PrettyFunction: {
1696     unsigned Type = E->getIdentType();
1697     std::string GlobalVarName;
1698 
1699     switch (Type) {
1700     default: llvm_unreachable("Invalid type");
1701     case PredefinedExpr::Func:
1702       GlobalVarName = "__func__.";
1703       break;
1704     case PredefinedExpr::Function:
1705       GlobalVarName = "__FUNCTION__.";
1706       break;
1707     case PredefinedExpr::PrettyFunction:
1708       GlobalVarName = "__PRETTY_FUNCTION__.";
1709       break;
1710     }
1711 
1712     StringRef FnName = CurFn->getName();
1713     if (FnName.startswith("\01"))
1714       FnName = FnName.substr(1);
1715     GlobalVarName += FnName;
1716 
1717     const Decl *CurDecl = CurCodeDecl;
1718     if (CurDecl == 0)
1719       CurDecl = getContext().getTranslationUnitDecl();
1720 
1721     std::string FunctionName =
1722         (isa<BlockDecl>(CurDecl)
1723          ? FnName.str()
1724          : PredefinedExpr::ComputeName((PredefinedExpr::IdentType)Type, CurDecl));
1725 
1726     llvm::Constant *C =
1727       CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str());
1728     return MakeAddrLValue(C, E->getType());
1729   }
1730   }
1731 }
1732 
1733 llvm::BasicBlock *CodeGenFunction::getTrapBB() {
1734   const CodeGenOptions &GCO = CGM.getCodeGenOpts();
1735 
1736   // If we are not optimzing, don't collapse all calls to trap in the function
1737   // to the same call, that way, in the debugger they can see which operation
1738   // did in fact fail.  If we are optimizing, we collapse all calls to trap down
1739   // to just one per function to save on codesize.
1740   if (GCO.OptimizationLevel && TrapBB)
1741     return TrapBB;
1742 
1743   llvm::BasicBlock *Cont = 0;
1744   if (HaveInsertPoint()) {
1745     Cont = createBasicBlock("cont");
1746     EmitBranch(Cont);
1747   }
1748   TrapBB = createBasicBlock("trap");
1749   EmitBlock(TrapBB);
1750 
1751   llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap);
1752   llvm::CallInst *TrapCall = Builder.CreateCall(F);
1753   TrapCall->setDoesNotReturn();
1754   TrapCall->setDoesNotThrow();
1755   Builder.CreateUnreachable();
1756 
1757   if (Cont)
1758     EmitBlock(Cont);
1759   return TrapBB;
1760 }
1761 
1762 /// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an
1763 /// array to pointer, return the array subexpression.
1764 static const Expr *isSimpleArrayDecayOperand(const Expr *E) {
1765   // If this isn't just an array->pointer decay, bail out.
1766   const CastExpr *CE = dyn_cast<CastExpr>(E);
1767   if (CE == 0 || CE->getCastKind() != CK_ArrayToPointerDecay)
1768     return 0;
1769 
1770   // If this is a decay from variable width array, bail out.
1771   const Expr *SubExpr = CE->getSubExpr();
1772   if (SubExpr->getType()->isVariableArrayType())
1773     return 0;
1774 
1775   return SubExpr;
1776 }
1777 
1778 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
1779   // The index must always be an integer, which is not an aggregate.  Emit it.
1780   llvm::Value *Idx = EmitScalarExpr(E->getIdx());
1781   QualType IdxTy  = E->getIdx()->getType();
1782   bool IdxSigned = IdxTy->isSignedIntegerOrEnumerationType();
1783 
1784   // If the base is a vector type, then we are forming a vector element lvalue
1785   // with this subscript.
1786   if (E->getBase()->getType()->isVectorType()) {
1787     // Emit the vector as an lvalue to get its address.
1788     LValue LHS = EmitLValue(E->getBase());
1789     assert(LHS.isSimple() && "Can only subscript lvalue vectors here!");
1790     Idx = Builder.CreateIntCast(Idx, Int32Ty, IdxSigned, "vidx");
1791     return LValue::MakeVectorElt(LHS.getAddress(), Idx,
1792                                  E->getBase()->getType(), LHS.getAlignment());
1793   }
1794 
1795   // Extend or truncate the index type to 32 or 64-bits.
1796   if (Idx->getType() != IntPtrTy)
1797     Idx = Builder.CreateIntCast(Idx, IntPtrTy, IdxSigned, "idxprom");
1798 
1799   // FIXME: As llvm implements the object size checking, this can come out.
1800   if (CatchUndefined) {
1801     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E->getBase())){
1802       if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) {
1803         if (ICE->getCastKind() == CK_ArrayToPointerDecay) {
1804           if (const ConstantArrayType *CAT
1805               = getContext().getAsConstantArrayType(DRE->getType())) {
1806             llvm::APInt Size = CAT->getSize();
1807             llvm::BasicBlock *Cont = createBasicBlock("cont");
1808             Builder.CreateCondBr(Builder.CreateICmpULE(Idx,
1809                                   llvm::ConstantInt::get(Idx->getType(), Size)),
1810                                  Cont, getTrapBB());
1811             EmitBlock(Cont);
1812           }
1813         }
1814       }
1815     }
1816   }
1817 
1818   // We know that the pointer points to a type of the correct size, unless the
1819   // size is a VLA or Objective-C interface.
1820   llvm::Value *Address = 0;
1821   CharUnits ArrayAlignment;
1822   if (const VariableArrayType *vla =
1823         getContext().getAsVariableArrayType(E->getType())) {
1824     // The base must be a pointer, which is not an aggregate.  Emit
1825     // it.  It needs to be emitted first in case it's what captures
1826     // the VLA bounds.
1827     Address = EmitScalarExpr(E->getBase());
1828 
1829     // The element count here is the total number of non-VLA elements.
1830     llvm::Value *numElements = getVLASize(vla).first;
1831 
1832     // Effectively, the multiply by the VLA size is part of the GEP.
1833     // GEP indexes are signed, and scaling an index isn't permitted to
1834     // signed-overflow, so we use the same semantics for our explicit
1835     // multiply.  We suppress this if overflow is not undefined behavior.
1836     if (getLangOpts().isSignedOverflowDefined()) {
1837       Idx = Builder.CreateMul(Idx, numElements);
1838       Address = Builder.CreateGEP(Address, Idx, "arrayidx");
1839     } else {
1840       Idx = Builder.CreateNSWMul(Idx, numElements);
1841       Address = Builder.CreateInBoundsGEP(Address, Idx, "arrayidx");
1842     }
1843   } else if (const ObjCObjectType *OIT = E->getType()->getAs<ObjCObjectType>()){
1844     // Indexing over an interface, as in "NSString *P; P[4];"
1845     llvm::Value *InterfaceSize =
1846       llvm::ConstantInt::get(Idx->getType(),
1847           getContext().getTypeSizeInChars(OIT).getQuantity());
1848 
1849     Idx = Builder.CreateMul(Idx, InterfaceSize);
1850 
1851     // The base must be a pointer, which is not an aggregate.  Emit it.
1852     llvm::Value *Base = EmitScalarExpr(E->getBase());
1853     Address = EmitCastToVoidPtr(Base);
1854     Address = Builder.CreateGEP(Address, Idx, "arrayidx");
1855     Address = Builder.CreateBitCast(Address, Base->getType());
1856   } else if (const Expr *Array = isSimpleArrayDecayOperand(E->getBase())) {
1857     // If this is A[i] where A is an array, the frontend will have decayed the
1858     // base to be a ArrayToPointerDecay implicit cast.  While correct, it is
1859     // inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a
1860     // "gep x, i" here.  Emit one "gep A, 0, i".
1861     assert(Array->getType()->isArrayType() &&
1862            "Array to pointer decay must have array source type!");
1863     LValue ArrayLV = EmitLValue(Array);
1864     llvm::Value *ArrayPtr = ArrayLV.getAddress();
1865     llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0);
1866     llvm::Value *Args[] = { Zero, Idx };
1867 
1868     // Propagate the alignment from the array itself to the result.
1869     ArrayAlignment = ArrayLV.getAlignment();
1870 
1871     if (getContext().getLangOpts().isSignedOverflowDefined())
1872       Address = Builder.CreateGEP(ArrayPtr, Args, "arrayidx");
1873     else
1874       Address = Builder.CreateInBoundsGEP(ArrayPtr, Args, "arrayidx");
1875   } else {
1876     // The base must be a pointer, which is not an aggregate.  Emit it.
1877     llvm::Value *Base = EmitScalarExpr(E->getBase());
1878     if (getContext().getLangOpts().isSignedOverflowDefined())
1879       Address = Builder.CreateGEP(Base, Idx, "arrayidx");
1880     else
1881       Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx");
1882   }
1883 
1884   QualType T = E->getBase()->getType()->getPointeeType();
1885   assert(!T.isNull() &&
1886          "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type");
1887 
1888 
1889   // Limit the alignment to that of the result type.
1890   LValue LV;
1891   if (!ArrayAlignment.isZero()) {
1892     CharUnits Align = getContext().getTypeAlignInChars(T);
1893     ArrayAlignment = std::min(Align, ArrayAlignment);
1894     LV = MakeAddrLValue(Address, T, ArrayAlignment);
1895   } else {
1896     LV = MakeNaturalAlignAddrLValue(Address, T);
1897   }
1898 
1899   LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace());
1900 
1901   if (getContext().getLangOpts().ObjC1 &&
1902       getContext().getLangOpts().getGC() != LangOptions::NonGC) {
1903     LV.setNonGC(!E->isOBJCGCCandidate(getContext()));
1904     setObjCGCLValueClass(getContext(), E, LV);
1905   }
1906   return LV;
1907 }
1908 
1909 static
1910 llvm::Constant *GenerateConstantVector(CGBuilderTy &Builder,
1911                                        SmallVector<unsigned, 4> &Elts) {
1912   SmallVector<llvm::Constant*, 4> CElts;
1913   for (unsigned i = 0, e = Elts.size(); i != e; ++i)
1914     CElts.push_back(Builder.getInt32(Elts[i]));
1915 
1916   return llvm::ConstantVector::get(CElts);
1917 }
1918 
1919 LValue CodeGenFunction::
1920 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
1921   // Emit the base vector as an l-value.
1922   LValue Base;
1923 
1924   // ExtVectorElementExpr's base can either be a vector or pointer to vector.
1925   if (E->isArrow()) {
1926     // If it is a pointer to a vector, emit the address and form an lvalue with
1927     // it.
1928     llvm::Value *Ptr = EmitScalarExpr(E->getBase());
1929     const PointerType *PT = E->getBase()->getType()->getAs<PointerType>();
1930     Base = MakeAddrLValue(Ptr, PT->getPointeeType());
1931     Base.getQuals().removeObjCGCAttr();
1932   } else if (E->getBase()->isGLValue()) {
1933     // Otherwise, if the base is an lvalue ( as in the case of foo.x.x),
1934     // emit the base as an lvalue.
1935     assert(E->getBase()->getType()->isVectorType());
1936     Base = EmitLValue(E->getBase());
1937   } else {
1938     // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such.
1939     assert(E->getBase()->getType()->isVectorType() &&
1940            "Result must be a vector");
1941     llvm::Value *Vec = EmitScalarExpr(E->getBase());
1942 
1943     // Store the vector to memory (because LValue wants an address).
1944     llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType());
1945     Builder.CreateStore(Vec, VecMem);
1946     Base = MakeAddrLValue(VecMem, E->getBase()->getType());
1947   }
1948 
1949   QualType type =
1950     E->getType().withCVRQualifiers(Base.getQuals().getCVRQualifiers());
1951 
1952   // Encode the element access list into a vector of unsigned indices.
1953   SmallVector<unsigned, 4> Indices;
1954   E->getEncodedElementAccess(Indices);
1955 
1956   if (Base.isSimple()) {
1957     llvm::Constant *CV = GenerateConstantVector(Builder, Indices);
1958     return LValue::MakeExtVectorElt(Base.getAddress(), CV, type,
1959                                     Base.getAlignment());
1960   }
1961   assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!");
1962 
1963   llvm::Constant *BaseElts = Base.getExtVectorElts();
1964   SmallVector<llvm::Constant *, 4> CElts;
1965 
1966   for (unsigned i = 0, e = Indices.size(); i != e; ++i)
1967     CElts.push_back(BaseElts->getAggregateElement(Indices[i]));
1968   llvm::Constant *CV = llvm::ConstantVector::get(CElts);
1969   return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, type,
1970                                   Base.getAlignment());
1971 }
1972 
1973 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) {
1974   bool isNonGC = false;
1975   Expr *BaseExpr = E->getBase();
1976   llvm::Value *BaseValue = NULL;
1977   Qualifiers BaseQuals;
1978 
1979   // If this is s.x, emit s as an lvalue.  If it is s->x, emit s as a scalar.
1980   if (E->isArrow()) {
1981     BaseValue = EmitScalarExpr(BaseExpr);
1982     const PointerType *PTy =
1983       BaseExpr->getType()->getAs<PointerType>();
1984     BaseQuals = PTy->getPointeeType().getQualifiers();
1985   } else {
1986     LValue BaseLV = EmitLValue(BaseExpr);
1987     if (BaseLV.isNonGC())
1988       isNonGC = true;
1989     // FIXME: this isn't right for bitfields.
1990     BaseValue = BaseLV.getAddress();
1991     QualType BaseTy = BaseExpr->getType();
1992     BaseQuals = BaseTy.getQualifiers();
1993   }
1994 
1995   NamedDecl *ND = E->getMemberDecl();
1996   if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) {
1997     LValue LV = EmitLValueForField(BaseValue, Field,
1998                                    BaseQuals.getCVRQualifiers());
1999     LV.setNonGC(isNonGC);
2000     setObjCGCLValueClass(getContext(), E, LV);
2001     return LV;
2002   }
2003 
2004   if (VarDecl *VD = dyn_cast<VarDecl>(ND))
2005     return EmitGlobalVarDeclLValue(*this, E, VD);
2006 
2007   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
2008     return EmitFunctionDeclLValue(*this, E, FD);
2009 
2010   llvm_unreachable("Unhandled member declaration!");
2011 }
2012 
2013 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value *BaseValue,
2014                                               const FieldDecl *Field,
2015                                               unsigned CVRQualifiers) {
2016   const CGRecordLayout &RL =
2017     CGM.getTypes().getCGRecordLayout(Field->getParent());
2018   const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field);
2019   return LValue::MakeBitfield(BaseValue, Info,
2020                           Field->getType().withCVRQualifiers(CVRQualifiers));
2021 }
2022 
2023 /// EmitLValueForAnonRecordField - Given that the field is a member of
2024 /// an anonymous struct or union buried inside a record, and given
2025 /// that the base value is a pointer to the enclosing record, derive
2026 /// an lvalue for the ultimate field.
2027 LValue CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value *BaseValue,
2028                                              const IndirectFieldDecl *Field,
2029                                                      unsigned CVRQualifiers) {
2030   IndirectFieldDecl::chain_iterator I = Field->chain_begin(),
2031     IEnd = Field->chain_end();
2032   while (true) {
2033     LValue LV = EmitLValueForField(BaseValue, cast<FieldDecl>(*I),
2034                                    CVRQualifiers);
2035     if (++I == IEnd) return LV;
2036 
2037     assert(LV.isSimple());
2038     BaseValue = LV.getAddress();
2039     CVRQualifiers |= LV.getVRQualifiers();
2040   }
2041 }
2042 
2043 LValue CodeGenFunction::EmitLValueForField(llvm::Value *baseAddr,
2044                                            const FieldDecl *field,
2045                                            unsigned cvr) {
2046   if (field->isBitField())
2047     return EmitLValueForBitfield(baseAddr, field, cvr);
2048 
2049   const RecordDecl *rec = field->getParent();
2050   QualType type = field->getType();
2051   CharUnits alignment = getContext().getDeclAlign(field);
2052 
2053   bool mayAlias = rec->hasAttr<MayAliasAttr>();
2054 
2055   llvm::Value *addr = baseAddr;
2056   if (rec->isUnion()) {
2057     // For unions, there is no pointer adjustment.
2058     assert(!type->isReferenceType() && "union has reference member");
2059   } else {
2060     // For structs, we GEP to the field that the record layout suggests.
2061     unsigned idx = CGM.getTypes().getCGRecordLayout(rec).getLLVMFieldNo(field);
2062     addr = Builder.CreateStructGEP(addr, idx, field->getName());
2063 
2064     // If this is a reference field, load the reference right now.
2065     if (const ReferenceType *refType = type->getAs<ReferenceType>()) {
2066       llvm::LoadInst *load = Builder.CreateLoad(addr, "ref");
2067       if (cvr & Qualifiers::Volatile) load->setVolatile(true);
2068       load->setAlignment(alignment.getQuantity());
2069 
2070       if (CGM.shouldUseTBAA()) {
2071         llvm::MDNode *tbaa;
2072         if (mayAlias)
2073           tbaa = CGM.getTBAAInfo(getContext().CharTy);
2074         else
2075           tbaa = CGM.getTBAAInfo(type);
2076         CGM.DecorateInstruction(load, tbaa);
2077       }
2078 
2079       addr = load;
2080       mayAlias = false;
2081       type = refType->getPointeeType();
2082       if (type->isIncompleteType())
2083         alignment = CharUnits();
2084       else
2085         alignment = getContext().getTypeAlignInChars(type);
2086       cvr = 0; // qualifiers don't recursively apply to referencee
2087     }
2088   }
2089 
2090   // Make sure that the address is pointing to the right type.  This is critical
2091   // for both unions and structs.  A union needs a bitcast, a struct element
2092   // will need a bitcast if the LLVM type laid out doesn't match the desired
2093   // type.
2094   addr = EmitBitCastOfLValueToProperType(*this, addr,
2095                                          CGM.getTypes().ConvertTypeForMem(type),
2096                                          field->getName());
2097 
2098   if (field->hasAttr<AnnotateAttr>())
2099     addr = EmitFieldAnnotations(field, addr);
2100 
2101   LValue LV = MakeAddrLValue(addr, type, alignment);
2102   LV.getQuals().addCVRQualifiers(cvr);
2103 
2104   // __weak attribute on a field is ignored.
2105   if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak)
2106     LV.getQuals().removeObjCGCAttr();
2107 
2108   // Fields of may_alias structs act like 'char' for TBAA purposes.
2109   // FIXME: this should get propagated down through anonymous structs
2110   // and unions.
2111   if (mayAlias && LV.getTBAAInfo())
2112     LV.setTBAAInfo(CGM.getTBAAInfo(getContext().CharTy));
2113 
2114   return LV;
2115 }
2116 
2117 LValue
2118 CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value *BaseValue,
2119                                                   const FieldDecl *Field,
2120                                                   unsigned CVRQualifiers) {
2121   QualType FieldType = Field->getType();
2122 
2123   if (!FieldType->isReferenceType())
2124     return EmitLValueForField(BaseValue, Field, CVRQualifiers);
2125 
2126   const CGRecordLayout &RL =
2127     CGM.getTypes().getCGRecordLayout(Field->getParent());
2128   unsigned idx = RL.getLLVMFieldNo(Field);
2129   llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx);
2130   assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs");
2131 
2132 
2133   // Make sure that the address is pointing to the right type.  This is critical
2134   // for both unions and structs.  A union needs a bitcast, a struct element
2135   // will need a bitcast if the LLVM type laid out doesn't match the desired
2136   // type.
2137   llvm::Type *llvmType = ConvertTypeForMem(FieldType);
2138   unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace();
2139   V = Builder.CreateBitCast(V, llvmType->getPointerTo(AS));
2140 
2141   CharUnits Alignment = getContext().getDeclAlign(Field);
2142   return MakeAddrLValue(V, FieldType, Alignment);
2143 }
2144 
2145 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){
2146   if (E->isFileScope()) {
2147     llvm::Value *GlobalPtr = CGM.GetAddrOfConstantCompoundLiteral(E);
2148     return MakeAddrLValue(GlobalPtr, E->getType());
2149   }
2150 
2151   llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral");
2152   const Expr *InitExpr = E->getInitializer();
2153   LValue Result = MakeAddrLValue(DeclPtr, E->getType());
2154 
2155   EmitAnyExprToMem(InitExpr, DeclPtr, E->getType().getQualifiers());
2156 
2157   return Result;
2158 }
2159 
2160 LValue CodeGenFunction::
2161 EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) {
2162   if (!expr->isGLValue()) {
2163     // ?: here should be an aggregate.
2164     assert((hasAggregateLLVMType(expr->getType()) &&
2165             !expr->getType()->isAnyComplexType()) &&
2166            "Unexpected conditional operator!");
2167     return EmitAggExprToLValue(expr);
2168   }
2169 
2170   OpaqueValueMapping binding(*this, expr);
2171 
2172   const Expr *condExpr = expr->getCond();
2173   bool CondExprBool;
2174   if (ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) {
2175     const Expr *live = expr->getTrueExpr(), *dead = expr->getFalseExpr();
2176     if (!CondExprBool) std::swap(live, dead);
2177 
2178     if (!ContainsLabel(dead))
2179       return EmitLValue(live);
2180   }
2181 
2182   llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true");
2183   llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false");
2184   llvm::BasicBlock *contBlock = createBasicBlock("cond.end");
2185 
2186   ConditionalEvaluation eval(*this);
2187   EmitBranchOnBoolExpr(condExpr, lhsBlock, rhsBlock);
2188 
2189   // Any temporaries created here are conditional.
2190   EmitBlock(lhsBlock);
2191   eval.begin(*this);
2192   LValue lhs = EmitLValue(expr->getTrueExpr());
2193   eval.end(*this);
2194 
2195   if (!lhs.isSimple())
2196     return EmitUnsupportedLValue(expr, "conditional operator");
2197 
2198   lhsBlock = Builder.GetInsertBlock();
2199   Builder.CreateBr(contBlock);
2200 
2201   // Any temporaries created here are conditional.
2202   EmitBlock(rhsBlock);
2203   eval.begin(*this);
2204   LValue rhs = EmitLValue(expr->getFalseExpr());
2205   eval.end(*this);
2206   if (!rhs.isSimple())
2207     return EmitUnsupportedLValue(expr, "conditional operator");
2208   rhsBlock = Builder.GetInsertBlock();
2209 
2210   EmitBlock(contBlock);
2211 
2212   llvm::PHINode *phi = Builder.CreatePHI(lhs.getAddress()->getType(), 2,
2213                                          "cond-lvalue");
2214   phi->addIncoming(lhs.getAddress(), lhsBlock);
2215   phi->addIncoming(rhs.getAddress(), rhsBlock);
2216   return MakeAddrLValue(phi, expr->getType());
2217 }
2218 
2219 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast.
2220 /// If the cast is a dynamic_cast, we can have the usual lvalue result,
2221 /// otherwise if a cast is needed by the code generator in an lvalue context,
2222 /// then it must mean that we need the address of an aggregate in order to
2223 /// access one of its fields.  This can happen for all the reasons that casts
2224 /// are permitted with aggregate result, including noop aggregate casts, and
2225 /// cast from scalar to union.
2226 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
2227   switch (E->getCastKind()) {
2228   case CK_ToVoid:
2229     return EmitUnsupportedLValue(E, "unexpected cast lvalue");
2230 
2231   case CK_Dependent:
2232     llvm_unreachable("dependent cast kind in IR gen!");
2233 
2234   // These two casts are currently treated as no-ops, although they could
2235   // potentially be real operations depending on the target's ABI.
2236   case CK_NonAtomicToAtomic:
2237   case CK_AtomicToNonAtomic:
2238 
2239   case CK_NoOp:
2240   case CK_LValueToRValue:
2241     if (!E->getSubExpr()->Classify(getContext()).isPRValue()
2242         || E->getType()->isRecordType())
2243       return EmitLValue(E->getSubExpr());
2244     // Fall through to synthesize a temporary.
2245 
2246   case CK_BitCast:
2247   case CK_ArrayToPointerDecay:
2248   case CK_FunctionToPointerDecay:
2249   case CK_NullToMemberPointer:
2250   case CK_NullToPointer:
2251   case CK_IntegralToPointer:
2252   case CK_PointerToIntegral:
2253   case CK_PointerToBoolean:
2254   case CK_VectorSplat:
2255   case CK_IntegralCast:
2256   case CK_IntegralToBoolean:
2257   case CK_IntegralToFloating:
2258   case CK_FloatingToIntegral:
2259   case CK_FloatingToBoolean:
2260   case CK_FloatingCast:
2261   case CK_FloatingRealToComplex:
2262   case CK_FloatingComplexToReal:
2263   case CK_FloatingComplexToBoolean:
2264   case CK_FloatingComplexCast:
2265   case CK_FloatingComplexToIntegralComplex:
2266   case CK_IntegralRealToComplex:
2267   case CK_IntegralComplexToReal:
2268   case CK_IntegralComplexToBoolean:
2269   case CK_IntegralComplexCast:
2270   case CK_IntegralComplexToFloatingComplex:
2271   case CK_DerivedToBaseMemberPointer:
2272   case CK_BaseToDerivedMemberPointer:
2273   case CK_MemberPointerToBoolean:
2274   case CK_ReinterpretMemberPointer:
2275   case CK_AnyPointerToBlockPointerCast:
2276   case CK_ARCProduceObject:
2277   case CK_ARCConsumeObject:
2278   case CK_ARCReclaimReturnedObject:
2279   case CK_ARCExtendBlockObject:
2280   case CK_CopyAndAutoreleaseBlockObject: {
2281     // These casts only produce lvalues when we're binding a reference to a
2282     // temporary realized from a (converted) pure rvalue. Emit the expression
2283     // as a value, copy it into a temporary, and return an lvalue referring to
2284     // that temporary.
2285     llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp");
2286     EmitAnyExprToMem(E, V, E->getType().getQualifiers());
2287     return MakeAddrLValue(V, E->getType());
2288   }
2289 
2290   case CK_Dynamic: {
2291     LValue LV = EmitLValue(E->getSubExpr());
2292     llvm::Value *V = LV.getAddress();
2293     const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E);
2294     return MakeAddrLValue(EmitDynamicCast(V, DCE), E->getType());
2295   }
2296 
2297   case CK_ConstructorConversion:
2298   case CK_UserDefinedConversion:
2299   case CK_CPointerToObjCPointerCast:
2300   case CK_BlockPointerToObjCPointerCast:
2301     return EmitLValue(E->getSubExpr());
2302 
2303   case CK_UncheckedDerivedToBase:
2304   case CK_DerivedToBase: {
2305     const RecordType *DerivedClassTy =
2306       E->getSubExpr()->getType()->getAs<RecordType>();
2307     CXXRecordDecl *DerivedClassDecl =
2308       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
2309 
2310     LValue LV = EmitLValue(E->getSubExpr());
2311     llvm::Value *This = LV.getAddress();
2312 
2313     // Perform the derived-to-base conversion
2314     llvm::Value *Base =
2315       GetAddressOfBaseClass(This, DerivedClassDecl,
2316                             E->path_begin(), E->path_end(),
2317                             /*NullCheckValue=*/false);
2318 
2319     return MakeAddrLValue(Base, E->getType());
2320   }
2321   case CK_ToUnion:
2322     return EmitAggExprToLValue(E);
2323   case CK_BaseToDerived: {
2324     const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>();
2325     CXXRecordDecl *DerivedClassDecl =
2326       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
2327 
2328     LValue LV = EmitLValue(E->getSubExpr());
2329 
2330     // Perform the base-to-derived conversion
2331     llvm::Value *Derived =
2332       GetAddressOfDerivedClass(LV.getAddress(), DerivedClassDecl,
2333                                E->path_begin(), E->path_end(),
2334                                /*NullCheckValue=*/false);
2335 
2336     return MakeAddrLValue(Derived, E->getType());
2337   }
2338   case CK_LValueBitCast: {
2339     // This must be a reinterpret_cast (or c-style equivalent).
2340     const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E);
2341 
2342     LValue LV = EmitLValue(E->getSubExpr());
2343     llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
2344                                            ConvertType(CE->getTypeAsWritten()));
2345     return MakeAddrLValue(V, E->getType());
2346   }
2347   case CK_ObjCObjectLValueCast: {
2348     LValue LV = EmitLValue(E->getSubExpr());
2349     QualType ToType = getContext().getLValueReferenceType(E->getType());
2350     llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
2351                                            ConvertType(ToType));
2352     return MakeAddrLValue(V, E->getType());
2353   }
2354   }
2355 
2356   llvm_unreachable("Unhandled lvalue cast kind?");
2357 }
2358 
2359 LValue CodeGenFunction::EmitNullInitializationLValue(
2360                                               const CXXScalarValueInitExpr *E) {
2361   QualType Ty = E->getType();
2362   LValue LV = MakeAddrLValue(CreateMemTemp(Ty), Ty);
2363   EmitNullInitialization(LV.getAddress(), Ty);
2364   return LV;
2365 }
2366 
2367 LValue CodeGenFunction::EmitOpaqueValueLValue(const OpaqueValueExpr *e) {
2368   assert(OpaqueValueMappingData::shouldBindAsLValue(e));
2369   return getOpaqueLValueMapping(e);
2370 }
2371 
2372 LValue CodeGenFunction::EmitMaterializeTemporaryExpr(
2373                                            const MaterializeTemporaryExpr *E) {
2374   RValue RV = EmitReferenceBindingToExpr(E, /*InitializedDecl=*/0);
2375   return MakeAddrLValue(RV.getScalarVal(), E->getType());
2376 }
2377 
2378 
2379 //===--------------------------------------------------------------------===//
2380 //                             Expression Emission
2381 //===--------------------------------------------------------------------===//
2382 
2383 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E,
2384                                      ReturnValueSlot ReturnValue) {
2385   if (CGDebugInfo *DI = getDebugInfo())
2386     DI->EmitLocation(Builder, E->getLocStart());
2387 
2388   // Builtins never have block type.
2389   if (E->getCallee()->getType()->isBlockPointerType())
2390     return EmitBlockCallExpr(E, ReturnValue);
2391 
2392   if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E))
2393     return EmitCXXMemberCallExpr(CE, ReturnValue);
2394 
2395   if (const CUDAKernelCallExpr *CE = dyn_cast<CUDAKernelCallExpr>(E))
2396     return EmitCUDAKernelCallExpr(CE, ReturnValue);
2397 
2398   const Decl *TargetDecl = E->getCalleeDecl();
2399   if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl)) {
2400     if (unsigned builtinID = FD->getBuiltinID())
2401       return EmitBuiltinExpr(FD, builtinID, E);
2402   }
2403 
2404   if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E))
2405     if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl))
2406       return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue);
2407 
2408   if (const CXXPseudoDestructorExpr *PseudoDtor
2409           = dyn_cast<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) {
2410     QualType DestroyedType = PseudoDtor->getDestroyedType();
2411     if (getContext().getLangOpts().ObjCAutoRefCount &&
2412         DestroyedType->isObjCLifetimeType() &&
2413         (DestroyedType.getObjCLifetime() == Qualifiers::OCL_Strong ||
2414          DestroyedType.getObjCLifetime() == Qualifiers::OCL_Weak)) {
2415       // Automatic Reference Counting:
2416       //   If the pseudo-expression names a retainable object with weak or
2417       //   strong lifetime, the object shall be released.
2418       Expr *BaseExpr = PseudoDtor->getBase();
2419       llvm::Value *BaseValue = NULL;
2420       Qualifiers BaseQuals;
2421 
2422       // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar.
2423       if (PseudoDtor->isArrow()) {
2424         BaseValue = EmitScalarExpr(BaseExpr);
2425         const PointerType *PTy = BaseExpr->getType()->getAs<PointerType>();
2426         BaseQuals = PTy->getPointeeType().getQualifiers();
2427       } else {
2428         LValue BaseLV = EmitLValue(BaseExpr);
2429         BaseValue = BaseLV.getAddress();
2430         QualType BaseTy = BaseExpr->getType();
2431         BaseQuals = BaseTy.getQualifiers();
2432       }
2433 
2434       switch (PseudoDtor->getDestroyedType().getObjCLifetime()) {
2435       case Qualifiers::OCL_None:
2436       case Qualifiers::OCL_ExplicitNone:
2437       case Qualifiers::OCL_Autoreleasing:
2438         break;
2439 
2440       case Qualifiers::OCL_Strong:
2441         EmitARCRelease(Builder.CreateLoad(BaseValue,
2442                           PseudoDtor->getDestroyedType().isVolatileQualified()),
2443                        /*precise*/ true);
2444         break;
2445 
2446       case Qualifiers::OCL_Weak:
2447         EmitARCDestroyWeak(BaseValue);
2448         break;
2449       }
2450     } else {
2451       // C++ [expr.pseudo]p1:
2452       //   The result shall only be used as the operand for the function call
2453       //   operator (), and the result of such a call has type void. The only
2454       //   effect is the evaluation of the postfix-expression before the dot or
2455       //   arrow.
2456       EmitScalarExpr(E->getCallee());
2457     }
2458 
2459     return RValue::get(0);
2460   }
2461 
2462   llvm::Value *Callee = EmitScalarExpr(E->getCallee());
2463   return EmitCall(E->getCallee()->getType(), Callee, ReturnValue,
2464                   E->arg_begin(), E->arg_end(), TargetDecl);
2465 }
2466 
2467 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) {
2468   // Comma expressions just emit their LHS then their RHS as an l-value.
2469   if (E->getOpcode() == BO_Comma) {
2470     EmitIgnoredExpr(E->getLHS());
2471     EnsureInsertPoint();
2472     return EmitLValue(E->getRHS());
2473   }
2474 
2475   if (E->getOpcode() == BO_PtrMemD ||
2476       E->getOpcode() == BO_PtrMemI)
2477     return EmitPointerToDataMemberBinaryExpr(E);
2478 
2479   assert(E->getOpcode() == BO_Assign && "unexpected binary l-value");
2480 
2481   // Note that in all of these cases, __block variables need the RHS
2482   // evaluated first just in case the variable gets moved by the RHS.
2483 
2484   if (!hasAggregateLLVMType(E->getType())) {
2485     switch (E->getLHS()->getType().getObjCLifetime()) {
2486     case Qualifiers::OCL_Strong:
2487       return EmitARCStoreStrong(E, /*ignored*/ false).first;
2488 
2489     case Qualifiers::OCL_Autoreleasing:
2490       return EmitARCStoreAutoreleasing(E).first;
2491 
2492     // No reason to do any of these differently.
2493     case Qualifiers::OCL_None:
2494     case Qualifiers::OCL_ExplicitNone:
2495     case Qualifiers::OCL_Weak:
2496       break;
2497     }
2498 
2499     RValue RV = EmitAnyExpr(E->getRHS());
2500     LValue LV = EmitLValue(E->getLHS());
2501     EmitStoreThroughLValue(RV, LV);
2502     return LV;
2503   }
2504 
2505   if (E->getType()->isAnyComplexType())
2506     return EmitComplexAssignmentLValue(E);
2507 
2508   return EmitAggExprToLValue(E);
2509 }
2510 
2511 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) {
2512   RValue RV = EmitCallExpr(E);
2513 
2514   if (!RV.isScalar())
2515     return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
2516 
2517   assert(E->getCallReturnType()->isReferenceType() &&
2518          "Can't have a scalar return unless the return type is a "
2519          "reference type!");
2520 
2521   return MakeAddrLValue(RV.getScalarVal(), E->getType());
2522 }
2523 
2524 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) {
2525   // FIXME: This shouldn't require another copy.
2526   return EmitAggExprToLValue(E);
2527 }
2528 
2529 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) {
2530   assert(E->getType()->getAsCXXRecordDecl()->hasTrivialDestructor()
2531          && "binding l-value to type which needs a temporary");
2532   AggValueSlot Slot = CreateAggTemp(E->getType());
2533   EmitCXXConstructExpr(E, Slot);
2534   return MakeAddrLValue(Slot.getAddr(), E->getType());
2535 }
2536 
2537 LValue
2538 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) {
2539   return MakeAddrLValue(EmitCXXTypeidExpr(E), E->getType());
2540 }
2541 
2542 LValue
2543 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) {
2544   AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue");
2545   Slot.setExternallyDestructed();
2546   EmitAggExpr(E->getSubExpr(), Slot);
2547   EmitCXXTemporary(E->getTemporary(), E->getType(), Slot.getAddr());
2548   return MakeAddrLValue(Slot.getAddr(), E->getType());
2549 }
2550 
2551 LValue
2552 CodeGenFunction::EmitLambdaLValue(const LambdaExpr *E) {
2553   AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue");
2554   EmitLambdaExpr(E, Slot);
2555   return MakeAddrLValue(Slot.getAddr(), E->getType());
2556 }
2557 
2558 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) {
2559   RValue RV = EmitObjCMessageExpr(E);
2560 
2561   if (!RV.isScalar())
2562     return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
2563 
2564   assert(E->getMethodDecl()->getResultType()->isReferenceType() &&
2565          "Can't have a scalar return unless the return type is a "
2566          "reference type!");
2567 
2568   return MakeAddrLValue(RV.getScalarVal(), E->getType());
2569 }
2570 
2571 LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) {
2572   llvm::Value *V =
2573     CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true);
2574   return MakeAddrLValue(V, E->getType());
2575 }
2576 
2577 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface,
2578                                              const ObjCIvarDecl *Ivar) {
2579   return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar);
2580 }
2581 
2582 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
2583                                           llvm::Value *BaseValue,
2584                                           const ObjCIvarDecl *Ivar,
2585                                           unsigned CVRQualifiers) {
2586   return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue,
2587                                                    Ivar, CVRQualifiers);
2588 }
2589 
2590 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
2591   // FIXME: A lot of the code below could be shared with EmitMemberExpr.
2592   llvm::Value *BaseValue = 0;
2593   const Expr *BaseExpr = E->getBase();
2594   Qualifiers BaseQuals;
2595   QualType ObjectTy;
2596   if (E->isArrow()) {
2597     BaseValue = EmitScalarExpr(BaseExpr);
2598     ObjectTy = BaseExpr->getType()->getPointeeType();
2599     BaseQuals = ObjectTy.getQualifiers();
2600   } else {
2601     LValue BaseLV = EmitLValue(BaseExpr);
2602     // FIXME: this isn't right for bitfields.
2603     BaseValue = BaseLV.getAddress();
2604     ObjectTy = BaseExpr->getType();
2605     BaseQuals = ObjectTy.getQualifiers();
2606   }
2607 
2608   LValue LV =
2609     EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(),
2610                       BaseQuals.getCVRQualifiers());
2611   setObjCGCLValueClass(getContext(), E, LV);
2612   return LV;
2613 }
2614 
2615 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) {
2616   // Can only get l-value for message expression returning aggregate type
2617   RValue RV = EmitAnyExprToTemp(E);
2618   return MakeAddrLValue(RV.getAggregateAddr(), E->getType());
2619 }
2620 
2621 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee,
2622                                  ReturnValueSlot ReturnValue,
2623                                  CallExpr::const_arg_iterator ArgBeg,
2624                                  CallExpr::const_arg_iterator ArgEnd,
2625                                  const Decl *TargetDecl) {
2626   // Get the actual function type. The callee type will always be a pointer to
2627   // function type or a block pointer type.
2628   assert(CalleeType->isFunctionPointerType() &&
2629          "Call must have function pointer type!");
2630 
2631   CalleeType = getContext().getCanonicalType(CalleeType);
2632 
2633   const FunctionType *FnType
2634     = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType());
2635 
2636   CallArgList Args;
2637   EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd);
2638 
2639   const CGFunctionInfo &FnInfo =
2640     CGM.getTypes().arrangeFunctionCall(Args, FnType);
2641 
2642   // C99 6.5.2.2p6:
2643   //   If the expression that denotes the called function has a type
2644   //   that does not include a prototype, [the default argument
2645   //   promotions are performed]. If the number of arguments does not
2646   //   equal the number of parameters, the behavior is undefined. If
2647   //   the function is defined with a type that includes a prototype,
2648   //   and either the prototype ends with an ellipsis (, ...) or the
2649   //   types of the arguments after promotion are not compatible with
2650   //   the types of the parameters, the behavior is undefined. If the
2651   //   function is defined with a type that does not include a
2652   //   prototype, and the types of the arguments after promotion are
2653   //   not compatible with those of the parameters after promotion,
2654   //   the behavior is undefined [except in some trivial cases].
2655   // That is, in the general case, we should assume that a call
2656   // through an unprototyped function type works like a *non-variadic*
2657   // call.  The way we make this work is to cast to the exact type
2658   // of the promoted arguments.
2659   if (isa<FunctionNoProtoType>(FnType) && !FnInfo.isVariadic()) {
2660     llvm::Type *CalleeTy = getTypes().GetFunctionType(FnInfo);
2661     CalleeTy = CalleeTy->getPointerTo();
2662     Callee = Builder.CreateBitCast(Callee, CalleeTy, "callee.knr.cast");
2663   }
2664 
2665   return EmitCall(FnInfo, Callee, ReturnValue, Args, TargetDecl);
2666 }
2667 
2668 LValue CodeGenFunction::
2669 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) {
2670   llvm::Value *BaseV;
2671   if (E->getOpcode() == BO_PtrMemI)
2672     BaseV = EmitScalarExpr(E->getLHS());
2673   else
2674     BaseV = EmitLValue(E->getLHS()).getAddress();
2675 
2676   llvm::Value *OffsetV = EmitScalarExpr(E->getRHS());
2677 
2678   const MemberPointerType *MPT
2679     = E->getRHS()->getType()->getAs<MemberPointerType>();
2680 
2681   llvm::Value *AddV =
2682     CGM.getCXXABI().EmitMemberDataPointerAddress(*this, BaseV, OffsetV, MPT);
2683 
2684   return MakeAddrLValue(AddV, MPT->getPointeeType());
2685 }
2686 
2687 static void
2688 EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, llvm::Value *Dest,
2689              llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2,
2690              uint64_t Size, unsigned Align, llvm::AtomicOrdering Order) {
2691   if (E->isCmpXChg()) {
2692     // Note that cmpxchg only supports specifying one ordering and
2693     // doesn't support weak cmpxchg, at least at the moment.
2694     llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1);
2695     LoadVal1->setAlignment(Align);
2696     llvm::LoadInst *LoadVal2 = CGF.Builder.CreateLoad(Val2);
2697     LoadVal2->setAlignment(Align);
2698     llvm::AtomicCmpXchgInst *CXI =
2699         CGF.Builder.CreateAtomicCmpXchg(Ptr, LoadVal1, LoadVal2, Order);
2700     CXI->setVolatile(E->isVolatile());
2701     llvm::StoreInst *StoreVal1 = CGF.Builder.CreateStore(CXI, Val1);
2702     StoreVal1->setAlignment(Align);
2703     llvm::Value *Cmp = CGF.Builder.CreateICmpEQ(CXI, LoadVal1);
2704     CGF.EmitStoreOfScalar(Cmp, CGF.MakeAddrLValue(Dest, E->getType()));
2705     return;
2706   }
2707 
2708   if (E->getOp() == AtomicExpr::Load) {
2709     llvm::LoadInst *Load = CGF.Builder.CreateLoad(Ptr);
2710     Load->setAtomic(Order);
2711     Load->setAlignment(Size);
2712     Load->setVolatile(E->isVolatile());
2713     llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(Load, Dest);
2714     StoreDest->setAlignment(Align);
2715     return;
2716   }
2717 
2718   if (E->getOp() == AtomicExpr::Store) {
2719     assert(!Dest && "Store does not return a value");
2720     llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1);
2721     LoadVal1->setAlignment(Align);
2722     llvm::StoreInst *Store = CGF.Builder.CreateStore(LoadVal1, Ptr);
2723     Store->setAtomic(Order);
2724     Store->setAlignment(Size);
2725     Store->setVolatile(E->isVolatile());
2726     return;
2727   }
2728 
2729   llvm::AtomicRMWInst::BinOp Op = llvm::AtomicRMWInst::Add;
2730   switch (E->getOp()) {
2731     case AtomicExpr::CmpXchgWeak:
2732     case AtomicExpr::CmpXchgStrong:
2733     case AtomicExpr::Store:
2734     case AtomicExpr::Init:
2735     case AtomicExpr::Load:  assert(0 && "Already handled!");
2736     case AtomicExpr::Add:   Op = llvm::AtomicRMWInst::Add;  break;
2737     case AtomicExpr::Sub:   Op = llvm::AtomicRMWInst::Sub;  break;
2738     case AtomicExpr::And:   Op = llvm::AtomicRMWInst::And;  break;
2739     case AtomicExpr::Or:    Op = llvm::AtomicRMWInst::Or;   break;
2740     case AtomicExpr::Xor:   Op = llvm::AtomicRMWInst::Xor;  break;
2741     case AtomicExpr::Xchg:  Op = llvm::AtomicRMWInst::Xchg; break;
2742   }
2743   llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1);
2744   LoadVal1->setAlignment(Align);
2745   llvm::AtomicRMWInst *RMWI =
2746       CGF.Builder.CreateAtomicRMW(Op, Ptr, LoadVal1, Order);
2747   RMWI->setVolatile(E->isVolatile());
2748   llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(RMWI, Dest);
2749   StoreDest->setAlignment(Align);
2750 }
2751 
2752 // This function emits any expression (scalar, complex, or aggregate)
2753 // into a temporary alloca.
2754 static llvm::Value *
2755 EmitValToTemp(CodeGenFunction &CGF, Expr *E) {
2756   llvm::Value *DeclPtr = CGF.CreateMemTemp(E->getType(), ".atomictmp");
2757   CGF.EmitAnyExprToMem(E, DeclPtr, E->getType().getQualifiers());
2758   return DeclPtr;
2759 }
2760 
2761 static RValue ConvertTempToRValue(CodeGenFunction &CGF, QualType Ty,
2762                                   llvm::Value *Dest) {
2763   if (Ty->isAnyComplexType())
2764     return RValue::getComplex(CGF.LoadComplexFromAddr(Dest, false));
2765   if (CGF.hasAggregateLLVMType(Ty))
2766     return RValue::getAggregate(Dest);
2767   return RValue::get(CGF.EmitLoadOfScalar(CGF.MakeAddrLValue(Dest, Ty)));
2768 }
2769 
2770 RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E, llvm::Value *Dest) {
2771   QualType AtomicTy = E->getPtr()->getType()->getPointeeType();
2772   QualType MemTy = AtomicTy->getAs<AtomicType>()->getValueType();
2773   CharUnits sizeChars = getContext().getTypeSizeInChars(AtomicTy);
2774   uint64_t Size = sizeChars.getQuantity();
2775   CharUnits alignChars = getContext().getTypeAlignInChars(AtomicTy);
2776   unsigned Align = alignChars.getQuantity();
2777   unsigned MaxInlineWidth =
2778       getContext().getTargetInfo().getMaxAtomicInlineWidth();
2779   bool UseLibcall = (Size != Align || Size > MaxInlineWidth);
2780 
2781 
2782 
2783   llvm::Value *Ptr, *Order, *OrderFail = 0, *Val1 = 0, *Val2 = 0;
2784   Ptr = EmitScalarExpr(E->getPtr());
2785 
2786   if (E->getOp() == AtomicExpr::Init) {
2787     assert(!Dest && "Init does not return a value");
2788     Val1 = EmitScalarExpr(E->getVal1());
2789     llvm::StoreInst *Store = Builder.CreateStore(Val1, Ptr);
2790     Store->setAlignment(Size);
2791     Store->setVolatile(E->isVolatile());
2792     return RValue::get(0);
2793   }
2794 
2795   Order = EmitScalarExpr(E->getOrder());
2796   if (E->isCmpXChg()) {
2797     Val1 = EmitScalarExpr(E->getVal1());
2798     Val2 = EmitValToTemp(*this, E->getVal2());
2799     OrderFail = EmitScalarExpr(E->getOrderFail());
2800     (void)OrderFail; // OrderFail is unused at the moment
2801   } else if ((E->getOp() == AtomicExpr::Add || E->getOp() == AtomicExpr::Sub) &&
2802              MemTy->isPointerType()) {
2803     // For pointers, we're required to do a bit of math: adding 1 to an int*
2804     // is not the same as adding 1 to a uintptr_t.
2805     QualType Val1Ty = E->getVal1()->getType();
2806     llvm::Value *Val1Scalar = EmitScalarExpr(E->getVal1());
2807     CharUnits PointeeIncAmt =
2808         getContext().getTypeSizeInChars(MemTy->getPointeeType());
2809     Val1Scalar = Builder.CreateMul(Val1Scalar, CGM.getSize(PointeeIncAmt));
2810     Val1 = CreateMemTemp(Val1Ty, ".atomictmp");
2811     EmitStoreOfScalar(Val1Scalar, MakeAddrLValue(Val1, Val1Ty));
2812   } else if (E->getOp() != AtomicExpr::Load) {
2813     Val1 = EmitValToTemp(*this, E->getVal1());
2814   }
2815 
2816   if (E->getOp() != AtomicExpr::Store && !Dest)
2817     Dest = CreateMemTemp(E->getType(), ".atomicdst");
2818 
2819   if (UseLibcall) {
2820     // FIXME: Finalize what the libcalls are actually supposed to look like.
2821     // See also http://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary .
2822     return EmitUnsupportedRValue(E, "atomic library call");
2823   }
2824 #if 0
2825   if (UseLibcall) {
2826     const char* LibCallName;
2827     switch (E->getOp()) {
2828     case AtomicExpr::CmpXchgWeak:
2829       LibCallName = "__atomic_compare_exchange_generic"; break;
2830     case AtomicExpr::CmpXchgStrong:
2831       LibCallName = "__atomic_compare_exchange_generic"; break;
2832     case AtomicExpr::Add:   LibCallName = "__atomic_fetch_add_generic"; break;
2833     case AtomicExpr::Sub:   LibCallName = "__atomic_fetch_sub_generic"; break;
2834     case AtomicExpr::And:   LibCallName = "__atomic_fetch_and_generic"; break;
2835     case AtomicExpr::Or:    LibCallName = "__atomic_fetch_or_generic"; break;
2836     case AtomicExpr::Xor:   LibCallName = "__atomic_fetch_xor_generic"; break;
2837     case AtomicExpr::Xchg:  LibCallName = "__atomic_exchange_generic"; break;
2838     case AtomicExpr::Store: LibCallName = "__atomic_store_generic"; break;
2839     case AtomicExpr::Load:  LibCallName = "__atomic_load_generic"; break;
2840     }
2841     llvm::SmallVector<QualType, 4> Params;
2842     CallArgList Args;
2843     QualType RetTy = getContext().VoidTy;
2844     if (E->getOp() != AtomicExpr::Store && !E->isCmpXChg())
2845       Args.add(RValue::get(EmitCastToVoidPtr(Dest)),
2846                getContext().VoidPtrTy);
2847     Args.add(RValue::get(EmitCastToVoidPtr(Ptr)),
2848              getContext().VoidPtrTy);
2849     if (E->getOp() != AtomicExpr::Load)
2850       Args.add(RValue::get(EmitCastToVoidPtr(Val1)),
2851                getContext().VoidPtrTy);
2852     if (E->isCmpXChg()) {
2853       Args.add(RValue::get(EmitCastToVoidPtr(Val2)),
2854                getContext().VoidPtrTy);
2855       RetTy = getContext().IntTy;
2856     }
2857     Args.add(RValue::get(llvm::ConstantInt::get(SizeTy, Size)),
2858              getContext().getSizeType());
2859     const CGFunctionInfo &FuncInfo =
2860         CGM.getTypes().arrangeFunctionCall(RetTy, Args, FunctionType::ExtInfo(),
2861                                            /*variadic*/ false);
2862     llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FuncInfo, false);
2863     llvm::Constant *Func = CGM.CreateRuntimeFunction(FTy, LibCallName);
2864     RValue Res = EmitCall(FuncInfo, Func, ReturnValueSlot(), Args);
2865     if (E->isCmpXChg())
2866       return Res;
2867     if (E->getOp() == AtomicExpr::Store)
2868       return RValue::get(0);
2869     return ConvertTempToRValue(*this, E->getType(), Dest);
2870   }
2871 #endif
2872   llvm::Type *IPtrTy =
2873       llvm::IntegerType::get(getLLVMContext(), Size * 8)->getPointerTo();
2874   llvm::Value *OrigDest = Dest;
2875   Ptr = Builder.CreateBitCast(Ptr, IPtrTy);
2876   if (Val1) Val1 = Builder.CreateBitCast(Val1, IPtrTy);
2877   if (Val2) Val2 = Builder.CreateBitCast(Val2, IPtrTy);
2878   if (Dest && !E->isCmpXChg()) Dest = Builder.CreateBitCast(Dest, IPtrTy);
2879 
2880   if (isa<llvm::ConstantInt>(Order)) {
2881     int ord = cast<llvm::ConstantInt>(Order)->getZExtValue();
2882     switch (ord) {
2883     case 0:  // memory_order_relaxed
2884       EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2885                    llvm::Monotonic);
2886       break;
2887     case 1:  // memory_order_consume
2888     case 2:  // memory_order_acquire
2889       EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2890                    llvm::Acquire);
2891       break;
2892     case 3:  // memory_order_release
2893       EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2894                    llvm::Release);
2895       break;
2896     case 4:  // memory_order_acq_rel
2897       EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2898                    llvm::AcquireRelease);
2899       break;
2900     case 5:  // memory_order_seq_cst
2901       EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2902                    llvm::SequentiallyConsistent);
2903       break;
2904     default: // invalid order
2905       // We should not ever get here normally, but it's hard to
2906       // enforce that in general.
2907       break;
2908     }
2909     if (E->getOp() == AtomicExpr::Store || E->getOp() == AtomicExpr::Init)
2910       return RValue::get(0);
2911     return ConvertTempToRValue(*this, E->getType(), OrigDest);
2912   }
2913 
2914   // Long case, when Order isn't obviously constant.
2915 
2916   // Create all the relevant BB's
2917   llvm::BasicBlock *MonotonicBB = 0, *AcquireBB = 0, *ReleaseBB = 0,
2918                    *AcqRelBB = 0, *SeqCstBB = 0;
2919   MonotonicBB = createBasicBlock("monotonic", CurFn);
2920   if (E->getOp() != AtomicExpr::Store)
2921     AcquireBB = createBasicBlock("acquire", CurFn);
2922   if (E->getOp() != AtomicExpr::Load)
2923     ReleaseBB = createBasicBlock("release", CurFn);
2924   if (E->getOp() != AtomicExpr::Load && E->getOp() != AtomicExpr::Store)
2925     AcqRelBB = createBasicBlock("acqrel", CurFn);
2926   SeqCstBB = createBasicBlock("seqcst", CurFn);
2927   llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn);
2928 
2929   // Create the switch for the split
2930   // MonotonicBB is arbitrarily chosen as the default case; in practice, this
2931   // doesn't matter unless someone is crazy enough to use something that
2932   // doesn't fold to a constant for the ordering.
2933   Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false);
2934   llvm::SwitchInst *SI = Builder.CreateSwitch(Order, MonotonicBB);
2935 
2936   // Emit all the different atomics
2937   Builder.SetInsertPoint(MonotonicBB);
2938   EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2939                llvm::Monotonic);
2940   Builder.CreateBr(ContBB);
2941   if (E->getOp() != AtomicExpr::Store) {
2942     Builder.SetInsertPoint(AcquireBB);
2943     EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2944                  llvm::Acquire);
2945     Builder.CreateBr(ContBB);
2946     SI->addCase(Builder.getInt32(1), AcquireBB);
2947     SI->addCase(Builder.getInt32(2), AcquireBB);
2948   }
2949   if (E->getOp() != AtomicExpr::Load) {
2950     Builder.SetInsertPoint(ReleaseBB);
2951     EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2952                  llvm::Release);
2953     Builder.CreateBr(ContBB);
2954     SI->addCase(Builder.getInt32(3), ReleaseBB);
2955   }
2956   if (E->getOp() != AtomicExpr::Load && E->getOp() != AtomicExpr::Store) {
2957     Builder.SetInsertPoint(AcqRelBB);
2958     EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2959                  llvm::AcquireRelease);
2960     Builder.CreateBr(ContBB);
2961     SI->addCase(Builder.getInt32(4), AcqRelBB);
2962   }
2963   Builder.SetInsertPoint(SeqCstBB);
2964   EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align,
2965                llvm::SequentiallyConsistent);
2966   Builder.CreateBr(ContBB);
2967   SI->addCase(Builder.getInt32(5), SeqCstBB);
2968 
2969   // Cleanup and return
2970   Builder.SetInsertPoint(ContBB);
2971   if (E->getOp() == AtomicExpr::Store)
2972     return RValue::get(0);
2973   return ConvertTempToRValue(*this, E->getType(), OrigDest);
2974 }
2975 
2976 void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, unsigned AccuracyN,
2977                                     unsigned AccuracyD) {
2978   assert(Val->getType()->isFPOrFPVectorTy());
2979   if (!AccuracyN || !isa<llvm::Instruction>(Val))
2980     return;
2981 
2982   llvm::Value *Vals[2];
2983   Vals[0] = llvm::ConstantInt::get(Int32Ty, AccuracyN);
2984   Vals[1] = llvm::ConstantInt::get(Int32Ty, AccuracyD);
2985   llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(), Vals);
2986 
2987   cast<llvm::Instruction>(Val)->setMetadata(llvm::LLVMContext::MD_fpaccuracy,
2988                                             Node);
2989 }
2990 
2991 namespace {
2992   struct LValueOrRValue {
2993     LValue LV;
2994     RValue RV;
2995   };
2996 }
2997 
2998 static LValueOrRValue emitPseudoObjectExpr(CodeGenFunction &CGF,
2999                                            const PseudoObjectExpr *E,
3000                                            bool forLValue,
3001                                            AggValueSlot slot) {
3002   llvm::SmallVector<CodeGenFunction::OpaqueValueMappingData, 4> opaques;
3003 
3004   // Find the result expression, if any.
3005   const Expr *resultExpr = E->getResultExpr();
3006   LValueOrRValue result;
3007 
3008   for (PseudoObjectExpr::const_semantics_iterator
3009          i = E->semantics_begin(), e = E->semantics_end(); i != e; ++i) {
3010     const Expr *semantic = *i;
3011 
3012     // If this semantic expression is an opaque value, bind it
3013     // to the result of its source expression.
3014     if (const OpaqueValueExpr *ov = dyn_cast<OpaqueValueExpr>(semantic)) {
3015 
3016       // If this is the result expression, we may need to evaluate
3017       // directly into the slot.
3018       typedef CodeGenFunction::OpaqueValueMappingData OVMA;
3019       OVMA opaqueData;
3020       if (ov == resultExpr && ov->isRValue() && !forLValue &&
3021           CodeGenFunction::hasAggregateLLVMType(ov->getType()) &&
3022           !ov->getType()->isAnyComplexType()) {
3023         CGF.EmitAggExpr(ov->getSourceExpr(), slot);
3024 
3025         LValue LV = CGF.MakeAddrLValue(slot.getAddr(), ov->getType());
3026         opaqueData = OVMA::bind(CGF, ov, LV);
3027         result.RV = slot.asRValue();
3028 
3029       // Otherwise, emit as normal.
3030       } else {
3031         opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr());
3032 
3033         // If this is the result, also evaluate the result now.
3034         if (ov == resultExpr) {
3035           if (forLValue)
3036             result.LV = CGF.EmitLValue(ov);
3037           else
3038             result.RV = CGF.EmitAnyExpr(ov, slot);
3039         }
3040       }
3041 
3042       opaques.push_back(opaqueData);
3043 
3044     // Otherwise, if the expression is the result, evaluate it
3045     // and remember the result.
3046     } else if (semantic == resultExpr) {
3047       if (forLValue)
3048         result.LV = CGF.EmitLValue(semantic);
3049       else
3050         result.RV = CGF.EmitAnyExpr(semantic, slot);
3051 
3052     // Otherwise, evaluate the expression in an ignored context.
3053     } else {
3054       CGF.EmitIgnoredExpr(semantic);
3055     }
3056   }
3057 
3058   // Unbind all the opaques now.
3059   for (unsigned i = 0, e = opaques.size(); i != e; ++i)
3060     opaques[i].unbind(CGF);
3061 
3062   return result;
3063 }
3064 
3065 RValue CodeGenFunction::EmitPseudoObjectRValue(const PseudoObjectExpr *E,
3066                                                AggValueSlot slot) {
3067   return emitPseudoObjectExpr(*this, E, false, slot).RV;
3068 }
3069 
3070 LValue CodeGenFunction::EmitPseudoObjectLValue(const PseudoObjectExpr *E) {
3071   return emitPseudoObjectExpr(*this, E, true, AggValueSlot::ignored()).LV;
3072 }
3073