CGExprScalar.cpp revision 58f9f2c884af6b72d036b746a016d8031d31cb7a
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 "CodeGenModule.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/AST/DeclObjC.h"
18#include "clang/AST/StmtVisitor.h"
19#include "clang/Basic/TargetInfo.h"
20#include "llvm/Constants.h"
21#include "llvm/Function.h"
22#include "llvm/GlobalVariable.h"
23#include "llvm/Intrinsics.h"
24#include "llvm/Module.h"
25#include "llvm/Support/Compiler.h"
26#include "llvm/Support/CFG.h"
27#include "llvm/Target/TargetData.h"
28#include <cstdarg>
29
30using namespace clang;
31using namespace CodeGen;
32using llvm::Value;
33
34//===----------------------------------------------------------------------===//
35//                         Scalar Expression Emitter
36//===----------------------------------------------------------------------===//
37
38struct BinOpInfo {
39  Value *LHS;
40  Value *RHS;
41  QualType Ty;  // Computation Type.
42  const BinaryOperator *E;
43};
44
45namespace {
46class VISIBILITY_HIDDEN ScalarExprEmitter
47  : public StmtVisitor<ScalarExprEmitter, Value*> {
48  CodeGenFunction &CGF;
49  CGBuilderTy &Builder;
50  bool IgnoreResultAssign;
51public:
52
53  ScalarExprEmitter(CodeGenFunction &cgf, bool ira=false)
54    : CGF(cgf), Builder(CGF.Builder), IgnoreResultAssign(ira) {
55  }
56
57  //===--------------------------------------------------------------------===//
58  //                               Utilities
59  //===--------------------------------------------------------------------===//
60
61  bool TestAndClearIgnoreResultAssign() {
62    bool I = IgnoreResultAssign;
63    IgnoreResultAssign = false;
64    return I;
65  }
66
67  const llvm::Type *ConvertType(QualType T) { return CGF.ConvertType(T); }
68  LValue EmitLValue(const Expr *E) { return CGF.EmitLValue(E); }
69
70  Value *EmitLoadOfLValue(LValue LV, QualType T) {
71    return CGF.EmitLoadOfLValue(LV, T).getScalarVal();
72  }
73
74  /// EmitLoadOfLValue - Given an expression with complex type that represents a
75  /// value l-value, this method emits the address of the l-value, then loads
76  /// and returns the result.
77  Value *EmitLoadOfLValue(const Expr *E) {
78    return EmitLoadOfLValue(EmitLValue(E), E->getType());
79  }
80
81  /// EmitConversionToBool - Convert the specified expression value to a
82  /// boolean (i1) truth value.  This is equivalent to "Val != 0".
83  Value *EmitConversionToBool(Value *Src, QualType DstTy);
84
85  /// EmitScalarConversion - Emit a conversion from the specified type to the
86  /// specified destination type, both of which are LLVM scalar types.
87  Value *EmitScalarConversion(Value *Src, QualType SrcTy, QualType DstTy);
88
89  /// EmitComplexToScalarConversion - Emit a conversion from the specified
90  /// complex type to the specified destination type, where the destination
91  /// type is an LLVM scalar type.
92  Value *EmitComplexToScalarConversion(CodeGenFunction::ComplexPairTy Src,
93                                       QualType SrcTy, QualType DstTy);
94
95  //===--------------------------------------------------------------------===//
96  //                            Visitor Methods
97  //===--------------------------------------------------------------------===//
98
99  Value *VisitStmt(Stmt *S) {
100    S->dump(CGF.getContext().getSourceManager());
101    assert(0 && "Stmt can't have complex result type!");
102    return 0;
103  }
104  Value *VisitExpr(Expr *S);
105  Value *VisitParenExpr(ParenExpr *PE) { return Visit(PE->getSubExpr()); }
106
107  // Leaves.
108  Value *VisitIntegerLiteral(const IntegerLiteral *E) {
109    return llvm::ConstantInt::get(E->getValue());
110  }
111  Value *VisitFloatingLiteral(const FloatingLiteral *E) {
112    return llvm::ConstantFP::get(E->getValue());
113  }
114  Value *VisitCharacterLiteral(const CharacterLiteral *E) {
115    return llvm::ConstantInt::get(ConvertType(E->getType()), E->getValue());
116  }
117  Value *VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) {
118    return llvm::ConstantInt::get(ConvertType(E->getType()), E->getValue());
119  }
120  Value *VisitCXXZeroInitValueExpr(const CXXZeroInitValueExpr *E) {
121    return CGF.getLLVMContext().getNullValue(ConvertType(E->getType()));
122  }
123  Value *VisitGNUNullExpr(const GNUNullExpr *E) {
124    return CGF.getLLVMContext().getNullValue(ConvertType(E->getType()));
125  }
126  Value *VisitTypesCompatibleExpr(const TypesCompatibleExpr *E) {
127    return llvm::ConstantInt::get(ConvertType(E->getType()),
128                                  CGF.getContext().typesAreCompatible(
129                                    E->getArgType1(), E->getArgType2()));
130  }
131  Value *VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E);
132  Value *VisitAddrLabelExpr(const AddrLabelExpr *E) {
133    llvm::Value *V =
134      llvm::ConstantInt::get(llvm::Type::Int32Ty,
135                             CGF.GetIDForAddrOfLabel(E->getLabel()));
136
137    return Builder.CreateIntToPtr(V, ConvertType(E->getType()));
138  }
139
140  // l-values.
141  Value *VisitDeclRefExpr(DeclRefExpr *E) {
142    if (const EnumConstantDecl *EC = dyn_cast<EnumConstantDecl>(E->getDecl()))
143      return llvm::ConstantInt::get(EC->getInitVal());
144    return EmitLoadOfLValue(E);
145  }
146  Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E) {
147    return CGF.EmitObjCSelectorExpr(E);
148  }
149  Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E) {
150    return CGF.EmitObjCProtocolExpr(E);
151  }
152  Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) {
153    return EmitLoadOfLValue(E);
154  }
155  Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
156    return EmitLoadOfLValue(E);
157  }
158  Value *VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
159    return EmitLoadOfLValue(E);
160  }
161  Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {
162    return CGF.EmitObjCMessageExpr(E).getScalarVal();
163  }
164
165  Value *VisitArraySubscriptExpr(ArraySubscriptExpr *E);
166  Value *VisitShuffleVectorExpr(ShuffleVectorExpr *E);
167  Value *VisitMemberExpr(Expr *E)           { return EmitLoadOfLValue(E); }
168  Value *VisitExtVectorElementExpr(Expr *E) { return EmitLoadOfLValue(E); }
169  Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
170    return EmitLoadOfLValue(E);
171  }
172  Value *VisitStringLiteral(Expr *E)  { return EmitLValue(E).getAddress(); }
173  Value *VisitObjCEncodeExpr(const ObjCEncodeExpr *E) {
174     return EmitLValue(E).getAddress();
175  }
176
177  Value *VisitPredefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
178
179  Value *VisitInitListExpr(InitListExpr *E) {
180    bool Ignore = TestAndClearIgnoreResultAssign();
181    (void)Ignore;
182    assert (Ignore == false && "init list ignored");
183    unsigned NumInitElements = E->getNumInits();
184
185    if (E->hadArrayRangeDesignator()) {
186      CGF.ErrorUnsupported(E, "GNU array range designator extension");
187    }
188
189    const llvm::VectorType *VType =
190      dyn_cast<llvm::VectorType>(ConvertType(E->getType()));
191
192    // We have a scalar in braces. Just use the first element.
193    if (!VType)
194      return Visit(E->getInit(0));
195
196    unsigned NumVectorElements = VType->getNumElements();
197    const llvm::Type *ElementType = VType->getElementType();
198
199    // Emit individual vector element stores.
200    llvm::Value *V = llvm::UndefValue::get(VType);
201
202    // Emit initializers
203    unsigned i;
204    for (i = 0; i < NumInitElements; ++i) {
205      Value *NewV = Visit(E->getInit(i));
206      Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
207      V = Builder.CreateInsertElement(V, NewV, Idx);
208    }
209
210    // Emit remaining default initializers
211    for (/* Do not initialize i*/; i < NumVectorElements; ++i) {
212      Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
213      llvm::Value *NewV = CGF.getLLVMContext().getNullValue(ElementType);
214      V = Builder.CreateInsertElement(V, NewV, Idx);
215    }
216
217    return V;
218  }
219
220  Value *VisitImplicitValueInitExpr(const ImplicitValueInitExpr *E) {
221    return CGF.getLLVMContext().getNullValue(ConvertType(E->getType()));
222  }
223  Value *VisitImplicitCastExpr(const ImplicitCastExpr *E);
224  Value *VisitCastExpr(const CastExpr *E) {
225    // Make sure to evaluate VLA bounds now so that we have them for later.
226    if (E->getType()->isVariablyModifiedType())
227      CGF.EmitVLASize(E->getType());
228
229    return EmitCastExpr(E->getSubExpr(), E->getType());
230  }
231  Value *EmitCastExpr(const Expr *E, QualType T);
232
233  Value *VisitCallExpr(const CallExpr *E) {
234    if (E->getCallReturnType()->isReferenceType())
235      return EmitLoadOfLValue(E);
236
237    return CGF.EmitCallExpr(E).getScalarVal();
238  }
239
240  Value *VisitStmtExpr(const StmtExpr *E);
241
242  Value *VisitBlockDeclRefExpr(const BlockDeclRefExpr *E);
243
244  // Unary Operators.
245  Value *VisitPrePostIncDec(const UnaryOperator *E, bool isInc, bool isPre);
246  Value *VisitUnaryPostDec(const UnaryOperator *E) {
247    return VisitPrePostIncDec(E, false, false);
248  }
249  Value *VisitUnaryPostInc(const UnaryOperator *E) {
250    return VisitPrePostIncDec(E, true, false);
251  }
252  Value *VisitUnaryPreDec(const UnaryOperator *E) {
253    return VisitPrePostIncDec(E, false, true);
254  }
255  Value *VisitUnaryPreInc(const UnaryOperator *E) {
256    return VisitPrePostIncDec(E, true, true);
257  }
258  Value *VisitUnaryAddrOf(const UnaryOperator *E) {
259    return EmitLValue(E->getSubExpr()).getAddress();
260  }
261  Value *VisitUnaryDeref(const Expr *E) { return EmitLoadOfLValue(E); }
262  Value *VisitUnaryPlus(const UnaryOperator *E) {
263    // This differs from gcc, though, most likely due to a bug in gcc.
264    TestAndClearIgnoreResultAssign();
265    return Visit(E->getSubExpr());
266  }
267  Value *VisitUnaryMinus    (const UnaryOperator *E);
268  Value *VisitUnaryNot      (const UnaryOperator *E);
269  Value *VisitUnaryLNot     (const UnaryOperator *E);
270  Value *VisitUnaryReal     (const UnaryOperator *E);
271  Value *VisitUnaryImag     (const UnaryOperator *E);
272  Value *VisitUnaryExtension(const UnaryOperator *E) {
273    return Visit(E->getSubExpr());
274  }
275  Value *VisitUnaryOffsetOf(const UnaryOperator *E);
276
277  // C++
278  Value *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
279    return Visit(DAE->getExpr());
280  }
281  Value *VisitCXXThisExpr(CXXThisExpr *TE) {
282    return CGF.LoadCXXThis();
283  }
284
285  Value *VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E) {
286    return CGF.EmitCXXExprWithTemporaries(E).getScalarVal();
287  }
288  Value *VisitCXXNewExpr(const CXXNewExpr *E) {
289    return CGF.EmitCXXNewExpr(E);
290  }
291
292  // Binary Operators.
293  Value *EmitMul(const BinOpInfo &Ops) {
294    if (CGF.getContext().getLangOptions().OverflowChecking
295        && Ops.Ty->isSignedIntegerType())
296      return EmitOverflowCheckedBinOp(Ops);
297    if (Ops.LHS->getType()->isFPOrFPVector())
298      return Builder.CreateFMul(Ops.LHS, Ops.RHS, "mul");
299    return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul");
300  }
301  /// Create a binary op that checks for overflow.
302  /// Currently only supports +, - and *.
303  Value *EmitOverflowCheckedBinOp(const BinOpInfo &Ops);
304  Value *EmitDiv(const BinOpInfo &Ops);
305  Value *EmitRem(const BinOpInfo &Ops);
306  Value *EmitAdd(const BinOpInfo &Ops);
307  Value *EmitSub(const BinOpInfo &Ops);
308  Value *EmitShl(const BinOpInfo &Ops);
309  Value *EmitShr(const BinOpInfo &Ops);
310  Value *EmitAnd(const BinOpInfo &Ops) {
311    return Builder.CreateAnd(Ops.LHS, Ops.RHS, "and");
312  }
313  Value *EmitXor(const BinOpInfo &Ops) {
314    return Builder.CreateXor(Ops.LHS, Ops.RHS, "xor");
315  }
316  Value *EmitOr (const BinOpInfo &Ops) {
317    return Builder.CreateOr(Ops.LHS, Ops.RHS, "or");
318  }
319
320  BinOpInfo EmitBinOps(const BinaryOperator *E);
321  Value *EmitCompoundAssign(const CompoundAssignOperator *E,
322                            Value *(ScalarExprEmitter::*F)(const BinOpInfo &));
323
324  // Binary operators and binary compound assignment operators.
325#define HANDLEBINOP(OP) \
326  Value *VisitBin ## OP(const BinaryOperator *E) {                         \
327    return Emit ## OP(EmitBinOps(E));                                      \
328  }                                                                        \
329  Value *VisitBin ## OP ## Assign(const CompoundAssignOperator *E) {       \
330    return EmitCompoundAssign(E, &ScalarExprEmitter::Emit ## OP);          \
331  }
332  HANDLEBINOP(Mul);
333  HANDLEBINOP(Div);
334  HANDLEBINOP(Rem);
335  HANDLEBINOP(Add);
336  HANDLEBINOP(Sub);
337  HANDLEBINOP(Shl);
338  HANDLEBINOP(Shr);
339  HANDLEBINOP(And);
340  HANDLEBINOP(Xor);
341  HANDLEBINOP(Or);
342#undef HANDLEBINOP
343
344  // Comparisons.
345  Value *EmitCompare(const BinaryOperator *E, unsigned UICmpOpc,
346                     unsigned SICmpOpc, unsigned FCmpOpc);
347#define VISITCOMP(CODE, UI, SI, FP) \
348    Value *VisitBin##CODE(const BinaryOperator *E) { \
349      return EmitCompare(E, llvm::ICmpInst::UI, llvm::ICmpInst::SI, \
350                         llvm::FCmpInst::FP); }
351  VISITCOMP(LT, ICMP_ULT, ICMP_SLT, FCMP_OLT);
352  VISITCOMP(GT, ICMP_UGT, ICMP_SGT, FCMP_OGT);
353  VISITCOMP(LE, ICMP_ULE, ICMP_SLE, FCMP_OLE);
354  VISITCOMP(GE, ICMP_UGE, ICMP_SGE, FCMP_OGE);
355  VISITCOMP(EQ, ICMP_EQ , ICMP_EQ , FCMP_OEQ);
356  VISITCOMP(NE, ICMP_NE , ICMP_NE , FCMP_UNE);
357#undef VISITCOMP
358
359  Value *VisitBinAssign     (const BinaryOperator *E);
360
361  Value *VisitBinLAnd       (const BinaryOperator *E);
362  Value *VisitBinLOr        (const BinaryOperator *E);
363  Value *VisitBinComma      (const BinaryOperator *E);
364
365  // Other Operators.
366  Value *VisitBlockExpr(const BlockExpr *BE);
367  Value *VisitConditionalOperator(const ConditionalOperator *CO);
368  Value *VisitChooseExpr(ChooseExpr *CE);
369  Value *VisitVAArgExpr(VAArgExpr *VE);
370  Value *VisitObjCStringLiteral(const ObjCStringLiteral *E) {
371    return CGF.EmitObjCStringLiteral(E);
372  }
373};
374}  // end anonymous namespace.
375
376//===----------------------------------------------------------------------===//
377//                                Utilities
378//===----------------------------------------------------------------------===//
379
380/// EmitConversionToBool - Convert the specified expression value to a
381/// boolean (i1) truth value.  This is equivalent to "Val != 0".
382Value *ScalarExprEmitter::EmitConversionToBool(Value *Src, QualType SrcType) {
383  assert(SrcType->isCanonical() && "EmitScalarConversion strips typedefs");
384
385  if (SrcType->isRealFloatingType()) {
386    // Compare against 0.0 for fp scalars.
387    llvm::Value *Zero = CGF.getLLVMContext().getNullValue(Src->getType());
388    return Builder.CreateFCmpUNE(Src, Zero, "tobool");
389  }
390
391  assert((SrcType->isIntegerType() || isa<llvm::PointerType>(Src->getType())) &&
392         "Unknown scalar type to convert");
393
394  // Because of the type rules of C, we often end up computing a logical value,
395  // then zero extending it to int, then wanting it as a logical value again.
396  // Optimize this common case.
397  if (llvm::ZExtInst *ZI = dyn_cast<llvm::ZExtInst>(Src)) {
398    if (ZI->getOperand(0)->getType() == llvm::Type::Int1Ty) {
399      Value *Result = ZI->getOperand(0);
400      // If there aren't any more uses, zap the instruction to save space.
401      // Note that there can be more uses, for example if this
402      // is the result of an assignment.
403      if (ZI->use_empty())
404        ZI->eraseFromParent();
405      return Result;
406    }
407  }
408
409  // Compare against an integer or pointer null.
410  llvm::Value *Zero = CGF.getLLVMContext().getNullValue(Src->getType());
411  return Builder.CreateICmpNE(Src, Zero, "tobool");
412}
413
414/// EmitScalarConversion - Emit a conversion from the specified type to the
415/// specified destination type, both of which are LLVM scalar types.
416Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType,
417                                               QualType DstType) {
418  SrcType = CGF.getContext().getCanonicalType(SrcType);
419  DstType = CGF.getContext().getCanonicalType(DstType);
420  if (SrcType == DstType) return Src;
421
422  if (DstType->isVoidType()) return 0;
423
424  // Handle conversions to bool first, they are special: comparisons against 0.
425  if (DstType->isBooleanType())
426    return EmitConversionToBool(Src, SrcType);
427
428  const llvm::Type *DstTy = ConvertType(DstType);
429
430  // Ignore conversions like int -> uint.
431  if (Src->getType() == DstTy)
432    return Src;
433
434  // Handle pointer conversions next: pointers can only be converted
435  // to/from other pointers and integers. Check for pointer types in
436  // terms of LLVM, as some native types (like Obj-C id) may map to a
437  // pointer type.
438  if (isa<llvm::PointerType>(DstTy)) {
439    // The source value may be an integer, or a pointer.
440    if (isa<llvm::PointerType>(Src->getType()))
441      return Builder.CreateBitCast(Src, DstTy, "conv");
442    assert(SrcType->isIntegerType() && "Not ptr->ptr or int->ptr conversion?");
443    // First, convert to the correct width so that we control the kind of
444    // extension.
445    const llvm::Type *MiddleTy = llvm::IntegerType::get(CGF.LLVMPointerWidth);
446    bool InputSigned = SrcType->isSignedIntegerType();
447    llvm::Value* IntResult =
448        Builder.CreateIntCast(Src, MiddleTy, InputSigned, "conv");
449    // Then, cast to pointer.
450    return Builder.CreateIntToPtr(IntResult, DstTy, "conv");
451  }
452
453  if (isa<llvm::PointerType>(Src->getType())) {
454    // Must be an ptr to int cast.
455    assert(isa<llvm::IntegerType>(DstTy) && "not ptr->int?");
456    return Builder.CreatePtrToInt(Src, DstTy, "conv");
457  }
458
459  // A scalar can be splatted to an extended vector of the same element type
460  if (DstType->isExtVectorType() && !isa<VectorType>(SrcType)) {
461    // Cast the scalar to element type
462    QualType EltTy = DstType->getAsExtVectorType()->getElementType();
463    llvm::Value *Elt = EmitScalarConversion(Src, SrcType, EltTy);
464
465    // Insert the element in element zero of an undef vector
466    llvm::Value *UnV = llvm::UndefValue::get(DstTy);
467    llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0);
468    UnV = Builder.CreateInsertElement(UnV, Elt, Idx, "tmp");
469
470    // Splat the element across to all elements
471    llvm::SmallVector<llvm::Constant*, 16> Args;
472    unsigned NumElements = cast<llvm::VectorType>(DstTy)->getNumElements();
473    for (unsigned i = 0; i < NumElements; i++)
474      Args.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, 0));
475
476    llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], NumElements);
477    llvm::Value *Yay = Builder.CreateShuffleVector(UnV, UnV, Mask, "splat");
478    return Yay;
479  }
480
481  // Allow bitcast from vector to integer/fp of the same size.
482  if (isa<llvm::VectorType>(Src->getType()) ||
483      isa<llvm::VectorType>(DstTy))
484    return Builder.CreateBitCast(Src, DstTy, "conv");
485
486  // Finally, we have the arithmetic types: real int/float.
487  if (isa<llvm::IntegerType>(Src->getType())) {
488    bool InputSigned = SrcType->isSignedIntegerType();
489    if (isa<llvm::IntegerType>(DstTy))
490      return Builder.CreateIntCast(Src, DstTy, InputSigned, "conv");
491    else if (InputSigned)
492      return Builder.CreateSIToFP(Src, DstTy, "conv");
493    else
494      return Builder.CreateUIToFP(Src, DstTy, "conv");
495  }
496
497  assert(Src->getType()->isFloatingPoint() && "Unknown real conversion");
498  if (isa<llvm::IntegerType>(DstTy)) {
499    if (DstType->isSignedIntegerType())
500      return Builder.CreateFPToSI(Src, DstTy, "conv");
501    else
502      return Builder.CreateFPToUI(Src, DstTy, "conv");
503  }
504
505  assert(DstTy->isFloatingPoint() && "Unknown real conversion");
506  if (DstTy->getTypeID() < Src->getType()->getTypeID())
507    return Builder.CreateFPTrunc(Src, DstTy, "conv");
508  else
509    return Builder.CreateFPExt(Src, DstTy, "conv");
510}
511
512/// EmitComplexToScalarConversion - Emit a conversion from the specified
513/// complex type to the specified destination type, where the destination
514/// type is an LLVM scalar type.
515Value *ScalarExprEmitter::
516EmitComplexToScalarConversion(CodeGenFunction::ComplexPairTy Src,
517                              QualType SrcTy, QualType DstTy) {
518  // Get the source element type.
519  SrcTy = SrcTy->getAsComplexType()->getElementType();
520
521  // Handle conversions to bool first, they are special: comparisons against 0.
522  if (DstTy->isBooleanType()) {
523    //  Complex != 0  -> (Real != 0) | (Imag != 0)
524    Src.first  = EmitScalarConversion(Src.first, SrcTy, DstTy);
525    Src.second = EmitScalarConversion(Src.second, SrcTy, DstTy);
526    return Builder.CreateOr(Src.first, Src.second, "tobool");
527  }
528
529  // C99 6.3.1.7p2: "When a value of complex type is converted to a real type,
530  // the imaginary part of the complex value is discarded and the value of the
531  // real part is converted according to the conversion rules for the
532  // corresponding real type.
533  return EmitScalarConversion(Src.first, SrcTy, DstTy);
534}
535
536
537//===----------------------------------------------------------------------===//
538//                            Visitor Methods
539//===----------------------------------------------------------------------===//
540
541Value *ScalarExprEmitter::VisitExpr(Expr *E) {
542  CGF.ErrorUnsupported(E, "scalar expression");
543  if (E->getType()->isVoidType())
544    return 0;
545  return llvm::UndefValue::get(CGF.ConvertType(E->getType()));
546}
547
548Value *ScalarExprEmitter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) {
549  llvm::SmallVector<llvm::Constant*, 32> indices;
550  for (unsigned i = 2; i < E->getNumSubExprs(); i++) {
551    indices.push_back(cast<llvm::Constant>(CGF.EmitScalarExpr(E->getExpr(i))));
552  }
553  Value* V1 = CGF.EmitScalarExpr(E->getExpr(0));
554  Value* V2 = CGF.EmitScalarExpr(E->getExpr(1));
555  Value* SV = llvm::ConstantVector::get(indices.begin(), indices.size());
556  return Builder.CreateShuffleVector(V1, V2, SV, "shuffle");
557}
558
559Value *ScalarExprEmitter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) {
560  TestAndClearIgnoreResultAssign();
561
562  // Emit subscript expressions in rvalue context's.  For most cases, this just
563  // loads the lvalue formed by the subscript expr.  However, we have to be
564  // careful, because the base of a vector subscript is occasionally an rvalue,
565  // so we can't get it as an lvalue.
566  if (!E->getBase()->getType()->isVectorType())
567    return EmitLoadOfLValue(E);
568
569  // Handle the vector case.  The base must be a vector, the index must be an
570  // integer value.
571  Value *Base = Visit(E->getBase());
572  Value *Idx  = Visit(E->getIdx());
573  bool IdxSigned = E->getIdx()->getType()->isSignedIntegerType();
574  Idx = Builder.CreateIntCast(Idx, llvm::Type::Int32Ty, IdxSigned,
575                              "vecidxcast");
576  return Builder.CreateExtractElement(Base, Idx, "vecext");
577}
578
579/// VisitImplicitCastExpr - Implicit casts are the same as normal casts, but
580/// also handle things like function to pointer-to-function decay, and array to
581/// pointer decay.
582Value *ScalarExprEmitter::VisitImplicitCastExpr(const ImplicitCastExpr *E) {
583  const Expr *Op = E->getSubExpr();
584
585  // If this is due to array->pointer conversion, emit the array expression as
586  // an l-value.
587  if (Op->getType()->isArrayType()) {
588    Value *V = EmitLValue(Op).getAddress();  // Bitfields can't be arrays.
589
590    // Note that VLA pointers are always decayed, so we don't need to do
591    // anything here.
592    if (!Op->getType()->isVariableArrayType()) {
593      assert(isa<llvm::PointerType>(V->getType()) && "Expected pointer");
594      assert(isa<llvm::ArrayType>(cast<llvm::PointerType>(V->getType())
595                                 ->getElementType()) &&
596             "Expected pointer to array");
597      V = Builder.CreateStructGEP(V, 0, "arraydecay");
598    }
599
600    // The resultant pointer type can be implicitly casted to other pointer
601    // types as well (e.g. void*) and can be implicitly converted to integer.
602    const llvm::Type *DestTy = ConvertType(E->getType());
603    if (V->getType() != DestTy) {
604      if (isa<llvm::PointerType>(DestTy))
605        V = Builder.CreateBitCast(V, DestTy, "ptrconv");
606      else {
607        assert(isa<llvm::IntegerType>(DestTy) && "Unknown array decay");
608        V = Builder.CreatePtrToInt(V, DestTy, "ptrconv");
609      }
610    }
611    return V;
612  }
613
614  return EmitCastExpr(Op, E->getType());
615}
616
617
618// VisitCastExpr - Emit code for an explicit or implicit cast.  Implicit casts
619// have to handle a more broad range of conversions than explicit casts, as they
620// handle things like function to ptr-to-function decay etc.
621Value *ScalarExprEmitter::EmitCastExpr(const Expr *E, QualType DestTy) {
622  if (!DestTy->isVoidType())
623    TestAndClearIgnoreResultAssign();
624
625  // Handle cases where the source is an non-complex type.
626
627  if (!CGF.hasAggregateLLVMType(E->getType())) {
628    Value *Src = Visit(const_cast<Expr*>(E));
629
630    // Use EmitScalarConversion to perform the conversion.
631    return EmitScalarConversion(Src, E->getType(), DestTy);
632  }
633
634  if (E->getType()->isAnyComplexType()) {
635    // Handle cases where the source is a complex type.
636    bool IgnoreImag = true;
637    bool IgnoreImagAssign = true;
638    bool IgnoreReal = IgnoreResultAssign;
639    bool IgnoreRealAssign = IgnoreResultAssign;
640    if (DestTy->isBooleanType())
641      IgnoreImagAssign = IgnoreImag = false;
642    else if (DestTy->isVoidType()) {
643      IgnoreReal = IgnoreImag = false;
644      IgnoreRealAssign = IgnoreImagAssign = true;
645    }
646    CodeGenFunction::ComplexPairTy V
647      = CGF.EmitComplexExpr(E, IgnoreReal, IgnoreImag, IgnoreRealAssign,
648                            IgnoreImagAssign);
649    return EmitComplexToScalarConversion(V, E->getType(), DestTy);
650  }
651
652  // Okay, this is a cast from an aggregate.  It must be a cast to void.  Just
653  // evaluate the result and return.
654  CGF.EmitAggExpr(E, 0, false, true);
655  return 0;
656}
657
658Value *ScalarExprEmitter::VisitStmtExpr(const StmtExpr *E) {
659  return CGF.EmitCompoundStmt(*E->getSubStmt(),
660                              !E->getType()->isVoidType()).getScalarVal();
661}
662
663Value *ScalarExprEmitter::VisitBlockDeclRefExpr(const BlockDeclRefExpr *E) {
664  return Builder.CreateLoad(CGF.GetAddrOfBlockDecl(E), false, "tmp");
665}
666
667//===----------------------------------------------------------------------===//
668//                             Unary Operators
669//===----------------------------------------------------------------------===//
670
671Value *ScalarExprEmitter::VisitPrePostIncDec(const UnaryOperator *E,
672                                             bool isInc, bool isPre) {
673  LValue LV = EmitLValue(E->getSubExpr());
674  QualType ValTy = E->getSubExpr()->getType();
675  Value *InVal = CGF.EmitLoadOfLValue(LV, ValTy).getScalarVal();
676
677  int AmountVal = isInc ? 1 : -1;
678
679  if (ValTy->isPointerType() &&
680      ValTy->getAsPointerType()->isVariableArrayType()) {
681    // The amount of the addition/subtraction needs to account for the VLA size
682    CGF.ErrorUnsupported(E, "VLA pointer inc/dec");
683  }
684
685  Value *NextVal;
686  if (const llvm::PointerType *PT =
687         dyn_cast<llvm::PointerType>(InVal->getType())) {
688    llvm::Constant *Inc =llvm::ConstantInt::get(llvm::Type::Int32Ty, AmountVal);
689    if (!isa<llvm::FunctionType>(PT->getElementType())) {
690      NextVal = Builder.CreateGEP(InVal, Inc, "ptrincdec");
691    } else {
692      const llvm::Type *i8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
693      NextVal = Builder.CreateBitCast(InVal, i8Ty, "tmp");
694      NextVal = Builder.CreateGEP(NextVal, Inc, "ptrincdec");
695      NextVal = Builder.CreateBitCast(NextVal, InVal->getType());
696    }
697  } else if (InVal->getType() == llvm::Type::Int1Ty && isInc) {
698    // Bool++ is an interesting case, due to promotion rules, we get:
699    // Bool++ -> Bool = Bool+1 -> Bool = (int)Bool+1 ->
700    // Bool = ((int)Bool+1) != 0
701    // An interesting aspect of this is that increment is always true.
702    // Decrement does not have this property.
703    NextVal = llvm::ConstantInt::getTrue();
704  } else if (isa<llvm::IntegerType>(InVal->getType())) {
705    NextVal = llvm::ConstantInt::get(InVal->getType(), AmountVal);
706    NextVal = Builder.CreateAdd(InVal, NextVal, isInc ? "inc" : "dec");
707  } else {
708    // Add the inc/dec to the real part.
709    if (InVal->getType() == llvm::Type::FloatTy)
710      NextVal =
711        llvm::ConstantFP::get(llvm::APFloat(static_cast<float>(AmountVal)));
712    else if (InVal->getType() == llvm::Type::DoubleTy)
713      NextVal =
714        llvm::ConstantFP::get(llvm::APFloat(static_cast<double>(AmountVal)));
715    else {
716      llvm::APFloat F(static_cast<float>(AmountVal));
717      bool ignored;
718      F.convert(CGF.Target.getLongDoubleFormat(), llvm::APFloat::rmTowardZero,
719                &ignored);
720      NextVal = llvm::ConstantFP::get(F);
721    }
722    NextVal = Builder.CreateFAdd(InVal, NextVal, isInc ? "inc" : "dec");
723  }
724
725  // Store the updated result through the lvalue.
726  if (LV.isBitfield())
727    CGF.EmitStoreThroughBitfieldLValue(RValue::get(NextVal), LV, ValTy,
728                                       &NextVal);
729  else
730    CGF.EmitStoreThroughLValue(RValue::get(NextVal), LV, ValTy);
731
732  // If this is a postinc, return the value read from memory, otherwise use the
733  // updated value.
734  return isPre ? NextVal : InVal;
735}
736
737
738Value *ScalarExprEmitter::VisitUnaryMinus(const UnaryOperator *E) {
739  TestAndClearIgnoreResultAssign();
740  Value *Op = Visit(E->getSubExpr());
741  if (Op->getType()->isFPOrFPVector())
742    return Builder.CreateFNeg(Op, "neg");
743  return Builder.CreateNeg(Op, "neg");
744}
745
746Value *ScalarExprEmitter::VisitUnaryNot(const UnaryOperator *E) {
747  TestAndClearIgnoreResultAssign();
748  Value *Op = Visit(E->getSubExpr());
749  return Builder.CreateNot(Op, "neg");
750}
751
752Value *ScalarExprEmitter::VisitUnaryLNot(const UnaryOperator *E) {
753  // Compare operand to zero.
754  Value *BoolVal = CGF.EvaluateExprAsBool(E->getSubExpr());
755
756  // Invert value.
757  // TODO: Could dynamically modify easy computations here.  For example, if
758  // the operand is an icmp ne, turn into icmp eq.
759  BoolVal = Builder.CreateNot(BoolVal, "lnot");
760
761  // ZExt result to the expr type.
762  return Builder.CreateZExt(BoolVal, ConvertType(E->getType()), "lnot.ext");
763}
764
765/// VisitSizeOfAlignOfExpr - Return the size or alignment of the type of
766/// argument of the sizeof expression as an integer.
767Value *
768ScalarExprEmitter::VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E) {
769  QualType TypeToSize = E->getTypeOfArgument();
770  if (E->isSizeOf()) {
771    if (const VariableArrayType *VAT =
772          CGF.getContext().getAsVariableArrayType(TypeToSize)) {
773      if (E->isArgumentType()) {
774        // sizeof(type) - make sure to emit the VLA size.
775        CGF.EmitVLASize(TypeToSize);
776      } else {
777        // C99 6.5.3.4p2: If the argument is an expression of type
778        // VLA, it is evaluated.
779        CGF.EmitAnyExpr(E->getArgumentExpr());
780      }
781
782      return CGF.GetVLASize(VAT);
783    }
784  }
785
786  // If this isn't sizeof(vla), the result must be constant; use the
787  // constant folding logic so we don't have to duplicate it here.
788  Expr::EvalResult Result;
789  E->Evaluate(Result, CGF.getContext());
790  return llvm::ConstantInt::get(Result.Val.getInt());
791}
792
793Value *ScalarExprEmitter::VisitUnaryReal(const UnaryOperator *E) {
794  Expr *Op = E->getSubExpr();
795  if (Op->getType()->isAnyComplexType())
796    return CGF.EmitComplexExpr(Op, false, true, false, true).first;
797  return Visit(Op);
798}
799Value *ScalarExprEmitter::VisitUnaryImag(const UnaryOperator *E) {
800  Expr *Op = E->getSubExpr();
801  if (Op->getType()->isAnyComplexType())
802    return CGF.EmitComplexExpr(Op, true, false, true, false).second;
803
804  // __imag on a scalar returns zero.  Emit the subexpr to ensure side
805  // effects are evaluated, but not the actual value.
806  if (E->isLvalue(CGF.getContext()) == Expr::LV_Valid)
807    CGF.EmitLValue(Op);
808  else
809    CGF.EmitScalarExpr(Op, true);
810  return CGF.getLLVMContext().getNullValue(ConvertType(E->getType()));
811}
812
813Value *ScalarExprEmitter::VisitUnaryOffsetOf(const UnaryOperator *E)
814{
815  Value* ResultAsPtr = EmitLValue(E->getSubExpr()).getAddress();
816  const llvm::Type* ResultType = ConvertType(E->getType());
817  return Builder.CreatePtrToInt(ResultAsPtr, ResultType, "offsetof");
818}
819
820//===----------------------------------------------------------------------===//
821//                           Binary Operators
822//===----------------------------------------------------------------------===//
823
824BinOpInfo ScalarExprEmitter::EmitBinOps(const BinaryOperator *E) {
825  TestAndClearIgnoreResultAssign();
826  BinOpInfo Result;
827  Result.LHS = Visit(E->getLHS());
828  Result.RHS = Visit(E->getRHS());
829  Result.Ty  = E->getType();
830  Result.E = E;
831  return Result;
832}
833
834Value *ScalarExprEmitter::EmitCompoundAssign(const CompoundAssignOperator *E,
835                      Value *(ScalarExprEmitter::*Func)(const BinOpInfo &)) {
836  bool Ignore = TestAndClearIgnoreResultAssign();
837  QualType LHSTy = E->getLHS()->getType(), RHSTy = E->getRHS()->getType();
838
839  BinOpInfo OpInfo;
840
841  if (E->getComputationResultType()->isAnyComplexType()) {
842    // This needs to go through the complex expression emitter, but
843    // it's a tad complicated to do that... I'm leaving it out for now.
844    // (Note that we do actually need the imaginary part of the RHS for
845    // multiplication and division.)
846    CGF.ErrorUnsupported(E, "complex compound assignment");
847    return llvm::UndefValue::get(CGF.ConvertType(E->getType()));
848  }
849
850  // Emit the RHS first.  __block variables need to have the rhs evaluated
851  // first, plus this should improve codegen a little.
852  OpInfo.RHS = Visit(E->getRHS());
853  OpInfo.Ty = E->getComputationResultType();
854  OpInfo.E = E;
855  // Load/convert the LHS.
856  LValue LHSLV = EmitLValue(E->getLHS());
857  OpInfo.LHS = EmitLoadOfLValue(LHSLV, LHSTy);
858  OpInfo.LHS = EmitScalarConversion(OpInfo.LHS, LHSTy,
859                                    E->getComputationLHSType());
860
861  // Expand the binary operator.
862  Value *Result = (this->*Func)(OpInfo);
863
864  // Convert the result back to the LHS type.
865  Result = EmitScalarConversion(Result, E->getComputationResultType(), LHSTy);
866
867  // Store the result value into the LHS lvalue. Bit-fields are
868  // handled specially because the result is altered by the store,
869  // i.e., [C99 6.5.16p1] 'An assignment expression has the value of
870  // the left operand after the assignment...'.
871  if (LHSLV.isBitfield()) {
872    if (!LHSLV.isVolatileQualified()) {
873      CGF.EmitStoreThroughBitfieldLValue(RValue::get(Result), LHSLV, LHSTy,
874                                         &Result);
875      return Result;
876    } else
877      CGF.EmitStoreThroughBitfieldLValue(RValue::get(Result), LHSLV, LHSTy);
878  } else
879    CGF.EmitStoreThroughLValue(RValue::get(Result), LHSLV, LHSTy);
880  if (Ignore)
881    return 0;
882  return EmitLoadOfLValue(LHSLV, E->getType());
883}
884
885
886Value *ScalarExprEmitter::EmitDiv(const BinOpInfo &Ops) {
887  if (Ops.LHS->getType()->isFPOrFPVector())
888    return Builder.CreateFDiv(Ops.LHS, Ops.RHS, "div");
889  else if (Ops.Ty->isUnsignedIntegerType())
890    return Builder.CreateUDiv(Ops.LHS, Ops.RHS, "div");
891  else
892    return Builder.CreateSDiv(Ops.LHS, Ops.RHS, "div");
893}
894
895Value *ScalarExprEmitter::EmitRem(const BinOpInfo &Ops) {
896  // Rem in C can't be a floating point type: C99 6.5.5p2.
897  if (Ops.Ty->isUnsignedIntegerType())
898    return Builder.CreateURem(Ops.LHS, Ops.RHS, "rem");
899  else
900    return Builder.CreateSRem(Ops.LHS, Ops.RHS, "rem");
901}
902
903Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) {
904  unsigned IID;
905  unsigned OpID = 0;
906
907  switch (Ops.E->getOpcode()) {
908  case BinaryOperator::Add:
909  case BinaryOperator::AddAssign:
910    OpID = 1;
911    IID = llvm::Intrinsic::sadd_with_overflow;
912    break;
913  case BinaryOperator::Sub:
914  case BinaryOperator::SubAssign:
915    OpID = 2;
916    IID = llvm::Intrinsic::ssub_with_overflow;
917    break;
918  case BinaryOperator::Mul:
919  case BinaryOperator::MulAssign:
920    OpID = 3;
921    IID = llvm::Intrinsic::smul_with_overflow;
922    break;
923  default:
924    assert(false && "Unsupported operation for overflow detection");
925    IID = 0;
926  }
927  OpID <<= 1;
928  OpID |= 1;
929
930  const llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty);
931
932  llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, &opTy, 1);
933
934  Value *resultAndOverflow = Builder.CreateCall2(intrinsic, Ops.LHS, Ops.RHS);
935  Value *result = Builder.CreateExtractValue(resultAndOverflow, 0);
936  Value *overflow = Builder.CreateExtractValue(resultAndOverflow, 1);
937
938  // Branch in case of overflow.
939  llvm::BasicBlock *initialBB = Builder.GetInsertBlock();
940  llvm::BasicBlock *overflowBB =
941    CGF.createBasicBlock("overflow", CGF.CurFn);
942  llvm::BasicBlock *continueBB =
943    CGF.createBasicBlock("overflow.continue", CGF.CurFn);
944
945  Builder.CreateCondBr(overflow, overflowBB, continueBB);
946
947  // Handle overflow
948
949  Builder.SetInsertPoint(overflowBB);
950
951  // Handler is:
952  // long long *__overflow_handler)(long long a, long long b, char op,
953  // char width)
954  std::vector<const llvm::Type*> handerArgTypes;
955  handerArgTypes.push_back(llvm::Type::Int64Ty);
956  handerArgTypes.push_back(llvm::Type::Int64Ty);
957  handerArgTypes.push_back(llvm::Type::Int8Ty);
958  handerArgTypes.push_back(llvm::Type::Int8Ty);
959  llvm::FunctionType *handlerTy = llvm::FunctionType::get(llvm::Type::Int64Ty,
960      handerArgTypes, false);
961  llvm::Value *handlerFunction =
962    CGF.CGM.getModule().getOrInsertGlobal("__overflow_handler",
963        llvm::PointerType::getUnqual(handlerTy));
964  handlerFunction = Builder.CreateLoad(handlerFunction);
965
966  llvm::Value *handlerResult = Builder.CreateCall4(handlerFunction,
967      Builder.CreateSExt(Ops.LHS, llvm::Type::Int64Ty),
968      Builder.CreateSExt(Ops.RHS, llvm::Type::Int64Ty),
969      llvm::ConstantInt::get(llvm::Type::Int8Ty, OpID),
970      llvm::ConstantInt::get(llvm::Type::Int8Ty,
971        cast<llvm::IntegerType>(opTy)->getBitWidth()));
972
973  handlerResult = Builder.CreateTrunc(handlerResult, opTy);
974
975  Builder.CreateBr(continueBB);
976
977  // Set up the continuation
978  Builder.SetInsertPoint(continueBB);
979  // Get the correct result
980  llvm::PHINode *phi = Builder.CreatePHI(opTy);
981  phi->reserveOperandSpace(2);
982  phi->addIncoming(result, initialBB);
983  phi->addIncoming(handlerResult, overflowBB);
984
985  return phi;
986}
987
988Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) {
989  if (!Ops.Ty->isAnyPointerType()) {
990    if (CGF.getContext().getLangOptions().OverflowChecking &&
991        Ops.Ty->isSignedIntegerType())
992      return EmitOverflowCheckedBinOp(Ops);
993
994    if (Ops.LHS->getType()->isFPOrFPVector())
995      return Builder.CreateFAdd(Ops.LHS, Ops.RHS, "add");
996
997    return Builder.CreateAdd(Ops.LHS, Ops.RHS, "add");
998  }
999
1000  if (Ops.Ty->isPointerType() &&
1001      Ops.Ty->getAsPointerType()->isVariableArrayType()) {
1002    // The amount of the addition needs to account for the VLA size
1003    CGF.ErrorUnsupported(Ops.E, "VLA pointer addition");
1004  }
1005  Value *Ptr, *Idx;
1006  Expr *IdxExp;
1007  const PointerType *PT = Ops.E->getLHS()->getType()->getAsPointerType();
1008  const ObjCObjectPointerType *OPT =
1009    Ops.E->getLHS()->getType()->getAsObjCObjectPointerType();
1010  if (PT || OPT) {
1011    Ptr = Ops.LHS;
1012    Idx = Ops.RHS;
1013    IdxExp = Ops.E->getRHS();
1014  } else {  // int + pointer
1015    PT = Ops.E->getRHS()->getType()->getAsPointerType();
1016    OPT = Ops.E->getRHS()->getType()->getAsObjCObjectPointerType();
1017    assert((PT || OPT) && "Invalid add expr");
1018    Ptr = Ops.RHS;
1019    Idx = Ops.LHS;
1020    IdxExp = Ops.E->getLHS();
1021  }
1022
1023  unsigned Width = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
1024  if (Width < CGF.LLVMPointerWidth) {
1025    // Zero or sign extend the pointer value based on whether the index is
1026    // signed or not.
1027    const llvm::Type *IdxType = llvm::IntegerType::get(CGF.LLVMPointerWidth);
1028    if (IdxExp->getType()->isSignedIntegerType())
1029      Idx = Builder.CreateSExt(Idx, IdxType, "idx.ext");
1030    else
1031      Idx = Builder.CreateZExt(Idx, IdxType, "idx.ext");
1032  }
1033  const QualType ElementType = PT ? PT->getPointeeType() : OPT->getPointeeType();
1034  // Handle interface types, which are not represented with a concrete
1035  // type.
1036  if (const ObjCInterfaceType *OIT = dyn_cast<ObjCInterfaceType>(ElementType)) {
1037    llvm::Value *InterfaceSize =
1038      llvm::ConstantInt::get(Idx->getType(),
1039                             CGF.getContext().getTypeSize(OIT) / 8);
1040    Idx = Builder.CreateMul(Idx, InterfaceSize);
1041    const llvm::Type *i8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
1042    Value *Casted = Builder.CreateBitCast(Ptr, i8Ty);
1043    Value *Res = Builder.CreateGEP(Casted, Idx, "add.ptr");
1044    return Builder.CreateBitCast(Res, Ptr->getType());
1045  }
1046
1047  // Explicitly handle GNU void* and function pointer arithmetic
1048  // extensions. The GNU void* casts amount to no-ops since our void*
1049  // type is i8*, but this is future proof.
1050  if (ElementType->isVoidType() || ElementType->isFunctionType()) {
1051    const llvm::Type *i8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
1052    Value *Casted = Builder.CreateBitCast(Ptr, i8Ty);
1053    Value *Res = Builder.CreateGEP(Casted, Idx, "add.ptr");
1054    return Builder.CreateBitCast(Res, Ptr->getType());
1055  }
1056
1057  return Builder.CreateGEP(Ptr, Idx, "add.ptr");
1058}
1059
1060Value *ScalarExprEmitter::EmitSub(const BinOpInfo &Ops) {
1061  if (!isa<llvm::PointerType>(Ops.LHS->getType())) {
1062    if (CGF.getContext().getLangOptions().OverflowChecking
1063        && Ops.Ty->isSignedIntegerType())
1064      return EmitOverflowCheckedBinOp(Ops);
1065
1066    if (Ops.LHS->getType()->isFPOrFPVector())
1067      return Builder.CreateFSub(Ops.LHS, Ops.RHS, "sub");
1068    return Builder.CreateSub(Ops.LHS, Ops.RHS, "sub");
1069  }
1070
1071  if (Ops.E->getLHS()->getType()->isPointerType() &&
1072      Ops.E->getLHS()->getType()->getAsPointerType()->isVariableArrayType()) {
1073    // The amount of the addition needs to account for the VLA size for
1074    // ptr-int
1075    // The amount of the division needs to account for the VLA size for
1076    // ptr-ptr.
1077    CGF.ErrorUnsupported(Ops.E, "VLA pointer subtraction");
1078  }
1079
1080  const QualType LHSType = Ops.E->getLHS()->getType();
1081  const QualType LHSElementType = LHSType->getPointeeType();
1082  if (!isa<llvm::PointerType>(Ops.RHS->getType())) {
1083    // pointer - int
1084    Value *Idx = Ops.RHS;
1085    unsigned Width = cast<llvm::IntegerType>(Idx->getType())->getBitWidth();
1086    if (Width < CGF.LLVMPointerWidth) {
1087      // Zero or sign extend the pointer value based on whether the index is
1088      // signed or not.
1089      const llvm::Type *IdxType = llvm::IntegerType::get(CGF.LLVMPointerWidth);
1090      if (Ops.E->getRHS()->getType()->isSignedIntegerType())
1091        Idx = Builder.CreateSExt(Idx, IdxType, "idx.ext");
1092      else
1093        Idx = Builder.CreateZExt(Idx, IdxType, "idx.ext");
1094    }
1095    Idx = Builder.CreateNeg(Idx, "sub.ptr.neg");
1096
1097    // Handle interface types, which are not represented with a concrete
1098    // type.
1099    if (const ObjCInterfaceType *OIT =
1100        dyn_cast<ObjCInterfaceType>(LHSElementType)) {
1101      llvm::Value *InterfaceSize =
1102        llvm::ConstantInt::get(Idx->getType(),
1103                               CGF.getContext().getTypeSize(OIT) / 8);
1104      Idx = Builder.CreateMul(Idx, InterfaceSize);
1105      const llvm::Type *i8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
1106      Value *LHSCasted = Builder.CreateBitCast(Ops.LHS, i8Ty);
1107      Value *Res = Builder.CreateGEP(LHSCasted, Idx, "add.ptr");
1108      return Builder.CreateBitCast(Res, Ops.LHS->getType());
1109    }
1110
1111    // Explicitly handle GNU void* and function pointer arithmetic
1112    // extensions. The GNU void* casts amount to no-ops since our
1113    // void* type is i8*, but this is future proof.
1114    if (LHSElementType->isVoidType() || LHSElementType->isFunctionType()) {
1115      const llvm::Type *i8Ty = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
1116      Value *LHSCasted = Builder.CreateBitCast(Ops.LHS, i8Ty);
1117      Value *Res = Builder.CreateGEP(LHSCasted, Idx, "sub.ptr");
1118      return Builder.CreateBitCast(Res, Ops.LHS->getType());
1119    }
1120
1121    return Builder.CreateGEP(Ops.LHS, Idx, "sub.ptr");
1122  } else {
1123    // pointer - pointer
1124    Value *LHS = Ops.LHS;
1125    Value *RHS = Ops.RHS;
1126
1127    uint64_t ElementSize;
1128
1129    // Handle GCC extension for pointer arithmetic on void* and function pointer
1130    // types.
1131    if (LHSElementType->isVoidType() || LHSElementType->isFunctionType()) {
1132      ElementSize = 1;
1133    } else {
1134      ElementSize = CGF.getContext().getTypeSize(LHSElementType) / 8;
1135    }
1136
1137    const llvm::Type *ResultType = ConvertType(Ops.Ty);
1138    LHS = Builder.CreatePtrToInt(LHS, ResultType, "sub.ptr.lhs.cast");
1139    RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast");
1140    Value *BytesBetween = Builder.CreateSub(LHS, RHS, "sub.ptr.sub");
1141
1142    // Optimize out the shift for element size of 1.
1143    if (ElementSize == 1)
1144      return BytesBetween;
1145
1146    // HACK: LLVM doesn't have an divide instruction that 'knows' there is no
1147    // remainder.  As such, we handle common power-of-two cases here to generate
1148    // better code. See PR2247.
1149    if (llvm::isPowerOf2_64(ElementSize)) {
1150      Value *ShAmt =
1151        llvm::ConstantInt::get(ResultType, llvm::Log2_64(ElementSize));
1152      return Builder.CreateAShr(BytesBetween, ShAmt, "sub.ptr.shr");
1153    }
1154
1155    // Otherwise, do a full sdiv.
1156    Value *BytesPerElt = llvm::ConstantInt::get(ResultType, ElementSize);
1157    return Builder.CreateSDiv(BytesBetween, BytesPerElt, "sub.ptr.div");
1158  }
1159}
1160
1161Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) {
1162  // LLVM requires the LHS and RHS to be the same type: promote or truncate the
1163  // RHS to the same size as the LHS.
1164  Value *RHS = Ops.RHS;
1165  if (Ops.LHS->getType() != RHS->getType())
1166    RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom");
1167
1168  return Builder.CreateShl(Ops.LHS, RHS, "shl");
1169}
1170
1171Value *ScalarExprEmitter::EmitShr(const BinOpInfo &Ops) {
1172  // LLVM requires the LHS and RHS to be the same type: promote or truncate the
1173  // RHS to the same size as the LHS.
1174  Value *RHS = Ops.RHS;
1175  if (Ops.LHS->getType() != RHS->getType())
1176    RHS = Builder.CreateIntCast(RHS, Ops.LHS->getType(), false, "sh_prom");
1177
1178  if (Ops.Ty->isUnsignedIntegerType())
1179    return Builder.CreateLShr(Ops.LHS, RHS, "shr");
1180  return Builder.CreateAShr(Ops.LHS, RHS, "shr");
1181}
1182
1183Value *ScalarExprEmitter::EmitCompare(const BinaryOperator *E,unsigned UICmpOpc,
1184                                      unsigned SICmpOpc, unsigned FCmpOpc) {
1185  TestAndClearIgnoreResultAssign();
1186  Value *Result;
1187  QualType LHSTy = E->getLHS()->getType();
1188  if (!LHSTy->isAnyComplexType()) {
1189    Value *LHS = Visit(E->getLHS());
1190    Value *RHS = Visit(E->getRHS());
1191
1192    if (LHS->getType()->isFloatingPoint()) {
1193      Result = Builder.CreateFCmp((llvm::CmpInst::Predicate)FCmpOpc,
1194                                  LHS, RHS, "cmp");
1195    } else if (LHSTy->isSignedIntegerType()) {
1196      Result = Builder.CreateICmp((llvm::ICmpInst::Predicate)SICmpOpc,
1197                                  LHS, RHS, "cmp");
1198    } else {
1199      // Unsigned integers and pointers.
1200      Result = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1201                                  LHS, RHS, "cmp");
1202    }
1203
1204    // If this is a vector comparison, sign extend the result to the appropriate
1205    // vector integer type and return it (don't convert to bool).
1206    if (LHSTy->isVectorType())
1207      return Builder.CreateSExt(Result, ConvertType(E->getType()), "sext");
1208
1209  } else {
1210    // Complex Comparison: can only be an equality comparison.
1211    CodeGenFunction::ComplexPairTy LHS = CGF.EmitComplexExpr(E->getLHS());
1212    CodeGenFunction::ComplexPairTy RHS = CGF.EmitComplexExpr(E->getRHS());
1213
1214    QualType CETy = LHSTy->getAsComplexType()->getElementType();
1215
1216    Value *ResultR, *ResultI;
1217    if (CETy->isRealFloatingType()) {
1218      ResultR = Builder.CreateFCmp((llvm::FCmpInst::Predicate)FCmpOpc,
1219                                   LHS.first, RHS.first, "cmp.r");
1220      ResultI = Builder.CreateFCmp((llvm::FCmpInst::Predicate)FCmpOpc,
1221                                   LHS.second, RHS.second, "cmp.i");
1222    } else {
1223      // Complex comparisons can only be equality comparisons.  As such, signed
1224      // and unsigned opcodes are the same.
1225      ResultR = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1226                                   LHS.first, RHS.first, "cmp.r");
1227      ResultI = Builder.CreateICmp((llvm::ICmpInst::Predicate)UICmpOpc,
1228                                   LHS.second, RHS.second, "cmp.i");
1229    }
1230
1231    if (E->getOpcode() == BinaryOperator::EQ) {
1232      Result = Builder.CreateAnd(ResultR, ResultI, "and.ri");
1233    } else {
1234      assert(E->getOpcode() == BinaryOperator::NE &&
1235             "Complex comparison other than == or != ?");
1236      Result = Builder.CreateOr(ResultR, ResultI, "or.ri");
1237    }
1238  }
1239
1240  return EmitScalarConversion(Result, CGF.getContext().BoolTy, E->getType());
1241}
1242
1243Value *ScalarExprEmitter::VisitBinAssign(const BinaryOperator *E) {
1244  bool Ignore = TestAndClearIgnoreResultAssign();
1245
1246  // __block variables need to have the rhs evaluated first, plus this should
1247  // improve codegen just a little.
1248  Value *RHS = Visit(E->getRHS());
1249  LValue LHS = EmitLValue(E->getLHS());
1250
1251  // Store the value into the LHS.  Bit-fields are handled specially
1252  // because the result is altered by the store, i.e., [C99 6.5.16p1]
1253  // 'An assignment expression has the value of the left operand after
1254  // the assignment...'.
1255  if (LHS.isBitfield()) {
1256    if (!LHS.isVolatileQualified()) {
1257      CGF.EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, E->getType(),
1258                                         &RHS);
1259      return RHS;
1260    } else
1261      CGF.EmitStoreThroughBitfieldLValue(RValue::get(RHS), LHS, E->getType());
1262  } else
1263    CGF.EmitStoreThroughLValue(RValue::get(RHS), LHS, E->getType());
1264  if (Ignore)
1265    return 0;
1266  return EmitLoadOfLValue(LHS, E->getType());
1267}
1268
1269Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) {
1270  // If we have 0 && RHS, see if we can elide RHS, if so, just return 0.
1271  // If we have 1 && X, just emit X without inserting the control flow.
1272  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getLHS())) {
1273    if (Cond == 1) { // If we have 1 && X, just emit X.
1274      Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1275      // ZExt result to int.
1276      return Builder.CreateZExt(RHSCond, CGF.LLVMIntTy, "land.ext");
1277    }
1278
1279    // 0 && RHS: If it is safe, just elide the RHS, and return 0.
1280    if (!CGF.ContainsLabel(E->getRHS()))
1281      return CGF.getLLVMContext().getNullValue(CGF.LLVMIntTy);
1282  }
1283
1284  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("land.end");
1285  llvm::BasicBlock *RHSBlock  = CGF.createBasicBlock("land.rhs");
1286
1287  // Branch on the LHS first.  If it is false, go to the failure (cont) block.
1288  CGF.EmitBranchOnBoolExpr(E->getLHS(), RHSBlock, ContBlock);
1289
1290  // Any edges into the ContBlock are now from an (indeterminate number of)
1291  // edges from this first condition.  All of these values will be false.  Start
1292  // setting up the PHI node in the Cont Block for this.
1293  llvm::PHINode *PN = llvm::PHINode::Create(llvm::Type::Int1Ty, "", ContBlock);
1294  PN->reserveOperandSpace(2);  // Normal case, two inputs.
1295  for (llvm::pred_iterator PI = pred_begin(ContBlock), PE = pred_end(ContBlock);
1296       PI != PE; ++PI)
1297    PN->addIncoming(llvm::ConstantInt::getFalse(), *PI);
1298
1299  CGF.PushConditionalTempDestruction();
1300  CGF.EmitBlock(RHSBlock);
1301  Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1302  CGF.PopConditionalTempDestruction();
1303
1304  // Reaquire the RHS block, as there may be subblocks inserted.
1305  RHSBlock = Builder.GetInsertBlock();
1306
1307  // Emit an unconditional branch from this block to ContBlock.  Insert an entry
1308  // into the phi node for the edge with the value of RHSCond.
1309  CGF.EmitBlock(ContBlock);
1310  PN->addIncoming(RHSCond, RHSBlock);
1311
1312  // ZExt result to int.
1313  return Builder.CreateZExt(PN, CGF.LLVMIntTy, "land.ext");
1314}
1315
1316Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) {
1317  // If we have 1 || RHS, see if we can elide RHS, if so, just return 1.
1318  // If we have 0 || X, just emit X without inserting the control flow.
1319  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getLHS())) {
1320    if (Cond == -1) { // If we have 0 || X, just emit X.
1321      Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1322      // ZExt result to int.
1323      return Builder.CreateZExt(RHSCond, CGF.LLVMIntTy, "lor.ext");
1324    }
1325
1326    // 1 || RHS: If it is safe, just elide the RHS, and return 1.
1327    if (!CGF.ContainsLabel(E->getRHS()))
1328      return llvm::ConstantInt::get(CGF.LLVMIntTy, 1);
1329  }
1330
1331  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("lor.end");
1332  llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("lor.rhs");
1333
1334  // Branch on the LHS first.  If it is true, go to the success (cont) block.
1335  CGF.EmitBranchOnBoolExpr(E->getLHS(), ContBlock, RHSBlock);
1336
1337  // Any edges into the ContBlock are now from an (indeterminate number of)
1338  // edges from this first condition.  All of these values will be true.  Start
1339  // setting up the PHI node in the Cont Block for this.
1340  llvm::PHINode *PN = llvm::PHINode::Create(llvm::Type::Int1Ty, "", ContBlock);
1341  PN->reserveOperandSpace(2);  // Normal case, two inputs.
1342  for (llvm::pred_iterator PI = pred_begin(ContBlock), PE = pred_end(ContBlock);
1343       PI != PE; ++PI)
1344    PN->addIncoming(llvm::ConstantInt::getTrue(), *PI);
1345
1346  CGF.PushConditionalTempDestruction();
1347
1348  // Emit the RHS condition as a bool value.
1349  CGF.EmitBlock(RHSBlock);
1350  Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS());
1351
1352  CGF.PopConditionalTempDestruction();
1353
1354  // Reaquire the RHS block, as there may be subblocks inserted.
1355  RHSBlock = Builder.GetInsertBlock();
1356
1357  // Emit an unconditional branch from this block to ContBlock.  Insert an entry
1358  // into the phi node for the edge with the value of RHSCond.
1359  CGF.EmitBlock(ContBlock);
1360  PN->addIncoming(RHSCond, RHSBlock);
1361
1362  // ZExt result to int.
1363  return Builder.CreateZExt(PN, CGF.LLVMIntTy, "lor.ext");
1364}
1365
1366Value *ScalarExprEmitter::VisitBinComma(const BinaryOperator *E) {
1367  CGF.EmitStmt(E->getLHS());
1368  CGF.EnsureInsertPoint();
1369  return Visit(E->getRHS());
1370}
1371
1372//===----------------------------------------------------------------------===//
1373//                             Other Operators
1374//===----------------------------------------------------------------------===//
1375
1376/// isCheapEnoughToEvaluateUnconditionally - Return true if the specified
1377/// expression is cheap enough and side-effect-free enough to evaluate
1378/// unconditionally instead of conditionally.  This is used to convert control
1379/// flow into selects in some cases.
1380static bool isCheapEnoughToEvaluateUnconditionally(const Expr *E) {
1381  if (const ParenExpr *PE = dyn_cast<ParenExpr>(E))
1382    return isCheapEnoughToEvaluateUnconditionally(PE->getSubExpr());
1383
1384  // TODO: Allow anything we can constant fold to an integer or fp constant.
1385  if (isa<IntegerLiteral>(E) || isa<CharacterLiteral>(E) ||
1386      isa<FloatingLiteral>(E))
1387    return true;
1388
1389  // Non-volatile automatic variables too, to get "cond ? X : Y" where
1390  // X and Y are local variables.
1391  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
1392    if (const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl()))
1393      if (VD->hasLocalStorage() && !VD->getType().isVolatileQualified())
1394        return true;
1395
1396  return false;
1397}
1398
1399
1400Value *ScalarExprEmitter::
1401VisitConditionalOperator(const ConditionalOperator *E) {
1402  TestAndClearIgnoreResultAssign();
1403  // If the condition constant folds and can be elided, try to avoid emitting
1404  // the condition and the dead arm.
1405  if (int Cond = CGF.ConstantFoldsToSimpleInteger(E->getCond())){
1406    Expr *Live = E->getLHS(), *Dead = E->getRHS();
1407    if (Cond == -1)
1408      std::swap(Live, Dead);
1409
1410    // If the dead side doesn't have labels we need, and if the Live side isn't
1411    // the gnu missing ?: extension (which we could handle, but don't bother
1412    // to), just emit the Live part.
1413    if ((!Dead || !CGF.ContainsLabel(Dead)) &&  // No labels in dead part
1414        Live)                                   // Live part isn't missing.
1415      return Visit(Live);
1416  }
1417
1418
1419  // If this is a really simple expression (like x ? 4 : 5), emit this as a
1420  // select instead of as control flow.  We can only do this if it is cheap and
1421  // safe to evaluate the LHS and RHS unconditionally.
1422  if (E->getLHS() && isCheapEnoughToEvaluateUnconditionally(E->getLHS()) &&
1423      isCheapEnoughToEvaluateUnconditionally(E->getRHS())) {
1424    llvm::Value *CondV = CGF.EvaluateExprAsBool(E->getCond());
1425    llvm::Value *LHS = Visit(E->getLHS());
1426    llvm::Value *RHS = Visit(E->getRHS());
1427    return Builder.CreateSelect(CondV, LHS, RHS, "cond");
1428  }
1429
1430
1431  llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true");
1432  llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false");
1433  llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
1434  Value *CondVal = 0;
1435
1436  // If we don't have the GNU missing condition extension, emit a branch on
1437  // bool the normal way.
1438  if (E->getLHS()) {
1439    // Otherwise, just use EmitBranchOnBoolExpr to get small and simple code for
1440    // the branch on bool.
1441    CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
1442  } else {
1443    // Otherwise, for the ?: extension, evaluate the conditional and then
1444    // convert it to bool the hard way.  We do this explicitly because we need
1445    // the unconverted value for the missing middle value of the ?:.
1446    CondVal = CGF.EmitScalarExpr(E->getCond());
1447
1448    // In some cases, EmitScalarConversion will delete the "CondVal" expression
1449    // if there are no extra uses (an optimization).  Inhibit this by making an
1450    // extra dead use, because we're going to add a use of CondVal later.  We
1451    // don't use the builder for this, because we don't want it to get optimized
1452    // away.  This leaves dead code, but the ?: extension isn't common.
1453    new llvm::BitCastInst(CondVal, CondVal->getType(), "dummy?:holder",
1454                          Builder.GetInsertBlock());
1455
1456    Value *CondBoolVal =
1457      CGF.EmitScalarConversion(CondVal, E->getCond()->getType(),
1458                               CGF.getContext().BoolTy);
1459    Builder.CreateCondBr(CondBoolVal, LHSBlock, RHSBlock);
1460  }
1461
1462  CGF.PushConditionalTempDestruction();
1463  CGF.EmitBlock(LHSBlock);
1464
1465  // Handle the GNU extension for missing LHS.
1466  Value *LHS;
1467  if (E->getLHS())
1468    LHS = Visit(E->getLHS());
1469  else    // Perform promotions, to handle cases like "short ?: int"
1470    LHS = EmitScalarConversion(CondVal, E->getCond()->getType(), E->getType());
1471
1472  CGF.PopConditionalTempDestruction();
1473  LHSBlock = Builder.GetInsertBlock();
1474  CGF.EmitBranch(ContBlock);
1475
1476  CGF.PushConditionalTempDestruction();
1477  CGF.EmitBlock(RHSBlock);
1478
1479  Value *RHS = Visit(E->getRHS());
1480  CGF.PopConditionalTempDestruction();
1481  RHSBlock = Builder.GetInsertBlock();
1482  CGF.EmitBranch(ContBlock);
1483
1484  CGF.EmitBlock(ContBlock);
1485
1486  if (!LHS || !RHS) {
1487    assert(E->getType()->isVoidType() && "Non-void value should have a value");
1488    return 0;
1489  }
1490
1491  // Create a PHI node for the real part.
1492  llvm::PHINode *PN = Builder.CreatePHI(LHS->getType(), "cond");
1493  PN->reserveOperandSpace(2);
1494  PN->addIncoming(LHS, LHSBlock);
1495  PN->addIncoming(RHS, RHSBlock);
1496  return PN;
1497}
1498
1499Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) {
1500  return Visit(E->getChosenSubExpr(CGF.getContext()));
1501}
1502
1503Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {
1504  llvm::Value *ArgValue = CGF.EmitVAListRef(VE->getSubExpr());
1505  llvm::Value *ArgPtr = CGF.EmitVAArg(ArgValue, VE->getType());
1506
1507  // If EmitVAArg fails, we fall back to the LLVM instruction.
1508  if (!ArgPtr)
1509    return Builder.CreateVAArg(ArgValue, ConvertType(VE->getType()));
1510
1511  // FIXME Volatility.
1512  return Builder.CreateLoad(ArgPtr);
1513}
1514
1515Value *ScalarExprEmitter::VisitBlockExpr(const BlockExpr *BE) {
1516  return CGF.BuildBlockLiteralTmp(BE);
1517}
1518
1519//===----------------------------------------------------------------------===//
1520//                         Entry Point into this File
1521//===----------------------------------------------------------------------===//
1522
1523/// EmitScalarExpr - Emit the computation of the specified expression of
1524/// scalar type, ignoring the result.
1525Value *CodeGenFunction::EmitScalarExpr(const Expr *E, bool IgnoreResultAssign) {
1526  assert(E && !hasAggregateLLVMType(E->getType()) &&
1527         "Invalid scalar expression to emit");
1528
1529  return ScalarExprEmitter(*this, IgnoreResultAssign)
1530    .Visit(const_cast<Expr*>(E));
1531}
1532
1533/// EmitScalarConversion - Emit a conversion from the specified type to the
1534/// specified destination type, both of which are LLVM scalar types.
1535Value *CodeGenFunction::EmitScalarConversion(Value *Src, QualType SrcTy,
1536                                             QualType DstTy) {
1537  assert(!hasAggregateLLVMType(SrcTy) && !hasAggregateLLVMType(DstTy) &&
1538         "Invalid scalar expression to emit");
1539  return ScalarExprEmitter(*this).EmitScalarConversion(Src, SrcTy, DstTy);
1540}
1541
1542/// EmitComplexToScalarConversion - Emit a conversion from the specified
1543/// complex type to the specified destination type, where the destination
1544/// type is an LLVM scalar type.
1545Value *CodeGenFunction::EmitComplexToScalarConversion(ComplexPairTy Src,
1546                                                      QualType SrcTy,
1547                                                      QualType DstTy) {
1548  assert(SrcTy->isAnyComplexType() && !hasAggregateLLVMType(DstTy) &&
1549         "Invalid complex -> scalar conversion");
1550  return ScalarExprEmitter(*this).EmitComplexToScalarConversion(Src, SrcTy,
1551                                                                DstTy);
1552}
1553
1554Value *CodeGenFunction::EmitShuffleVector(Value* V1, Value *V2, ...) {
1555  assert(V1->getType() == V2->getType() &&
1556         "Vector operands must be of the same type");
1557  unsigned NumElements =
1558    cast<llvm::VectorType>(V1->getType())->getNumElements();
1559
1560  va_list va;
1561  va_start(va, V2);
1562
1563  llvm::SmallVector<llvm::Constant*, 16> Args;
1564  for (unsigned i = 0; i < NumElements; i++) {
1565    int n = va_arg(va, int);
1566    assert(n >= 0 && n < (int)NumElements * 2 &&
1567           "Vector shuffle index out of bounds!");
1568    Args.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, n));
1569  }
1570
1571  const char *Name = va_arg(va, const char *);
1572  va_end(va);
1573
1574  llvm::Constant *Mask = llvm::ConstantVector::get(&Args[0], NumElements);
1575
1576  return Builder.CreateShuffleVector(V1, V2, Mask, Name);
1577}
1578
1579llvm::Value *CodeGenFunction::EmitVector(llvm::Value * const *Vals,
1580                                         unsigned NumVals, bool isSplat) {
1581  llvm::Value *Vec
1582    = llvm::UndefValue::get(llvm::VectorType::get(Vals[0]->getType(), NumVals));
1583
1584  for (unsigned i = 0, e = NumVals; i != e; ++i) {
1585    llvm::Value *Val = isSplat ? Vals[0] : Vals[i];
1586    llvm::Value *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i);
1587    Vec = Builder.CreateInsertElement(Vec, Val, Idx, "tmp");
1588  }
1589
1590  return Vec;
1591}
1592