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 "CGObjCRuntime.h"
18 #include "clang/AST/ASTContext.h"
19 #include "clang/AST/DeclObjC.h"
20 #include "llvm/Target/TargetData.h"
21 using namespace clang;
22 using namespace CodeGen;
23 
24 //===--------------------------------------------------------------------===//
25 //                        Miscellaneous Helper Methods
26 //===--------------------------------------------------------------------===//
27 
28 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
29 /// block.
30 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty,
31                                                     const llvm::Twine &Name) {
32   if (!Builder.isNamePreserving())
33     return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt);
34   return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt);
35 }
36 
37 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified
38 /// expression and compare the result against zero, returning an Int1Ty value.
39 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) {
40   QualType BoolTy = getContext().BoolTy;
41   if (!E->getType()->isAnyComplexType())
42     return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy);
43 
44   return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy);
45 }
46 
47 /// EmitAnyExpr - Emit code to compute the specified expression which can have
48 /// any type.  The result is returned as an RValue struct.  If this is an
49 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where the
50 /// result should be returned.
51 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc,
52                                     bool IsAggLocVolatile, bool IgnoreResult,
53                                     bool IsInitializer) {
54   if (!hasAggregateLLVMType(E->getType()))
55     return RValue::get(EmitScalarExpr(E, IgnoreResult));
56   else if (E->getType()->isAnyComplexType())
57     return RValue::getComplex(EmitComplexExpr(E, false, false,
58                                               IgnoreResult, IgnoreResult));
59 
60   EmitAggExpr(E, AggLoc, IsAggLocVolatile, IgnoreResult, IsInitializer);
61   return RValue::getAggregate(AggLoc, IsAggLocVolatile);
62 }
63 
64 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will
65 /// always be accessible even if no aggregate location is provided.
66 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E,
67                                           bool IsAggLocVolatile,
68                                           bool IsInitializer) {
69   llvm::Value *AggLoc = 0;
70 
71   if (hasAggregateLLVMType(E->getType()) &&
72       !E->getType()->isAnyComplexType())
73     AggLoc = CreateTempAlloca(ConvertType(E->getType()), "agg.tmp");
74   return EmitAnyExpr(E, AggLoc, IsAggLocVolatile, /*IgnoreResult=*/false,
75                      IsInitializer);
76 }
77 
78 RValue CodeGenFunction::EmitReferenceBindingToExpr(const Expr* E,
79                                                    QualType DestType,
80                                                    bool IsInitializer) {
81   bool ShouldDestroyTemporaries = false;
82   unsigned OldNumLiveTemporaries = 0;
83 
84   if (const CXXExprWithTemporaries *TE = dyn_cast<CXXExprWithTemporaries>(E)) {
85     ShouldDestroyTemporaries = TE->shouldDestroyTemporaries();
86 
87     // Keep track of the current cleanup stack depth.
88     if (ShouldDestroyTemporaries)
89       OldNumLiveTemporaries = LiveTemporaries.size();
90 
91     E = TE->getSubExpr();
92   }
93 
94   RValue Val;
95   if (E->isLvalue(getContext()) == Expr::LV_Valid) {
96     // Emit the expr as an lvalue.
97     LValue LV = EmitLValue(E);
98     if (LV.isSimple())
99       return RValue::get(LV.getAddress());
100     Val = EmitLoadOfLValue(LV, E->getType());
101 
102     if (ShouldDestroyTemporaries) {
103       // Pop temporaries.
104       while (LiveTemporaries.size() > OldNumLiveTemporaries)
105         PopCXXTemporary();
106     }
107   } else {
108     const CXXRecordDecl *BaseClassDecl = 0;
109     const CXXRecordDecl *DerivedClassDecl = 0;
110 
111     if (const CastExpr *CE =
112           dyn_cast<CastExpr>(E->IgnoreParenNoopCasts(getContext()))) {
113       if (CE->getCastKind() == CastExpr::CK_DerivedToBase) {
114         E = CE->getSubExpr();
115 
116         BaseClassDecl =
117           cast<CXXRecordDecl>(CE->getType()->getAs<RecordType>()->getDecl());
118         DerivedClassDecl =
119           cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl());
120       }
121     }
122 
123     Val = EmitAnyExprToTemp(E, /*IsAggLocVolatile=*/false,
124                             IsInitializer);
125 
126     if (ShouldDestroyTemporaries) {
127       // Pop temporaries.
128       while (LiveTemporaries.size() > OldNumLiveTemporaries)
129         PopCXXTemporary();
130     }
131 
132     if (IsInitializer) {
133       // We might have to destroy the temporary variable.
134       if (const RecordType *RT = E->getType()->getAs<RecordType>()) {
135         if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) {
136           if (!ClassDecl->hasTrivialDestructor()) {
137             const CXXDestructorDecl *Dtor =
138               ClassDecl->getDestructor(getContext());
139 
140             DelayedCleanupBlock scope(*this);
141             EmitCXXDestructorCall(Dtor, Dtor_Complete, Val.getAggregateAddr());
142           }
143         }
144       }
145     }
146 
147     // Check if need to perform the derived-to-base cast.
148     if (BaseClassDecl) {
149       llvm::Value *Derived = Val.getAggregateAddr();
150       llvm::Value *Base =
151         GetAddressOfBaseClass(Derived, DerivedClassDecl, BaseClassDecl,
152                               /*NullCheckValue=*/false);
153       return RValue::get(Base);
154     }
155   }
156 
157   if (Val.isAggregate()) {
158     Val = RValue::get(Val.getAggregateAddr());
159   } else {
160     // Create a temporary variable that we can bind the reference to.
161     llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()),
162                                          "reftmp");
163     if (Val.isScalar())
164       EmitStoreOfScalar(Val.getScalarVal(), Temp, false, E->getType());
165     else
166       StoreComplexToAddr(Val.getComplexVal(), Temp, false);
167     Val = RValue::get(Temp);
168   }
169 
170   return Val;
171 }
172 
173 
174 /// getAccessedFieldNo - Given an encoded value and a result number, return the
175 /// input field number being accessed.
176 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx,
177                                              const llvm::Constant *Elts) {
178   if (isa<llvm::ConstantAggregateZero>(Elts))
179     return 0;
180 
181   return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue();
182 }
183 
184 
185 //===----------------------------------------------------------------------===//
186 //                         LValue Expression Emission
187 //===----------------------------------------------------------------------===//
188 
189 RValue CodeGenFunction::GetUndefRValue(QualType Ty) {
190   if (Ty->isVoidType())
191     return RValue::get(0);
192 
193   if (const ComplexType *CTy = Ty->getAs<ComplexType>()) {
194     const llvm::Type *EltTy = ConvertType(CTy->getElementType());
195     llvm::Value *U = llvm::UndefValue::get(EltTy);
196     return RValue::getComplex(std::make_pair(U, U));
197   }
198 
199   if (hasAggregateLLVMType(Ty)) {
200     const llvm::Type *LTy = llvm::PointerType::getUnqual(ConvertType(Ty));
201     return RValue::getAggregate(llvm::UndefValue::get(LTy));
202   }
203 
204   return RValue::get(llvm::UndefValue::get(ConvertType(Ty)));
205 }
206 
207 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E,
208                                               const char *Name) {
209   ErrorUnsupported(E, Name);
210   return GetUndefRValue(E->getType());
211 }
212 
213 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E,
214                                               const char *Name) {
215   ErrorUnsupported(E, Name);
216   llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType()));
217   return LValue::MakeAddr(llvm::UndefValue::get(Ty),
218                           MakeQualifiers(E->getType()));
219 }
220 
221 /// EmitLValue - Emit code to compute a designator that specifies the location
222 /// of the expression.
223 ///
224 /// This can return one of two things: a simple address or a bitfield reference.
225 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be
226 /// an LLVM pointer type.
227 ///
228 /// If this returns a bitfield reference, nothing about the pointee type of the
229 /// LLVM value is known: For example, it may not be a pointer to an integer.
230 ///
231 /// If this returns a normal address, and if the lvalue's C type is fixed size,
232 /// this method guarantees that the returned pointer type will point to an LLVM
233 /// type of the same size of the lvalue's type.  If the lvalue has a variable
234 /// length type, this is not possible.
235 ///
236 LValue CodeGenFunction::EmitLValue(const Expr *E) {
237   switch (E->getStmtClass()) {
238   default: return EmitUnsupportedLValue(E, "l-value expression");
239 
240   case Expr::BinaryOperatorClass:
241     return EmitBinaryOperatorLValue(cast<BinaryOperator>(E));
242   case Expr::CallExprClass:
243   case Expr::CXXMemberCallExprClass:
244   case Expr::CXXOperatorCallExprClass:
245     return EmitCallExprLValue(cast<CallExpr>(E));
246   case Expr::VAArgExprClass:
247     return EmitVAArgExprLValue(cast<VAArgExpr>(E));
248   case Expr::DeclRefExprClass:
249     return EmitDeclRefLValue(cast<DeclRefExpr>(E));
250   case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr());
251   case Expr::PredefinedExprClass:
252     return EmitPredefinedLValue(cast<PredefinedExpr>(E));
253   case Expr::StringLiteralClass:
254     return EmitStringLiteralLValue(cast<StringLiteral>(E));
255   case Expr::ObjCEncodeExprClass:
256     return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E));
257 
258   case Expr::BlockDeclRefExprClass:
259     return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E));
260 
261   case Expr::CXXTemporaryObjectExprClass:
262   case Expr::CXXConstructExprClass:
263     return EmitCXXConstructLValue(cast<CXXConstructExpr>(E));
264   case Expr::CXXBindTemporaryExprClass:
265     return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E));
266   case Expr::CXXExprWithTemporariesClass:
267     return EmitCXXExprWithTemporariesLValue(cast<CXXExprWithTemporaries>(E));
268   case Expr::CXXZeroInitValueExprClass:
269     return EmitNullInitializationLValue(cast<CXXZeroInitValueExpr>(E));
270   case Expr::CXXDefaultArgExprClass:
271     return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr());
272   case Expr::CXXTypeidExprClass:
273     return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E));
274 
275   case Expr::ObjCMessageExprClass:
276     return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E));
277   case Expr::ObjCIvarRefExprClass:
278     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
279   case Expr::ObjCPropertyRefExprClass:
280     return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E));
281   case Expr::ObjCImplicitSetterGetterRefExprClass:
282     return EmitObjCKVCRefLValue(cast<ObjCImplicitSetterGetterRefExpr>(E));
283   case Expr::ObjCSuperExprClass:
284     return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E));
285 
286   case Expr::StmtExprClass:
287     return EmitStmtExprLValue(cast<StmtExpr>(E));
288   case Expr::UnaryOperatorClass:
289     return EmitUnaryOpLValue(cast<UnaryOperator>(E));
290   case Expr::ArraySubscriptExprClass:
291     return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E));
292   case Expr::ExtVectorElementExprClass:
293     return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E));
294   case Expr::MemberExprClass:
295     return EmitMemberExpr(cast<MemberExpr>(E));
296   case Expr::CompoundLiteralExprClass:
297     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
298   case Expr::ConditionalOperatorClass:
299     return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E));
300   case Expr::ChooseExprClass:
301     return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext()));
302   case Expr::ImplicitCastExprClass:
303   case Expr::CStyleCastExprClass:
304   case Expr::CXXFunctionalCastExprClass:
305   case Expr::CXXStaticCastExprClass:
306   case Expr::CXXDynamicCastExprClass:
307   case Expr::CXXReinterpretCastExprClass:
308   case Expr::CXXConstCastExprClass:
309     return EmitCastLValue(cast<CastExpr>(E));
310   }
311 }
312 
313 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile,
314                                                QualType Ty) {
315   llvm::Value *V = Builder.CreateLoad(Addr, Volatile, "tmp");
316 
317   // Bool can have different representation in memory than in registers.
318   if (Ty->isBooleanType())
319     if (V->getType() != llvm::Type::getInt1Ty(VMContext))
320       V = Builder.CreateTrunc(V, llvm::Type::getInt1Ty(VMContext), "tobool");
321 
322   return V;
323 }
324 
325 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr,
326                                         bool Volatile, QualType Ty) {
327 
328   if (Ty->isBooleanType()) {
329     // Bool can have different representation in memory than in registers.
330     const llvm::Type *SrcTy = Value->getType();
331     const llvm::PointerType *DstPtr = cast<llvm::PointerType>(Addr->getType());
332     if (DstPtr->getElementType() != SrcTy) {
333       const llvm::Type *MemTy =
334         llvm::PointerType::get(SrcTy, DstPtr->getAddressSpace());
335       Addr = Builder.CreateBitCast(Addr, MemTy, "storetmp");
336     }
337   }
338   Builder.CreateStore(Value, Addr, Volatile);
339 }
340 
341 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this
342 /// method emits the address of the lvalue, then loads the result as an rvalue,
343 /// returning the rvalue.
344 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
345   if (LV.isObjCWeak()) {
346     // load of a __weak object.
347     llvm::Value *AddrWeakObj = LV.getAddress();
348     return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this,
349                                                              AddrWeakObj));
350   }
351 
352   if (LV.isSimple()) {
353     llvm::Value *Ptr = LV.getAddress();
354     const llvm::Type *EltTy =
355       cast<llvm::PointerType>(Ptr->getType())->getElementType();
356 
357     // Simple scalar l-value.
358     if (EltTy->isSingleValueType())
359       return RValue::get(EmitLoadOfScalar(Ptr, LV.isVolatileQualified(),
360                                           ExprType));
361 
362     assert(ExprType->isFunctionType() && "Unknown scalar value");
363     return RValue::get(Ptr);
364   }
365 
366   if (LV.isVectorElt()) {
367     llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(),
368                                           LV.isVolatileQualified(), "tmp");
369     return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(),
370                                                     "vecext"));
371   }
372 
373   // If this is a reference to a subset of the elements of a vector, either
374   // shuffle the input or extract/insert them as appropriate.
375   if (LV.isExtVectorElt())
376     return EmitLoadOfExtVectorElementLValue(LV, ExprType);
377 
378   if (LV.isBitfield())
379     return EmitLoadOfBitfieldLValue(LV, ExprType);
380 
381   if (LV.isPropertyRef())
382     return EmitLoadOfPropertyRefLValue(LV, ExprType);
383 
384   assert(LV.isKVCRef() && "Unknown LValue type!");
385   return EmitLoadOfKVCRefLValue(LV, ExprType);
386 }
387 
388 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
389                                                  QualType ExprType) {
390   unsigned StartBit = LV.getBitfieldStartBit();
391   unsigned BitfieldSize = LV.getBitfieldSize();
392   llvm::Value *Ptr = LV.getBitfieldAddr();
393 
394   const llvm::Type *EltTy =
395     cast<llvm::PointerType>(Ptr->getType())->getElementType();
396   unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy);
397 
398   // In some cases the bitfield may straddle two memory locations.  Currently we
399   // load the entire bitfield, then do the magic to sign-extend it if
400   // necessary. This results in somewhat more code than necessary for the common
401   // case (one load), since two shifts accomplish both the masking and sign
402   // extension.
403   unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit);
404   llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp");
405 
406   // Shift to proper location.
407   if (StartBit)
408     Val = Builder.CreateLShr(Val, llvm::ConstantInt::get(EltTy, StartBit),
409                              "bf.lo");
410 
411   // Mask off unused bits.
412   llvm::Constant *LowMask = llvm::ConstantInt::get(VMContext,
413                                 llvm::APInt::getLowBitsSet(EltTySize, LowBits));
414   Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared");
415 
416   // Fetch the high bits if necessary.
417   if (LowBits < BitfieldSize) {
418     unsigned HighBits = BitfieldSize - LowBits;
419     llvm::Value *HighPtr = Builder.CreateGEP(Ptr, llvm::ConstantInt::get(
420                             llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi");
421     llvm::Value *HighVal = Builder.CreateLoad(HighPtr,
422                                               LV.isVolatileQualified(),
423                                               "tmp");
424 
425     // Mask off unused bits.
426     llvm::Constant *HighMask = llvm::ConstantInt::get(VMContext,
427                                llvm::APInt::getLowBitsSet(EltTySize, HighBits));
428     HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared");
429 
430     // Shift to proper location and or in to bitfield value.
431     HighVal = Builder.CreateShl(HighVal,
432                                 llvm::ConstantInt::get(EltTy, LowBits));
433     Val = Builder.CreateOr(Val, HighVal, "bf.val");
434   }
435 
436   // Sign extend if necessary.
437   if (LV.isBitfieldSigned()) {
438     llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy,
439                                                     EltTySize - BitfieldSize);
440     Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits),
441                              ExtraBits, "bf.val.sext");
442   }
443 
444   // The bitfield type and the normal type differ when the storage sizes differ
445   // (currently just _Bool).
446   Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp");
447 
448   return RValue::get(Val);
449 }
450 
451 RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV,
452                                                     QualType ExprType) {
453   return EmitObjCPropertyGet(LV.getPropertyRefExpr());
454 }
455 
456 RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV,
457                                                QualType ExprType) {
458   return EmitObjCPropertyGet(LV.getKVCRefExpr());
459 }
460 
461 // If this is a reference to a subset of the elements of a vector, create an
462 // appropriate shufflevector.
463 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV,
464                                                          QualType ExprType) {
465   llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(),
466                                         LV.isVolatileQualified(), "tmp");
467 
468   const llvm::Constant *Elts = LV.getExtVectorElts();
469 
470   // If the result of the expression is a non-vector type, we must be extracting
471   // a single element.  Just codegen as an extractelement.
472   const VectorType *ExprVT = ExprType->getAs<VectorType>();
473   if (!ExprVT) {
474     unsigned InIdx = getAccessedFieldNo(0, Elts);
475     llvm::Value *Elt = llvm::ConstantInt::get(
476                                       llvm::Type::getInt32Ty(VMContext), InIdx);
477     return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp"));
478   }
479 
480   // Always use shuffle vector to try to retain the original program structure
481   unsigned NumResultElts = ExprVT->getNumElements();
482 
483   llvm::SmallVector<llvm::Constant*, 4> Mask;
484   for (unsigned i = 0; i != NumResultElts; ++i) {
485     unsigned InIdx = getAccessedFieldNo(i, Elts);
486     Mask.push_back(llvm::ConstantInt::get(
487                                      llvm::Type::getInt32Ty(VMContext), InIdx));
488   }
489 
490   llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
491   Vec = Builder.CreateShuffleVector(Vec,
492                                     llvm::UndefValue::get(Vec->getType()),
493                                     MaskV, "tmp");
494   return RValue::get(Vec);
495 }
496 
497 
498 
499 /// EmitStoreThroughLValue - Store the specified rvalue into the specified
500 /// lvalue, where both are guaranteed to the have the same type, and that type
501 /// is 'Ty'.
502 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst,
503                                              QualType Ty) {
504   if (!Dst.isSimple()) {
505     if (Dst.isVectorElt()) {
506       // Read/modify/write the vector, inserting the new element.
507       llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(),
508                                             Dst.isVolatileQualified(), "tmp");
509       Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(),
510                                         Dst.getVectorIdx(), "vecins");
511       Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified());
512       return;
513     }
514 
515     // If this is an update of extended vector elements, insert them as
516     // appropriate.
517     if (Dst.isExtVectorElt())
518       return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty);
519 
520     if (Dst.isBitfield())
521       return EmitStoreThroughBitfieldLValue(Src, Dst, Ty);
522 
523     if (Dst.isPropertyRef())
524       return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty);
525 
526     assert(Dst.isKVCRef() && "Unknown LValue type");
527     return EmitStoreThroughKVCRefLValue(Src, Dst, Ty);
528   }
529 
530   if (Dst.isObjCWeak() && !Dst.isNonGC()) {
531     // load of a __weak object.
532     llvm::Value *LvalueDst = Dst.getAddress();
533     llvm::Value *src = Src.getScalarVal();
534      CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
535     return;
536   }
537 
538   if (Dst.isObjCStrong() && !Dst.isNonGC()) {
539     // load of a __strong object.
540     llvm::Value *LvalueDst = Dst.getAddress();
541     llvm::Value *src = Src.getScalarVal();
542     if (Dst.isObjCIvar()) {
543       assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL");
544       const llvm::Type *ResultType = ConvertType(getContext().LongTy);
545       llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp());
546       llvm::Value *dst = RHS;
547       RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast");
548       llvm::Value *LHS =
549         Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast");
550       llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset");
551       CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst,
552                                               BytesBetween);
553     } else if (Dst.isGlobalObjCRef())
554       CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst);
555     else
556       CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst);
557     return;
558   }
559 
560   assert(Src.isScalar() && "Can't emit an agg store with this method");
561   EmitStoreOfScalar(Src.getScalarVal(), Dst.getAddress(),
562                     Dst.isVolatileQualified(), Ty);
563 }
564 
565 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
566                                                      QualType Ty,
567                                                      llvm::Value **Result) {
568   unsigned StartBit = Dst.getBitfieldStartBit();
569   unsigned BitfieldSize = Dst.getBitfieldSize();
570   llvm::Value *Ptr = Dst.getBitfieldAddr();
571 
572   const llvm::Type *EltTy =
573     cast<llvm::PointerType>(Ptr->getType())->getElementType();
574   unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy);
575 
576   // Get the new value, cast to the appropriate type and masked to exactly the
577   // size of the bit-field.
578   llvm::Value *SrcVal = Src.getScalarVal();
579   llvm::Value *NewVal = Builder.CreateIntCast(SrcVal, EltTy, false, "tmp");
580   llvm::Constant *Mask = llvm::ConstantInt::get(VMContext,
581                            llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize));
582   NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value");
583 
584   // Return the new value of the bit-field, if requested.
585   if (Result) {
586     // Cast back to the proper type for result.
587     const llvm::Type *SrcTy = SrcVal->getType();
588     llvm::Value *SrcTrunc = Builder.CreateIntCast(NewVal, SrcTy, false,
589                                                   "bf.reload.val");
590 
591     // Sign extend if necessary.
592     if (Dst.isBitfieldSigned()) {
593       unsigned SrcTySize = CGM.getTargetData().getTypeSizeInBits(SrcTy);
594       llvm::Value *ExtraBits = llvm::ConstantInt::get(SrcTy,
595                                                       SrcTySize - BitfieldSize);
596       SrcTrunc = Builder.CreateAShr(Builder.CreateShl(SrcTrunc, ExtraBits),
597                                     ExtraBits, "bf.reload.sext");
598     }
599 
600     *Result = SrcTrunc;
601   }
602 
603   // In some cases the bitfield may straddle two memory locations.  Emit the low
604   // part first and check to see if the high needs to be done.
605   unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit);
606   llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(),
607                                            "bf.prev.low");
608 
609   // Compute the mask for zero-ing the low part of this bitfield.
610   llvm::Constant *InvMask =
611     llvm::ConstantInt::get(VMContext,
612              ~llvm::APInt::getBitsSet(EltTySize, StartBit, StartBit + LowBits));
613 
614   // Compute the new low part as
615   //   LowVal = (LowVal & InvMask) | (NewVal << StartBit),
616   // with the shift of NewVal implicitly stripping the high bits.
617   llvm::Value *NewLowVal =
618     Builder.CreateShl(NewVal, llvm::ConstantInt::get(EltTy, StartBit),
619                       "bf.value.lo");
620   LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared");
621   LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo");
622 
623   // Write back.
624   Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified());
625 
626   // If the low part doesn't cover the bitfield emit a high part.
627   if (LowBits < BitfieldSize) {
628     unsigned HighBits = BitfieldSize - LowBits;
629     llvm::Value *HighPtr =  Builder.CreateGEP(Ptr, llvm::ConstantInt::get(
630                             llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi");
631     llvm::Value *HighVal = Builder.CreateLoad(HighPtr,
632                                               Dst.isVolatileQualified(),
633                                               "bf.prev.hi");
634 
635     // Compute the mask for zero-ing the high part of this bitfield.
636     llvm::Constant *InvMask =
637       llvm::ConstantInt::get(VMContext, ~llvm::APInt::getLowBitsSet(EltTySize,
638                                HighBits));
639 
640     // Compute the new high part as
641     //   HighVal = (HighVal & InvMask) | (NewVal lshr LowBits),
642     // where the high bits of NewVal have already been cleared and the
643     // shift stripping the low bits.
644     llvm::Value *NewHighVal =
645       Builder.CreateLShr(NewVal, llvm::ConstantInt::get(EltTy, LowBits),
646                         "bf.value.high");
647     HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared");
648     HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi");
649 
650     // Write back.
651     Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified());
652   }
653 }
654 
655 void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src,
656                                                         LValue Dst,
657                                                         QualType Ty) {
658   EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src);
659 }
660 
661 void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src,
662                                                    LValue Dst,
663                                                    QualType Ty) {
664   EmitObjCPropertySet(Dst.getKVCRefExpr(), Src);
665 }
666 
667 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
668                                                                LValue Dst,
669                                                                QualType Ty) {
670   // This access turns into a read/modify/write of the vector.  Load the input
671   // value now.
672   llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(),
673                                         Dst.isVolatileQualified(), "tmp");
674   const llvm::Constant *Elts = Dst.getExtVectorElts();
675 
676   llvm::Value *SrcVal = Src.getScalarVal();
677 
678   if (const VectorType *VTy = Ty->getAs<VectorType>()) {
679     unsigned NumSrcElts = VTy->getNumElements();
680     unsigned NumDstElts =
681        cast<llvm::VectorType>(Vec->getType())->getNumElements();
682     if (NumDstElts == NumSrcElts) {
683       // Use shuffle vector is the src and destination are the same number of
684       // elements and restore the vector mask since it is on the side it will be
685       // stored.
686       llvm::SmallVector<llvm::Constant*, 4> Mask(NumDstElts);
687       for (unsigned i = 0; i != NumSrcElts; ++i) {
688         unsigned InIdx = getAccessedFieldNo(i, Elts);
689         Mask[InIdx] = llvm::ConstantInt::get(
690                                           llvm::Type::getInt32Ty(VMContext), i);
691       }
692 
693       llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
694       Vec = Builder.CreateShuffleVector(SrcVal,
695                                         llvm::UndefValue::get(Vec->getType()),
696                                         MaskV, "tmp");
697     } else if (NumDstElts > NumSrcElts) {
698       // Extended the source vector to the same length and then shuffle it
699       // into the destination.
700       // FIXME: since we're shuffling with undef, can we just use the indices
701       //        into that?  This could be simpler.
702       llvm::SmallVector<llvm::Constant*, 4> ExtMask;
703       const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext);
704       unsigned i;
705       for (i = 0; i != NumSrcElts; ++i)
706         ExtMask.push_back(llvm::ConstantInt::get(Int32Ty, i));
707       for (; i != NumDstElts; ++i)
708         ExtMask.push_back(llvm::UndefValue::get(Int32Ty));
709       llvm::Value *ExtMaskV = llvm::ConstantVector::get(&ExtMask[0],
710                                                         ExtMask.size());
711       llvm::Value *ExtSrcVal =
712         Builder.CreateShuffleVector(SrcVal,
713                                     llvm::UndefValue::get(SrcVal->getType()),
714                                     ExtMaskV, "tmp");
715       // build identity
716       llvm::SmallVector<llvm::Constant*, 4> Mask;
717       for (unsigned i = 0; i != NumDstElts; ++i)
718         Mask.push_back(llvm::ConstantInt::get(Int32Ty, i));
719 
720       // modify when what gets shuffled in
721       for (unsigned i = 0; i != NumSrcElts; ++i) {
722         unsigned Idx = getAccessedFieldNo(i, Elts);
723         Mask[Idx] = llvm::ConstantInt::get(Int32Ty, i+NumDstElts);
724       }
725       llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
726       Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp");
727     } else {
728       // We should never shorten the vector
729       assert(0 && "unexpected shorten vector length");
730     }
731   } else {
732     // If the Src is a scalar (not a vector) it must be updating one element.
733     unsigned InIdx = getAccessedFieldNo(0, Elts);
734     const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext);
735     llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx);
736     Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp");
737   }
738 
739   Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified());
740 }
741 
742 // setObjCGCLValueClass - sets class of he lvalue for the purpose of
743 // generating write-barries API. It is currently a global, ivar,
744 // or neither.
745 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E,
746                                  LValue &LV) {
747   if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC)
748     return;
749 
750   if (isa<ObjCIvarRefExpr>(E)) {
751     LV.SetObjCIvar(LV, true);
752     ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E));
753     LV.setBaseIvarExp(Exp->getBase());
754     LV.SetObjCArray(LV, E->getType()->isArrayType());
755     return;
756   }
757 
758   if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) {
759     if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) {
760       if ((VD->isBlockVarDecl() && !VD->hasLocalStorage()) ||
761           VD->isFileVarDecl())
762         LV.SetGlobalObjCRef(LV, true);
763     }
764     LV.SetObjCArray(LV, E->getType()->isArrayType());
765     return;
766   }
767 
768   if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) {
769     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
770     return;
771   }
772 
773   if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) {
774     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
775     if (LV.isObjCIvar()) {
776       // If cast is to a structure pointer, follow gcc's behavior and make it
777       // a non-ivar write-barrier.
778       QualType ExpTy = E->getType();
779       if (ExpTy->isPointerType())
780         ExpTy = ExpTy->getAs<PointerType>()->getPointeeType();
781       if (ExpTy->isRecordType())
782         LV.SetObjCIvar(LV, false);
783     }
784     return;
785   }
786   if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) {
787     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
788     return;
789   }
790 
791   if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) {
792     setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV);
793     return;
794   }
795 
796   if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) {
797     setObjCGCLValueClass(Ctx, Exp->getBase(), LV);
798     if (LV.isObjCIvar() && !LV.isObjCArray())
799       // Using array syntax to assigning to what an ivar points to is not
800       // same as assigning to the ivar itself. {id *Names;} Names[i] = 0;
801       LV.SetObjCIvar(LV, false);
802     else if (LV.isGlobalObjCRef() && !LV.isObjCArray())
803       // Using array syntax to assigning to what global points to is not
804       // same as assigning to the global itself. {id *G;} G[i] = 0;
805       LV.SetGlobalObjCRef(LV, false);
806     return;
807   }
808 
809   if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) {
810     setObjCGCLValueClass(Ctx, Exp->getBase(), LV);
811     // We don't know if member is an 'ivar', but this flag is looked at
812     // only in the context of LV.isObjCIvar().
813     LV.SetObjCArray(LV, E->getType()->isArrayType());
814     return;
815   }
816 }
817 
818 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF,
819                                       const Expr *E, const VarDecl *VD) {
820   assert((VD->hasExternalStorage() || VD->isFileVarDecl()) &&
821          "Var decl must have external storage or be a file var decl!");
822 
823   llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD);
824   if (VD->getType()->isReferenceType())
825     V = CGF.Builder.CreateLoad(V, "tmp");
826   LValue LV = LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType()));
827   setObjCGCLValueClass(CGF.getContext(), E, LV);
828   return LV;
829 }
830 
831 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF,
832                                       const Expr *E, const FunctionDecl *FD) {
833   llvm::Value* V = CGF.CGM.GetAddrOfFunction(FD);
834   if (!FD->hasPrototype()) {
835     if (const FunctionProtoType *Proto =
836             FD->getType()->getAs<FunctionProtoType>()) {
837       // Ugly case: for a K&R-style definition, the type of the definition
838       // isn't the same as the type of a use.  Correct for this with a
839       // bitcast.
840       QualType NoProtoType =
841           CGF.getContext().getFunctionNoProtoType(Proto->getResultType());
842       NoProtoType = CGF.getContext().getPointerType(NoProtoType);
843       V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType), "tmp");
844     }
845   }
846   return LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType()));
847 }
848 
849 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
850   const NamedDecl *ND = E->getDecl();
851 
852   if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) {
853 
854     // Check if this is a global variable.
855     if (VD->hasExternalStorage() || VD->isFileVarDecl())
856       return EmitGlobalVarDeclLValue(*this, E, VD);
857 
858     bool NonGCable = VD->hasLocalStorage() && !VD->hasAttr<BlocksAttr>();
859 
860     llvm::Value *V = LocalDeclMap[VD];
861     assert(V && "DeclRefExpr not entered in LocalDeclMap?");
862 
863     Qualifiers Quals = MakeQualifiers(E->getType());
864     // local variables do not get their gc attribute set.
865     // local static?
866     if (NonGCable) Quals.removeObjCGCAttr();
867 
868     if (VD->hasAttr<BlocksAttr>()) {
869       V = Builder.CreateStructGEP(V, 1, "forwarding");
870       V = Builder.CreateLoad(V, false);
871       V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD),
872                                   VD->getNameAsString());
873     }
874     if (VD->getType()->isReferenceType())
875       V = Builder.CreateLoad(V, "tmp");
876     LValue LV = LValue::MakeAddr(V, Quals);
877     LValue::SetObjCNonGC(LV, NonGCable);
878     setObjCGCLValueClass(getContext(), E, LV);
879     return LV;
880   }
881 
882   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
883     return EmitFunctionDeclLValue(*this, E, FD);
884 
885   if (E->getQualifier()) {
886     // FIXME: the qualifier check does not seem sufficient here
887     return EmitPointerToDataMemberLValue(cast<FieldDecl>(ND));
888   }
889 
890   assert(false && "Unhandled DeclRefExpr");
891 
892   // an invalid LValue, but the assert will
893   // ensure that this point is never reached.
894   return LValue();
895 }
896 
897 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) {
898   return LValue::MakeAddr(GetAddrOfBlockDecl(E), MakeQualifiers(E->getType()));
899 }
900 
901 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) {
902   // __extension__ doesn't affect lvalue-ness.
903   if (E->getOpcode() == UnaryOperator::Extension)
904     return EmitLValue(E->getSubExpr());
905 
906   QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType());
907   switch (E->getOpcode()) {
908   default: assert(0 && "Unknown unary operator lvalue!");
909   case UnaryOperator::Deref: {
910     QualType T = E->getSubExpr()->getType()->getPointeeType();
911     assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type");
912 
913     Qualifiers Quals = MakeQualifiers(T);
914     Quals.setAddressSpace(ExprTy.getAddressSpace());
915 
916     LValue LV = LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), Quals);
917     // We should not generate __weak write barrier on indirect reference
918     // of a pointer to object; as in void foo (__weak id *param); *param = 0;
919     // But, we continue to generate __strong write barrier on indirect write
920     // into a pointer to object.
921     if (getContext().getLangOptions().ObjC1 &&
922         getContext().getLangOptions().getGCMode() != LangOptions::NonGC &&
923         LV.isObjCWeak())
924       LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext()));
925     return LV;
926   }
927   case UnaryOperator::Real:
928   case UnaryOperator::Imag: {
929     LValue LV = EmitLValue(E->getSubExpr());
930     unsigned Idx = E->getOpcode() == UnaryOperator::Imag;
931     return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(),
932                                                     Idx, "idx"),
933                             MakeQualifiers(ExprTy));
934   }
935   case UnaryOperator::PreInc:
936   case UnaryOperator::PreDec:
937     return EmitUnsupportedLValue(E, "pre-inc/dec expression");
938   }
939 }
940 
941 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) {
942   return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromLiteral(E),
943                           Qualifiers());
944 }
945 
946 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) {
947   return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromObjCEncode(E),
948                           Qualifiers());
949 }
950 
951 
952 LValue CodeGenFunction::EmitPredefinedFunctionName(unsigned Type) {
953   std::string GlobalVarName;
954 
955   switch (Type) {
956   default: assert(0 && "Invalid type");
957   case PredefinedExpr::Func:
958     GlobalVarName = "__func__.";
959     break;
960   case PredefinedExpr::Function:
961     GlobalVarName = "__FUNCTION__.";
962     break;
963   case PredefinedExpr::PrettyFunction:
964     GlobalVarName = "__PRETTY_FUNCTION__.";
965     break;
966   }
967 
968   llvm::StringRef FnName = CurFn->getName();
969   if (FnName.startswith("\01"))
970     FnName = FnName.substr(1);
971   GlobalVarName += FnName;
972 
973   std::string FunctionName =
974     PredefinedExpr::ComputeName(getContext(), (PredefinedExpr::IdentType)Type,
975                                 CurCodeDecl);
976 
977   llvm::Constant *C =
978     CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str());
979   return LValue::MakeAddr(C, Qualifiers());
980 }
981 
982 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
983   switch (E->getIdentType()) {
984   default:
985     return EmitUnsupportedLValue(E, "predefined expression");
986   case PredefinedExpr::Func:
987   case PredefinedExpr::Function:
988   case PredefinedExpr::PrettyFunction:
989     return EmitPredefinedFunctionName(E->getIdentType());
990   }
991 }
992 
993 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
994   // The index must always be an integer, which is not an aggregate.  Emit it.
995   llvm::Value *Idx = EmitScalarExpr(E->getIdx());
996   QualType IdxTy  = E->getIdx()->getType();
997   bool IdxSigned = IdxTy->isSignedIntegerType();
998 
999   // If the base is a vector type, then we are forming a vector element lvalue
1000   // with this subscript.
1001   if (E->getBase()->getType()->isVectorType()) {
1002     // Emit the vector as an lvalue to get its address.
1003     LValue LHS = EmitLValue(E->getBase());
1004     assert(LHS.isSimple() && "Can only subscript lvalue vectors here!");
1005     Idx = Builder.CreateIntCast(Idx,
1006                           llvm::Type::getInt32Ty(VMContext), IdxSigned, "vidx");
1007     return LValue::MakeVectorElt(LHS.getAddress(), Idx,
1008                                  E->getBase()->getType().getCVRQualifiers());
1009   }
1010 
1011   // The base must be a pointer, which is not an aggregate.  Emit it.
1012   llvm::Value *Base = EmitScalarExpr(E->getBase());
1013 
1014   // Extend or truncate the index type to 32 or 64-bits.
1015   unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
1016   if (IdxBitwidth != LLVMPointerWidth)
1017     Idx = Builder.CreateIntCast(Idx,
1018                             llvm::IntegerType::get(VMContext, LLVMPointerWidth),
1019                                 IdxSigned, "idxprom");
1020 
1021   // We know that the pointer points to a type of the correct size, unless the
1022   // size is a VLA or Objective-C interface.
1023   llvm::Value *Address = 0;
1024   if (const VariableArrayType *VAT =
1025         getContext().getAsVariableArrayType(E->getType())) {
1026     llvm::Value *VLASize = GetVLASize(VAT);
1027 
1028     Idx = Builder.CreateMul(Idx, VLASize);
1029 
1030     QualType BaseType = getContext().getBaseElementType(VAT);
1031 
1032     uint64_t BaseTypeSize = getContext().getTypeSize(BaseType) / 8;
1033     Idx = Builder.CreateUDiv(Idx,
1034                              llvm::ConstantInt::get(Idx->getType(),
1035                                                     BaseTypeSize));
1036     Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx");
1037   } else if (const ObjCInterfaceType *OIT =
1038              dyn_cast<ObjCInterfaceType>(E->getType())) {
1039     llvm::Value *InterfaceSize =
1040       llvm::ConstantInt::get(Idx->getType(),
1041                              getContext().getTypeSize(OIT) / 8);
1042 
1043     Idx = Builder.CreateMul(Idx, InterfaceSize);
1044 
1045     const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext);
1046     Address = Builder.CreateGEP(Builder.CreateBitCast(Base, i8PTy),
1047                                 Idx, "arrayidx");
1048     Address = Builder.CreateBitCast(Address, Base->getType());
1049   } else {
1050     Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx");
1051   }
1052 
1053   QualType T = E->getBase()->getType()->getPointeeType();
1054   assert(!T.isNull() &&
1055          "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type");
1056 
1057   Qualifiers Quals = MakeQualifiers(T);
1058   Quals.setAddressSpace(E->getBase()->getType().getAddressSpace());
1059 
1060   LValue LV = LValue::MakeAddr(Address, Quals);
1061   if (getContext().getLangOptions().ObjC1 &&
1062       getContext().getLangOptions().getGCMode() != LangOptions::NonGC) {
1063     LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext()));
1064     setObjCGCLValueClass(getContext(), E, LV);
1065   }
1066   return LV;
1067 }
1068 
1069 static
1070 llvm::Constant *GenerateConstantVector(llvm::LLVMContext &VMContext,
1071                                        llvm::SmallVector<unsigned, 4> &Elts) {
1072   llvm::SmallVector<llvm::Constant *, 4> CElts;
1073 
1074   for (unsigned i = 0, e = Elts.size(); i != e; ++i)
1075     CElts.push_back(llvm::ConstantInt::get(
1076                                    llvm::Type::getInt32Ty(VMContext), Elts[i]));
1077 
1078   return llvm::ConstantVector::get(&CElts[0], CElts.size());
1079 }
1080 
1081 LValue CodeGenFunction::
1082 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
1083   // Emit the base vector as an l-value.
1084   LValue Base;
1085 
1086   // ExtVectorElementExpr's base can either be a vector or pointer to vector.
1087   if (!E->isArrow()) {
1088     assert(E->getBase()->getType()->isVectorType());
1089     Base = EmitLValue(E->getBase());
1090   } else {
1091     const PointerType *PT = E->getBase()->getType()->getAs<PointerType>();
1092     llvm::Value *Ptr = EmitScalarExpr(E->getBase());
1093     Qualifiers Quals = MakeQualifiers(PT->getPointeeType());
1094     Quals.removeObjCGCAttr();
1095     Base = LValue::MakeAddr(Ptr, Quals);
1096   }
1097 
1098   // Encode the element access list into a vector of unsigned indices.
1099   llvm::SmallVector<unsigned, 4> Indices;
1100   E->getEncodedElementAccess(Indices);
1101 
1102   if (Base.isSimple()) {
1103     llvm::Constant *CV = GenerateConstantVector(VMContext, Indices);
1104     return LValue::MakeExtVectorElt(Base.getAddress(), CV,
1105                                     Base.getVRQualifiers());
1106   }
1107   assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!");
1108 
1109   llvm::Constant *BaseElts = Base.getExtVectorElts();
1110   llvm::SmallVector<llvm::Constant *, 4> CElts;
1111 
1112   const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext);
1113   for (unsigned i = 0, e = Indices.size(); i != e; ++i) {
1114     if (isa<llvm::ConstantAggregateZero>(BaseElts))
1115       CElts.push_back(llvm::ConstantInt::get(Int32Ty, 0));
1116     else
1117       CElts.push_back(cast<llvm::Constant>(BaseElts->getOperand(Indices[i])));
1118   }
1119   llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size());
1120   return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV,
1121                                   Base.getVRQualifiers());
1122 }
1123 
1124 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) {
1125   bool isUnion = false;
1126   bool isNonGC = false;
1127   Expr *BaseExpr = E->getBase();
1128   llvm::Value *BaseValue = NULL;
1129   Qualifiers BaseQuals;
1130 
1131   // If this is s.x, emit s as an lvalue.  If it is s->x, emit s as a scalar.
1132   if (E->isArrow()) {
1133     BaseValue = EmitScalarExpr(BaseExpr);
1134     const PointerType *PTy =
1135       BaseExpr->getType()->getAs<PointerType>();
1136     if (PTy->getPointeeType()->isUnionType())
1137       isUnion = true;
1138     BaseQuals = PTy->getPointeeType().getQualifiers();
1139   } else if (isa<ObjCPropertyRefExpr>(BaseExpr->IgnoreParens()) ||
1140              isa<ObjCImplicitSetterGetterRefExpr>(
1141                BaseExpr->IgnoreParens())) {
1142     RValue RV = EmitObjCPropertyGet(BaseExpr);
1143     BaseValue = RV.getAggregateAddr();
1144     if (BaseExpr->getType()->isUnionType())
1145       isUnion = true;
1146     BaseQuals = BaseExpr->getType().getQualifiers();
1147   } else {
1148     LValue BaseLV = EmitLValue(BaseExpr);
1149     if (BaseLV.isNonGC())
1150       isNonGC = true;
1151     // FIXME: this isn't right for bitfields.
1152     BaseValue = BaseLV.getAddress();
1153     QualType BaseTy = BaseExpr->getType();
1154     if (BaseTy->isUnionType())
1155       isUnion = true;
1156     BaseQuals = BaseTy.getQualifiers();
1157   }
1158 
1159   NamedDecl *ND = E->getMemberDecl();
1160   if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) {
1161     LValue LV = EmitLValueForField(BaseValue, Field, isUnion,
1162                                    BaseQuals.getCVRQualifiers());
1163     LValue::SetObjCNonGC(LV, isNonGC);
1164     setObjCGCLValueClass(getContext(), E, LV);
1165     return LV;
1166   }
1167 
1168   if (VarDecl *VD = dyn_cast<VarDecl>(ND))
1169     return EmitGlobalVarDeclLValue(*this, E, VD);
1170 
1171   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
1172     return EmitFunctionDeclLValue(*this, E, FD);
1173 
1174   assert(false && "Unhandled member declaration!");
1175   return LValue();
1176 }
1177 
1178 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value* BaseValue,
1179                                               const FieldDecl* Field,
1180                                               unsigned CVRQualifiers) {
1181   CodeGenTypes::BitFieldInfo Info = CGM.getTypes().getBitFieldInfo(Field);
1182 
1183   // FIXME: CodeGenTypes should expose a method to get the appropriate type for
1184   // FieldTy (the appropriate type is ABI-dependent).
1185   const llvm::Type *FieldTy =
1186     CGM.getTypes().ConvertTypeForMem(Field->getType());
1187   const llvm::PointerType *BaseTy =
1188   cast<llvm::PointerType>(BaseValue->getType());
1189   unsigned AS = BaseTy->getAddressSpace();
1190   BaseValue = Builder.CreateBitCast(BaseValue,
1191                                     llvm::PointerType::get(FieldTy, AS),
1192                                     "tmp");
1193 
1194   llvm::Value *Idx =
1195     llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), Info.FieldNo);
1196   llvm::Value *V = Builder.CreateGEP(BaseValue, Idx, "tmp");
1197 
1198   return LValue::MakeBitfield(V, Info.Start, Info.Size,
1199                               Field->getType()->isSignedIntegerType(),
1200                             Field->getType().getCVRQualifiers()|CVRQualifiers);
1201 }
1202 
1203 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue,
1204                                            const FieldDecl* Field,
1205                                            bool isUnion,
1206                                            unsigned CVRQualifiers) {
1207   if (Field->isBitField())
1208     return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers);
1209 
1210   unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
1211   llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
1212 
1213   // Match union field type.
1214   if (isUnion) {
1215     const llvm::Type *FieldTy =
1216       CGM.getTypes().ConvertTypeForMem(Field->getType());
1217     const llvm::PointerType * BaseTy =
1218       cast<llvm::PointerType>(BaseValue->getType());
1219     unsigned AS = BaseTy->getAddressSpace();
1220     V = Builder.CreateBitCast(V,
1221                               llvm::PointerType::get(FieldTy, AS),
1222                               "tmp");
1223   }
1224   if (Field->getType()->isReferenceType())
1225     V = Builder.CreateLoad(V, "tmp");
1226 
1227   Qualifiers Quals = MakeQualifiers(Field->getType());
1228   Quals.addCVRQualifiers(CVRQualifiers);
1229   // __weak attribute on a field is ignored.
1230   if (Quals.getObjCGCAttr() == Qualifiers::Weak)
1231     Quals.removeObjCGCAttr();
1232 
1233   return LValue::MakeAddr(V, Quals);
1234 }
1235 
1236 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E){
1237   const llvm::Type *LTy = ConvertType(E->getType());
1238   llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral");
1239 
1240   const Expr* InitExpr = E->getInitializer();
1241   LValue Result = LValue::MakeAddr(DeclPtr, MakeQualifiers(E->getType()));
1242 
1243   if (E->getType()->isComplexType())
1244     EmitComplexExprIntoAddr(InitExpr, DeclPtr, false);
1245   else if (hasAggregateLLVMType(E->getType()))
1246     EmitAnyExpr(InitExpr, DeclPtr, false);
1247   else
1248     EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType());
1249 
1250   return Result;
1251 }
1252 
1253 LValue
1254 CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator* E) {
1255   if (E->isLvalue(getContext()) == Expr::LV_Valid) {
1256     llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true");
1257     llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false");
1258     llvm::BasicBlock *ContBlock = createBasicBlock("cond.end");
1259 
1260     llvm::Value *Cond = EvaluateExprAsBool(E->getCond());
1261     Builder.CreateCondBr(Cond, LHSBlock, RHSBlock);
1262 
1263     EmitBlock(LHSBlock);
1264 
1265     LValue LHS = EmitLValue(E->getLHS());
1266     if (!LHS.isSimple())
1267       return EmitUnsupportedLValue(E, "conditional operator");
1268 
1269     llvm::Value *Temp = CreateTempAlloca(LHS.getAddress()->getType(),"condtmp");
1270     Builder.CreateStore(LHS.getAddress(), Temp);
1271     EmitBranch(ContBlock);
1272 
1273     EmitBlock(RHSBlock);
1274     LValue RHS = EmitLValue(E->getRHS());
1275     if (!RHS.isSimple())
1276       return EmitUnsupportedLValue(E, "conditional operator");
1277 
1278     Builder.CreateStore(RHS.getAddress(), Temp);
1279     EmitBranch(ContBlock);
1280 
1281     EmitBlock(ContBlock);
1282 
1283     Temp = Builder.CreateLoad(Temp, "lv");
1284     return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1285   }
1286 
1287   // ?: here should be an aggregate.
1288   assert((hasAggregateLLVMType(E->getType()) &&
1289           !E->getType()->isAnyComplexType()) &&
1290          "Unexpected conditional operator!");
1291 
1292   llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType()));
1293   EmitAggExpr(E, Temp, false);
1294 
1295   return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1296 }
1297 
1298 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast.
1299 /// If the cast is a dynamic_cast, we can have the usual lvalue result,
1300 /// otherwise if a cast is needed by the code generator in an lvalue context,
1301 /// then it must mean that we need the address of an aggregate in order to
1302 /// access one of its fields.  This can happen for all the reasons that casts
1303 /// are permitted with aggregate result, including noop aggregate casts, and
1304 /// cast from scalar to union.
1305 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) {
1306   switch (E->getCastKind()) {
1307   default:
1308     return EmitUnsupportedLValue(E, "unexpected cast lvalue");
1309 
1310   case CastExpr::CK_Dynamic: {
1311     LValue LV = EmitLValue(E->getSubExpr());
1312     llvm::Value *V = LV.getAddress();
1313     const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E);
1314     return LValue::MakeAddr(EmitDynamicCast(V, DCE),
1315                             MakeQualifiers(E->getType()));
1316   }
1317 
1318   case CastExpr::CK_NoOp:
1319   case CastExpr::CK_ConstructorConversion:
1320   case CastExpr::CK_UserDefinedConversion:
1321     return EmitLValue(E->getSubExpr());
1322 
1323   case CastExpr::CK_DerivedToBase: {
1324     const RecordType *DerivedClassTy =
1325       E->getSubExpr()->getType()->getAs<RecordType>();
1326     CXXRecordDecl *DerivedClassDecl =
1327       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
1328 
1329     const RecordType *BaseClassTy = E->getType()->getAs<RecordType>();
1330     CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseClassTy->getDecl());
1331 
1332     LValue LV = EmitLValue(E->getSubExpr());
1333 
1334     // Perform the derived-to-base conversion
1335     llvm::Value *Base =
1336       GetAddressOfBaseClass(LV.getAddress(), DerivedClassDecl,
1337                             BaseClassDecl, /*NullCheckValue=*/false);
1338 
1339     return LValue::MakeAddr(Base, MakeQualifiers(E->getType()));
1340   }
1341   case CastExpr::CK_ToUnion: {
1342     llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType()));
1343     EmitAnyExpr(E->getSubExpr(), Temp, false);
1344 
1345     return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1346   }
1347   case CastExpr::CK_BaseToDerived: {
1348     const RecordType *BaseClassTy =
1349       E->getSubExpr()->getType()->getAs<RecordType>();
1350     CXXRecordDecl *BaseClassDecl =
1351       cast<CXXRecordDecl>(BaseClassTy->getDecl());
1352 
1353     const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>();
1354     CXXRecordDecl *DerivedClassDecl =
1355       cast<CXXRecordDecl>(DerivedClassTy->getDecl());
1356 
1357     LValue LV = EmitLValue(E->getSubExpr());
1358 
1359     // Perform the base-to-derived conversion
1360     llvm::Value *Derived =
1361       GetAddressOfDerivedClass(LV.getAddress(), BaseClassDecl,
1362                                DerivedClassDecl, /*NullCheckValue=*/false);
1363 
1364     return LValue::MakeAddr(Derived, MakeQualifiers(E->getType()));
1365   }
1366   case CastExpr::CK_BitCast: {
1367     // This must be a reinterpret_cast (or c-style equivalent).
1368     const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E);
1369 
1370     LValue LV = EmitLValue(E->getSubExpr());
1371     llvm::Value *V = Builder.CreateBitCast(LV.getAddress(),
1372                                            ConvertType(CE->getTypeAsWritten()));
1373     return LValue::MakeAddr(V, MakeQualifiers(E->getType()));
1374   }
1375   }
1376 }
1377 
1378 LValue CodeGenFunction::EmitNullInitializationLValue(
1379                                               const CXXZeroInitValueExpr *E) {
1380   QualType Ty = E->getType();
1381   const llvm::Type *LTy = ConvertTypeForMem(Ty);
1382   llvm::AllocaInst *Alloc = CreateTempAlloca(LTy);
1383   unsigned Align = getContext().getTypeAlign(Ty)/8;
1384   Alloc->setAlignment(Align);
1385   LValue lvalue = LValue::MakeAddr(Alloc, Qualifiers());
1386   EmitMemSetToZero(lvalue.getAddress(), Ty);
1387   return lvalue;
1388 }
1389 
1390 //===--------------------------------------------------------------------===//
1391 //                             Expression Emission
1392 //===--------------------------------------------------------------------===//
1393 
1394 
1395 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) {
1396   // Builtins never have block type.
1397   if (E->getCallee()->getType()->isBlockPointerType())
1398     return EmitBlockCallExpr(E);
1399 
1400   if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E))
1401     return EmitCXXMemberCallExpr(CE);
1402 
1403   const Decl *TargetDecl = 0;
1404   if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E->getCallee())) {
1405     if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CE->getSubExpr())) {
1406       TargetDecl = DRE->getDecl();
1407       if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(TargetDecl))
1408         if (unsigned builtinID = FD->getBuiltinID())
1409           return EmitBuiltinExpr(FD, builtinID, E);
1410     }
1411   }
1412 
1413   if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E))
1414     if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl))
1415       return EmitCXXOperatorMemberCallExpr(CE, MD);
1416 
1417   if (isa<CXXPseudoDestructorExpr>(E->getCallee())) {
1418     // C++ [expr.pseudo]p1:
1419     //   The result shall only be used as the operand for the function call
1420     //   operator (), and the result of such a call has type void. The only
1421     //   effect is the evaluation of the postfix-expression before the dot or
1422     //   arrow.
1423     EmitScalarExpr(E->getCallee());
1424     return RValue::get(0);
1425   }
1426 
1427   llvm::Value *Callee = EmitScalarExpr(E->getCallee());
1428   return EmitCall(Callee, E->getCallee()->getType(),
1429                   E->arg_begin(), E->arg_end(), TargetDecl);
1430 }
1431 
1432 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) {
1433   // Comma expressions just emit their LHS then their RHS as an l-value.
1434   if (E->getOpcode() == BinaryOperator::Comma) {
1435     EmitAnyExpr(E->getLHS());
1436     return EmitLValue(E->getRHS());
1437   }
1438 
1439   if (E->getOpcode() == BinaryOperator::PtrMemD ||
1440       E->getOpcode() == BinaryOperator::PtrMemI)
1441     return EmitPointerToDataMemberBinaryExpr(E);
1442 
1443   // Can only get l-value for binary operator expressions which are a
1444   // simple assignment of aggregate type.
1445   if (E->getOpcode() != BinaryOperator::Assign)
1446     return EmitUnsupportedLValue(E, "binary l-value expression");
1447 
1448   if (!hasAggregateLLVMType(E->getType())) {
1449     // Emit the LHS as an l-value.
1450     LValue LV = EmitLValue(E->getLHS());
1451 
1452     llvm::Value *RHS = EmitScalarExpr(E->getRHS());
1453     EmitStoreOfScalar(RHS, LV.getAddress(), LV.isVolatileQualified(),
1454                       E->getType());
1455     return LV;
1456   }
1457 
1458   llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType()));
1459   EmitAggExpr(E, Temp, false);
1460   // FIXME: Are these qualifiers correct?
1461   return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1462 }
1463 
1464 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) {
1465   RValue RV = EmitCallExpr(E);
1466 
1467   if (!RV.isScalar())
1468     return LValue::MakeAddr(RV.getAggregateAddr(),MakeQualifiers(E->getType()));
1469 
1470   assert(E->getCallReturnType()->isReferenceType() &&
1471          "Can't have a scalar return unless the return type is a "
1472          "reference type!");
1473 
1474   return LValue::MakeAddr(RV.getScalarVal(), MakeQualifiers(E->getType()));
1475 }
1476 
1477 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) {
1478   // FIXME: This shouldn't require another copy.
1479   llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType()));
1480   EmitAggExpr(E, Temp, false);
1481   return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1482 }
1483 
1484 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) {
1485   llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), "tmp");
1486   EmitCXXConstructExpr(Temp, E);
1487   return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1488 }
1489 
1490 LValue
1491 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) {
1492   llvm::Value *Temp = EmitCXXTypeidExpr(E);
1493   return LValue::MakeAddr(Temp, MakeQualifiers(E->getType()));
1494 }
1495 
1496 LValue
1497 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) {
1498   LValue LV = EmitLValue(E->getSubExpr());
1499   PushCXXTemporary(E->getTemporary(), LV.getAddress());
1500   return LV;
1501 }
1502 
1503 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) {
1504   // Can only get l-value for message expression returning aggregate type
1505   RValue RV = EmitObjCMessageExpr(E);
1506   // FIXME: can this be volatile?
1507   return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType()));
1508 }
1509 
1510 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface,
1511                                              const ObjCIvarDecl *Ivar) {
1512   return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar);
1513 }
1514 
1515 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
1516                                           llvm::Value *BaseValue,
1517                                           const ObjCIvarDecl *Ivar,
1518                                           unsigned CVRQualifiers) {
1519   return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue,
1520                                                    Ivar, CVRQualifiers);
1521 }
1522 
1523 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
1524   // FIXME: A lot of the code below could be shared with EmitMemberExpr.
1525   llvm::Value *BaseValue = 0;
1526   const Expr *BaseExpr = E->getBase();
1527   Qualifiers BaseQuals;
1528   QualType ObjectTy;
1529   if (E->isArrow()) {
1530     BaseValue = EmitScalarExpr(BaseExpr);
1531     ObjectTy = BaseExpr->getType()->getPointeeType();
1532     BaseQuals = ObjectTy.getQualifiers();
1533   } else {
1534     LValue BaseLV = EmitLValue(BaseExpr);
1535     // FIXME: this isn't right for bitfields.
1536     BaseValue = BaseLV.getAddress();
1537     ObjectTy = BaseExpr->getType();
1538     BaseQuals = ObjectTy.getQualifiers();
1539   }
1540 
1541   LValue LV =
1542     EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(),
1543                       BaseQuals.getCVRQualifiers());
1544   setObjCGCLValueClass(getContext(), E, LV);
1545   return LV;
1546 }
1547 
1548 LValue
1549 CodeGenFunction::EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E) {
1550   // This is a special l-value that just issues sends when we load or store
1551   // through it.
1552   return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers());
1553 }
1554 
1555 LValue CodeGenFunction::EmitObjCKVCRefLValue(
1556                                 const ObjCImplicitSetterGetterRefExpr *E) {
1557   // This is a special l-value that just issues sends when we load or store
1558   // through it.
1559   return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers());
1560 }
1561 
1562 LValue CodeGenFunction::EmitObjCSuperExprLValue(const ObjCSuperExpr *E) {
1563   return EmitUnsupportedLValue(E, "use of super");
1564 }
1565 
1566 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) {
1567   // Can only get l-value for message expression returning aggregate type
1568   RValue RV = EmitAnyExprToTemp(E);
1569   // FIXME: can this be volatile?
1570   return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType()));
1571 }
1572 
1573 
1574 LValue CodeGenFunction::EmitPointerToDataMemberLValue(const FieldDecl *Field) {
1575   const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Field->getDeclContext());
1576   QualType NNSpecTy =
1577     getContext().getCanonicalType(
1578       getContext().getTypeDeclType(const_cast<CXXRecordDecl*>(ClassDecl)));
1579   NNSpecTy = getContext().getPointerType(NNSpecTy);
1580   llvm::Value *V = llvm::Constant::getNullValue(ConvertType(NNSpecTy));
1581   LValue MemExpLV = EmitLValueForField(V, Field, /*isUnion=*/false,
1582                                        /*Qualifiers=*/0);
1583   const llvm::Type *ResultType = ConvertType(getContext().getPointerDiffType());
1584   V = Builder.CreatePtrToInt(MemExpLV.getAddress(), ResultType, "datamember");
1585   return LValue::MakeAddr(V, MakeQualifiers(Field->getType()));
1586 }
1587 
1588 RValue CodeGenFunction::EmitCall(llvm::Value *Callee, QualType CalleeType,
1589                                  CallExpr::const_arg_iterator ArgBeg,
1590                                  CallExpr::const_arg_iterator ArgEnd,
1591                                  const Decl *TargetDecl) {
1592   // Get the actual function type. The callee type will always be a pointer to
1593   // function type or a block pointer type.
1594   assert(CalleeType->isFunctionPointerType() &&
1595          "Call must have function pointer type!");
1596 
1597   CalleeType = getContext().getCanonicalType(CalleeType);
1598 
1599   QualType FnType = cast<PointerType>(CalleeType)->getPointeeType();
1600   QualType ResultType = cast<FunctionType>(FnType)->getResultType();
1601 
1602   CallArgList Args;
1603   EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd);
1604 
1605   // FIXME: We should not need to do this, it should be part of the function
1606   // type.
1607   unsigned CallingConvention = 0;
1608   if (const llvm::Function *F =
1609       dyn_cast<llvm::Function>(Callee->stripPointerCasts()))
1610     CallingConvention = F->getCallingConv();
1611   return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args,
1612                                                  CallingConvention),
1613                   Callee, Args, TargetDecl);
1614 }
1615 
1616 LValue CodeGenFunction::
1617 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) {
1618   llvm::Value *BaseV;
1619   if (E->getOpcode() == BinaryOperator::PtrMemI)
1620     BaseV = EmitScalarExpr(E->getLHS());
1621   else
1622     BaseV = EmitLValue(E->getLHS()).getAddress();
1623   const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(getLLVMContext());
1624   BaseV = Builder.CreateBitCast(BaseV, i8Ty);
1625   llvm::Value *OffsetV = EmitScalarExpr(E->getRHS());
1626   llvm::Value *AddV = Builder.CreateInBoundsGEP(BaseV, OffsetV, "add.ptr");
1627 
1628   QualType Ty = E->getRHS()->getType();
1629   Ty = Ty->getAs<MemberPointerType>()->getPointeeType();
1630 
1631   const llvm::Type *PType = ConvertType(getContext().getPointerType(Ty));
1632   AddV = Builder.CreateBitCast(AddV, PType);
1633   return LValue::MakeAddr(AddV, MakeQualifiers(Ty));
1634 }
1635 
1636