CGExprScalar.cpp revision b81c786de58ce484230dc04f9a7c78bc48990106
1//===--- CGExprScalar.cpp - Emit LLVM Code for Scalar Exprs ---------------===//
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 with scalar LLVM types as LLVM code.
11//
12//===----------------------------------------------------------------------===//
13
14#include "CodeGenFunction.h"
15#include "CGObjCRuntime.h"
16#include "CodeGenModule.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/AST/DeclObjC.h"
19#include "clang/AST/RecordLayout.h"
20#include "clang/AST/StmtVisitor.h"
21#include "clang/Basic/TargetInfo.h"
22#include "llvm/Constants.h"
23#include "llvm/Function.h"
24#include "llvm/GlobalVariable.h"
25#include "llvm/Intrinsics.h"
26#include "llvm/Module.h"
27#include "llvm/Support/CFG.h"
28#include "llvm/Target/TargetData.h"
29#include <cstdarg>
30
31using namespace clang;
32using namespace CodeGen;
33using llvm::Value;
34
35//===----------------------------------------------------------------------===//
36//                         Scalar Expression Emitter
37//===----------------------------------------------------------------------===//
38
39struct BinOpInfo {
40  Value *LHS;
41  Value *RHS;
42  QualType Ty;  // Computation Type.
43  const BinaryOperator *E;
44};
45
46namespace {
47class ScalarExprEmitter
48  : public StmtVisitor<ScalarExprEmitter, Value*> {
49  CodeGenFunction &CGF;
50  CGBuilderTy &Builder;
51  bool IgnoreResultAssign;
52  llvm::LLVMContext &VMContext;
53public:
54
55  ScalarExprEmitter(CodeGenFunction &cgf, bool ira=false)
56    : CGF(cgf), Builder(CGF.Builder), IgnoreResultAssign(ira),
57      VMContext(cgf.getLLVMContext()) {
58  }
59
60  //===--------------------------------------------------------------------===//
61  //                               Utilities
62  //===--------------------------------------------------------------------===//
63
64  bool TestAndClearIgnoreResultAssign() {
65    bool I = IgnoreResultAssign;
66    IgnoreResultAssign = false;
67    return I;
68  }
69
70  const llvm::Type *ConvertType(QualType T) { return CGF.ConvertType(T); }
71  LValue EmitLValue(const Expr *E) { return CGF.EmitLValue(E); }
72
73  Value *EmitLoadOfLValue(LValue LV, QualType T) {
74    return CGF.EmitLoadOfLValue(LV, T).getScalarVal();
75  }
76
77  /// EmitLoadOfLValue - Given an expression with complex type that represents a
78  /// value l-value, this method emits the address of the l-value, then loads
79  /// and returns the result.
80  Value *EmitLoadOfLValue(const Expr *E) {
81    return EmitLoadOfLValue(EmitLValue(E), E->getType());
82  }
83
84  /// EmitConversionToBool - Convert the specified expression value to a
85  /// boolean (i1) truth value.  This is equivalent to "Val != 0".
86  Value *EmitConversionToBool(Value *Src, QualType DstTy);
87
88  /// EmitScalarConversion - Emit a conversion from the specified type to the
89  /// specified destination type, both of which are LLVM scalar types.
90  Value *EmitScalarConversion(Value *Src, QualType SrcTy, QualType DstTy);
91
92  /// EmitComplexToScalarConversion - Emit a conversion from the specified
93  /// complex type to the specified destination type, where the destination type
94  /// is an LLVM scalar type.
95  Value *EmitComplexToScalarConversion(CodeGenFunction::ComplexPairTy Src,
96                                       QualType SrcTy, QualType DstTy);
97
98  //===--------------------------------------------------------------------===//
99  //                            Visitor Methods
100  //===--------------------------------------------------------------------===//
101
102  Value *VisitStmt(Stmt *S) {
103    S->dump(CGF.getContext().getSourceManager());
104    assert(0 && "Stmt can't have complex result type!");
105    return 0;
106  }
107  Value *VisitExpr(Expr *S);
108
109  Value *VisitParenExpr(ParenExpr *PE) { return Visit(PE->getSubExpr()); }
110
111  // Leaves.
112  Value *VisitIntegerLiteral(const IntegerLiteral *E) {
113    return llvm::ConstantInt::get(VMContext, E->getValue());
114  }
115  Value *VisitFloatingLiteral(const FloatingLiteral *E) {
116    return llvm::ConstantFP::get(VMContext, E->getValue());
117  }
118  Value *VisitCharacterLiteral(const CharacterLiteral *E) {
119    return llvm::ConstantInt::get(ConvertType(E->getType()), E->getValue());
120  }
121  Value *VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) {
122    return llvm::ConstantInt::get(ConvertType(E->getType()), E->getValue());
123  }
124  Value *VisitCXXZeroInitValueExpr(const CXXZeroInitValueExpr *E) {
125    return llvm::Constant::getNullValue(ConvertType(E->getType()));
126  }
127  Value *VisitGNUNullExpr(const GNUNullExpr *E) {
128    return llvm::Constant::getNullValue(ConvertType(E->getType()));
129  }
130  Value *VisitTypesCompatibleExpr(const TypesCompatibleExpr *E) {
131    return llvm::ConstantInt::get(ConvertType(E->getType()),
132                                  CGF.getContext().typesAreCompatible(
133                                    E->getArgType1(), E->getArgType2()));
134  }
135  Value *VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E);
136  Value *VisitAddrLabelExpr(const AddrLabelExpr *E) {
137    llvm::Value *V = CGF.GetAddrOfLabel(E->getLabel());
138    return Builder.CreateBitCast(V, ConvertType(E->getType()));
139  }
140
141  // l-values.
142  Value *VisitDeclRefExpr(DeclRefExpr *E) {
143    Expr::EvalResult Result;
144    if (E->Evaluate(Result, CGF.getContext()) && Result.Val.isInt()) {
145      assert(!Result.HasSideEffects && "Constant declref with side-effect?!");
146      return llvm::ConstantInt::get(VMContext, Result.Val.getInt());
147    }
148    return EmitLoadOfLValue(E);
149  }
150  Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E) {
151    return CGF.EmitObjCSelectorExpr(E);
152  }
153  Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E) {
154    return CGF.EmitObjCProtocolExpr(E);
155  }
156  Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) {
157    return EmitLoadOfLValue(E);
158  }
159  Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
160    return EmitLoadOfLValue(E);
161  }
162  Value *VisitObjCImplicitSetterGetterRefExpr(
163                        ObjCImplicitSetterGetterRefExpr *E) {
164    return EmitLoadOfLValue(E);
165  }
166  Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
167    return CGF.EmitObjCMessageExpr(E).getScalarVal();
168  }
169
170  Value *VisitObjCIsaExpr(ObjCIsaExpr *E) {
171    LValue LV = CGF.EmitObjCIsaExpr(E);
172    Value *V = CGF.EmitLoadOfLValue(LV, E->getType()).getScalarVal();
173    return V;
174  }
175
176  Value *VisitArraySubscriptExpr(ArraySubscriptExpr *E);
177  Value *VisitShuffleVectorExpr(ShuffleVectorExpr *E);
178  Value *VisitMemberExpr(MemberExpr *E);
179  Value *VisitExtVectorElementExpr(Expr *E) { return EmitLoadOfLValue(E); }
180  Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
181    return EmitLoadOfLValue(E);
182  }
183  Value *VisitStringLiteral(Expr *E)  { return EmitLValue(E).getAddress(); }
184  Value *VisitObjCEncodeExpr(const ObjCEncodeExpr *E) {
185     return EmitLValue(E).getAddress();
186  }
187
188  Value *VisitPredefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
189
190  Value *VisitInitListExpr(InitListExpr *E);
191
192  Value *VisitImplicitValueInitExpr(const ImplicitValueInitExpr *E) {
193    return llvm::Constant::getNullValue(ConvertType(E->getType()));
194  }
195  Value *VisitCastExpr(CastExpr *E) {
196    // Make sure to evaluate VLA bounds now so that we have them for later.
197    if (E->getType()->isVariablyModifiedType())
198      CGF.EmitVLASize(E->getType());
199
200    return EmitCastExpr(E);
201  }
202  Value *EmitCastExpr(CastExpr *E);
203
204  Value *VisitCallExpr(const CallExpr *E) {
205    if (E->getCallReturnType()->isReferenceType())
206      return EmitLoadOfLValue(E);
207
208    return CGF.EmitCallExpr(E).getScalarVal();
209  }
210
211  Value *VisitStmtExpr(const StmtExpr *E);
212
213  Value *VisitBlockDeclRefExpr(const BlockDeclRefExpr *E);
214
215  // Unary Operators.
216  Value *VisitPrePostIncDec(const UnaryOperator *E, bool isInc, bool isPre);
217  Value *VisitUnaryPostDec(const UnaryOperator *E) {
218    return VisitPrePostIncDec(E, false, false);
219  }
220  Value *VisitUnaryPostInc(const UnaryOperator *E) {
221    return VisitPrePostIncDec(E, true, false);
222  }
223  Value *VisitUnaryPreDec(const UnaryOperator *E) {
224    return VisitPrePostIncDec(E, false, true);
225  }
226  Value *VisitUnaryPreInc(const UnaryOperator *E) {
227    return VisitPrePostIncDec(E, true, true);
228  }
229  Value *VisitUnaryAddrOf(const UnaryOperator *E) {
230    return EmitLValue(E->getSubExpr()).getAddress();
231  }
232  Value *VisitUnaryDeref(const Expr *E) { return EmitLoadOfLValue(E); }
233  Value *VisitUnaryPlus(const UnaryOperator *E) {
234    // This differs from gcc, though, most likely due to a bug in gcc.
235    TestAndClearIgnoreResultAssign();
236    return Visit(E->getSubExpr());
237  }
238  Value *VisitUnaryMinus    (const UnaryOperator *E);
239  Value *VisitUnaryNot      (const UnaryOperator *E);
240  Value *VisitUnaryLNot     (const UnaryOperator *E);
241  Value *VisitUnaryReal     (const UnaryOperator *E);
242  Value *VisitUnaryImag     (const UnaryOperator *E);
243  Value *VisitUnaryExtension(const UnaryOperator *E) {
244    return Visit(E->getSubExpr());
245  }
246  Value *VisitUnaryOffsetOf(const UnaryOperator *E);
247
248  // C++
249  Value *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
250    return Visit(DAE->getExpr());
251  }
252  Value *VisitCXXThisExpr(CXXThisExpr *TE) {
253    return CGF.LoadCXXThis();
254  }
255
256  Value *VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) {
257    return CGF.EmitCXXExprWithTemporaries(E).getScalarVal();
258  }
259  Value *VisitCXXNewExpr(const CXXNewExpr *E) {
260    return CGF.EmitCXXNewExpr(E);
261  }
262  Value *VisitCXXDeleteExpr(const CXXDeleteExpr *E) {
263    CGF.EmitCXXDeleteExpr(E);
264    return 0;
265  }
266  Value *VisitUnaryTypeTraitExpr(const UnaryTypeTraitExpr *E) {
267    return llvm::ConstantInt::get(Builder.getInt1Ty(),
268                                  E->EvaluateTrait(CGF.getContext()));
269  }
270
271  Value *VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *E) {
272    // C++ [expr.pseudo]p1:
273    //   The result shall only be used as the operand for the function call
274    //   operator (), and the result of such a call has type void. The only
275    //   effect is the evaluation of the postfix-expression before the dot or
276    //   arrow.
277    CGF.EmitScalarExpr(E->getBase());
278    return 0;
279  }
280
281  Value *VisitCXXNullPtrLiteralExpr(const CXXNullPtrLiteralExpr *E) {
282    return llvm::Constant::getNullValue(ConvertType(E->getType()));
283  }
284
285  Value *VisitCXXThrowExpr(const CXXThrowExpr *E) {
286    CGF.EmitCXXThrowExpr(E);
287    return 0;
288  }
289
290  // Binary Operators.
291  Value *EmitMul(const BinOpInfo &Ops) {
292    if (CGF.getContext().getLangOptions().OverflowChecking
293        && Ops.Ty->isSignedIntegerType())
294      return EmitOverflowCheckedBinOp(Ops);
295    if (Ops.LHS->getType()->isFPOrFPVector())
296      return Builder.CreateFMul(Ops.LHS, Ops.RHS, "mul");
297    return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul");
298  }
299  /// Create a binary op that checks for overflow.
300  /// Currently only supports +, - and *.
301  Value *EmitOverflowCheckedBinOp(const BinOpInfo &Ops);
302  Value *EmitDiv(const BinOpInfo &Ops);
303  Value *EmitRem(const BinOpInfo &Ops);
304  Value *EmitAdd(const BinOpInfo &Ops);
305  Value *EmitSub(const BinOpInfo &Ops);
306  Value *EmitShl(const BinOpInfo &Ops);
307  Value *EmitShr(const BinOpInfo &Ops);
308  Value *EmitAnd(const BinOpInfo &Ops) {
309    return Builder.CreateAnd(Ops.LHS, Ops.RHS, "and");
310  }
311  Value *EmitXor(const BinOpInfo &Ops) {
312    return Builder.CreateXor(Ops.LHS, Ops.RHS, "xor");
313  }
314  Value *EmitOr (const BinOpInfo &Ops) {
315    return Builder.CreateOr(Ops.LHS, Ops.RHS, "or");
316  }
317
318  BinOpInfo EmitBinOps(const BinaryOperator *E);
319  Value *EmitCompoundAssign(const CompoundAssignOperator *E,
320                            Value *(ScalarExprEmitter::*F)(const BinOpInfo &));
321
322  // Binary operators and binary compound assignment operators.
323#define HANDLEBINOP(OP) \
324  Value *VisitBin ## OP(const BinaryOperator *E) {                         \
325    return Emit ## OP(EmitBinOps(E));                                      \
326  }                                                                        \
327  Value *VisitBin ## OP ## Assign(const CompoundAssignOperator *E) {       \
328    return EmitCompoundAssign(E, &ScalarExprEmitter::Emit ## OP);          \
329  }
330  HANDLEBINOP(Mul);
331  HANDLEBINOP(Div);
332  HANDLEBINOP(Rem);
333  HANDLEBINOP(Add);
334  HANDLEBINOP(Sub);
335  HANDLEBINOP(Shl);
336  HANDLEBINOP(Shr);
337  HANDLEBINOP(And);
338  HANDLEBINOP(Xor);
339  HANDLEBINOP(Or);
340#undef HANDLEBINOP
341
342  // Comparisons.
343  Value *EmitCompare(const BinaryOperator *E, unsigned UICmpOpc,
344                     unsigned SICmpOpc, unsigned FCmpOpc);
345#define VISITCOMP(CODE, UI, SI, FP) \
346    Value *VisitBin##CODE(const BinaryOperator *E) { \
347      return EmitCompare(E, llvm::ICmpInst::UI, llvm::ICmpInst::SI, \
348                         llvm::FCmpInst::FP); }
349  VISITCOMP(LT, ICMP_ULT, ICMP_SLT, FCMP_OLT);
350  VISITCOMP(GT, ICMP_UGT, ICMP_SGT, FCMP_OGT);
351  VISITCOMP(LE, ICMP_ULE, ICMP_SLE, FCMP_OLE);
352  VISITCOMP(GE, ICMP_UGE, ICMP_SGE, FCMP_OGE);
353  VISITCOMP(EQ, ICMP_EQ , ICMP_EQ , FCMP_OEQ);
354  VISITCOMP(NE, ICMP_NE , ICMP_NE , FCMP_UNE);
355#undef VISITCOMP
356
357  Value *VisitBinAssign     (const BinaryOperator *E);
358
359  Value *VisitBinLAnd       (const BinaryOperator *E);
360  Value *VisitBinLOr        (const BinaryOperator *E);
361  Value *VisitBinComma      (const BinaryOperator *E);
362
363  Value *VisitBinPtrMemD(const Expr *E) { return EmitLoadOfLValue(E); }
364  Value *VisitBinPtrMemI(const Expr *E) { return EmitLoadOfLValue(E); }
365
366  // Other Operators.
367  Value *VisitBlockExpr(const BlockExpr *BE);
368  Value *VisitConditionalOperator(const ConditionalOperator *CO);
369  Value *VisitChooseExpr(ChooseExpr *CE);
370  Value *VisitVAArgExpr(VAArgExpr *VE);
371  Value *VisitObjCStringLiteral(const ObjCStringLiteral *E) {
372    return CGF.EmitObjCStringLiteral(E);
373  }
374};
375}  // end anonymous namespace.
376
377//===----------------------------------------------------------------------===//
378//                                Utilities
379//===----------------------------------------------------------------------===//
380
381/// EmitConversionToBool - Convert the specified expression value to a
382/// boolean (i1) truth value.  This is equivalent to "Val != 0".
383Value *ScalarExprEmitter::EmitConversionToBool(Value *Src, QualType SrcType) {
384  assert(SrcType.isCanonical() && "EmitScalarConversion strips typedefs");
385
386  if (SrcType->isRealFloatingType()) {
387    // Compare against 0.0 for fp scalars.
388    llvm::Value *Zero = llvm::Constant::getNullValue(Src->getType());
389    return Builder.CreateFCmpUNE(Src, Zero, "tobool");
390  }
391
392  if (SrcType->isMemberPointerType()) {
393    // FIXME: This is ABI specific.
394
395    // Compare against -1.
396    llvm::Value *NegativeOne = llvm::Constant::getAllOnesValue(Src->getType());
397    return Builder.CreateICmpNE(Src, NegativeOne, "tobool");
398  }
399
400  assert((SrcType->isIntegerType() || isa<llvm::PointerType>(Src->getType())) &&
401         "Unknown scalar type to convert");
402
403  // Because of the type rules of C, we often end up computing a logical value,
404  // then zero extending it to int, then wanting it as a logical value again.
405  // Optimize this common case.
406  if (llvm::ZExtInst *ZI = dyn_cast<llvm::ZExtInst>(Src)) {
407    if (ZI->getOperand(0)->getType() ==
408        llvm::Type::getInt1Ty(CGF.getLLVMContext())) {
409      Value *Result = ZI->getOperand(0);
410      // If there aren't any more uses, zap the instruction to save space.
411      // Note that there can be more uses, for example if this
412      // is the result of an assignment.
413      if (ZI->use_empty())
414        ZI->eraseFromParent();
415      return Result;
416    }
417  }
418
419  // Compare against an integer or pointer null.
420  llvm::Value *Zero = llvm::Constant::getNullValue(Src->getType());
421  return Builder.CreateICmpNE(Src, Zero, "tobool");
422}
423
424/// EmitScalarConversion - Emit a conversion from the specified type to the
425/// specified destination type, both of which are LLVM scalar types.
426Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType,
427                                               QualType DstType) {
428  SrcType = CGF.getContext().getCanonicalType(SrcType);
429  DstType = CGF.getContext().getCanonicalType(DstType);
430  if (SrcType == DstType) return Src;
431
432  if (DstType->isVoidType()) return 0;
433
434  llvm::LLVMContext &VMContext = CGF.getLLVMContext();
435
436  // Handle conversions to bool first, they are special: comparisons against 0.
437  if (DstType->isBooleanType())
438    return EmitConversionToBool(Src, SrcType);
439
440  const llvm::Type *DstTy = ConvertType(DstType);
441
442  // Ignore conversions like int -> uint.
443  if (Src->getType() == DstTy)
444    return Src;
445
446  // Handle pointer conversions next: pointers can only be converted to/from
447  // other pointers and integers. Check for pointer types in terms of LLVM, as
448  // some native types (like Obj-C id) may map to a pointer type.
449  if (isa<llvm::PointerType>(DstTy)) {
450    // The source value may be an integer, or a pointer.
451    if (isa<llvm::PointerType>(Src->getType()))
452      return Builder.CreateBitCast(Src, DstTy, "conv");
453
454    assert(SrcType->isIntegerType() && "Not ptr->ptr or int->ptr conversion?");
455    // First, convert to the correct width so that we control the kind of
456    // extension.
457    const llvm::Type *MiddleTy =
458          llvm::IntegerType::get(VMContext, CGF.LLVMPointerWidth);
459    bool InputSigned = SrcType->isSignedIntegerType();
460    llvm::Value* IntResult =
461        Builder.CreateIntCast(Src, MiddleTy, InputSigned, "conv");
462    // Then, cast to pointer.
463    return Builder.CreateIntToPtr(IntResult, DstTy, "conv");
464  }
465
466  if (isa<llvm::PointerType>(Src->getType())) {
467    // Must be an ptr to int cast.
468    assert(isa<llvm::IntegerType>(DstTy) && "not ptr->int?");
469    return Builder.CreatePtrToInt(Src, DstTy, "conv");
470  }
471
472  // A scalar can be splatted to an extended vector of the same element type
473  if (DstType->isExtVectorType() && !SrcType->isVectorType()) {
474    // Cast the scalar to element type
475    QualType EltTy = DstType->getAs<ExtVectorType>()->getElementType();
476    llvm::Value *Elt = EmitScalarConversion(Src, SrcType, EltTy);
477
478    // Insert the element in element zero of an undef vector
479    llvm::Value *UnV = llvm::UndefValue::get(DstTy);
480    llvm::Value *Idx =
481        llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), 0);
482    UnV = Builder.CreateInsertElement(UnV, Elt, Idx, "tmp");
483
484    // Splat the element across to all elements
485    llvm::SmallVector<llvm::Constant*, 16> Args;
486    unsigned NumElements = cast<llvm::VectorType>(DstTy)->getNumElements();
487    for (unsigned i = 0; i < NumElements; i++)
488      Args.push_back(llvm::ConstantInt::get(
489                                        llvm::Type::getInt32Ty(VMContext), 0));
490
491    llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], NumElements);
492    llvm::Value *Yay = Builder.CreateShuffleVector(UnV, UnV, Mask, "splat");
493    return Yay;
494  }
495
496  // Allow bitcast from vector to integer/fp of the same size.
497  if (isa<llvm::VectorType>(Src->getType()) ||
498      isa<llvm::VectorType>(DstTy))
499    return Builder.CreateBitCast(Src, DstTy, "conv");
500
501  // Finally, we have the arithmetic types: real int/float.
502  if (isa<llvm::IntegerType>(Src->getType())) {
503    bool InputSigned = SrcType->isSignedIntegerType();
504    if (isa<llvm::IntegerType>(DstTy))
505      return Builder.CreateIntCast(Src, DstTy, InputSigned, "conv");
506    else if (InputSigned)
507      return Builder.CreateSIToFP(Src, DstTy, "conv");
508    else
509      return Builder.CreateUIToFP(Src, DstTy, "conv");
510  }
511
512  assert(Src->getType()->isFloatingPoint() && "Unknown real conversion");
513  if (isa<llvm::IntegerType>(DstTy)) {
514    if (DstType->isSignedIntegerType())
515      return Builder.CreateFPToSI(Src, DstTy, "conv");
516    else
517      return Builder.CreateFPToUI(Src, DstTy, "conv");
518  }
519
520  assert(DstTy->isFloatingPoint() && "Unknown real conversion");
521  if (DstTy->getTypeID() < Src->getType()->getTypeID())
522    return Builder.CreateFPTrunc(Src, DstTy, "conv");
523  else
524    return Builder.CreateFPExt(Src, DstTy, "conv");
525}
526
527/// EmitComplexToScalarConversion - Emit a conversion from the specified complex
528/// type to the specified destination type, where the destination type is an
529/// LLVM scalar type.
530Value *ScalarExprEmitter::
531EmitComplexToScalarConversion(CodeGenFunction::ComplexPairTy Src,
532                              QualType SrcTy, QualType DstTy) {
533  // Get the source element type.
534  SrcTy = SrcTy->getAs<ComplexType>()->getElementType();
535
536  // Handle conversions to bool first, they are special: comparisons against 0.
537  if (DstTy->isBooleanType()) {
538    //  Complex != 0  -> (Real != 0) | (Imag != 0)
539    Src.first  = EmitScalarConversion(Src.first, SrcTy, DstTy);
540    Src.second = EmitScalarConversion(Src.second, SrcTy, DstTy);
541    return Builder.CreateOr(Src.first, Src.second, "tobool");
542  }
543
544  // C99 6.3.1.7p2: "When a value of complex type is converted to a real type,
545  // the imaginary part of the complex value is discarded and the value of the
546  // real part is converted according to the conversion rules for the
547  // corresponding real type.
548  return EmitScalarConversion(Src.first, SrcTy, DstTy);
549}
550
551
552//===----------------------------------------------------------------------===//
553//                            Visitor Methods
554//===----------------------------------------------------------------------===//
555
556Value *ScalarExprEmitter::VisitExpr(Expr *E) {
557  CGF.ErrorUnsupported(E, "scalar expression");
558  if (E->getType()->isVoidType())
559    return 0;
560  return llvm::UndefValue::get(CGF.ConvertType(E->getType()));
561}
562
563Value *ScalarExprEmitter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) {
564  llvm::SmallVector<llvm::Constant*, 32> indices;
565  for (unsigned i = 2; i < E->getNumSubExprs(); i++) {
566    indices.push_back(cast<llvm::Constant>(CGF.EmitScalarExpr(E->getExpr(i))));
567  }
568  Value* V1 = CGF.EmitScalarExpr(E->getExpr(0));
569  Value* V2 = CGF.EmitScalarExpr(E->getExpr(1));
570  Value* SV = llvm::ConstantVector::get(indices.begin(), indices.size());
571  return Builder.CreateShuffleVector(V1, V2, SV, "shuffle");
572}
573Value *ScalarExprEmitter::VisitMemberExpr(MemberExpr *E) {
574  Expr::EvalResult Result;
575  if (E->Evaluate(Result, CGF.getContext()) && Result.Val.isInt()) {
576    if (E->isArrow())
577      CGF.EmitScalarExpr(E->getBase());
578    else
579      EmitLValue(E->getBase());
580    return llvm::ConstantInt::get(VMContext, Result.Val.getInt());
581  }
582  return EmitLoadOfLValue(E);
583}
584
585Value *ScalarExprEmitter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
586  TestAndClearIgnoreResultAssign();
587
588  // Emit subscript expressions in rvalue context's.  For most cases, this just
589  // loads the lvalue formed by the subscript expr.  However, we have to be
590  // careful, because the base of a vector subscript is occasionally an rvalue,
591  // so we can't get it as an lvalue.
592  if (!E->getBase()->getType()->isVectorType())
593    return EmitLoadOfLValue(E);
594
595  // Handle the vector case.  The base must be a vector, the index must be an
596  // integer value.
597  Value *Base = Visit(E->getBase());
598  Value *Idx  = Visit(E->getIdx());
599  bool IdxSigned = E->getIdx()->getType()->isSignedIntegerType();
600  Idx = Builder.CreateIntCast(Idx,
601                              llvm::Type::getInt32Ty(CGF.getLLVMContext()),
602                              IdxSigned,
603                              "vecidxcast");
604  return Builder.CreateExtractElement(Base, Idx, "vecext");
605}
606
607static llvm::Constant *getMaskElt(llvm::ShuffleVectorInst *SVI, unsigned Idx,
608                                  unsigned Off, const llvm::Type *I32Ty) {
609  int MV = SVI->getMaskValue(Idx);
610  if (MV == -1)
611    return llvm::UndefValue::get(I32Ty);
612  return llvm::ConstantInt::get(I32Ty, Off+MV);
613}
614
615Value *ScalarExprEmitter::VisitInitListExpr(InitListExpr *E) {
616  bool Ignore = TestAndClearIgnoreResultAssign();
617  (void)Ignore;
618  assert (Ignore == false && "init list ignored");
619  unsigned NumInitElements = E->getNumInits();
620
621  if (E->hadArrayRangeDesignator())
622    CGF.ErrorUnsupported(E, "GNU array range designator extension");
623
624  const llvm::VectorType *VType =
625    dyn_cast<llvm::VectorType>(ConvertType(E->getType()));
626
627  // We have a scalar in braces. Just use the first element.
628  if (!VType)
629    return Visit(E->getInit(0));
630
631  unsigned ResElts = VType->getNumElements();
632  const llvm::Type *I32Ty = llvm::Type::getInt32Ty(CGF.getLLVMContext());
633
634  // Loop over initializers collecting the Value for each, and remembering
635  // whether the source was swizzle (ExtVectorElementExpr).  This will allow
636  // us to fold the shuffle for the swizzle into the shuffle for the vector
637  // initializer, since LLVM optimizers generally do not want to touch
638  // shuffles.
639  unsigned CurIdx = 0;
640  bool VIsUndefShuffle = false;
641  llvm::Value *V = llvm::UndefValue::get(VType);
642  for (unsigned i = 0; i != NumInitElements; ++i) {
643    Expr *IE = E->getInit(i);
644    Value *Init = Visit(IE);
645    llvm::SmallVector<llvm::Constant*, 16> Args;
646
647    const llvm::VectorType *VVT = dyn_cast<llvm::VectorType>(Init->getType());
648
649    // Handle scalar elements.  If the scalar initializer is actually one
650    // element of a different vector of the same width, use shuffle instead of
651    // extract+insert.
652    if (!VVT) {
653      if (isa<ExtVectorElementExpr>(IE)) {
654        llvm::ExtractElementInst *EI = cast<llvm::ExtractElementInst>(Init);
655
656        if (EI->getVectorOperandType()->getNumElements() == ResElts) {
657          llvm::ConstantInt *C = cast<llvm::ConstantInt>(EI->getIndexOperand());
658          Value *LHS = 0, *RHS = 0;
659          if (CurIdx == 0) {
660            // insert into undef -> shuffle (src, undef)
661            Args.push_back(C);
662            for (unsigned j = 1; j != ResElts; ++j)
663              Args.push_back(llvm::UndefValue::get(I32Ty));
664
665            LHS = EI->getVectorOperand();
666            RHS = V;
667            VIsUndefShuffle = true;
668          } else if (VIsUndefShuffle) {
669            // insert into undefshuffle && size match -> shuffle (v, src)
670            llvm::ShuffleVectorInst *SVV = cast<llvm::ShuffleVectorInst>(V);
671            for (unsigned j = 0; j != CurIdx; ++j)
672              Args.push_back(getMaskElt(SVV, j, 0, I32Ty));
673            Args.push_back(llvm::ConstantInt::get(I32Ty,
674                                                  ResElts + C->getZExtValue()));
675            for (unsigned j = CurIdx + 1; j != ResElts; ++j)
676              Args.push_back(llvm::UndefValue::get(I32Ty));
677
678            LHS = cast<llvm::ShuffleVectorInst>(V)->getOperand(0);
679            RHS = EI->getVectorOperand();
680            VIsUndefShuffle = false;
681          }
682          if (!Args.empty()) {
683            llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], ResElts);
684            V = Builder.CreateShuffleVector(LHS, RHS, Mask);
685            ++CurIdx;
686            continue;
687          }
688        }
689      }
690      Value *Idx = llvm::ConstantInt::get(I32Ty, CurIdx);
691      V = Builder.CreateInsertElement(V, Init, Idx, "vecinit");
692      VIsUndefShuffle = false;
693      ++CurIdx;
694      continue;
695    }
696
697    unsigned InitElts = VVT->getNumElements();
698
699    // If the initializer is an ExtVecEltExpr (a swizzle), and the swizzle's
700    // input is the same width as the vector being constructed, generate an
701    // optimized shuffle of the swizzle input into the result.
702    unsigned Offset = (CurIdx == 0) ? 0 : ResElts;
703    if (isa<ExtVectorElementExpr>(IE)) {
704      llvm::ShuffleVectorInst *SVI = cast<llvm::ShuffleVectorInst>(Init);
705      Value *SVOp = SVI->getOperand(0);
706      const llvm::VectorType *OpTy = cast<llvm::VectorType>(SVOp->getType());
707
708      if (OpTy->getNumElements() == ResElts) {
709        for (unsigned j = 0; j != CurIdx; ++j) {
710          // If the current vector initializer is a shuffle with undef, merge
711          // this shuffle directly into it.
712          if (VIsUndefShuffle) {
713            Args.push_back(getMaskElt(cast<llvm::ShuffleVectorInst>(V), j, 0,
714                                      I32Ty));
715          } else {
716            Args.push_back(llvm::ConstantInt::get(I32Ty, j));
717          }
718        }
719        for (unsigned j = 0, je = InitElts; j != je; ++j)
720          Args.push_back(getMaskElt(SVI, j, Offset, I32Ty));
721        for (unsigned j = CurIdx + InitElts; j != ResElts; ++j)
722          Args.push_back(llvm::UndefValue::get(I32Ty));
723
724        if (VIsUndefShuffle)
725          V = cast<llvm::ShuffleVectorInst>(V)->getOperand(0);
726
727        Init = SVOp;
728      }
729    }
730
731    // Extend init to result vector length, and then shuffle its contribution
732    // to the vector initializer into V.
733    if (Args.empty()) {
734      for (unsigned j = 0; j != InitElts; ++j)
735        Args.push_back(llvm::ConstantInt::get(I32Ty, j));
736      for (unsigned j = InitElts; j != ResElts; ++j)
737        Args.push_back(llvm::UndefValue::get(I32Ty));
738      llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], ResElts);
739      Init = Builder.CreateShuffleVector(Init, llvm::UndefValue::get(VVT),
740                                         Mask, "vext");
741
742      Args.clear();
743      for (unsigned j = 0; j != CurIdx; ++j)
744        Args.push_back(llvm::ConstantInt::get(I32Ty, j));
745      for (unsigned j = 0; j != InitElts; ++j)
746        Args.push_back(llvm::ConstantInt::get(I32Ty, j+Offset));
747      for (unsigned j = CurIdx + InitElts; j != ResElts; ++j)
748        Args.push_back(llvm::UndefValue::get(I32Ty));
749    }
750
751    // If V is undef, make sure it ends up on the RHS of the shuffle to aid
752    // merging subsequent shuffles into this one.
753    if (CurIdx == 0)
754      std::swap(V, Init);
755    llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], ResElts);
756    V = Builder.CreateShuffleVector(V, Init, Mask, "vecinit");
757    VIsUndefShuffle = isa<llvm::UndefValue>(Init);
758    CurIdx += InitElts;
759  }
760
761  // FIXME: evaluate codegen vs. shuffling against constant null vector.
762  // Emit remaining default initializers.
763  const llvm::Type *EltTy = VType->getElementType();
764
765  // Emit remaining default initializers
766  for (/* Do not initialize i*/; CurIdx < ResElts; ++CurIdx) {
767    Value *Idx = llvm::ConstantInt::get(I32Ty, CurIdx);
768    llvm::Value *Init = llvm::Constant::getNullValue(EltTy);
769    V = Builder.CreateInsertElement(V, Init, Idx, "vecinit");
770  }
771  return V;
772}
773
774static bool ShouldNullCheckClassCastValue(const CastExpr *CE) {
775  const Expr *E = CE->getSubExpr();
776
777  if (isa<CXXThisExpr>(E)) {
778    // We always assume that 'this' is never null.
779    return false;
780  }
781
782  if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(CE)) {
783    // And that lvalue casts are never null.
784    if (ICE->isLvalueCast())
785      return false;
786  }
787
788  return true;
789}
790
791// VisitCastExpr - Emit code for an explicit or implicit cast.  Implicit casts
792// have to handle a more broad range of conversions than explicit casts, as they
793// handle things like function to ptr-to-function decay etc.
794Value *ScalarExprEmitter::EmitCastExpr(CastExpr *CE) {
795  Expr *E = CE->getSubExpr();
796  QualType DestTy = CE->getType();
797  CastExpr::CastKind Kind = CE->getCastKind();
798
799  if (!DestTy->isVoidType())
800    TestAndClearIgnoreResultAssign();
801
802  // Since almost all cast kinds apply to scalars, this switch doesn't have
803  // a default case, so the compiler will warn on a missing case.  The cases
804  // are in the same order as in the CastKind enum.
805  switch (Kind) {
806  case CastExpr::CK_Unknown:
807    // FIXME: All casts should have a known kind!
808    //assert(0 && "Unknown cast kind!");
809    break;
810
811  case CastExpr::CK_AnyPointerToObjCPointerCast:
812  case CastExpr::CK_BitCast: {
813    Value *Src = Visit(const_cast<Expr*>(E));
814    return Builder.CreateBitCast(Src, ConvertType(DestTy));
815  }
816  case CastExpr::CK_NoOp:
817    return Visit(const_cast<Expr*>(E));
818
819  case CastExpr::CK_BaseToDerived: {
820    const CXXRecordDecl *BaseClassDecl =
821      E->getType()->getCXXRecordDeclForPointerType();
822    const CXXRecordDecl *DerivedClassDecl =
823      DestTy->getCXXRecordDeclForPointerType();
824
825    Value *Src = Visit(const_cast<Expr*>(E));
826
827    bool NullCheckValue = ShouldNullCheckClassCastValue(CE);
828    return CGF.GetAddressOfDerivedClass(Src, BaseClassDecl, DerivedClassDecl,
829                                        NullCheckValue);
830  }
831  case CastExpr::CK_DerivedToBase: {
832    const RecordType *DerivedClassTy =
833      E->getType()->getAs<PointerType>()->getPointeeType()->getAs<RecordType>();
834    CXXRecordDecl *DerivedClassDecl =
835      cast<CXXRecordDecl>(DerivedClassTy->getDecl());
836
837    const RecordType *BaseClassTy =
838      DestTy->getAs<PointerType>()->getPointeeType()->getAs<RecordType>();
839    CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseClassTy->getDecl());
840
841    Value *Src = Visit(const_cast<Expr*>(E));
842
843    bool NullCheckValue = ShouldNullCheckClassCastValue(CE);
844    return CGF.GetAddressOfBaseClass(Src, DerivedClassDecl, BaseClassDecl,
845                                     NullCheckValue);
846  }
847  case CastExpr::CK_Dynamic: {
848    Value *V = Visit(const_cast<Expr*>(E));
849    const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(CE);
850    return CGF.EmitDynamicCast(V, DCE);
851  }
852  case CastExpr::CK_ToUnion:
853    assert(0 && "Should be unreachable!");
854    break;
855
856  case CastExpr::CK_ArrayToPointerDecay: {
857    assert(E->getType()->isArrayType() &&
858           "Array to pointer decay must have array source type!");
859
860    Value *V = EmitLValue(E).getAddress();  // Bitfields can't be arrays.
861
862    // Note that VLA pointers are always decayed, so we don't need to do
863    // anything here.
864    if (!E->getType()->isVariableArrayType()) {
865      assert(isa<llvm::PointerType>(V->getType()) && "Expected pointer");
866      assert(isa<llvm::ArrayType>(cast<llvm::PointerType>(V->getType())
867                                 ->getElementType()) &&
868             "Expected pointer to array");
869      V = Builder.CreateStructGEP(V, 0, "arraydecay");
870    }
871
872    return V;
873  }
874  case CastExpr::CK_FunctionToPointerDecay:
875    return EmitLValue(E).getAddress();
876
877  case CastExpr::CK_NullToMemberPointer:
878    return CGF.CGM.EmitNullConstant(DestTy);
879
880  case CastExpr::CK_BaseToDerivedMemberPointer:
881  case CastExpr::CK_DerivedToBaseMemberPointer: {
882    Value *Src = Visit(E);
883
884    // See if we need to adjust the pointer.
885    const CXXRecordDecl *BaseDecl =
886      cast<CXXRecordDecl>(E->getType()->getAs<MemberPointerType>()->
887                          getClass()->getAs<RecordType>()->getDecl());
888    const CXXRecordDecl *DerivedDecl =
889      cast<CXXRecordDecl>(CE->getType()->getAs<MemberPointerType>()->
890                          getClass()->getAs<RecordType>()->getDecl());
891    if (CE->getCastKind() == CastExpr::CK_DerivedToBaseMemberPointer)
892      std::swap(DerivedDecl, BaseDecl);
893
894    llvm::Constant *Adj = CGF.CGM.GetCXXBaseClassOffset(DerivedDecl, BaseDecl);
895    if (Adj) {
896      if (CE->getCastKind() == CastExpr::CK_DerivedToBaseMemberPointer)
897        Src = Builder.CreateSub(Src, Adj, "adj");
898      else
899        Src = Builder.CreateAdd(Src, Adj, "adj");
900    }
901    return Src;
902  }
903
904  case CastExpr::CK_UserDefinedConversion:
905  case CastExpr::CK_ConstructorConversion:
906    assert(0 && "Should be unreachable!");
907    break;
908
909  case CastExpr::CK_IntegralToPointer: {
910    Value *Src = Visit(const_cast<Expr*>(E));
911
912    // First, convert to the correct width so that we control the kind of
913    // extension.
914    const llvm::Type *MiddleTy =
915      llvm::IntegerType::get(VMContext, CGF.LLVMPointerWidth);
916    bool InputSigned = E->getType()->isSignedIntegerType();
917    llvm::Value* IntResult =
918      Builder.CreateIntCast(Src, MiddleTy, InputSigned, "conv");
919
920    return Builder.CreateIntToPtr(IntResult, ConvertType(DestTy));
921  }
922  case CastExpr::CK_PointerToIntegral: {
923    Value *Src = Visit(const_cast<Expr*>(E));
924    return Builder.CreatePtrToInt(Src, ConvertType(DestTy));
925  }
926  case CastExpr::CK_ToVoid: {
927    CGF.EmitAnyExpr(E, 0, false, true);
928    return 0;
929  }
930  case CastExpr::CK_VectorSplat: {
931    const llvm::Type *DstTy = ConvertType(DestTy);
932    Value *Elt = Visit(const_cast<Expr*>(E));
933
934    // Insert the element in element zero of an undef vector
935    llvm::Value *UnV = llvm::UndefValue::get(DstTy);
936    llvm::Value *Idx =
937        llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), 0);
938    UnV = Builder.CreateInsertElement(UnV, Elt, Idx, "tmp");
939
940    // Splat the element across to all elements
941    llvm::SmallVector<llvm::Constant*, 16> Args;
942    unsigned NumElements = cast<llvm::VectorType>(DstTy)->getNumElements();
943    for (unsigned i = 0; i < NumElements; i++)
944      Args.push_back(llvm::ConstantInt::get(
945                                        llvm::Type::getInt32Ty(VMContext), 0));
946
947    llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], NumElements);
948    llvm::Value *Yay = Builder.CreateShuffleVector(UnV, UnV, Mask, "splat");
949    return Yay;
950  }
951  case CastExpr::CK_IntegralCast:
952  case CastExpr::CK_IntegralToFloating:
953  case CastExpr::CK_FloatingToIntegral:
954  case CastExpr::CK_FloatingCast:
955    return EmitScalarConversion(Visit(E), E->getType(), DestTy);
956
957  case CastExpr::CK_MemberPointerToBoolean: {
958    const MemberPointerType* T = E->getType()->getAs<MemberPointerType>();
959
960    if (T->getPointeeType()->isFunctionType()) {
961      // We have a member function pointer.
962      llvm::Value *Ptr = CGF.CreateTempAlloca(ConvertType(E->getType()));
963
964      CGF.EmitAggExpr(E, Ptr, /*VolatileDest=*/false);
965
966      // Get the pointer.
967      llvm::Value *FuncPtr = Builder.CreateStructGEP(Ptr, 0, "src.ptr");
968      FuncPtr = Builder.CreateLoad(FuncPtr);
969
970      llvm::Value *IsNotNull =
971        Builder.CreateICmpNE(FuncPtr,
972                             llvm::Constant::getNullValue(FuncPtr->getType()),
973                             "tobool");
974
975      return IsNotNull;
976    }
977
978    // We have a regular member pointer.
979    Value *Ptr = Visit(const_cast<Expr*>(E));
980    llvm::Value *IsNotNull =
981      Builder.CreateICmpNE(Ptr, CGF.CGM.EmitNullConstant(E->getType()),
982                           "tobool");
983    return IsNotNull;
984  }
985  }
986
987  // Handle cases where the source is an non-complex type.
988
989  if (!CGF.hasAggregateLLVMType(E->getType())) {
990    Value *Src = Visit(const_cast<Expr*>(E));
991
992    // Use EmitScalarConversion to perform the conversion.
993    return EmitScalarConversion(Src, E->getType(), DestTy);
994  }
995
996  if (E->getType()->isAnyComplexType()) {
997    // Handle cases where the source is a complex type.
998    bool IgnoreImag = true;
999    bool IgnoreImagAssign = true;
1000    bool IgnoreReal = IgnoreResultAssign;
1001    bool IgnoreRealAssign = IgnoreResultAssign;
1002    if (DestTy->isBooleanType())
1003      IgnoreImagAssign = IgnoreImag = false;
1004    else if (DestTy->isVoidType()) {
1005      IgnoreReal = IgnoreImag = false;
1006      IgnoreRealAssign = IgnoreImagAssign = true;
1007    }
1008    CodeGenFunction::ComplexPairTy V
1009      = CGF.EmitComplexExpr(E, IgnoreReal, IgnoreImag, IgnoreRealAssign,
1010                            IgnoreImagAssign);
1011    return EmitComplexToScalarConversion(V, E->getType(), DestTy);
1012  }
1013
1014  // Okay, this is a cast from an aggregate.  It must be a cast to void.  Just
1015  // evaluate the result and return.
1016  CGF.EmitAggExpr(E, 0, false, true);
1017  return 0;
1018}
1019
1020Value *ScalarExprEmitter::VisitStmtExpr(const StmtExpr *E) {
1021  return CGF.EmitCompoundStmt(*E->getSubStmt(),
1022                              !E->getType()->isVoidType()).getScalarVal();
1023}
1024
1025Value *ScalarExprEmitter::VisitBlockDeclRefExpr(const BlockDeclRefExpr *E) {
1026  llvm::Value *V = CGF.GetAddrOfBlockDecl(E);
1027  if (E->getType().isObjCGCWeak())
1028    return CGF.CGM.getObjCRuntime().EmitObjCWeakRead(CGF, V);
1029  return Builder.CreateLoad(V, "tmp");
1030}
1031
1032//===----------------------------------------------------------------------===//
1033//                             Unary Operators
1034//===----------------------------------------------------------------------===//
1035
1036Value *ScalarExprEmitter::VisitPrePostIncDec(const UnaryOperator *E,
1037                                             bool isInc, bool isPre) {
1038  LValue LV = EmitLValue(E->getSubExpr());
1039  QualType ValTy = E->getSubExpr()->getType();
1040  Value *InVal = CGF.EmitLoadOfLValue(LV, ValTy).getScalarVal();
1041
1042  llvm::LLVMContext &VMContext = CGF.getLLVMContext();
1043
1044  int AmountVal = isInc ? 1 : -1;
1045
1046  if (ValTy->isPointerType() &&
1047      ValTy->getAs<PointerType>()->isVariableArrayType()) {
1048    // The amount of the addition/subtraction needs to account for the VLA size
1049    CGF.ErrorUnsupported(E, "VLA pointer inc/dec");
1050  }
1051
1052  Value *NextVal;
1053  if (const llvm::PointerType *PT =
1054         dyn_cast<llvm::PointerType>(InVal->getType())) {
1055    llvm::Constant *Inc =
1056      llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), AmountVal);
1057    if (!isa<llvm::FunctionType>(PT->getElementType())) {
1058      QualType PTEE = ValTy->getPointeeType();
1059      if (const ObjCInterfaceType *OIT =
1060          dyn_cast<ObjCInterfaceType>(PTEE)) {
1061        // Handle interface types, which are not represented with a concrete type.
1062        int size = CGF.getContext().getTypeSize(OIT) / 8;
1063        if (!isInc)
1064          size = -size;
1065        Inc = llvm::ConstantInt::get(Inc->getType(), size);
1066        const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1067        InVal = Builder.CreateBitCast(InVal, i8Ty);
1068        NextVal = Builder.CreateGEP(InVal, Inc, "add.ptr");
1069        llvm::Value *lhs = LV.getAddress();
1070        lhs = Builder.CreateBitCast(lhs, llvm::PointerType::getUnqual(i8Ty));
1071        LV = LValue::MakeAddr(lhs, CGF.MakeQualifiers(ValTy));
1072      } else
1073        NextVal = Builder.CreateInBoundsGEP(InVal, Inc, "ptrincdec");
1074    } else {
1075      const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1076      NextVal = Builder.CreateBitCast(InVal, i8Ty, "tmp");
1077      NextVal = Builder.CreateGEP(NextVal, Inc, "ptrincdec");
1078      NextVal = Builder.CreateBitCast(NextVal, InVal->getType());
1079    }
1080  } else if (InVal->getType() == llvm::Type::getInt1Ty(VMContext) && isInc) {
1081    // Bool++ is an interesting case, due to promotion rules, we get:
1082    // Bool++ -> Bool = Bool+1 -> Bool = (int)Bool+1 ->
1083    // Bool = ((int)Bool+1) != 0
1084    // An interesting aspect of this is that increment is always true.
1085    // Decrement does not have this property.
1086    NextVal = llvm::ConstantInt::getTrue(VMContext);
1087  } else if (isa<llvm::IntegerType>(InVal->getType())) {
1088    NextVal = llvm::ConstantInt::get(InVal->getType(), AmountVal);
1089
1090    // Signed integer overflow is undefined behavior.
1091    if (ValTy->isSignedIntegerType())
1092      NextVal = Builder.CreateNSWAdd(InVal, NextVal, isInc ? "inc" : "dec");
1093    else
1094      NextVal = Builder.CreateAdd(InVal, NextVal, isInc ? "inc" : "dec");
1095  } else {
1096    // Add the inc/dec to the real part.
1097    if (InVal->getType()->isFloatTy())
1098      NextVal =
1099        llvm::ConstantFP::get(VMContext,
1100                              llvm::APFloat(static_cast<float>(AmountVal)));
1101    else if (InVal->getType()->isDoubleTy())
1102      NextVal =
1103        llvm::ConstantFP::get(VMContext,
1104                              llvm::APFloat(static_cast<double>(AmountVal)));
1105    else {
1106      llvm::APFloat F(static_cast<float>(AmountVal));
1107      bool ignored;
1108      F.convert(CGF.Target.getLongDoubleFormat(), llvm::APFloat::rmTowardZero,
1109                &ignored);
1110      NextVal = llvm::ConstantFP::get(VMContext, F);
1111    }
1112    NextVal = Builder.CreateFAdd(InVal, NextVal, isInc ? "inc" : "dec");
1113  }
1114
1115  // Store the updated result through the lvalue.
1116  if (LV.isBitfield())
1117    CGF.EmitStoreThroughBitfieldLValue(RValue::get(NextVal), LV, ValTy,
1118                                       &NextVal);
1119  else
1120    CGF.EmitStoreThroughLValue(RValue::get(NextVal), LV, ValTy);
1121
1122  // If this is a postinc, return the value read from memory, otherwise use the
1123  // updated value.
1124  return isPre ? NextVal : InVal;
1125}
1126
1127
1128Value *ScalarExprEmitter::VisitUnaryMinus(const UnaryOperator *E) {
1129  TestAndClearIgnoreResultAssign();
1130  Value *Op = Visit(E->getSubExpr());
1131  if (Op->getType()->isFPOrFPVector())
1132    return Builder.CreateFNeg(Op, "neg");
1133  return Builder.CreateNeg(Op, "neg");
1134}
1135
1136Value *ScalarExprEmitter::VisitUnaryNot(const UnaryOperator *E) {
1137  TestAndClearIgnoreResultAssign();
1138  Value *Op = Visit(E->getSubExpr());
1139  return Builder.CreateNot(Op, "neg");
1140}
1141
1142Value *ScalarExprEmitter::VisitUnaryLNot(const UnaryOperator *E) {
1143  // Compare operand to zero.
1144  Value *BoolVal = CGF.EvaluateExprAsBool(E->getSubExpr());
1145
1146  // Invert value.
1147  // TODO: Could dynamically modify easy computations here.  For example, if
1148  // the operand is an icmp ne, turn into icmp eq.
1149  BoolVal = Builder.CreateNot(BoolVal, "lnot");
1150
1151  // ZExt result to the expr type.
1152  return Builder.CreateZExt(BoolVal, ConvertType(E->getType()), "lnot.ext");
1153}
1154
1155/// VisitSizeOfAlignOfExpr - Return the size or alignment of the type of
1156/// argument of the sizeof expression as an integer.
1157Value *
1158ScalarExprEmitter::VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E) {
1159  QualType TypeToSize = E->getTypeOfArgument();
1160  if (E->isSizeOf()) {
1161    if (const VariableArrayType *VAT =
1162          CGF.getContext().getAsVariableArrayType(TypeToSize)) {
1163      if (E->isArgumentType()) {
1164        // sizeof(type) - make sure to emit the VLA size.
1165        CGF.EmitVLASize(TypeToSize);
1166      } else {
1167        // C99 6.5.3.4p2: If the argument is an expression of type
1168        // VLA, it is evaluated.
1169        CGF.EmitAnyExpr(E->getArgumentExpr());
1170      }
1171
1172      return CGF.GetVLASize(VAT);
1173    }
1174  }
1175
1176  // If this isn't sizeof(vla), the result must be constant; use the constant
1177  // folding logic so we don't have to duplicate it here.
1178  Expr::EvalResult Result;
1179  E->Evaluate(Result, CGF.getContext());
1180  return llvm::ConstantInt::get(VMContext, Result.Val.getInt());
1181}
1182
1183Value *ScalarExprEmitter::VisitUnaryReal(const UnaryOperator *E) {
1184  Expr *Op = E->getSubExpr();
1185  if (Op->getType()->isAnyComplexType())
1186    return CGF.EmitComplexExpr(Op, false, true, false, true).first;
1187  return Visit(Op);
1188}
1189Value *ScalarExprEmitter::VisitUnaryImag(const UnaryOperator *E) {
1190  Expr *Op = E->getSubExpr();
1191  if (Op->getType()->isAnyComplexType())
1192    return CGF.EmitComplexExpr(Op, true, false, true, false).second;
1193
1194  // __imag on a scalar returns zero.  Emit the subexpr to ensure side
1195  // effects are evaluated, but not the actual value.
1196  if (E->isLvalue(CGF.getContext()) == Expr::LV_Valid)
1197    CGF.EmitLValue(Op);
1198  else
1199    CGF.EmitScalarExpr(Op, true);
1200  return llvm::Constant::getNullValue(ConvertType(E->getType()));
1201}
1202
1203Value *ScalarExprEmitter::VisitUnaryOffsetOf(const UnaryOperator *E) {
1204  Value* ResultAsPtr = EmitLValue(E->getSubExpr()).getAddress();
1205  const llvm::Type* ResultType = ConvertType(E->getType());
1206  return Builder.CreatePtrToInt(ResultAsPtr, ResultType, "offsetof");
1207}
1208
1209//===----------------------------------------------------------------------===//
1210//                           Binary Operators
1211//===----------------------------------------------------------------------===//
1212
1213BinOpInfo ScalarExprEmitter::EmitBinOps(const BinaryOperator *E) {
1214  TestAndClearIgnoreResultAssign();
1215  BinOpInfo Result;
1216  Result.LHS = Visit(E->getLHS());
1217  Result.RHS = Visit(E->getRHS());
1218  Result.Ty  = E->getType();
1219  Result.E = E;
1220  return Result;
1221}
1222
1223Value *ScalarExprEmitter::EmitCompoundAssign(const CompoundAssignOperator *E,
1224                      Value *(ScalarExprEmitter::*Func)(const BinOpInfo &)) {
1225  bool Ignore = TestAndClearIgnoreResultAssign();
1226  QualType LHSTy = E->getLHS()->getType(), RHSTy = E->getRHS()->getType();
1227
1228  BinOpInfo OpInfo;
1229
1230  if (E->getComputationResultType()->isAnyComplexType()) {
1231    // This needs to go through the complex expression emitter, but it's a tad
1232    // complicated to do that... I'm leaving it out for now.  (Note that we do
1233    // actually need the imaginary part of the RHS for multiplication and
1234    // division.)
1235    CGF.ErrorUnsupported(E, "complex compound assignment");
1236    return llvm::UndefValue::get(CGF.ConvertType(E->getType()));
1237  }
1238
1239  // Emit the RHS first.  __block variables need to have the rhs evaluated
1240  // first, plus this should improve codegen a little.
1241  OpInfo.RHS = Visit(E->getRHS());
1242  OpInfo.Ty = E->getComputationResultType();
1243  OpInfo.E = E;
1244  // Load/convert the LHS.
1245  LValue LHSLV = EmitLValue(E->getLHS());
1246  OpInfo.LHS = EmitLoadOfLValue(LHSLV, LHSTy);
1247  OpInfo.LHS = EmitScalarConversion(OpInfo.LHS, LHSTy,
1248                                    E->getComputationLHSType());
1249
1250  // Expand the binary operator.
1251  Value *Result = (this->*Func)(OpInfo);
1252
1253  // Convert the result back to the LHS type.
1254  Result = EmitScalarConversion(Result, E->getComputationResultType(), LHSTy);
1255
1256  // Store the result value into the LHS lvalue. Bit-fields are handled
1257  // specially because the result is altered by the store, i.e., [C99 6.5.16p1]
1258  // 'An assignment expression has the value of the left operand after the
1259  // assignment...'.
1260  if (LHSLV.isBitfield()) {
1261    if (!LHSLV.isVolatileQualified()) {
1262      CGF.EmitStoreThroughBitfieldLValue(RValue::get(Result), LHSLV, LHSTy,
1263                                         &Result);
1264      return Result;
1265    } else
1266      CGF.EmitStoreThroughBitfieldLValue(RValue::get(Result), LHSLV, LHSTy);
1267  } else
1268    CGF.EmitStoreThroughLValue(RValue::get(Result), LHSLV, LHSTy);
1269  if (Ignore)
1270    return 0;
1271  return EmitLoadOfLValue(LHSLV, E->getType());
1272}
1273
1274
1275Value *ScalarExprEmitter::EmitDiv(const BinOpInfo &Ops) {
1276  if (Ops.LHS->getType()->isFPOrFPVector())
1277    return Builder.CreateFDiv(Ops.LHS, Ops.RHS, "div");
1278  else if (Ops.Ty->isUnsignedIntegerType())
1279    return Builder.CreateUDiv(Ops.LHS, Ops.RHS, "div");
1280  else
1281    return Builder.CreateSDiv(Ops.LHS, Ops.RHS, "div");
1282}
1283
1284Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) {
1285  // Rem in C can't be a floating point type: C99 6.5.5p2.
1286  if (Ops.Ty->isUnsignedIntegerType())
1287    return Builder.CreateURem(Ops.LHS, Ops.RHS, "rem");
1288  else
1289    return Builder.CreateSRem(Ops.LHS, Ops.RHS, "rem");
1290}
1291
1292Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) {
1293  unsigned IID;
1294  unsigned OpID = 0;
1295
1296  switch (Ops.E->getOpcode()) {
1297  case BinaryOperator::Add:
1298  case BinaryOperator::AddAssign:
1299    OpID = 1;
1300    IID = llvm::Intrinsic::sadd_with_overflow;
1301    break;
1302  case BinaryOperator::Sub:
1303  case BinaryOperator::SubAssign:
1304    OpID = 2;
1305    IID = llvm::Intrinsic::ssub_with_overflow;
1306    break;
1307  case BinaryOperator::Mul:
1308  case BinaryOperator::MulAssign:
1309    OpID = 3;
1310    IID = llvm::Intrinsic::smul_with_overflow;
1311    break;
1312  default:
1313    assert(false && "Unsupported operation for overflow detection");
1314    IID = 0;
1315  }
1316  OpID <<= 1;
1317  OpID |= 1;
1318
1319  const llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty);
1320
1321  llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, &opTy, 1);
1322
1323  Value *resultAndOverflow = Builder.CreateCall2(intrinsic, Ops.LHS, Ops.RHS);
1324  Value *result = Builder.CreateExtractValue(resultAndOverflow, 0);
1325  Value *overflow = Builder.CreateExtractValue(resultAndOverflow, 1);
1326
1327  // Branch in case of overflow.
1328  llvm::BasicBlock *initialBB = Builder.GetInsertBlock();
1329  llvm::BasicBlock *overflowBB =
1330    CGF.createBasicBlock("overflow", CGF.CurFn);
1331  llvm::BasicBlock *continueBB =
1332    CGF.createBasicBlock("overflow.continue", CGF.CurFn);
1333
1334  Builder.CreateCondBr(overflow, overflowBB, continueBB);
1335
1336  // Handle overflow
1337
1338  Builder.SetInsertPoint(overflowBB);
1339
1340  // Handler is:
1341  // long long *__overflow_handler)(long long a, long long b, char op,
1342  // char width)
1343  std::vector<const llvm::Type*> handerArgTypes;
1344  handerArgTypes.push_back(llvm::Type::getInt64Ty(VMContext));
1345  handerArgTypes.push_back(llvm::Type::getInt64Ty(VMContext));
1346  handerArgTypes.push_back(llvm::Type::getInt8Ty(VMContext));
1347  handerArgTypes.push_back(llvm::Type::getInt8Ty(VMContext));
1348  llvm::FunctionType *handlerTy = llvm::FunctionType::get(
1349      llvm::Type::getInt64Ty(VMContext), handerArgTypes, false);
1350  llvm::Value *handlerFunction =
1351    CGF.CGM.getModule().getOrInsertGlobal("__overflow_handler",
1352        llvm::PointerType::getUnqual(handlerTy));
1353  handlerFunction = Builder.CreateLoad(handlerFunction);
1354
1355  llvm::Value *handlerResult = Builder.CreateCall4(handlerFunction,
1356      Builder.CreateSExt(Ops.LHS, llvm::Type::getInt64Ty(VMContext)),
1357      Builder.CreateSExt(Ops.RHS, llvm::Type::getInt64Ty(VMContext)),
1358      llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), OpID),
1359      llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext),
1360        cast<llvm::IntegerType>(opTy)->getBitWidth()));
1361
1362  handlerResult = Builder.CreateTrunc(handlerResult, opTy);
1363
1364  Builder.CreateBr(continueBB);
1365
1366  // Set up the continuation
1367  Builder.SetInsertPoint(continueBB);
1368  // Get the correct result
1369  llvm::PHINode *phi = Builder.CreatePHI(opTy);
1370  phi->reserveOperandSpace(2);
1371  phi->addIncoming(result, initialBB);
1372  phi->addIncoming(handlerResult, overflowBB);
1373
1374  return phi;
1375}
1376
1377Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) {
1378  if (!Ops.Ty->isAnyPointerType()) {
1379    if (CGF.getContext().getLangOptions().OverflowChecking &&
1380        Ops.Ty->isSignedIntegerType())
1381      return EmitOverflowCheckedBinOp(Ops);
1382
1383    if (Ops.LHS->getType()->isFPOrFPVector())
1384      return Builder.CreateFAdd(Ops.LHS, Ops.RHS, "add");
1385
1386    // Signed integer overflow is undefined behavior.
1387    if (Ops.Ty->isSignedIntegerType())
1388      return Builder.CreateNSWAdd(Ops.LHS, Ops.RHS, "add");
1389
1390    return Builder.CreateAdd(Ops.LHS, Ops.RHS, "add");
1391  }
1392
1393  if (Ops.Ty->isPointerType() &&
1394      Ops.Ty->getAs<PointerType>()->isVariableArrayType()) {
1395    // The amount of the addition needs to account for the VLA size
1396    CGF.ErrorUnsupported(Ops.E, "VLA pointer addition");
1397  }
1398  Value *Ptr, *Idx;
1399  Expr *IdxExp;
1400  const PointerType *PT = Ops.E->getLHS()->getType()->getAs<PointerType>();
1401  const ObjCObjectPointerType *OPT =
1402    Ops.E->getLHS()->getType()->getAs<ObjCObjectPointerType>();
1403  if (PT || OPT) {
1404    Ptr = Ops.LHS;
1405    Idx = Ops.RHS;
1406    IdxExp = Ops.E->getRHS();
1407  } else {  // int + pointer
1408    PT = Ops.E->getRHS()->getType()->getAs<PointerType>();
1409    OPT = Ops.E->getRHS()->getType()->getAs<ObjCObjectPointerType>();
1410    assert((PT || OPT) && "Invalid add expr");
1411    Ptr = Ops.RHS;
1412    Idx = Ops.LHS;
1413    IdxExp = Ops.E->getLHS();
1414  }
1415
1416  unsigned Width = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
1417  if (Width < CGF.LLVMPointerWidth) {
1418    // Zero or sign extend the pointer value based on whether the index is
1419    // signed or not.
1420    const llvm::Type *IdxType =
1421        llvm::IntegerType::get(VMContext, CGF.LLVMPointerWidth);
1422    if (IdxExp->getType()->isSignedIntegerType())
1423      Idx = Builder.CreateSExt(Idx, IdxType, "idx.ext");
1424    else
1425      Idx = Builder.CreateZExt(Idx, IdxType, "idx.ext");
1426  }
1427  const QualType ElementType = PT ? PT->getPointeeType() : OPT->getPointeeType();
1428  // Handle interface types, which are not represented with a concrete type.
1429  if (const ObjCInterfaceType *OIT = dyn_cast<ObjCInterfaceType>(ElementType)) {
1430    llvm::Value *InterfaceSize =
1431      llvm::ConstantInt::get(Idx->getType(),
1432                             CGF.getContext().getTypeSize(OIT) / 8);
1433    Idx = Builder.CreateMul(Idx, InterfaceSize);
1434    const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1435    Value *Casted = Builder.CreateBitCast(Ptr, i8Ty);
1436    Value *Res = Builder.CreateGEP(Casted, Idx, "add.ptr");
1437    return Builder.CreateBitCast(Res, Ptr->getType());
1438  }
1439
1440  // Explicitly handle GNU void* and function pointer arithmetic extensions. The
1441  // GNU void* casts amount to no-ops since our void* type is i8*, but this is
1442  // future proof.
1443  if (ElementType->isVoidType() || ElementType->isFunctionType()) {
1444    const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1445    Value *Casted = Builder.CreateBitCast(Ptr, i8Ty);
1446    Value *Res = Builder.CreateGEP(Casted, Idx, "add.ptr");
1447    return Builder.CreateBitCast(Res, Ptr->getType());
1448  }
1449
1450  return Builder.CreateInBoundsGEP(Ptr, Idx, "add.ptr");
1451}
1452
1453Value *ScalarExprEmitter::EmitSub(const BinOpInfo &Ops) {
1454  if (!isa<llvm::PointerType>(Ops.LHS->getType())) {
1455    if (CGF.getContext().getLangOptions().OverflowChecking
1456        && Ops.Ty->isSignedIntegerType())
1457      return EmitOverflowCheckedBinOp(Ops);
1458
1459    if (Ops.LHS->getType()->isFPOrFPVector())
1460      return Builder.CreateFSub(Ops.LHS, Ops.RHS, "sub");
1461    return Builder.CreateSub(Ops.LHS, Ops.RHS, "sub");
1462  }
1463
1464  if (Ops.E->getLHS()->getType()->isPointerType() &&
1465      Ops.E->getLHS()->getType()->getAs<PointerType>()->isVariableArrayType()) {
1466    // The amount of the addition needs to account for the VLA size for
1467    // ptr-int
1468    // The amount of the division needs to account for the VLA size for
1469    // ptr-ptr.
1470    CGF.ErrorUnsupported(Ops.E, "VLA pointer subtraction");
1471  }
1472
1473  const QualType LHSType = Ops.E->getLHS()->getType();
1474  const QualType LHSElementType = LHSType->getPointeeType();
1475  if (!isa<llvm::PointerType>(Ops.RHS->getType())) {
1476    // pointer - int
1477    Value *Idx = Ops.RHS;
1478    unsigned Width = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
1479    if (Width < CGF.LLVMPointerWidth) {
1480      // Zero or sign extend the pointer value based on whether the index is
1481      // signed or not.
1482      const llvm::Type *IdxType =
1483          llvm::IntegerType::get(VMContext, CGF.LLVMPointerWidth);
1484      if (Ops.E->getRHS()->getType()->isSignedIntegerType())
1485        Idx = Builder.CreateSExt(Idx, IdxType, "idx.ext");
1486      else
1487        Idx = Builder.CreateZExt(Idx, IdxType, "idx.ext");
1488    }
1489    Idx = Builder.CreateNeg(Idx, "sub.ptr.neg");
1490
1491    // Handle interface types, which are not represented with a concrete type.
1492    if (const ObjCInterfaceType *OIT =
1493        dyn_cast<ObjCInterfaceType>(LHSElementType)) {
1494      llvm::Value *InterfaceSize =
1495        llvm::ConstantInt::get(Idx->getType(),
1496                               CGF.getContext().getTypeSize(OIT) / 8);
1497      Idx = Builder.CreateMul(Idx, InterfaceSize);
1498      const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1499      Value *LHSCasted = Builder.CreateBitCast(Ops.LHS, i8Ty);
1500      Value *Res = Builder.CreateGEP(LHSCasted, Idx, "add.ptr");
1501      return Builder.CreateBitCast(Res, Ops.LHS->getType());
1502    }
1503
1504    // Explicitly handle GNU void* and function pointer arithmetic
1505    // extensions. The GNU void* casts amount to no-ops since our void* type is
1506    // i8*, but this is future proof.
1507    if (LHSElementType->isVoidType() || LHSElementType->isFunctionType()) {
1508      const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext);
1509      Value *LHSCasted = Builder.CreateBitCast(Ops.LHS, i8Ty);
1510      Value *Res = Builder.CreateGEP(LHSCasted, Idx, "sub.ptr");
1511      return Builder.CreateBitCast(Res, Ops.LHS->getType());
1512    }
1513
1514    return Builder.CreateInBoundsGEP(Ops.LHS, Idx, "sub.ptr");
1515  } else {
1516    // pointer - pointer
1517    Value *LHS = Ops.LHS;
1518    Value *RHS = Ops.RHS;
1519
1520    uint64_t ElementSize;
1521
1522    // Handle GCC extension for pointer arithmetic on void* and function pointer
1523    // types.
1524    if (LHSElementType->isVoidType() || LHSElementType->isFunctionType()) {
1525      ElementSize = 1;
1526    } else {
1527      ElementSize = CGF.getContext().getTypeSize(LHSElementType) / 8;
1528    }
1529
1530    const llvm::Type *ResultType = ConvertType(Ops.Ty);
1531    LHS = Builder.CreatePtrToInt(LHS, ResultType, "sub.ptr.lhs.cast");
1532    RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast");
1533    Value *BytesBetween = Builder.CreateSub(LHS, RHS, "sub.ptr.sub");
1534
1535    // Optimize out the shift for element size of 1.
1536    if (ElementSize == 1)
1537      return BytesBetween;
1538
1539    // Otherwise, do a full sdiv. This uses the "exact" form of sdiv, since
1540    // pointer difference in C is only defined in the case where both operands
1541    // are pointing to elements of an array.
1542    Value *BytesPerElt = llvm::ConstantInt::get(ResultType, ElementSize);
1543    return Builder.CreateExactSDiv(BytesBetween, BytesPerElt, "sub.ptr.div");
1544  }
1545}
1546
1547Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) {
1548  // LLVM requires the LHS and RHS to be the same type: promote or truncate the
1549  // RHS to the same size as the LHS.
1550  Value *RHS = Ops.RHS;
1551  if (Ops.LHS->getType() != RHS->getType())
1552    RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom");
1553
1554  return Builder.CreateShl(Ops.LHS, RHS, "shl");
1555}
1556
1557Value *ScalarExprEmitter::EmitShr(const BinOpInfo &Ops) {
1558  // LLVM requires the LHS and RHS to be the same type: promote or truncate the
1559  // RHS to the same size as the LHS.
1560  Value *RHS = Ops.RHS;
1561  if (Ops.LHS->getType() != RHS->getType())
1562    RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom");
1563
1564  if (Ops.Ty->isUnsignedIntegerType())
1565    return Builder.CreateLShr(Ops.LHS, RHS, "shr");
1566  return Builder.CreateAShr(Ops.LHS, RHS, "shr");
1567}
1568
1569Value *ScalarExprEmitter::EmitCompare(const BinaryOperator *E,unsigned UICmpOpc,
1570                                      unsigned SICmpOpc, unsigned FCmpOpc) {
1571  TestAndClearIgnoreResultAssign();
1572  Value *Result;
1573  QualType LHSTy = E->getLHS()->getType();
1574  if (LHSTy->isMemberFunctionPointerType()) {
1575    Value *LHSPtr = CGF.EmitAnyExprToTemp(E->getLHS()).getAggregateAddr();
1576    Value *RHSPtr = CGF.EmitAnyExprToTemp(E->getRHS()).getAggregateAddr();
1577    llvm::Value *LHSFunc = Builder.CreateStructGEP(LHSPtr, 0);
1578    LHSFunc = Builder.CreateLoad(LHSFunc);
1579    llvm::Value *RHSFunc = Builder.CreateStructGEP(RHSPtr, 0);
1580    RHSFunc = Builder.CreateLoad(RHSFunc);
1581    Value *ResultF = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1582                                        LHSFunc, RHSFunc, "cmp.func");
1583    Value *NullPtr = llvm::Constant::getNullValue(LHSFunc->getType());
1584    Value *ResultNull = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1585                                           LHSFunc, NullPtr, "cmp.null");
1586    llvm::Value *LHSAdj = Builder.CreateStructGEP(LHSPtr, 1);
1587    LHSAdj = Builder.CreateLoad(LHSAdj);
1588    llvm::Value *RHSAdj = Builder.CreateStructGEP(RHSPtr, 1);
1589    RHSAdj = Builder.CreateLoad(RHSAdj);
1590    Value *ResultA = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1591                                        LHSAdj, RHSAdj, "cmp.adj");
1592    if (E->getOpcode() == BinaryOperator::EQ) {
1593      Result = Builder.CreateOr(ResultNull, ResultA, "or.na");
1594      Result = Builder.CreateAnd(Result, ResultF, "and.f");
1595    } else {
1596      assert(E->getOpcode() == BinaryOperator::NE &&
1597             "Member pointer comparison other than == or != ?");
1598      Result = Builder.CreateAnd(ResultNull, ResultA, "and.na");
1599      Result = Builder.CreateOr(Result, ResultF, "or.f");
1600    }
1601  } else if (!LHSTy->isAnyComplexType()) {
1602    Value *LHS = Visit(E->getLHS());
1603    Value *RHS = Visit(E->getRHS());
1604
1605    if (LHS->getType()->isFPOrFPVector()) {
1606      Result = Builder.CreateFCmp((llvm::CmpInst::Predicate)FCmpOpc,
1607                                  LHS, RHS, "cmp");
1608    } else if (LHSTy->isSignedIntegerType()) {
1609      Result = Builder.CreateICmp((llvm::ICmpInst::Predicate)SICmpOpc,
1610                                  LHS, RHS, "cmp");
1611    } else {
1612      // Unsigned integers and pointers.
1613      Result = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1614                                  LHS, RHS, "cmp");
1615    }
1616
1617    // If this is a vector comparison, sign extend the result to the appropriate
1618    // vector integer type and return it (don't convert to bool).
1619    if (LHSTy->isVectorType())
1620      return Builder.CreateSExt(Result, ConvertType(E->getType()), "sext");
1621
1622  } else {
1623    // Complex Comparison: can only be an equality comparison.
1624    CodeGenFunction::ComplexPairTy LHS = CGF.EmitComplexExpr(E->getLHS());
1625    CodeGenFunction::ComplexPairTy RHS = CGF.EmitComplexExpr(E->getRHS());
1626
1627    QualType CETy = LHSTy->getAs<ComplexType>()->getElementType();
1628
1629    Value *ResultR, *ResultI;
1630    if (CETy->isRealFloatingType()) {
1631      ResultR = Builder.CreateFCmp((llvm::FCmpInst::Predicate)FCmpOpc,
1632                                   LHS.first, RHS.first, "cmp.r");
1633      ResultI = Builder.CreateFCmp((llvm::FCmpInst::Predicate)FCmpOpc,
1634                                   LHS.second, RHS.second, "cmp.i");
1635    } else {
1636      // Complex comparisons can only be equality comparisons.  As such, signed
1637      // and unsigned opcodes are the same.
1638      ResultR = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1639                                   LHS.first, RHS.first, "cmp.r");
1640      ResultI = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1641                                   LHS.second, RHS.second, "cmp.i");
1642    }
1643
1644    if (E->getOpcode() == BinaryOperator::EQ) {
1645      Result = Builder.CreateAnd(ResultR, ResultI, "and.ri");
1646    } else {
1647      assert(E->getOpcode() == BinaryOperator::NE &&
1648             "Complex comparison other than == or != ?");
1649      Result = Builder.CreateOr(ResultR, ResultI, "or.ri");
1650    }
1651  }
1652
1653  return EmitScalarConversion(Result, CGF.getContext().BoolTy, E->getType());
1654}
1655
1656Value *ScalarExprEmitter::VisitBinAssign(const BinaryOperator *E) {
1657  bool Ignore = TestAndClearIgnoreResultAssign();
1658
1659  // __block variables need to have the rhs evaluated first, plus this should
1660  // improve codegen just a little.
1661  Value *RHS = Visit(E->getRHS());
1662  LValue LHS = EmitLValue(E->getLHS());
1663
1664  // Store the value into the LHS.  Bit-fields are handled specially
1665  // because the result is altered by the store, i.e., [C99 6.5.16p1]
1666  // 'An assignment expression has the value of the left operand after
1667  // the assignment...'.
1668  if (LHS.isBitfield()) {
1669    if (!LHS.isVolatileQualified()) {
1670      CGF.EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, E->getType(),
1671                                         &RHS);
1672      return RHS;
1673    } else
1674      CGF.EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, E->getType());
1675  } else
1676    CGF.EmitStoreThroughLValue(RValue::get(RHS), LHS, E->getType());
1677  if (Ignore)
1678    return 0;
1679  return EmitLoadOfLValue(LHS, E->getType());
1680}
1681
1682Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) {
1683  const llvm::Type *ResTy = ConvertType(E->getType());
1684
1685  // If we have 0 && RHS, see if we can elide RHS, if so, just return 0.
1686  // If we have 1 && X, just emit X without inserting the control flow.
1687  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getLHS())) {
1688    if (Cond == 1) { // If we have 1 && X, just emit X.
1689      Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1690      // ZExt result to int or bool.
1691      return Builder.CreateZExtOrBitCast(RHSCond, ResTy, "land.ext");
1692    }
1693
1694    // 0 && RHS: If it is safe, just elide the RHS, and return 0/false.
1695    if (!CGF.ContainsLabel(E->getRHS()))
1696      return llvm::Constant::getNullValue(ResTy);
1697  }
1698
1699  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("land.end");
1700  llvm::BasicBlock *RHSBlock  = CGF.createBasicBlock("land.rhs");
1701
1702  // Branch on the LHS first.  If it is false, go to the failure (cont) block.
1703  CGF.EmitBranchOnBoolExpr(E->getLHS(), RHSBlock, ContBlock);
1704
1705  // Any edges into the ContBlock are now from an (indeterminate number of)
1706  // edges from this first condition.  All of these values will be false.  Start
1707  // setting up the PHI node in the Cont Block for this.
1708  llvm::PHINode *PN = llvm::PHINode::Create(llvm::Type::getInt1Ty(VMContext),
1709                                            "", ContBlock);
1710  PN->reserveOperandSpace(2);  // Normal case, two inputs.
1711  for (llvm::pred_iterator PI = pred_begin(ContBlock), PE = pred_end(ContBlock);
1712       PI != PE; ++PI)
1713    PN->addIncoming(llvm::ConstantInt::getFalse(VMContext), *PI);
1714
1715  CGF.StartConditionalBranch();
1716  CGF.EmitBlock(RHSBlock);
1717  Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1718  CGF.FinishConditionalBranch();
1719
1720  // Reaquire the RHS block, as there may be subblocks inserted.
1721  RHSBlock = Builder.GetInsertBlock();
1722
1723  // Emit an unconditional branch from this block to ContBlock.  Insert an entry
1724  // into the phi node for the edge with the value of RHSCond.
1725  CGF.EmitBlock(ContBlock);
1726  PN->addIncoming(RHSCond, RHSBlock);
1727
1728  // ZExt result to int.
1729  return Builder.CreateZExtOrBitCast(PN, ResTy, "land.ext");
1730}
1731
1732Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) {
1733  const llvm::Type *ResTy = ConvertType(E->getType());
1734
1735  // If we have 1 || RHS, see if we can elide RHS, if so, just return 1.
1736  // If we have 0 || X, just emit X without inserting the control flow.
1737  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getLHS())) {
1738    if (Cond == -1) { // If we have 0 || X, just emit X.
1739      Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1740      // ZExt result to int or bool.
1741      return Builder.CreateZExtOrBitCast(RHSCond, ResTy, "lor.ext");
1742    }
1743
1744    // 1 || RHS: If it is safe, just elide the RHS, and return 1/true.
1745    if (!CGF.ContainsLabel(E->getRHS()))
1746      return llvm::ConstantInt::get(ResTy, 1);
1747  }
1748
1749  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("lor.end");
1750  llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("lor.rhs");
1751
1752  // Branch on the LHS first.  If it is true, go to the success (cont) block.
1753  CGF.EmitBranchOnBoolExpr(E->getLHS(), ContBlock, RHSBlock);
1754
1755  // Any edges into the ContBlock are now from an (indeterminate number of)
1756  // edges from this first condition.  All of these values will be true.  Start
1757  // setting up the PHI node in the Cont Block for this.
1758  llvm::PHINode *PN = llvm::PHINode::Create(llvm::Type::getInt1Ty(VMContext),
1759                                            "", ContBlock);
1760  PN->reserveOperandSpace(2);  // Normal case, two inputs.
1761  for (llvm::pred_iterator PI = pred_begin(ContBlock), PE = pred_end(ContBlock);
1762       PI != PE; ++PI)
1763    PN->addIncoming(llvm::ConstantInt::getTrue(VMContext), *PI);
1764
1765  CGF.StartConditionalBranch();
1766
1767  // Emit the RHS condition as a bool value.
1768  CGF.EmitBlock(RHSBlock);
1769  Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1770
1771  CGF.FinishConditionalBranch();
1772
1773  // Reaquire the RHS block, as there may be subblocks inserted.
1774  RHSBlock = Builder.GetInsertBlock();
1775
1776  // Emit an unconditional branch from this block to ContBlock.  Insert an entry
1777  // into the phi node for the edge with the value of RHSCond.
1778  CGF.EmitBlock(ContBlock);
1779  PN->addIncoming(RHSCond, RHSBlock);
1780
1781  // ZExt result to int.
1782  return Builder.CreateZExtOrBitCast(PN, ResTy, "lor.ext");
1783}
1784
1785Value *ScalarExprEmitter::VisitBinComma(const BinaryOperator *E) {
1786  CGF.EmitStmt(E->getLHS());
1787  CGF.EnsureInsertPoint();
1788  return Visit(E->getRHS());
1789}
1790
1791//===----------------------------------------------------------------------===//
1792//                             Other Operators
1793//===----------------------------------------------------------------------===//
1794
1795/// isCheapEnoughToEvaluateUnconditionally - Return true if the specified
1796/// expression is cheap enough and side-effect-free enough to evaluate
1797/// unconditionally instead of conditionally.  This is used to convert control
1798/// flow into selects in some cases.
1799static bool isCheapEnoughToEvaluateUnconditionally(const Expr *E,
1800                                                   CodeGenFunction &CGF) {
1801  if (const ParenExpr *PE = dyn_cast<ParenExpr>(E))
1802    return isCheapEnoughToEvaluateUnconditionally(PE->getSubExpr(), CGF);
1803
1804  // TODO: Allow anything we can constant fold to an integer or fp constant.
1805  if (isa<IntegerLiteral>(E) || isa<CharacterLiteral>(E) ||
1806      isa<FloatingLiteral>(E))
1807    return true;
1808
1809  // Non-volatile automatic variables too, to get "cond ? X : Y" where
1810  // X and Y are local variables.
1811  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
1812    if (const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl()))
1813      if (VD->hasLocalStorage() && !(CGF.getContext()
1814                                     .getCanonicalType(VD->getType())
1815                                     .isVolatileQualified()))
1816        return true;
1817
1818  return false;
1819}
1820
1821
1822Value *ScalarExprEmitter::
1823VisitConditionalOperator(const ConditionalOperator *E) {
1824  TestAndClearIgnoreResultAssign();
1825  // If the condition constant folds and can be elided, try to avoid emitting
1826  // the condition and the dead arm.
1827  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getCond())){
1828    Expr *Live = E->getLHS(), *Dead = E->getRHS();
1829    if (Cond == -1)
1830      std::swap(Live, Dead);
1831
1832    // If the dead side doesn't have labels we need, and if the Live side isn't
1833    // the gnu missing ?: extension (which we could handle, but don't bother
1834    // to), just emit the Live part.
1835    if ((!Dead || !CGF.ContainsLabel(Dead)) &&  // No labels in dead part
1836        Live)                                   // Live part isn't missing.
1837      return Visit(Live);
1838  }
1839
1840
1841  // If this is a really simple expression (like x ? 4 : 5), emit this as a
1842  // select instead of as control flow.  We can only do this if it is cheap and
1843  // safe to evaluate the LHS and RHS unconditionally.
1844  if (E->getLHS() && isCheapEnoughToEvaluateUnconditionally(E->getLHS(),
1845                                                            CGF) &&
1846      isCheapEnoughToEvaluateUnconditionally(E->getRHS(), CGF)) {
1847    llvm::Value *CondV = CGF.EvaluateExprAsBool(E->getCond());
1848    llvm::Value *LHS = Visit(E->getLHS());
1849    llvm::Value *RHS = Visit(E->getRHS());
1850    return Builder.CreateSelect(CondV, LHS, RHS, "cond");
1851  }
1852
1853
1854  llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true");
1855  llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false");
1856  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
1857  Value *CondVal = 0;
1858
1859  // If we don't have the GNU missing condition extension, emit a branch on bool
1860  // the normal way.
1861  if (E->getLHS()) {
1862    // Otherwise, just use EmitBranchOnBoolExpr to get small and simple code for
1863    // the branch on bool.
1864    CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
1865  } else {
1866    // Otherwise, for the ?: extension, evaluate the conditional and then
1867    // convert it to bool the hard way.  We do this explicitly because we need
1868    // the unconverted value for the missing middle value of the ?:.
1869    CondVal = CGF.EmitScalarExpr(E->getCond());
1870
1871    // In some cases, EmitScalarConversion will delete the "CondVal" expression
1872    // if there are no extra uses (an optimization).  Inhibit this by making an
1873    // extra dead use, because we're going to add a use of CondVal later.  We
1874    // don't use the builder for this, because we don't want it to get optimized
1875    // away.  This leaves dead code, but the ?: extension isn't common.
1876    new llvm::BitCastInst(CondVal, CondVal->getType(), "dummy?:holder",
1877                          Builder.GetInsertBlock());
1878
1879    Value *CondBoolVal =
1880      CGF.EmitScalarConversion(CondVal, E->getCond()->getType(),
1881                               CGF.getContext().BoolTy);
1882    Builder.CreateCondBr(CondBoolVal, LHSBlock, RHSBlock);
1883  }
1884
1885  CGF.StartConditionalBranch();
1886  CGF.EmitBlock(LHSBlock);
1887
1888  // Handle the GNU extension for missing LHS.
1889  Value *LHS;
1890  if (E->getLHS())
1891    LHS = Visit(E->getLHS());
1892  else    // Perform promotions, to handle cases like "short ?: int"
1893    LHS = EmitScalarConversion(CondVal, E->getCond()->getType(), E->getType());
1894
1895  CGF.FinishConditionalBranch();
1896  LHSBlock = Builder.GetInsertBlock();
1897  CGF.EmitBranch(ContBlock);
1898
1899  CGF.StartConditionalBranch();
1900  CGF.EmitBlock(RHSBlock);
1901
1902  Value *RHS = Visit(E->getRHS());
1903  CGF.FinishConditionalBranch();
1904  RHSBlock = Builder.GetInsertBlock();
1905  CGF.EmitBranch(ContBlock);
1906
1907  CGF.EmitBlock(ContBlock);
1908
1909  // If the LHS or RHS is a throw expression, it will be legitimately null.
1910  if (!LHS)
1911    return RHS;
1912  if (!RHS)
1913    return LHS;
1914
1915  // Create a PHI node for the real part.
1916  llvm::PHINode *PN = Builder.CreatePHI(LHS->getType(), "cond");
1917  PN->reserveOperandSpace(2);
1918  PN->addIncoming(LHS, LHSBlock);
1919  PN->addIncoming(RHS, RHSBlock);
1920  return PN;
1921}
1922
1923Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) {
1924  return Visit(E->getChosenSubExpr(CGF.getContext()));
1925}
1926
1927Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {
1928  llvm::Value *ArgValue = CGF.EmitVAListRef(VE->getSubExpr());
1929  llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType());
1930
1931  // If EmitVAArg fails, we fall back to the LLVM instruction.
1932  if (!ArgPtr)
1933    return Builder.CreateVAArg(ArgValue, ConvertType(VE->getType()));
1934
1935  // FIXME Volatility.
1936  return Builder.CreateLoad(ArgPtr);
1937}
1938
1939Value *ScalarExprEmitter::VisitBlockExpr(const BlockExpr *BE) {
1940  return CGF.BuildBlockLiteralTmp(BE);
1941}
1942
1943//===----------------------------------------------------------------------===//
1944//                         Entry Point into this File
1945//===----------------------------------------------------------------------===//
1946
1947/// EmitScalarExpr - Emit the computation of the specified expression of scalar
1948/// type, ignoring the result.
1949Value *CodeGenFunction::EmitScalarExpr(const Expr *E, bool IgnoreResultAssign) {
1950  assert(E && !hasAggregateLLVMType(E->getType()) &&
1951         "Invalid scalar expression to emit");
1952
1953  return ScalarExprEmitter(*this, IgnoreResultAssign)
1954    .Visit(const_cast<Expr*>(E));
1955}
1956
1957/// EmitScalarConversion - Emit a conversion from the specified type to the
1958/// specified destination type, both of which are LLVM scalar types.
1959Value *CodeGenFunction::EmitScalarConversion(Value *Src, QualType SrcTy,
1960                                             QualType DstTy) {
1961  assert(!hasAggregateLLVMType(SrcTy) && !hasAggregateLLVMType(DstTy) &&
1962         "Invalid scalar expression to emit");
1963  return ScalarExprEmitter(*this).EmitScalarConversion(Src, SrcTy, DstTy);
1964}
1965
1966/// EmitComplexToScalarConversion - Emit a conversion from the specified complex
1967/// type to the specified destination type, where the destination type is an
1968/// LLVM scalar type.
1969Value *CodeGenFunction::EmitComplexToScalarConversion(ComplexPairTy Src,
1970                                                      QualType SrcTy,
1971                                                      QualType DstTy) {
1972  assert(SrcTy->isAnyComplexType() && !hasAggregateLLVMType(DstTy) &&
1973         "Invalid complex -> scalar conversion");
1974  return ScalarExprEmitter(*this).EmitComplexToScalarConversion(Src, SrcTy,
1975                                                                DstTy);
1976}
1977
1978Value *CodeGenFunction::EmitShuffleVector(Value* V1, Value *V2, ...) {
1979  assert(V1->getType() == V2->getType() &&
1980         "Vector operands must be of the same type");
1981  unsigned NumElements =
1982    cast<llvm::VectorType>(V1->getType())->getNumElements();
1983
1984  va_list va;
1985  va_start(va, V2);
1986
1987  llvm::SmallVector<llvm::Constant*, 16> Args;
1988  for (unsigned i = 0; i < NumElements; i++) {
1989    int n = va_arg(va, int);
1990    assert(n >= 0 && n < (int)NumElements * 2 &&
1991           "Vector shuffle index out of bounds!");
1992    Args.push_back(llvm::ConstantInt::get(
1993                                         llvm::Type::getInt32Ty(VMContext), n));
1994  }
1995
1996  const char *Name = va_arg(va, const char *);
1997  va_end(va);
1998
1999  llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], NumElements);
2000
2001  return Builder.CreateShuffleVector(V1, V2, Mask, Name);
2002}
2003
2004llvm::Value *CodeGenFunction::EmitVector(llvm::Value * const *Vals,
2005                                         unsigned NumVals, bool isSplat) {
2006  llvm::Value *Vec
2007    = llvm::UndefValue::get(llvm::VectorType::get(Vals[0]->getType(), NumVals));
2008
2009  for (unsigned i = 0, e = NumVals; i != e; ++i) {
2010    llvm::Value *Val = isSplat ? Vals[0] : Vals[i];
2011    llvm::Value *Idx = llvm::ConstantInt::get(
2012                                          llvm::Type::getInt32Ty(VMContext), i);
2013    Vec = Builder.CreateInsertElement(Vec, Val, Idx, "tmp");
2014  }
2015
2016  return Vec;
2017}
2018
2019LValue CodeGenFunction::EmitObjCIsaExpr(const ObjCIsaExpr *E) {
2020  llvm::Value *V;
2021  // object->isa or (*object).isa
2022  // Generate code as for: *(Class*)object
2023  Expr *BaseExpr = E->getBase();
2024  if (E->isArrow())
2025    V = ScalarExprEmitter(*this).EmitLoadOfLValue(BaseExpr);
2026  else
2027    V  = EmitLValue(BaseExpr).getAddress();
2028
2029  // build Class* type
2030  const llvm::Type *ClassPtrTy = ConvertType(E->getType());
2031  ClassPtrTy = ClassPtrTy->getPointerTo();
2032  V = Builder.CreateBitCast(V, ClassPtrTy);
2033  LValue LV = LValue::MakeAddr(V, MakeQualifiers(E->getType()));
2034  return LV;
2035}
2036
2037