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 "clang/AST/ASTContext.h"
17 #include "clang/AST/Decl.h"
18 #include "clang/AST/DeclObjC.h"
19 #include "clang/Basic/TargetInfo.h"
20 #include "llvm/Constants.h"
21 #include "llvm/DerivedTypes.h"
22 #include "llvm/Function.h"
23 #include "llvm/GlobalVariable.h"
24 #include "llvm/Support/MathExtras.h"
25 #include "llvm/Target/TargetData.h"
26 using namespace clang;
27 using namespace CodeGen;
28 
29 //===--------------------------------------------------------------------===//
30 //                        Miscellaneous Helper Methods
31 //===--------------------------------------------------------------------===//
32 
33 /// CreateTempAlloca - This creates a alloca and inserts it into the entry
34 /// block.
35 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty,
36                                                     const char *Name) {
37   return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt);
38 }
39 
40 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified
41 /// expression and compare the result against zero, returning an Int1Ty value.
42 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) {
43   QualType BoolTy = getContext().BoolTy;
44   if (!E->getType()->isAnyComplexType())
45     return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy);
46 
47   return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy);
48 }
49 
50 /// EmitAnyExpr - Emit code to compute the specified expression which can have
51 /// any type.  The result is returned as an RValue struct.  If this is an
52 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where
53 /// the result should be returned.
54 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc,
55                                     bool isAggLocVolatile) {
56   if (!hasAggregateLLVMType(E->getType()))
57     return RValue::get(EmitScalarExpr(E));
58   else if (E->getType()->isAnyComplexType())
59     return RValue::getComplex(EmitComplexExpr(E));
60 
61   EmitAggExpr(E, AggLoc, isAggLocVolatile);
62   return RValue::getAggregate(AggLoc);
63 }
64 
65 /// getAccessedFieldNo - Given an encoded value and a result number, return
66 /// the input field number being accessed.
67 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx,
68                                              const llvm::Constant *Elts) {
69   if (isa<llvm::ConstantAggregateZero>(Elts))
70     return 0;
71 
72   return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue();
73 }
74 
75 
76 //===----------------------------------------------------------------------===//
77 //                         LValue Expression Emission
78 //===----------------------------------------------------------------------===//
79 
80 /// EmitLValue - Emit code to compute a designator that specifies the location
81 /// of the expression.
82 ///
83 /// This can return one of two things: a simple address or a bitfield
84 /// reference.  In either case, the LLVM Value* in the LValue structure is
85 /// guaranteed to be an LLVM pointer type.
86 ///
87 /// If this returns a bitfield reference, nothing about the pointee type of
88 /// the LLVM value is known: For example, it may not be a pointer to an
89 /// integer.
90 ///
91 /// If this returns a normal address, and if the lvalue's C type is fixed
92 /// size, this method guarantees that the returned pointer type will point to
93 /// an LLVM type of the same size of the lvalue's type.  If the lvalue has a
94 /// variable length type, this is not possible.
95 ///
96 LValue CodeGenFunction::EmitLValue(const Expr *E) {
97   switch (E->getStmtClass()) {
98   default: {
99     printf("Statement class: %d\n", E->getStmtClass());
100     WarnUnsupported(E, "l-value expression");
101     llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType()));
102     return LValue::MakeAddr(llvm::UndefValue::get(Ty),
103                             E->getType().getCVRQualifiers());
104   }
105 
106   case Expr::CallExprClass: return EmitCallExprLValue(cast<CallExpr>(E));
107   case Expr::DeclRefExprClass: return EmitDeclRefLValue(cast<DeclRefExpr>(E));
108   case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr());
109   case Expr::PredefinedExprClass:
110     return EmitPredefinedLValue(cast<PredefinedExpr>(E));
111   case Expr::StringLiteralClass:
112     return EmitStringLiteralLValue(cast<StringLiteral>(E));
113 
114   case Expr::ObjCIvarRefExprClass:
115     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
116 
117   case Expr::UnaryOperatorClass:
118     return EmitUnaryOpLValue(cast<UnaryOperator>(E));
119   case Expr::ArraySubscriptExprClass:
120     return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E));
121   case Expr::ExtVectorElementExprClass:
122     return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E));
123   case Expr::MemberExprClass: return EmitMemberExpr(cast<MemberExpr>(E));
124   case Expr::CompoundLiteralExprClass:
125     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
126   }
127 }
128 
129 /// EmitLoadOfLValue - Given an expression that represents a value lvalue,
130 /// this method emits the address of the lvalue, then loads the result as an
131 /// rvalue, returning the rvalue.
132 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
133   if (LV.isSimple()) {
134     llvm::Value *Ptr = LV.getAddress();
135     const llvm::Type *EltTy =
136       cast<llvm::PointerType>(Ptr->getType())->getElementType();
137 
138     // Simple scalar l-value.
139     if (EltTy->isSingleValueType()) {
140       llvm::Value *V = Builder.CreateLoad(Ptr, LV.isVolatileQualified(),"tmp");
141 
142       // Bool can have different representation in memory than in registers.
143       if (ExprType->isBooleanType()) {
144         if (V->getType() != llvm::Type::Int1Ty)
145           V = Builder.CreateTrunc(V, llvm::Type::Int1Ty, "tobool");
146       }
147 
148       return RValue::get(V);
149     }
150 
151     assert(ExprType->isFunctionType() && "Unknown scalar value");
152     return RValue::get(Ptr);
153   }
154 
155   if (LV.isVectorElt()) {
156     llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(),
157                                           LV.isVolatileQualified(), "tmp");
158     return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(),
159                                                     "vecext"));
160   }
161 
162   // If this is a reference to a subset of the elements of a vector, either
163   // shuffle the input or extract/insert them as appropriate.
164   if (LV.isExtVectorElt())
165     return EmitLoadOfExtVectorElementLValue(LV, ExprType);
166 
167   if (LV.isBitfield())
168     return EmitLoadOfBitfieldLValue(LV, ExprType);
169 
170   assert(0 && "Unknown LValue type!");
171   //an invalid RValue, but the assert will
172   //ensure that this point is never reached
173   return RValue();
174 }
175 
176 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV,
177                                                  QualType ExprType) {
178   unsigned StartBit = LV.getBitfieldStartBit();
179   unsigned BitfieldSize = LV.getBitfieldSize();
180   llvm::Value *Ptr = LV.getBitfieldAddr();
181 
182   const llvm::Type *EltTy =
183     cast<llvm::PointerType>(Ptr->getType())->getElementType();
184   unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy);
185 
186   // In some cases the bitfield may straddle two memory locations.
187   // Currently we load the entire bitfield, then do the magic to
188   // sign-extend it if necessary. This results in somewhat more code
189   // than necessary for the common case (one load), since two shifts
190   // accomplish both the masking and sign extension.
191   unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit);
192   llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp");
193 
194   // Shift to proper location.
195   Val = Builder.CreateLShr(Val, llvm::ConstantInt::get(EltTy, StartBit),
196                            "bf.lo");
197 
198   // Mask off unused bits.
199   llvm::Constant *LowMask =
200     llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, LowBits));
201   Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared");
202 
203   // Fetch the high bits if necessary.
204   if (LowBits < BitfieldSize) {
205     unsigned HighBits = BitfieldSize - LowBits;
206     llvm::Value *HighPtr =
207       Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1),
208                         "bf.ptr.hi");
209     llvm::Value *HighVal = Builder.CreateLoad(HighPtr,
210                                               LV.isVolatileQualified(),
211                                               "tmp");
212 
213     // Mask off unused bits.
214     llvm::Constant *HighMask =
215       llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, HighBits));
216     HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared");
217 
218     // Shift to proper location and or in to bitfield value.
219     HighVal = Builder.CreateShl(HighVal,
220                                 llvm::ConstantInt::get(EltTy, LowBits));
221     Val = Builder.CreateOr(Val, HighVal, "bf.val");
222   }
223 
224   // Sign extend if necessary.
225   if (LV.isBitfieldSigned()) {
226     llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy,
227                                                     EltTySize - BitfieldSize);
228     Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits),
229                              ExtraBits, "bf.val.sext");
230   }
231 
232   // The bitfield type and the normal type differ when the storage sizes
233   // differ (currently just _Bool).
234   Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp");
235 
236   return RValue::get(Val);
237 }
238 
239 // If this is a reference to a subset of the elements of a vector, either
240 // shuffle the input or extract/insert them as appropriate.
241 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV,
242                                                          QualType ExprType) {
243   llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(),
244                                         LV.isVolatileQualified(), "tmp");
245 
246   const llvm::Constant *Elts = LV.getExtVectorElts();
247 
248   // If the result of the expression is a non-vector type, we must be
249   // extracting a single element.  Just codegen as an extractelement.
250   const VectorType *ExprVT = ExprType->getAsVectorType();
251   if (!ExprVT) {
252     unsigned InIdx = getAccessedFieldNo(0, Elts);
253     llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx);
254     return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp"));
255   }
256 
257   // If the source and destination have the same number of elements, use a
258   // vector shuffle instead of insert/extracts.
259   unsigned NumResultElts = ExprVT->getNumElements();
260   unsigned NumSourceElts =
261     cast<llvm::VectorType>(Vec->getType())->getNumElements();
262 
263   if (NumResultElts == NumSourceElts) {
264     llvm::SmallVector<llvm::Constant*, 4> Mask;
265     for (unsigned i = 0; i != NumResultElts; ++i) {
266       unsigned InIdx = getAccessedFieldNo(i, Elts);
267       Mask.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx));
268     }
269 
270     llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());
271     Vec = Builder.CreateShuffleVector(Vec,
272                                       llvm::UndefValue::get(Vec->getType()),
273                                       MaskV, "tmp");
274     return RValue::get(Vec);
275   }
276 
277   // Start out with an undef of the result type.
278   llvm::Value *Result = llvm::UndefValue::get(ConvertType(ExprType));
279 
280   // Extract/Insert each element of the result.
281   for (unsigned i = 0; i != NumResultElts; ++i) {
282     unsigned InIdx = getAccessedFieldNo(i, Elts);
283     llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx);
284     Elt = Builder.CreateExtractElement(Vec, Elt, "tmp");
285 
286     llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
287     Result = Builder.CreateInsertElement(Result, Elt, OutIdx, "tmp");
288   }
289 
290   return RValue::get(Result);
291 }
292 
293 
294 
295 /// EmitStoreThroughLValue - Store the specified rvalue into the specified
296 /// lvalue, where both are guaranteed to the have the same type, and that type
297 /// is 'Ty'.
298 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst,
299                                              QualType Ty) {
300   if (!Dst.isSimple()) {
301     if (Dst.isVectorElt()) {
302       // Read/modify/write the vector, inserting the new element.
303       llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(),
304                                             Dst.isVolatileQualified(), "tmp");
305       Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(),
306                                         Dst.getVectorIdx(), "vecins");
307       Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified());
308       return;
309     }
310 
311     // If this is an update of extended vector elements, insert them as
312     // appropriate.
313     if (Dst.isExtVectorElt())
314       return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty);
315 
316     if (Dst.isBitfield())
317       return EmitStoreThroughBitfieldLValue(Src, Dst, Ty);
318 
319     assert(0 && "Unknown LValue type");
320   }
321 
322   llvm::Value *DstAddr = Dst.getAddress();
323   assert(Src.isScalar() && "Can't emit an agg store with this method");
324   // FIXME: Handle volatility etc.
325   const llvm::Type *SrcTy = Src.getScalarVal()->getType();
326   const llvm::PointerType *DstPtr = cast<llvm::PointerType>(DstAddr->getType());
327   const llvm::Type *AddrTy = DstPtr->getElementType();
328   unsigned AS = DstPtr->getAddressSpace();
329 
330   if (AddrTy != SrcTy)
331     DstAddr = Builder.CreateBitCast(DstAddr,
332                                     llvm::PointerType::get(SrcTy, AS),
333                                     "storetmp");
334   Builder.CreateStore(Src.getScalarVal(), DstAddr, Dst.isVolatileQualified());
335 }
336 
337 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst,
338                                                      QualType Ty) {
339   unsigned StartBit = Dst.getBitfieldStartBit();
340   unsigned BitfieldSize = Dst.getBitfieldSize();
341   llvm::Value *Ptr = Dst.getBitfieldAddr();
342 
343   const llvm::Type *EltTy =
344     cast<llvm::PointerType>(Ptr->getType())->getElementType();
345   unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy);
346 
347   // Get the new value, cast to the appropriate type and masked to
348   // exactly the size of the bit-field.
349   llvm::Value *NewVal = Src.getScalarVal();
350   NewVal = Builder.CreateIntCast(NewVal, EltTy, false, "tmp");
351   llvm::Constant *Mask =
352     llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize));
353   NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value");
354 
355   // In some cases the bitfield may straddle two memory locations.
356   // Emit the low part first and check to see if the high needs to be
357   // done.
358   unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit);
359   llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(),
360                                            "bf.prev.low");
361 
362   // Compute the mask for zero-ing the low part of this bitfield.
363   llvm::Constant *InvMask =
364     llvm::ConstantInt::get(~llvm::APInt::getBitsSet(EltTySize, StartBit,
365                                                     StartBit + LowBits));
366 
367   // Compute the new low part as
368   //   LowVal = (LowVal & InvMask) | (NewVal << StartBit),
369   // with the shift of NewVal implicitly stripping the high bits.
370   llvm::Value *NewLowVal =
371     Builder.CreateShl(NewVal, llvm::ConstantInt::get(EltTy, StartBit),
372                       "bf.value.lo");
373   LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared");
374   LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo");
375 
376   // Write back.
377   Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified());
378 
379   // If the low part doesn't cover the bitfield emit a high part.
380   if (LowBits < BitfieldSize) {
381     unsigned HighBits = BitfieldSize - LowBits;
382     llvm::Value *HighPtr =
383       Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1),
384                         "bf.ptr.hi");
385     llvm::Value *HighVal = Builder.CreateLoad(HighPtr,
386                                               Dst.isVolatileQualified(),
387                                               "bf.prev.hi");
388 
389     // Compute the mask for zero-ing the high part of this bitfield.
390     llvm::Constant *InvMask =
391       llvm::ConstantInt::get(~llvm::APInt::getLowBitsSet(EltTySize, HighBits));
392 
393     // Compute the new high part as
394     //   HighVal = (HighVal & InvMask) | (NewVal lshr LowBits),
395     // where the high bits of NewVal have already been cleared and the
396     // shift stripping the low bits.
397     llvm::Value *NewHighVal =
398       Builder.CreateLShr(NewVal, llvm::ConstantInt::get(EltTy, LowBits),
399                         "bf.value.high");
400     HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared");
401     HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi");
402 
403     // Write back.
404     Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified());
405   }
406 }
407 
408 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
409                                                                LValue Dst,
410                                                                QualType Ty) {
411   // This access turns into a read/modify/write of the vector.  Load the input
412   // value now.
413   llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(),
414                                         Dst.isVolatileQualified(), "tmp");
415   const llvm::Constant *Elts = Dst.getExtVectorElts();
416 
417   llvm::Value *SrcVal = Src.getScalarVal();
418 
419   if (const VectorType *VTy = Ty->getAsVectorType()) {
420     unsigned NumSrcElts = VTy->getNumElements();
421 
422     // Extract/Insert each element.
423     for (unsigned i = 0; i != NumSrcElts; ++i) {
424       llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
425       Elt = Builder.CreateExtractElement(SrcVal, Elt, "tmp");
426 
427       unsigned Idx = getAccessedFieldNo(i, Elts);
428       llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Idx);
429       Vec = Builder.CreateInsertElement(Vec, Elt, OutIdx, "tmp");
430     }
431   } else {
432     // If the Src is a scalar (not a vector) it must be updating one element.
433     unsigned InIdx = getAccessedFieldNo(0, Elts);
434     llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx);
435     Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp");
436   }
437 
438   Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified());
439 }
440 
441 
442 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
443   const VarDecl *VD = dyn_cast<VarDecl>(E->getDecl());
444 
445   if (VD && (VD->isBlockVarDecl() || isa<ParmVarDecl>(VD) ||
446         isa<ImplicitParamDecl>(VD))) {
447     if (VD->getStorageClass() == VarDecl::Extern)
448       return LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD),
449                               E->getType().getCVRQualifiers());
450     else {
451       llvm::Value *V = LocalDeclMap[VD];
452       assert(V && "BlockVarDecl not entered in LocalDeclMap?");
453       return LValue::MakeAddr(V, E->getType().getCVRQualifiers());
454     }
455   } else if (VD && VD->isFileVarDecl()) {
456     return LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD),
457                             E->getType().getCVRQualifiers());
458   } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(E->getDecl())) {
459     return LValue::MakeAddr(CGM.GetAddrOfFunction(FD),
460                             E->getType().getCVRQualifiers());
461   }
462   else if (const ImplicitParamDecl *IPD =
463       dyn_cast<ImplicitParamDecl>(E->getDecl())) {
464     llvm::Value *V = LocalDeclMap[IPD];
465     assert(V && "BlockVarDecl not entered in LocalDeclMap?");
466     return LValue::MakeAddr(V, E->getType().getCVRQualifiers());
467   }
468   assert(0 && "Unimp declref");
469   //an invalid LValue, but the assert will
470   //ensure that this point is never reached.
471   return LValue();
472 }
473 
474 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) {
475   // __extension__ doesn't affect lvalue-ness.
476   if (E->getOpcode() == UnaryOperator::Extension)
477     return EmitLValue(E->getSubExpr());
478 
479   QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType());
480   switch (E->getOpcode()) {
481   default: assert(0 && "Unknown unary operator lvalue!");
482   case UnaryOperator::Deref:
483     return LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()),
484                             ExprTy->getAsPointerType()->getPointeeType()
485                                     .getCVRQualifiers());
486   case UnaryOperator::Real:
487   case UnaryOperator::Imag:
488     LValue LV = EmitLValue(E->getSubExpr());
489     unsigned Idx = E->getOpcode() == UnaryOperator::Imag;
490     return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(),
491                                                     Idx, "idx"),
492                             ExprTy.getCVRQualifiers());
493   }
494 }
495 
496 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) {
497   llvm::Constant *C =
498     CGM.GetAddrOfConstantString(CGM.getStringForStringLiteral(E));
499 
500   return LValue::MakeAddr(C,0);
501 }
502 
503 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
504   std::string FunctionName;
505   if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) {
506     FunctionName = FD->getName();
507   }
508   else {
509     assert(0 && "Attempting to load predefined constant for invalid decl type");
510   }
511   std::string GlobalVarName;
512 
513   switch (E->getIdentType()) {
514     default:
515       assert(0 && "unknown pre-defined ident type");
516     case PredefinedExpr::Func:
517       GlobalVarName = "__func__.";
518       break;
519     case PredefinedExpr::Function:
520       GlobalVarName = "__FUNCTION__.";
521       break;
522     case PredefinedExpr::PrettyFunction:
523       // FIXME:: Demangle C++ method names
524       GlobalVarName = "__PRETTY_FUNCTION__.";
525       break;
526   }
527 
528   GlobalVarName += FunctionName;
529 
530   // FIXME: Can cache/reuse these within the module.
531   llvm::Constant *C=llvm::ConstantArray::get(FunctionName);
532 
533   // Create a global variable for this.
534   C = new llvm::GlobalVariable(C->getType(), true,
535                                llvm::GlobalValue::InternalLinkage,
536                                C, GlobalVarName, CurFn->getParent());
537   return LValue::MakeAddr(C,0);
538 }
539 
540 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
541   // The index must always be an integer, which is not an aggregate.  Emit it.
542   llvm::Value *Idx = EmitScalarExpr(E->getIdx());
543 
544   // If the base is a vector type, then we are forming a vector element lvalue
545   // with this subscript.
546   if (E->getBase()->getType()->isVectorType()) {
547     // Emit the vector as an lvalue to get its address.
548     LValue LHS = EmitLValue(E->getBase());
549     assert(LHS.isSimple() && "Can only subscript lvalue vectors here!");
550     // FIXME: This should properly sign/zero/extend or truncate Idx to i32.
551     return LValue::MakeVectorElt(LHS.getAddress(), Idx,
552       E->getBase()->getType().getCVRQualifiers());
553   }
554 
555   // The base must be a pointer, which is not an aggregate.  Emit it.
556   llvm::Value *Base = EmitScalarExpr(E->getBase());
557 
558   // Extend or truncate the index type to 32 or 64-bits.
559   QualType IdxTy  = E->getIdx()->getType();
560   bool IdxSigned = IdxTy->isSignedIntegerType();
561   unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
562   if (IdxBitwidth != LLVMPointerWidth)
563     Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth),
564                                 IdxSigned, "idxprom");
565 
566   // We know that the pointer points to a type of the correct size, unless the
567   // size is a VLA.
568   if (!E->getType()->isConstantSizeType())
569     assert(0 && "VLA idx not implemented");
570   QualType ExprTy = getContext().getCanonicalType(E->getBase()->getType());
571 
572   return LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"),
573                           ExprTy->getAsPointerType()->getPointeeType()
574                                .getCVRQualifiers());
575 }
576 
577 static
578 llvm::Constant *GenerateConstantVector(llvm::SmallVector<unsigned, 4> &Elts) {
579   llvm::SmallVector<llvm::Constant *, 4> CElts;
580 
581   for (unsigned i = 0, e = Elts.size(); i != e; ++i)
582     CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, Elts[i]));
583 
584   return llvm::ConstantVector::get(&CElts[0], CElts.size());
585 }
586 
587 LValue CodeGenFunction::
588 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
589   // Emit the base vector as an l-value.
590   LValue Base = EmitLValue(E->getBase());
591 
592   // Encode the element access list into a vector of unsigned indices.
593   llvm::SmallVector<unsigned, 4> Indices;
594   E->getEncodedElementAccess(Indices);
595 
596   if (Base.isSimple()) {
597     llvm::Constant *CV = GenerateConstantVector(Indices);
598     return LValue::MakeExtVectorElt(Base.getAddress(), CV,
599                                    E->getBase()->getType().getCVRQualifiers());
600   }
601   assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!");
602 
603   llvm::Constant *BaseElts = Base.getExtVectorElts();
604   llvm::SmallVector<llvm::Constant *, 4> CElts;
605 
606   for (unsigned i = 0, e = Indices.size(); i != e; ++i) {
607     if (isa<llvm::ConstantAggregateZero>(BaseElts))
608       CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, 0));
609     else
610       CElts.push_back(BaseElts->getOperand(Indices[i]));
611   }
612   llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size());
613   return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV,
614                                   E->getBase()->getType().getCVRQualifiers());
615 }
616 
617 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) {
618   bool isUnion = false;
619   Expr *BaseExpr = E->getBase();
620   llvm::Value *BaseValue = NULL;
621   unsigned CVRQualifiers=0;
622 
623   // If this is s.x, emit s as an lvalue.  If it is s->x, emit s as a scalar.
624   if (E->isArrow()) {
625     BaseValue = EmitScalarExpr(BaseExpr);
626     const PointerType *PTy =
627       cast<PointerType>(getContext().getCanonicalType(BaseExpr->getType()));
628     if (PTy->getPointeeType()->isUnionType())
629       isUnion = true;
630     CVRQualifiers = PTy->getPointeeType().getCVRQualifiers();
631   }
632   else {
633     LValue BaseLV = EmitLValue(BaseExpr);
634     // FIXME: this isn't right for bitfields.
635     BaseValue = BaseLV.getAddress();
636     if (BaseExpr->getType()->isUnionType())
637       isUnion = true;
638     CVRQualifiers = BaseExpr->getType().getCVRQualifiers();
639   }
640 
641   FieldDecl *Field = E->getMemberDecl();
642   return EmitLValueForField(BaseValue, Field, isUnion, CVRQualifiers);
643 }
644 
645 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue,
646                                            FieldDecl* Field,
647                                            bool isUnion,
648                                            unsigned CVRQualifiers)
649 {
650   llvm::Value *V;
651   unsigned idx = CGM.getTypes().getLLVMFieldNo(Field);
652 
653   if (Field->isBitField()) {
654     // FIXME: CodeGenTypes should expose a method to get the appropriate
655     // type for FieldTy (the appropriate type is ABI-dependent).
656     const llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(Field->getType());
657     const llvm::PointerType *BaseTy =
658       cast<llvm::PointerType>(BaseValue->getType());
659     unsigned AS = BaseTy->getAddressSpace();
660     BaseValue = Builder.CreateBitCast(BaseValue,
661                                       llvm::PointerType::get(FieldTy, AS),
662                                       "tmp");
663     V = Builder.CreateGEP(BaseValue,
664                           llvm::ConstantInt::get(llvm::Type::Int32Ty, idx),
665                           "tmp");
666 
667     CodeGenTypes::BitFieldInfo bitFieldInfo =
668       CGM.getTypes().getBitFieldInfo(Field);
669     return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size,
670                                 Field->getType()->isSignedIntegerType(),
671                             Field->getType().getCVRQualifiers()|CVRQualifiers);
672   }
673 
674   V = Builder.CreateStructGEP(BaseValue, idx, "tmp");
675 
676   // Match union field type.
677   if (isUnion) {
678     const llvm::Type *FieldTy =
679       CGM.getTypes().ConvertTypeForMem(Field->getType());
680     const llvm::PointerType * BaseTy =
681       cast<llvm::PointerType>(BaseValue->getType());
682     unsigned AS = BaseTy->getAddressSpace();
683     V = Builder.CreateBitCast(V,
684                               llvm::PointerType::get(FieldTy, AS),
685                               "tmp");
686   }
687 
688   return LValue::MakeAddr(V,
689                           Field->getType().getCVRQualifiers()|CVRQualifiers);
690 }
691 
692 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E)
693 {
694   const llvm::Type *LTy = ConvertType(E->getType());
695   llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral");
696 
697   const Expr* InitExpr = E->getInitializer();
698   LValue Result = LValue::MakeAddr(DeclPtr, E->getType().getCVRQualifiers());
699 
700   if (E->getType()->isComplexType()) {
701     EmitComplexExprIntoAddr(InitExpr, DeclPtr, false);
702   } else if (hasAggregateLLVMType(E->getType())) {
703     EmitAnyExpr(InitExpr, DeclPtr, false);
704   } else {
705     EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType());
706   }
707 
708   return Result;
709 }
710 
711 //===--------------------------------------------------------------------===//
712 //                             Expression Emission
713 //===--------------------------------------------------------------------===//
714 
715 
716 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) {
717   if (const ImplicitCastExpr *IcExpr =
718       dyn_cast<const ImplicitCastExpr>(E->getCallee()))
719     if (const DeclRefExpr *DRExpr =
720         dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr()))
721       if (const FunctionDecl *FDecl =
722           dyn_cast<const FunctionDecl>(DRExpr->getDecl()))
723         if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID())
724           return EmitBuiltinExpr(builtinID, E);
725 
726   llvm::Value *Callee = EmitScalarExpr(E->getCallee());
727   return EmitCallExpr(Callee, E->getCallee()->getType(),
728                       E->arg_begin(), E->arg_end());
729 }
730 
731 RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr,
732                                      CallExpr::const_arg_iterator ArgBeg,
733                                      CallExpr::const_arg_iterator ArgEnd) {
734 
735   llvm::Value *Callee = EmitScalarExpr(FnExpr);
736   return EmitCallExpr(Callee, FnExpr->getType(), ArgBeg, ArgEnd);
737 }
738 
739 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) {
740   // Can only get l-value for call expression returning aggregate type
741   RValue RV = EmitCallExpr(E);
742   // FIXME: can this be volatile?
743   return LValue::MakeAddr(RV.getAggregateAddr(),
744                           E->getType().getCVRQualifiers());
745 }
746 
747 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
748   // Objective-C objects are traditionally C structures with their layout
749   // defined at compile-time.  In some implementations, their layout is not
750   // defined until run time in order to allow instance variables to be added to
751   // a class without recompiling all of the subclasses.  If this is the case
752   // then the CGObjCRuntime subclass must return true to LateBoundIvars and
753   // implement the lookup itself.
754   if (CGM.getObjCRuntime()->LateBoundIVars()) {
755     assert(0 && "FIXME: Implement support for late-bound instance variables");
756     return LValue(); // Not reached.
757   }
758 
759   // Get a structure type for the object
760   QualType ExprTy = E->getBase()->getType();
761   const llvm::Type *ObjectType = ConvertType(ExprTy);
762   // TODO:  Add a special case for isa (index 0)
763   // Work out which index the ivar is
764   const ObjCIvarDecl *Decl = E->getDecl();
765   unsigned Index = CGM.getTypes().getLLVMFieldNo(Decl);
766 
767   // Get object pointer and coerce object pointer to correct type.
768   llvm::Value *Object = EmitLValue(E->getBase()).getAddress();
769   // FIXME: Volatility
770   Object = Builder.CreateLoad(Object, E->getDecl()->getName());
771   if (Object->getType() != ObjectType)
772     Object = Builder.CreateBitCast(Object, ObjectType);
773 
774 
775   // Return a pointer to the right element.
776   // FIXME: volatile
777   return LValue::MakeAddr(Builder.CreateStructGEP(Object, Index,
778                                                   Decl->getName()),0);
779 }
780 
781 RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType,
782                                      CallExpr::const_arg_iterator ArgBeg,
783                                      CallExpr::const_arg_iterator ArgEnd) {
784 
785   // The callee type will always be a pointer to function type, get the function
786   // type.
787   FnType = FnType->getAsPointerType()->getPointeeType();
788   QualType ResultType = FnType->getAsFunctionType()->getResultType();
789 
790   llvm::SmallVector<llvm::Value*, 16> Args;
791 
792   // Handle struct-return functions by passing a pointer to the location that
793   // we would like to return into.
794   if (hasAggregateLLVMType(ResultType)) {
795     // Create a temporary alloca to hold the result of the call. :(
796     Args.push_back(CreateTempAlloca(ConvertType(ResultType)));
797     // FIXME: set the stret attribute on the argument.
798   }
799 
800   for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I) {
801     QualType ArgTy = I->getType();
802 
803     if (!hasAggregateLLVMType(ArgTy)) {
804       // Scalar argument is passed by-value.
805       Args.push_back(EmitScalarExpr(*I));
806     } else if (ArgTy->isAnyComplexType()) {
807       // Make a temporary alloca to pass the argument.
808       llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy));
809       EmitComplexExprIntoAddr(*I, DestMem, false);
810       Args.push_back(DestMem);
811     } else {
812       llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy));
813       EmitAggExpr(*I, DestMem, false);
814       Args.push_back(DestMem);
815     }
816   }
817 
818   llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size());
819 
820   // Note that there is parallel code in SetFunctionAttributes in CodeGenModule
821   llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrList;
822   if (hasAggregateLLVMType(ResultType))
823     ParamAttrList.push_back(
824         llvm::ParamAttrsWithIndex::get(1, llvm::ParamAttr::StructRet));
825   unsigned increment = hasAggregateLLVMType(ResultType) ? 2 : 1;
826 
827   unsigned i = 0;
828   for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I, ++i) {
829     QualType ParamType = I->getType();
830     unsigned ParamAttrs = 0;
831     if (ParamType->isRecordType())
832       ParamAttrs |= llvm::ParamAttr::ByVal;
833     if (ParamType->isSignedIntegerType() && ParamType->isPromotableIntegerType())
834       ParamAttrs |= llvm::ParamAttr::SExt;
835     if (ParamType->isUnsignedIntegerType() && ParamType->isPromotableIntegerType())
836       ParamAttrs |= llvm::ParamAttr::ZExt;
837     if (ParamAttrs)
838       ParamAttrList.push_back(llvm::ParamAttrsWithIndex::get(i + increment,
839                                                              ParamAttrs));
840   }
841   CI->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(),
842                                          ParamAttrList.size()));
843 
844   if (const llvm::Function *F = dyn_cast<llvm::Function>(Callee))
845     CI->setCallingConv(F->getCallingConv());
846   if (CI->getType() != llvm::Type::VoidTy)
847     CI->setName("call");
848   else if (ResultType->isAnyComplexType())
849     return RValue::getComplex(LoadComplexFromAddr(Args[0], false));
850   else if (hasAggregateLLVMType(ResultType))
851     // Struct return.
852     return RValue::getAggregate(Args[0]);
853   else {
854     // void return.
855     assert(ResultType->isVoidType() && "Should only have a void expr here");
856     CI = 0;
857   }
858 
859   return RValue::get(CI);
860 }
861