1 //===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This contains code to emit Expr nodes as LLVM code. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CodeGenFunction.h" 15 #include "CodeGenModule.h" 16 #include "CGCall.h" 17 #include "CGCXXABI.h" 18 #include "CGDebugInfo.h" 19 #include "CGRecordLayout.h" 20 #include "CGObjCRuntime.h" 21 #include "clang/AST/ASTContext.h" 22 #include "clang/AST/DeclObjC.h" 23 #include "clang/Frontend/CodeGenOptions.h" 24 #include "llvm/Intrinsics.h" 25 #include "llvm/Target/TargetData.h" 26 using namespace clang; 27 using namespace CodeGen; 28 29 //===--------------------------------------------------------------------===// 30 // Miscellaneous Helper Methods 31 //===--------------------------------------------------------------------===// 32 33 llvm::Value *CodeGenFunction::EmitCastToVoidPtr(llvm::Value *value) { 34 unsigned addressSpace = 35 cast<llvm::PointerType>(value->getType())->getAddressSpace(); 36 37 llvm::PointerType *destType = Int8PtrTy; 38 if (addressSpace) 39 destType = llvm::Type::getInt8PtrTy(getLLVMContext(), addressSpace); 40 41 if (value->getType() == destType) return value; 42 return Builder.CreateBitCast(value, destType); 43 } 44 45 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 46 /// block. 47 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(llvm::Type *Ty, 48 const Twine &Name) { 49 if (!Builder.isNamePreserving()) 50 return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt); 51 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 52 } 53 54 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var, 55 llvm::Value *Init) { 56 llvm::StoreInst *Store = new llvm::StoreInst(Init, Var); 57 llvm::BasicBlock *Block = AllocaInsertPt->getParent(); 58 Block->getInstList().insertAfter(&*AllocaInsertPt, Store); 59 } 60 61 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty, 62 const Twine &Name) { 63 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name); 64 // FIXME: Should we prefer the preferred type alignment here? 65 CharUnits Align = getContext().getTypeAlignInChars(Ty); 66 Alloc->setAlignment(Align.getQuantity()); 67 return Alloc; 68 } 69 70 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty, 71 const Twine &Name) { 72 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name); 73 // FIXME: Should we prefer the preferred type alignment here? 74 CharUnits Align = getContext().getTypeAlignInChars(Ty); 75 Alloc->setAlignment(Align.getQuantity()); 76 return Alloc; 77 } 78 79 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 80 /// expression and compare the result against zero, returning an Int1Ty value. 81 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 82 if (const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>()) { 83 llvm::Value *MemPtr = EmitScalarExpr(E); 84 return CGM.getCXXABI().EmitMemberPointerIsNotNull(*this, MemPtr, MPT); 85 } 86 87 QualType BoolTy = getContext().BoolTy; 88 if (!E->getType()->isAnyComplexType()) 89 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 90 91 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 92 } 93 94 /// EmitIgnoredExpr - Emit code to compute the specified expression, 95 /// ignoring the result. 96 void CodeGenFunction::EmitIgnoredExpr(const Expr *E) { 97 if (E->isRValue()) 98 return (void) EmitAnyExpr(E, AggValueSlot::ignored(), true); 99 100 // Just emit it as an l-value and drop the result. 101 EmitLValue(E); 102 } 103 104 /// EmitAnyExpr - Emit code to compute the specified expression which 105 /// can have any type. The result is returned as an RValue struct. 106 /// If this is an aggregate expression, AggSlot indicates where the 107 /// result should be returned. 108 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, AggValueSlot AggSlot, 109 bool IgnoreResult) { 110 if (!hasAggregateLLVMType(E->getType())) 111 return RValue::get(EmitScalarExpr(E, IgnoreResult)); 112 else if (E->getType()->isAnyComplexType()) 113 return RValue::getComplex(EmitComplexExpr(E, IgnoreResult, IgnoreResult)); 114 115 EmitAggExpr(E, AggSlot, IgnoreResult); 116 return AggSlot.asRValue(); 117 } 118 119 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 120 /// always be accessible even if no aggregate location is provided. 121 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E) { 122 AggValueSlot AggSlot = AggValueSlot::ignored(); 123 124 if (hasAggregateLLVMType(E->getType()) && 125 !E->getType()->isAnyComplexType()) 126 AggSlot = CreateAggTemp(E->getType(), "agg.tmp"); 127 return EmitAnyExpr(E, AggSlot); 128 } 129 130 /// EmitAnyExprToMem - Evaluate an expression into a given memory 131 /// location. 132 void CodeGenFunction::EmitAnyExprToMem(const Expr *E, 133 llvm::Value *Location, 134 Qualifiers Quals, 135 bool IsInit) { 136 if (E->getType()->isAnyComplexType()) 137 EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile()); 138 else if (hasAggregateLLVMType(E->getType())) 139 EmitAggExpr(E, AggValueSlot::forAddr(Location, Quals, 140 AggValueSlot::IsDestructed_t(IsInit), 141 AggValueSlot::DoesNotNeedGCBarriers, 142 AggValueSlot::IsAliased_t(!IsInit))); 143 else { 144 RValue RV = RValue::get(EmitScalarExpr(E, /*Ignore*/ false)); 145 LValue LV = MakeAddrLValue(Location, E->getType()); 146 EmitStoreThroughLValue(RV, LV); 147 } 148 } 149 150 namespace { 151 /// \brief An adjustment to be made to the temporary created when emitting a 152 /// reference binding, which accesses a particular subobject of that temporary. 153 struct SubobjectAdjustment { 154 enum { DerivedToBaseAdjustment, FieldAdjustment } Kind; 155 156 union { 157 struct { 158 const CastExpr *BasePath; 159 const CXXRecordDecl *DerivedClass; 160 } DerivedToBase; 161 162 FieldDecl *Field; 163 }; 164 165 SubobjectAdjustment(const CastExpr *BasePath, 166 const CXXRecordDecl *DerivedClass) 167 : Kind(DerivedToBaseAdjustment) { 168 DerivedToBase.BasePath = BasePath; 169 DerivedToBase.DerivedClass = DerivedClass; 170 } 171 172 SubobjectAdjustment(FieldDecl *Field) 173 : Kind(FieldAdjustment) { 174 this->Field = Field; 175 } 176 }; 177 } 178 179 static llvm::Value * 180 CreateReferenceTemporary(CodeGenFunction &CGF, QualType Type, 181 const NamedDecl *InitializedDecl) { 182 if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 183 if (VD->hasGlobalStorage()) { 184 llvm::SmallString<256> Name; 185 llvm::raw_svector_ostream Out(Name); 186 CGF.CGM.getCXXABI().getMangleContext().mangleReferenceTemporary(VD, Out); 187 Out.flush(); 188 189 llvm::Type *RefTempTy = CGF.ConvertTypeForMem(Type); 190 191 // Create the reference temporary. 192 llvm::GlobalValue *RefTemp = 193 new llvm::GlobalVariable(CGF.CGM.getModule(), 194 RefTempTy, /*isConstant=*/false, 195 llvm::GlobalValue::InternalLinkage, 196 llvm::Constant::getNullValue(RefTempTy), 197 Name.str()); 198 return RefTemp; 199 } 200 } 201 202 return CGF.CreateMemTemp(Type, "ref.tmp"); 203 } 204 205 static llvm::Value * 206 EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E, 207 llvm::Value *&ReferenceTemporary, 208 const CXXDestructorDecl *&ReferenceTemporaryDtor, 209 QualType &ObjCARCReferenceLifetimeType, 210 const NamedDecl *InitializedDecl) { 211 // Look through expressions for materialized temporaries (for now). 212 if (const MaterializeTemporaryExpr *M 213 = dyn_cast<MaterializeTemporaryExpr>(E)) { 214 // Objective-C++ ARC: 215 // If we are binding a reference to a temporary that has ownership, we 216 // need to perform retain/release operations on the temporary. 217 if (CGF.getContext().getLangOptions().ObjCAutoRefCount && 218 E->getType()->isObjCLifetimeType() && 219 (E->getType().getObjCLifetime() == Qualifiers::OCL_Strong || 220 E->getType().getObjCLifetime() == Qualifiers::OCL_Weak || 221 E->getType().getObjCLifetime() == Qualifiers::OCL_Autoreleasing)) 222 ObjCARCReferenceLifetimeType = E->getType(); 223 224 E = M->GetTemporaryExpr(); 225 } 226 227 if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E)) 228 E = DAE->getExpr(); 229 230 if (const ExprWithCleanups *TE = dyn_cast<ExprWithCleanups>(E)) { 231 CodeGenFunction::RunCleanupsScope Scope(CGF); 232 233 return EmitExprForReferenceBinding(CGF, TE->getSubExpr(), 234 ReferenceTemporary, 235 ReferenceTemporaryDtor, 236 ObjCARCReferenceLifetimeType, 237 InitializedDecl); 238 } 239 240 if (const ObjCPropertyRefExpr *PRE = 241 dyn_cast<ObjCPropertyRefExpr>(E->IgnoreParenImpCasts())) 242 if (PRE->getGetterResultType()->isReferenceType()) 243 E = PRE; 244 245 RValue RV; 246 if (E->isGLValue()) { 247 // Emit the expression as an lvalue. 248 LValue LV = CGF.EmitLValue(E); 249 if (LV.isPropertyRef()) { 250 RV = CGF.EmitLoadOfPropertyRefLValue(LV); 251 return RV.getScalarVal(); 252 } 253 254 if (LV.isSimple()) 255 return LV.getAddress(); 256 257 // We have to load the lvalue. 258 RV = CGF.EmitLoadOfLValue(LV); 259 } else { 260 if (!ObjCARCReferenceLifetimeType.isNull()) { 261 ReferenceTemporary = CreateReferenceTemporary(CGF, 262 ObjCARCReferenceLifetimeType, 263 InitializedDecl); 264 265 266 LValue RefTempDst = CGF.MakeAddrLValue(ReferenceTemporary, 267 ObjCARCReferenceLifetimeType); 268 269 CGF.EmitScalarInit(E, dyn_cast_or_null<ValueDecl>(InitializedDecl), 270 RefTempDst, false); 271 272 bool ExtendsLifeOfTemporary = false; 273 if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 274 if (Var->extendsLifetimeOfTemporary()) 275 ExtendsLifeOfTemporary = true; 276 } else if (InitializedDecl && isa<FieldDecl>(InitializedDecl)) { 277 ExtendsLifeOfTemporary = true; 278 } 279 280 if (!ExtendsLifeOfTemporary) { 281 // Since the lifetime of this temporary isn't going to be extended, 282 // we need to clean it up ourselves at the end of the full expression. 283 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 284 case Qualifiers::OCL_None: 285 case Qualifiers::OCL_ExplicitNone: 286 case Qualifiers::OCL_Autoreleasing: 287 break; 288 289 case Qualifiers::OCL_Strong: { 290 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 291 CleanupKind cleanupKind = CGF.getARCCleanupKind(); 292 CGF.pushDestroy(cleanupKind, 293 ReferenceTemporary, 294 ObjCARCReferenceLifetimeType, 295 CodeGenFunction::destroyARCStrongImprecise, 296 cleanupKind & EHCleanup); 297 break; 298 } 299 300 case Qualifiers::OCL_Weak: 301 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 302 CGF.pushDestroy(NormalAndEHCleanup, 303 ReferenceTemporary, 304 ObjCARCReferenceLifetimeType, 305 CodeGenFunction::destroyARCWeak, 306 /*useEHCleanupForArray*/ true); 307 break; 308 } 309 310 ObjCARCReferenceLifetimeType = QualType(); 311 } 312 313 return ReferenceTemporary; 314 } 315 316 SmallVector<SubobjectAdjustment, 2> Adjustments; 317 while (true) { 318 E = E->IgnoreParens(); 319 320 if (const CastExpr *CE = dyn_cast<CastExpr>(E)) { 321 if ((CE->getCastKind() == CK_DerivedToBase || 322 CE->getCastKind() == CK_UncheckedDerivedToBase) && 323 E->getType()->isRecordType()) { 324 E = CE->getSubExpr(); 325 CXXRecordDecl *Derived 326 = cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl()); 327 Adjustments.push_back(SubobjectAdjustment(CE, Derived)); 328 continue; 329 } 330 331 if (CE->getCastKind() == CK_NoOp) { 332 E = CE->getSubExpr(); 333 continue; 334 } 335 } else if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) { 336 if (!ME->isArrow() && ME->getBase()->isRValue()) { 337 assert(ME->getBase()->getType()->isRecordType()); 338 if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) { 339 E = ME->getBase(); 340 Adjustments.push_back(SubobjectAdjustment(Field)); 341 continue; 342 } 343 } 344 } 345 346 if (const OpaqueValueExpr *opaque = dyn_cast<OpaqueValueExpr>(E)) 347 if (opaque->getType()->isRecordType()) 348 return CGF.EmitOpaqueValueLValue(opaque).getAddress(); 349 350 // Nothing changed. 351 break; 352 } 353 354 // Create a reference temporary if necessary. 355 AggValueSlot AggSlot = AggValueSlot::ignored(); 356 if (CGF.hasAggregateLLVMType(E->getType()) && 357 !E->getType()->isAnyComplexType()) { 358 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 359 InitializedDecl); 360 AggValueSlot::IsDestructed_t isDestructed 361 = AggValueSlot::IsDestructed_t(InitializedDecl != 0); 362 AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Qualifiers(), 363 isDestructed, 364 AggValueSlot::DoesNotNeedGCBarriers, 365 AggValueSlot::IsNotAliased); 366 } 367 368 if (InitializedDecl) { 369 // Get the destructor for the reference temporary. 370 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { 371 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 372 if (!ClassDecl->hasTrivialDestructor()) 373 ReferenceTemporaryDtor = ClassDecl->getDestructor(); 374 } 375 } 376 377 RV = CGF.EmitAnyExpr(E, AggSlot); 378 379 // Check if need to perform derived-to-base casts and/or field accesses, to 380 // get from the temporary object we created (and, potentially, for which we 381 // extended the lifetime) to the subobject we're binding the reference to. 382 if (!Adjustments.empty()) { 383 llvm::Value *Object = RV.getAggregateAddr(); 384 for (unsigned I = Adjustments.size(); I != 0; --I) { 385 SubobjectAdjustment &Adjustment = Adjustments[I-1]; 386 switch (Adjustment.Kind) { 387 case SubobjectAdjustment::DerivedToBaseAdjustment: 388 Object = 389 CGF.GetAddressOfBaseClass(Object, 390 Adjustment.DerivedToBase.DerivedClass, 391 Adjustment.DerivedToBase.BasePath->path_begin(), 392 Adjustment.DerivedToBase.BasePath->path_end(), 393 /*NullCheckValue=*/false); 394 break; 395 396 case SubobjectAdjustment::FieldAdjustment: { 397 LValue LV = 398 CGF.EmitLValueForField(Object, Adjustment.Field, 0); 399 if (LV.isSimple()) { 400 Object = LV.getAddress(); 401 break; 402 } 403 404 // For non-simple lvalues, we actually have to create a copy of 405 // the object we're binding to. 406 QualType T = Adjustment.Field->getType().getNonReferenceType() 407 .getUnqualifiedType(); 408 Object = CreateReferenceTemporary(CGF, T, InitializedDecl); 409 LValue TempLV = CGF.MakeAddrLValue(Object, 410 Adjustment.Field->getType()); 411 CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV), TempLV); 412 break; 413 } 414 415 } 416 } 417 418 return Object; 419 } 420 } 421 422 if (RV.isAggregate()) 423 return RV.getAggregateAddr(); 424 425 // Create a temporary variable that we can bind the reference to. 426 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 427 InitializedDecl); 428 429 430 unsigned Alignment = 431 CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity(); 432 if (RV.isScalar()) 433 CGF.EmitStoreOfScalar(RV.getScalarVal(), ReferenceTemporary, 434 /*Volatile=*/false, Alignment, E->getType()); 435 else 436 CGF.StoreComplexToAddr(RV.getComplexVal(), ReferenceTemporary, 437 /*Volatile=*/false); 438 return ReferenceTemporary; 439 } 440 441 RValue 442 CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E, 443 const NamedDecl *InitializedDecl) { 444 llvm::Value *ReferenceTemporary = 0; 445 const CXXDestructorDecl *ReferenceTemporaryDtor = 0; 446 QualType ObjCARCReferenceLifetimeType; 447 llvm::Value *Value = EmitExprForReferenceBinding(*this, E, ReferenceTemporary, 448 ReferenceTemporaryDtor, 449 ObjCARCReferenceLifetimeType, 450 InitializedDecl); 451 if (!ReferenceTemporaryDtor && ObjCARCReferenceLifetimeType.isNull()) 452 return RValue::get(Value); 453 454 // Make sure to call the destructor for the reference temporary. 455 const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl); 456 if (VD && VD->hasGlobalStorage()) { 457 if (ReferenceTemporaryDtor) { 458 llvm::Constant *DtorFn = 459 CGM.GetAddrOfCXXDestructor(ReferenceTemporaryDtor, Dtor_Complete); 460 EmitCXXGlobalDtorRegistration(DtorFn, 461 cast<llvm::Constant>(ReferenceTemporary)); 462 } else { 463 assert(!ObjCARCReferenceLifetimeType.isNull()); 464 // Note: We intentionally do not register a global "destructor" to 465 // release the object. 466 } 467 468 return RValue::get(Value); 469 } 470 471 if (ReferenceTemporaryDtor) 472 PushDestructorCleanup(ReferenceTemporaryDtor, ReferenceTemporary); 473 else { 474 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 475 case Qualifiers::OCL_None: 476 assert(0 && "Not a reference temporary that needs to be deallocated"); 477 case Qualifiers::OCL_ExplicitNone: 478 case Qualifiers::OCL_Autoreleasing: 479 // Nothing to do. 480 break; 481 482 case Qualifiers::OCL_Strong: { 483 bool precise = VD && VD->hasAttr<ObjCPreciseLifetimeAttr>(); 484 CleanupKind cleanupKind = getARCCleanupKind(); 485 // This local is a GCC and MSVC compiler workaround. 486 Destroyer *destroyer = precise ? &destroyARCStrongPrecise : 487 &destroyARCStrongImprecise; 488 pushDestroy(cleanupKind, ReferenceTemporary, ObjCARCReferenceLifetimeType, 489 *destroyer, cleanupKind & EHCleanup); 490 break; 491 } 492 493 case Qualifiers::OCL_Weak: { 494 // This local is a GCC and MSVC compiler workaround. 495 Destroyer *destroyer = &destroyARCWeak; 496 // __weak objects always get EH cleanups; otherwise, exceptions 497 // could cause really nasty crashes instead of mere leaks. 498 pushDestroy(NormalAndEHCleanup, ReferenceTemporary, 499 ObjCARCReferenceLifetimeType, *destroyer, true); 500 break; 501 } 502 } 503 } 504 505 return RValue::get(Value); 506 } 507 508 509 /// getAccessedFieldNo - Given an encoded value and a result number, return the 510 /// input field number being accessed. 511 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 512 const llvm::Constant *Elts) { 513 if (isa<llvm::ConstantAggregateZero>(Elts)) 514 return 0; 515 516 return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue(); 517 } 518 519 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) { 520 if (!CatchUndefined) 521 return; 522 523 // This needs to be to the standard address space. 524 Address = Builder.CreateBitCast(Address, Int8PtrTy); 525 526 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy); 527 528 // In time, people may want to control this and use a 1 here. 529 llvm::Value *Arg = Builder.getFalse(); 530 llvm::Value *C = Builder.CreateCall2(F, Address, Arg); 531 llvm::BasicBlock *Cont = createBasicBlock(); 532 llvm::BasicBlock *Check = createBasicBlock(); 533 llvm::Value *NegativeOne = llvm::ConstantInt::get(IntPtrTy, -1ULL); 534 Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check); 535 536 EmitBlock(Check); 537 Builder.CreateCondBr(Builder.CreateICmpUGE(C, 538 llvm::ConstantInt::get(IntPtrTy, Size)), 539 Cont, getTrapBB()); 540 EmitBlock(Cont); 541 } 542 543 544 CodeGenFunction::ComplexPairTy CodeGenFunction:: 545 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 546 bool isInc, bool isPre) { 547 ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(), 548 LV.isVolatileQualified()); 549 550 llvm::Value *NextVal; 551 if (isa<llvm::IntegerType>(InVal.first->getType())) { 552 uint64_t AmountVal = isInc ? 1 : -1; 553 NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true); 554 555 // Add the inc/dec to the real part. 556 NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 557 } else { 558 QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType(); 559 llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1); 560 if (!isInc) 561 FVal.changeSign(); 562 NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal); 563 564 // Add the inc/dec to the real part. 565 NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 566 } 567 568 ComplexPairTy IncVal(NextVal, InVal.second); 569 570 // Store the updated result through the lvalue. 571 StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified()); 572 573 // If this is a postinc, return the value read from memory, otherwise use the 574 // updated value. 575 return isPre ? IncVal : InVal; 576 } 577 578 579 //===----------------------------------------------------------------------===// 580 // LValue Expression Emission 581 //===----------------------------------------------------------------------===// 582 583 RValue CodeGenFunction::GetUndefRValue(QualType Ty) { 584 if (Ty->isVoidType()) 585 return RValue::get(0); 586 587 if (const ComplexType *CTy = Ty->getAs<ComplexType>()) { 588 llvm::Type *EltTy = ConvertType(CTy->getElementType()); 589 llvm::Value *U = llvm::UndefValue::get(EltTy); 590 return RValue::getComplex(std::make_pair(U, U)); 591 } 592 593 // If this is a use of an undefined aggregate type, the aggregate must have an 594 // identifiable address. Just because the contents of the value are undefined 595 // doesn't mean that the address can't be taken and compared. 596 if (hasAggregateLLVMType(Ty)) { 597 llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp"); 598 return RValue::getAggregate(DestPtr); 599 } 600 601 return RValue::get(llvm::UndefValue::get(ConvertType(Ty))); 602 } 603 604 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E, 605 const char *Name) { 606 ErrorUnsupported(E, Name); 607 return GetUndefRValue(E->getType()); 608 } 609 610 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 611 const char *Name) { 612 ErrorUnsupported(E, Name); 613 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 614 return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType()); 615 } 616 617 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) { 618 LValue LV = EmitLValue(E); 619 if (!isa<DeclRefExpr>(E) && !LV.isBitField() && LV.isSimple()) 620 EmitCheck(LV.getAddress(), 621 getContext().getTypeSizeInChars(E->getType()).getQuantity()); 622 return LV; 623 } 624 625 /// EmitLValue - Emit code to compute a designator that specifies the location 626 /// of the expression. 627 /// 628 /// This can return one of two things: a simple address or a bitfield reference. 629 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be 630 /// an LLVM pointer type. 631 /// 632 /// If this returns a bitfield reference, nothing about the pointee type of the 633 /// LLVM value is known: For example, it may not be a pointer to an integer. 634 /// 635 /// If this returns a normal address, and if the lvalue's C type is fixed size, 636 /// this method guarantees that the returned pointer type will point to an LLVM 637 /// type of the same size of the lvalue's type. If the lvalue has a variable 638 /// length type, this is not possible. 639 /// 640 LValue CodeGenFunction::EmitLValue(const Expr *E) { 641 switch (E->getStmtClass()) { 642 default: return EmitUnsupportedLValue(E, "l-value expression"); 643 644 case Expr::ObjCSelectorExprClass: 645 return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E)); 646 case Expr::ObjCIsaExprClass: 647 return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E)); 648 case Expr::BinaryOperatorClass: 649 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 650 case Expr::CompoundAssignOperatorClass: 651 if (!E->getType()->isAnyComplexType()) 652 return EmitCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 653 return EmitComplexCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 654 case Expr::CallExprClass: 655 case Expr::CXXMemberCallExprClass: 656 case Expr::CXXOperatorCallExprClass: 657 return EmitCallExprLValue(cast<CallExpr>(E)); 658 case Expr::VAArgExprClass: 659 return EmitVAArgExprLValue(cast<VAArgExpr>(E)); 660 case Expr::DeclRefExprClass: 661 return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 662 case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 663 case Expr::GenericSelectionExprClass: 664 return EmitLValue(cast<GenericSelectionExpr>(E)->getResultExpr()); 665 case Expr::PredefinedExprClass: 666 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 667 case Expr::StringLiteralClass: 668 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 669 case Expr::ObjCEncodeExprClass: 670 return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E)); 671 672 case Expr::BlockDeclRefExprClass: 673 return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E)); 674 675 case Expr::CXXTemporaryObjectExprClass: 676 case Expr::CXXConstructExprClass: 677 return EmitCXXConstructLValue(cast<CXXConstructExpr>(E)); 678 case Expr::CXXBindTemporaryExprClass: 679 return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E)); 680 case Expr::ExprWithCleanupsClass: 681 return EmitExprWithCleanupsLValue(cast<ExprWithCleanups>(E)); 682 case Expr::CXXScalarValueInitExprClass: 683 return EmitNullInitializationLValue(cast<CXXScalarValueInitExpr>(E)); 684 case Expr::CXXDefaultArgExprClass: 685 return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr()); 686 case Expr::CXXTypeidExprClass: 687 return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E)); 688 689 case Expr::ObjCMessageExprClass: 690 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 691 case Expr::ObjCIvarRefExprClass: 692 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 693 case Expr::ObjCPropertyRefExprClass: 694 return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E)); 695 case Expr::StmtExprClass: 696 return EmitStmtExprLValue(cast<StmtExpr>(E)); 697 case Expr::UnaryOperatorClass: 698 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 699 case Expr::ArraySubscriptExprClass: 700 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 701 case Expr::ExtVectorElementExprClass: 702 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 703 case Expr::MemberExprClass: 704 return EmitMemberExpr(cast<MemberExpr>(E)); 705 case Expr::CompoundLiteralExprClass: 706 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 707 case Expr::ConditionalOperatorClass: 708 return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E)); 709 case Expr::BinaryConditionalOperatorClass: 710 return EmitConditionalOperatorLValue(cast<BinaryConditionalOperator>(E)); 711 case Expr::ChooseExprClass: 712 return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext())); 713 case Expr::OpaqueValueExprClass: 714 return EmitOpaqueValueLValue(cast<OpaqueValueExpr>(E)); 715 case Expr::SubstNonTypeTemplateParmExprClass: 716 return EmitLValue(cast<SubstNonTypeTemplateParmExpr>(E)->getReplacement()); 717 case Expr::ImplicitCastExprClass: 718 case Expr::CStyleCastExprClass: 719 case Expr::CXXFunctionalCastExprClass: 720 case Expr::CXXStaticCastExprClass: 721 case Expr::CXXDynamicCastExprClass: 722 case Expr::CXXReinterpretCastExprClass: 723 case Expr::CXXConstCastExprClass: 724 case Expr::ObjCBridgedCastExprClass: 725 return EmitCastLValue(cast<CastExpr>(E)); 726 727 case Expr::MaterializeTemporaryExprClass: 728 return EmitMaterializeTemporaryExpr(cast<MaterializeTemporaryExpr>(E)); 729 } 730 } 731 732 llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue) { 733 return EmitLoadOfScalar(lvalue.getAddress(), lvalue.isVolatile(), 734 lvalue.getAlignment(), lvalue.getType(), 735 lvalue.getTBAAInfo()); 736 } 737 738 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 739 unsigned Alignment, QualType Ty, 740 llvm::MDNode *TBAAInfo) { 741 llvm::LoadInst *Load = Builder.CreateLoad(Addr, "tmp"); 742 if (Volatile) 743 Load->setVolatile(true); 744 if (Alignment) 745 Load->setAlignment(Alignment); 746 if (TBAAInfo) 747 CGM.DecorateInstruction(Load, TBAAInfo); 748 749 return EmitFromMemory(Load, Ty); 750 } 751 752 static bool isBooleanUnderlyingType(QualType Ty) { 753 if (const EnumType *ET = dyn_cast<EnumType>(Ty)) 754 return ET->getDecl()->getIntegerType()->isBooleanType(); 755 return false; 756 } 757 758 llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) { 759 // Bool has a different representation in memory than in registers. 760 if (Ty->isBooleanType() || isBooleanUnderlyingType(Ty)) { 761 // This should really always be an i1, but sometimes it's already 762 // an i8, and it's awkward to track those cases down. 763 if (Value->getType()->isIntegerTy(1)) 764 return Builder.CreateZExt(Value, Builder.getInt8Ty(), "frombool"); 765 assert(Value->getType()->isIntegerTy(8) && "value rep of bool not i1/i8"); 766 } 767 768 return Value; 769 } 770 771 llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) { 772 // Bool has a different representation in memory than in registers. 773 if (Ty->isBooleanType() || isBooleanUnderlyingType(Ty)) { 774 assert(Value->getType()->isIntegerTy(8) && "memory rep of bool not i8"); 775 return Builder.CreateTrunc(Value, Builder.getInt1Ty(), "tobool"); 776 } 777 778 return Value; 779 } 780 781 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 782 bool Volatile, unsigned Alignment, 783 QualType Ty, 784 llvm::MDNode *TBAAInfo) { 785 Value = EmitToMemory(Value, Ty); 786 787 llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile); 788 if (Alignment) 789 Store->setAlignment(Alignment); 790 if (TBAAInfo) 791 CGM.DecorateInstruction(Store, TBAAInfo); 792 } 793 794 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *value, LValue lvalue) { 795 EmitStoreOfScalar(value, lvalue.getAddress(), lvalue.isVolatile(), 796 lvalue.getAlignment(), lvalue.getType(), 797 lvalue.getTBAAInfo()); 798 } 799 800 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this 801 /// method emits the address of the lvalue, then loads the result as an rvalue, 802 /// returning the rvalue. 803 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV) { 804 if (LV.isObjCWeak()) { 805 // load of a __weak object. 806 llvm::Value *AddrWeakObj = LV.getAddress(); 807 return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this, 808 AddrWeakObj)); 809 } 810 if (LV.getQuals().getObjCLifetime() == Qualifiers::OCL_Weak) 811 return RValue::get(EmitARCLoadWeak(LV.getAddress())); 812 813 if (LV.isSimple()) { 814 assert(!LV.getType()->isFunctionType()); 815 816 // Everything needs a load. 817 return RValue::get(EmitLoadOfScalar(LV)); 818 } 819 820 if (LV.isVectorElt()) { 821 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 822 LV.isVolatileQualified(), "tmp"); 823 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 824 "vecext")); 825 } 826 827 // If this is a reference to a subset of the elements of a vector, either 828 // shuffle the input or extract/insert them as appropriate. 829 if (LV.isExtVectorElt()) 830 return EmitLoadOfExtVectorElementLValue(LV); 831 832 if (LV.isBitField()) 833 return EmitLoadOfBitfieldLValue(LV); 834 835 assert(LV.isPropertyRef() && "Unknown LValue type!"); 836 return EmitLoadOfPropertyRefLValue(LV); 837 } 838 839 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV) { 840 const CGBitFieldInfo &Info = LV.getBitFieldInfo(); 841 842 // Get the output type. 843 llvm::Type *ResLTy = ConvertType(LV.getType()); 844 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 845 846 // Compute the result as an OR of all of the individual component accesses. 847 llvm::Value *Res = 0; 848 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 849 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 850 851 // Get the field pointer. 852 llvm::Value *Ptr = LV.getBitFieldBaseAddr(); 853 854 // Only offset by the field index if used, so that incoming values are not 855 // required to be structures. 856 if (AI.FieldIndex) 857 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 858 859 // Offset by the byte offset, if used. 860 if (!AI.FieldByteOffset.isZero()) { 861 Ptr = EmitCastToVoidPtr(Ptr); 862 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 863 "bf.field.offs"); 864 } 865 866 // Cast to the access type. 867 llvm::Type *PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), 868 AI.AccessWidth, 869 CGM.getContext().getTargetAddressSpace(LV.getType())); 870 Ptr = Builder.CreateBitCast(Ptr, PTy); 871 872 // Perform the load. 873 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, LV.isVolatileQualified()); 874 if (!AI.AccessAlignment.isZero()) 875 Load->setAlignment(AI.AccessAlignment.getQuantity()); 876 877 // Shift out unused low bits and mask out unused high bits. 878 llvm::Value *Val = Load; 879 if (AI.FieldBitStart) 880 Val = Builder.CreateLShr(Load, AI.FieldBitStart); 881 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(AI.AccessWidth, 882 AI.TargetBitWidth), 883 "bf.clear"); 884 885 // Extend or truncate to the target size. 886 if (AI.AccessWidth < ResSizeInBits) 887 Val = Builder.CreateZExt(Val, ResLTy); 888 else if (AI.AccessWidth > ResSizeInBits) 889 Val = Builder.CreateTrunc(Val, ResLTy); 890 891 // Shift into place, and OR into the result. 892 if (AI.TargetBitOffset) 893 Val = Builder.CreateShl(Val, AI.TargetBitOffset); 894 Res = Res ? Builder.CreateOr(Res, Val) : Val; 895 } 896 897 // If the bit-field is signed, perform the sign-extension. 898 // 899 // FIXME: This can easily be folded into the load of the high bits, which 900 // could also eliminate the mask of high bits in some situations. 901 if (Info.isSigned()) { 902 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 903 if (ExtraBits) 904 Res = Builder.CreateAShr(Builder.CreateShl(Res, ExtraBits), 905 ExtraBits, "bf.val.sext"); 906 } 907 908 return RValue::get(Res); 909 } 910 911 // If this is a reference to a subset of the elements of a vector, create an 912 // appropriate shufflevector. 913 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV) { 914 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 915 LV.isVolatileQualified(), "tmp"); 916 917 const llvm::Constant *Elts = LV.getExtVectorElts(); 918 919 // If the result of the expression is a non-vector type, we must be extracting 920 // a single element. Just codegen as an extractelement. 921 const VectorType *ExprVT = LV.getType()->getAs<VectorType>(); 922 if (!ExprVT) { 923 unsigned InIdx = getAccessedFieldNo(0, Elts); 924 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 925 return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp")); 926 } 927 928 // Always use shuffle vector to try to retain the original program structure 929 unsigned NumResultElts = ExprVT->getNumElements(); 930 931 SmallVector<llvm::Constant*, 4> Mask; 932 for (unsigned i = 0; i != NumResultElts; ++i) { 933 unsigned InIdx = getAccessedFieldNo(i, Elts); 934 Mask.push_back(llvm::ConstantInt::get(Int32Ty, InIdx)); 935 } 936 937 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 938 Vec = Builder.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()), 939 MaskV, "tmp"); 940 return RValue::get(Vec); 941 } 942 943 944 945 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 946 /// lvalue, where both are guaranteed to the have the same type, and that type 947 /// is 'Ty'. 948 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst) { 949 if (!Dst.isSimple()) { 950 if (Dst.isVectorElt()) { 951 // Read/modify/write the vector, inserting the new element. 952 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 953 Dst.isVolatileQualified(), "tmp"); 954 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 955 Dst.getVectorIdx(), "vecins"); 956 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 957 return; 958 } 959 960 // If this is an update of extended vector elements, insert them as 961 // appropriate. 962 if (Dst.isExtVectorElt()) 963 return EmitStoreThroughExtVectorComponentLValue(Src, Dst); 964 965 if (Dst.isBitField()) 966 return EmitStoreThroughBitfieldLValue(Src, Dst); 967 968 assert(Dst.isPropertyRef() && "Unknown LValue type"); 969 return EmitStoreThroughPropertyRefLValue(Src, Dst); 970 } 971 972 // There's special magic for assigning into an ARC-qualified l-value. 973 if (Qualifiers::ObjCLifetime Lifetime = Dst.getQuals().getObjCLifetime()) { 974 switch (Lifetime) { 975 case Qualifiers::OCL_None: 976 llvm_unreachable("present but none"); 977 978 case Qualifiers::OCL_ExplicitNone: 979 // nothing special 980 break; 981 982 case Qualifiers::OCL_Strong: 983 EmitARCStoreStrong(Dst, Src.getScalarVal(), /*ignore*/ true); 984 return; 985 986 case Qualifiers::OCL_Weak: 987 EmitARCStoreWeak(Dst.getAddress(), Src.getScalarVal(), /*ignore*/ true); 988 return; 989 990 case Qualifiers::OCL_Autoreleasing: 991 Src = RValue::get(EmitObjCExtendObjectLifetime(Dst.getType(), 992 Src.getScalarVal())); 993 // fall into the normal path 994 break; 995 } 996 } 997 998 if (Dst.isObjCWeak() && !Dst.isNonGC()) { 999 // load of a __weak object. 1000 llvm::Value *LvalueDst = Dst.getAddress(); 1001 llvm::Value *src = Src.getScalarVal(); 1002 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 1003 return; 1004 } 1005 1006 if (Dst.isObjCStrong() && !Dst.isNonGC()) { 1007 // load of a __strong object. 1008 llvm::Value *LvalueDst = Dst.getAddress(); 1009 llvm::Value *src = Src.getScalarVal(); 1010 if (Dst.isObjCIvar()) { 1011 assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL"); 1012 llvm::Type *ResultType = ConvertType(getContext().LongTy); 1013 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp()); 1014 llvm::Value *dst = RHS; 1015 RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast"); 1016 llvm::Value *LHS = 1017 Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast"); 1018 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset"); 1019 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst, 1020 BytesBetween); 1021 } else if (Dst.isGlobalObjCRef()) { 1022 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst, 1023 Dst.isThreadLocalRef()); 1024 } 1025 else 1026 CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst); 1027 return; 1028 } 1029 1030 assert(Src.isScalar() && "Can't emit an agg store with this method"); 1031 EmitStoreOfScalar(Src.getScalarVal(), Dst); 1032 } 1033 1034 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 1035 llvm::Value **Result) { 1036 const CGBitFieldInfo &Info = Dst.getBitFieldInfo(); 1037 1038 // Get the output type. 1039 llvm::Type *ResLTy = ConvertTypeForMem(Dst.getType()); 1040 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 1041 1042 // Get the source value, truncated to the width of the bit-field. 1043 llvm::Value *SrcVal = Src.getScalarVal(); 1044 1045 if (Dst.getType()->isBooleanType()) 1046 SrcVal = Builder.CreateIntCast(SrcVal, ResLTy, /*IsSigned=*/false); 1047 1048 SrcVal = Builder.CreateAnd(SrcVal, llvm::APInt::getLowBitsSet(ResSizeInBits, 1049 Info.getSize()), 1050 "bf.value"); 1051 1052 // Return the new value of the bit-field, if requested. 1053 if (Result) { 1054 // Cast back to the proper type for result. 1055 llvm::Type *SrcTy = Src.getScalarVal()->getType(); 1056 llvm::Value *ReloadVal = Builder.CreateIntCast(SrcVal, SrcTy, false, 1057 "bf.reload.val"); 1058 1059 // Sign extend if necessary. 1060 if (Info.isSigned()) { 1061 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 1062 if (ExtraBits) 1063 ReloadVal = Builder.CreateAShr(Builder.CreateShl(ReloadVal, ExtraBits), 1064 ExtraBits, "bf.reload.sext"); 1065 } 1066 1067 *Result = ReloadVal; 1068 } 1069 1070 // Iterate over the components, writing each piece to memory. 1071 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 1072 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 1073 1074 // Get the field pointer. 1075 llvm::Value *Ptr = Dst.getBitFieldBaseAddr(); 1076 unsigned addressSpace = 1077 cast<llvm::PointerType>(Ptr->getType())->getAddressSpace(); 1078 1079 // Only offset by the field index if used, so that incoming values are not 1080 // required to be structures. 1081 if (AI.FieldIndex) 1082 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 1083 1084 // Offset by the byte offset, if used. 1085 if (!AI.FieldByteOffset.isZero()) { 1086 Ptr = EmitCastToVoidPtr(Ptr); 1087 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 1088 "bf.field.offs"); 1089 } 1090 1091 // Cast to the access type. 1092 llvm::Type *AccessLTy = 1093 llvm::Type::getIntNTy(getLLVMContext(), AI.AccessWidth); 1094 1095 llvm::Type *PTy = AccessLTy->getPointerTo(addressSpace); 1096 Ptr = Builder.CreateBitCast(Ptr, PTy); 1097 1098 // Extract the piece of the bit-field value to write in this access, limited 1099 // to the values that are part of this access. 1100 llvm::Value *Val = SrcVal; 1101 if (AI.TargetBitOffset) 1102 Val = Builder.CreateLShr(Val, AI.TargetBitOffset); 1103 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(ResSizeInBits, 1104 AI.TargetBitWidth)); 1105 1106 // Extend or truncate to the access size. 1107 if (ResSizeInBits < AI.AccessWidth) 1108 Val = Builder.CreateZExt(Val, AccessLTy); 1109 else if (ResSizeInBits > AI.AccessWidth) 1110 Val = Builder.CreateTrunc(Val, AccessLTy); 1111 1112 // Shift into the position in memory. 1113 if (AI.FieldBitStart) 1114 Val = Builder.CreateShl(Val, AI.FieldBitStart); 1115 1116 // If necessary, load and OR in bits that are outside of the bit-field. 1117 if (AI.TargetBitWidth != AI.AccessWidth) { 1118 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, Dst.isVolatileQualified()); 1119 if (!AI.AccessAlignment.isZero()) 1120 Load->setAlignment(AI.AccessAlignment.getQuantity()); 1121 1122 // Compute the mask for zeroing the bits that are part of the bit-field. 1123 llvm::APInt InvMask = 1124 ~llvm::APInt::getBitsSet(AI.AccessWidth, AI.FieldBitStart, 1125 AI.FieldBitStart + AI.TargetBitWidth); 1126 1127 // Apply the mask and OR in to the value to write. 1128 Val = Builder.CreateOr(Builder.CreateAnd(Load, InvMask), Val); 1129 } 1130 1131 // Write the value. 1132 llvm::StoreInst *Store = Builder.CreateStore(Val, Ptr, 1133 Dst.isVolatileQualified()); 1134 if (!AI.AccessAlignment.isZero()) 1135 Store->setAlignment(AI.AccessAlignment.getQuantity()); 1136 } 1137 } 1138 1139 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 1140 LValue Dst) { 1141 // This access turns into a read/modify/write of the vector. Load the input 1142 // value now. 1143 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 1144 Dst.isVolatileQualified(), "tmp"); 1145 const llvm::Constant *Elts = Dst.getExtVectorElts(); 1146 1147 llvm::Value *SrcVal = Src.getScalarVal(); 1148 1149 if (const VectorType *VTy = Dst.getType()->getAs<VectorType>()) { 1150 unsigned NumSrcElts = VTy->getNumElements(); 1151 unsigned NumDstElts = 1152 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 1153 if (NumDstElts == NumSrcElts) { 1154 // Use shuffle vector is the src and destination are the same number of 1155 // elements and restore the vector mask since it is on the side it will be 1156 // stored. 1157 SmallVector<llvm::Constant*, 4> Mask(NumDstElts); 1158 for (unsigned i = 0; i != NumSrcElts; ++i) { 1159 unsigned InIdx = getAccessedFieldNo(i, Elts); 1160 Mask[InIdx] = llvm::ConstantInt::get(Int32Ty, i); 1161 } 1162 1163 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 1164 Vec = Builder.CreateShuffleVector(SrcVal, 1165 llvm::UndefValue::get(Vec->getType()), 1166 MaskV, "tmp"); 1167 } else if (NumDstElts > NumSrcElts) { 1168 // Extended the source vector to the same length and then shuffle it 1169 // into the destination. 1170 // FIXME: since we're shuffling with undef, can we just use the indices 1171 // into that? This could be simpler. 1172 SmallVector<llvm::Constant*, 4> ExtMask; 1173 unsigned i; 1174 for (i = 0; i != NumSrcElts; ++i) 1175 ExtMask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 1176 for (; i != NumDstElts; ++i) 1177 ExtMask.push_back(llvm::UndefValue::get(Int32Ty)); 1178 llvm::Value *ExtMaskV = llvm::ConstantVector::get(ExtMask); 1179 llvm::Value *ExtSrcVal = 1180 Builder.CreateShuffleVector(SrcVal, 1181 llvm::UndefValue::get(SrcVal->getType()), 1182 ExtMaskV, "tmp"); 1183 // build identity 1184 SmallVector<llvm::Constant*, 4> Mask; 1185 for (unsigned i = 0; i != NumDstElts; ++i) 1186 Mask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 1187 1188 // modify when what gets shuffled in 1189 for (unsigned i = 0; i != NumSrcElts; ++i) { 1190 unsigned Idx = getAccessedFieldNo(i, Elts); 1191 Mask[Idx] = llvm::ConstantInt::get(Int32Ty, i+NumDstElts); 1192 } 1193 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 1194 Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp"); 1195 } else { 1196 // We should never shorten the vector 1197 assert(0 && "unexpected shorten vector length"); 1198 } 1199 } else { 1200 // If the Src is a scalar (not a vector) it must be updating one element. 1201 unsigned InIdx = getAccessedFieldNo(0, Elts); 1202 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 1203 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp"); 1204 } 1205 1206 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 1207 } 1208 1209 // setObjCGCLValueClass - sets class of he lvalue for the purpose of 1210 // generating write-barries API. It is currently a global, ivar, 1211 // or neither. 1212 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E, 1213 LValue &LV) { 1214 if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC) 1215 return; 1216 1217 if (isa<ObjCIvarRefExpr>(E)) { 1218 LV.setObjCIvar(true); 1219 ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E)); 1220 LV.setBaseIvarExp(Exp->getBase()); 1221 LV.setObjCArray(E->getType()->isArrayType()); 1222 return; 1223 } 1224 1225 if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) { 1226 if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) { 1227 if (VD->hasGlobalStorage()) { 1228 LV.setGlobalObjCRef(true); 1229 LV.setThreadLocalRef(VD->isThreadSpecified()); 1230 } 1231 } 1232 LV.setObjCArray(E->getType()->isArrayType()); 1233 return; 1234 } 1235 1236 if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) { 1237 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 1238 return; 1239 } 1240 1241 if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) { 1242 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 1243 if (LV.isObjCIvar()) { 1244 // If cast is to a structure pointer, follow gcc's behavior and make it 1245 // a non-ivar write-barrier. 1246 QualType ExpTy = E->getType(); 1247 if (ExpTy->isPointerType()) 1248 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 1249 if (ExpTy->isRecordType()) 1250 LV.setObjCIvar(false); 1251 } 1252 return; 1253 } 1254 1255 if (const GenericSelectionExpr *Exp = dyn_cast<GenericSelectionExpr>(E)) { 1256 setObjCGCLValueClass(Ctx, Exp->getResultExpr(), LV); 1257 return; 1258 } 1259 1260 if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) { 1261 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 1262 return; 1263 } 1264 1265 if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) { 1266 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 1267 return; 1268 } 1269 1270 if (const ObjCBridgedCastExpr *Exp = dyn_cast<ObjCBridgedCastExpr>(E)) { 1271 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 1272 return; 1273 } 1274 1275 if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) { 1276 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 1277 if (LV.isObjCIvar() && !LV.isObjCArray()) 1278 // Using array syntax to assigning to what an ivar points to is not 1279 // same as assigning to the ivar itself. {id *Names;} Names[i] = 0; 1280 LV.setObjCIvar(false); 1281 else if (LV.isGlobalObjCRef() && !LV.isObjCArray()) 1282 // Using array syntax to assigning to what global points to is not 1283 // same as assigning to the global itself. {id *G;} G[i] = 0; 1284 LV.setGlobalObjCRef(false); 1285 return; 1286 } 1287 1288 if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) { 1289 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 1290 // We don't know if member is an 'ivar', but this flag is looked at 1291 // only in the context of LV.isObjCIvar(). 1292 LV.setObjCArray(E->getType()->isArrayType()); 1293 return; 1294 } 1295 } 1296 1297 static llvm::Value * 1298 EmitBitCastOfLValueToProperType(CodeGenFunction &CGF, 1299 llvm::Value *V, llvm::Type *IRType, 1300 StringRef Name = StringRef()) { 1301 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace(); 1302 return CGF.Builder.CreateBitCast(V, IRType->getPointerTo(AS), Name); 1303 } 1304 1305 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, 1306 const Expr *E, const VarDecl *VD) { 1307 assert((VD->hasExternalStorage() || VD->isFileVarDecl()) && 1308 "Var decl must have external storage or be a file var decl!"); 1309 1310 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); 1311 if (VD->getType()->isReferenceType()) 1312 V = CGF.Builder.CreateLoad(V, "tmp"); 1313 1314 V = EmitBitCastOfLValueToProperType(CGF, V, 1315 CGF.getTypes().ConvertTypeForMem(E->getType())); 1316 1317 unsigned Alignment = CGF.getContext().getDeclAlign(VD).getQuantity(); 1318 LValue LV = CGF.MakeAddrLValue(V, E->getType(), Alignment); 1319 setObjCGCLValueClass(CGF.getContext(), E, LV); 1320 return LV; 1321 } 1322 1323 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF, 1324 const Expr *E, const FunctionDecl *FD) { 1325 llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD); 1326 if (!FD->hasPrototype()) { 1327 if (const FunctionProtoType *Proto = 1328 FD->getType()->getAs<FunctionProtoType>()) { 1329 // Ugly case: for a K&R-style definition, the type of the definition 1330 // isn't the same as the type of a use. Correct for this with a 1331 // bitcast. 1332 QualType NoProtoType = 1333 CGF.getContext().getFunctionNoProtoType(Proto->getResultType()); 1334 NoProtoType = CGF.getContext().getPointerType(NoProtoType); 1335 V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType), "tmp"); 1336 } 1337 } 1338 unsigned Alignment = CGF.getContext().getDeclAlign(FD).getQuantity(); 1339 return CGF.MakeAddrLValue(V, E->getType(), Alignment); 1340 } 1341 1342 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 1343 const NamedDecl *ND = E->getDecl(); 1344 unsigned Alignment = getContext().getDeclAlign(ND).getQuantity(); 1345 1346 if (ND->hasAttr<WeakRefAttr>()) { 1347 const ValueDecl *VD = cast<ValueDecl>(ND); 1348 llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD); 1349 return MakeAddrLValue(Aliasee, E->getType(), Alignment); 1350 } 1351 1352 if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) { 1353 1354 // Check if this is a global variable. 1355 if (VD->hasExternalStorage() || VD->isFileVarDecl()) 1356 return EmitGlobalVarDeclLValue(*this, E, VD); 1357 1358 bool NonGCable = VD->hasLocalStorage() && 1359 !VD->getType()->isReferenceType() && 1360 !VD->hasAttr<BlocksAttr>(); 1361 1362 llvm::Value *V = LocalDeclMap[VD]; 1363 if (!V && VD->isStaticLocal()) 1364 V = CGM.getStaticLocalDeclAddress(VD); 1365 assert(V && "DeclRefExpr not entered in LocalDeclMap?"); 1366 1367 if (VD->hasAttr<BlocksAttr>()) 1368 V = BuildBlockByrefAddress(V, VD); 1369 1370 if (VD->getType()->isReferenceType()) 1371 V = Builder.CreateLoad(V, "tmp"); 1372 1373 V = EmitBitCastOfLValueToProperType(*this, V, 1374 getTypes().ConvertTypeForMem(E->getType())); 1375 1376 LValue LV = MakeAddrLValue(V, E->getType(), Alignment); 1377 if (NonGCable) { 1378 LV.getQuals().removeObjCGCAttr(); 1379 LV.setNonGC(true); 1380 } 1381 setObjCGCLValueClass(getContext(), E, LV); 1382 return LV; 1383 } 1384 1385 if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(ND)) 1386 return EmitFunctionDeclLValue(*this, E, fn); 1387 1388 assert(false && "Unhandled DeclRefExpr"); 1389 1390 // an invalid LValue, but the assert will 1391 // ensure that this point is never reached. 1392 return LValue(); 1393 } 1394 1395 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) { 1396 unsigned Alignment = 1397 getContext().getDeclAlign(E->getDecl()).getQuantity(); 1398 return MakeAddrLValue(GetAddrOfBlockDecl(E), E->getType(), Alignment); 1399 } 1400 1401 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 1402 // __extension__ doesn't affect lvalue-ness. 1403 if (E->getOpcode() == UO_Extension) 1404 return EmitLValue(E->getSubExpr()); 1405 1406 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 1407 switch (E->getOpcode()) { 1408 default: assert(0 && "Unknown unary operator lvalue!"); 1409 case UO_Deref: { 1410 QualType T = E->getSubExpr()->getType()->getPointeeType(); 1411 assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); 1412 1413 LValue LV = MakeAddrLValue(EmitScalarExpr(E->getSubExpr()), T); 1414 LV.getQuals().setAddressSpace(ExprTy.getAddressSpace()); 1415 1416 // We should not generate __weak write barrier on indirect reference 1417 // of a pointer to object; as in void foo (__weak id *param); *param = 0; 1418 // But, we continue to generate __strong write barrier on indirect write 1419 // into a pointer to object. 1420 if (getContext().getLangOptions().ObjC1 && 1421 getContext().getLangOptions().getGCMode() != LangOptions::NonGC && 1422 LV.isObjCWeak()) 1423 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 1424 return LV; 1425 } 1426 case UO_Real: 1427 case UO_Imag: { 1428 LValue LV = EmitLValue(E->getSubExpr()); 1429 assert(LV.isSimple() && "real/imag on non-ordinary l-value"); 1430 llvm::Value *Addr = LV.getAddress(); 1431 1432 // real and imag are valid on scalars. This is a faster way of 1433 // testing that. 1434 if (!cast<llvm::PointerType>(Addr->getType()) 1435 ->getElementType()->isStructTy()) { 1436 assert(E->getSubExpr()->getType()->isArithmeticType()); 1437 return LV; 1438 } 1439 1440 assert(E->getSubExpr()->getType()->isAnyComplexType()); 1441 1442 unsigned Idx = E->getOpcode() == UO_Imag; 1443 return MakeAddrLValue(Builder.CreateStructGEP(LV.getAddress(), 1444 Idx, "idx"), 1445 ExprTy); 1446 } 1447 case UO_PreInc: 1448 case UO_PreDec: { 1449 LValue LV = EmitLValue(E->getSubExpr()); 1450 bool isInc = E->getOpcode() == UO_PreInc; 1451 1452 if (E->getType()->isAnyComplexType()) 1453 EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/); 1454 else 1455 EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/); 1456 return LV; 1457 } 1458 } 1459 } 1460 1461 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 1462 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromLiteral(E), 1463 E->getType()); 1464 } 1465 1466 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) { 1467 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromObjCEncode(E), 1468 E->getType()); 1469 } 1470 1471 1472 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 1473 switch (E->getIdentType()) { 1474 default: 1475 return EmitUnsupportedLValue(E, "predefined expression"); 1476 1477 case PredefinedExpr::Func: 1478 case PredefinedExpr::Function: 1479 case PredefinedExpr::PrettyFunction: { 1480 unsigned Type = E->getIdentType(); 1481 std::string GlobalVarName; 1482 1483 switch (Type) { 1484 default: assert(0 && "Invalid type"); 1485 case PredefinedExpr::Func: 1486 GlobalVarName = "__func__."; 1487 break; 1488 case PredefinedExpr::Function: 1489 GlobalVarName = "__FUNCTION__."; 1490 break; 1491 case PredefinedExpr::PrettyFunction: 1492 GlobalVarName = "__PRETTY_FUNCTION__."; 1493 break; 1494 } 1495 1496 StringRef FnName = CurFn->getName(); 1497 if (FnName.startswith("\01")) 1498 FnName = FnName.substr(1); 1499 GlobalVarName += FnName; 1500 1501 const Decl *CurDecl = CurCodeDecl; 1502 if (CurDecl == 0) 1503 CurDecl = getContext().getTranslationUnitDecl(); 1504 1505 std::string FunctionName = 1506 (isa<BlockDecl>(CurDecl) 1507 ? FnName.str() 1508 : PredefinedExpr::ComputeName((PredefinedExpr::IdentType)Type, CurDecl)); 1509 1510 llvm::Constant *C = 1511 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 1512 return MakeAddrLValue(C, E->getType()); 1513 } 1514 } 1515 } 1516 1517 llvm::BasicBlock *CodeGenFunction::getTrapBB() { 1518 const CodeGenOptions &GCO = CGM.getCodeGenOpts(); 1519 1520 // If we are not optimzing, don't collapse all calls to trap in the function 1521 // to the same call, that way, in the debugger they can see which operation 1522 // did in fact fail. If we are optimizing, we collapse all calls to trap down 1523 // to just one per function to save on codesize. 1524 if (GCO.OptimizationLevel && TrapBB) 1525 return TrapBB; 1526 1527 llvm::BasicBlock *Cont = 0; 1528 if (HaveInsertPoint()) { 1529 Cont = createBasicBlock("cont"); 1530 EmitBranch(Cont); 1531 } 1532 TrapBB = createBasicBlock("trap"); 1533 EmitBlock(TrapBB); 1534 1535 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap); 1536 llvm::CallInst *TrapCall = Builder.CreateCall(F); 1537 TrapCall->setDoesNotReturn(); 1538 TrapCall->setDoesNotThrow(); 1539 Builder.CreateUnreachable(); 1540 1541 if (Cont) 1542 EmitBlock(Cont); 1543 return TrapBB; 1544 } 1545 1546 /// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an 1547 /// array to pointer, return the array subexpression. 1548 static const Expr *isSimpleArrayDecayOperand(const Expr *E) { 1549 // If this isn't just an array->pointer decay, bail out. 1550 const CastExpr *CE = dyn_cast<CastExpr>(E); 1551 if (CE == 0 || CE->getCastKind() != CK_ArrayToPointerDecay) 1552 return 0; 1553 1554 // If this is a decay from variable width array, bail out. 1555 const Expr *SubExpr = CE->getSubExpr(); 1556 if (SubExpr->getType()->isVariableArrayType()) 1557 return 0; 1558 1559 return SubExpr; 1560 } 1561 1562 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 1563 // The index must always be an integer, which is not an aggregate. Emit it. 1564 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 1565 QualType IdxTy = E->getIdx()->getType(); 1566 bool IdxSigned = IdxTy->isSignedIntegerOrEnumerationType(); 1567 1568 // If the base is a vector type, then we are forming a vector element lvalue 1569 // with this subscript. 1570 if (E->getBase()->getType()->isVectorType()) { 1571 // Emit the vector as an lvalue to get its address. 1572 LValue LHS = EmitLValue(E->getBase()); 1573 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 1574 Idx = Builder.CreateIntCast(Idx, Int32Ty, IdxSigned, "vidx"); 1575 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 1576 E->getBase()->getType()); 1577 } 1578 1579 // Extend or truncate the index type to 32 or 64-bits. 1580 if (Idx->getType() != IntPtrTy) 1581 Idx = Builder.CreateIntCast(Idx, IntPtrTy, IdxSigned, "idxprom"); 1582 1583 // FIXME: As llvm implements the object size checking, this can come out. 1584 if (CatchUndefined) { 1585 if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E->getBase())){ 1586 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) { 1587 if (ICE->getCastKind() == CK_ArrayToPointerDecay) { 1588 if (const ConstantArrayType *CAT 1589 = getContext().getAsConstantArrayType(DRE->getType())) { 1590 llvm::APInt Size = CAT->getSize(); 1591 llvm::BasicBlock *Cont = createBasicBlock("cont"); 1592 Builder.CreateCondBr(Builder.CreateICmpULE(Idx, 1593 llvm::ConstantInt::get(Idx->getType(), Size)), 1594 Cont, getTrapBB()); 1595 EmitBlock(Cont); 1596 } 1597 } 1598 } 1599 } 1600 } 1601 1602 // We know that the pointer points to a type of the correct size, unless the 1603 // size is a VLA or Objective-C interface. 1604 llvm::Value *Address = 0; 1605 unsigned ArrayAlignment = 0; 1606 if (const VariableArrayType *vla = 1607 getContext().getAsVariableArrayType(E->getType())) { 1608 // The base must be a pointer, which is not an aggregate. Emit 1609 // it. It needs to be emitted first in case it's what captures 1610 // the VLA bounds. 1611 Address = EmitScalarExpr(E->getBase()); 1612 1613 // The element count here is the total number of non-VLA elements. 1614 llvm::Value *numElements = getVLASize(vla).first; 1615 1616 // Effectively, the multiply by the VLA size is part of the GEP. 1617 // GEP indexes are signed, and scaling an index isn't permitted to 1618 // signed-overflow, so we use the same semantics for our explicit 1619 // multiply. We suppress this if overflow is not undefined behavior. 1620 if (getLangOptions().isSignedOverflowDefined()) { 1621 Idx = Builder.CreateMul(Idx, numElements); 1622 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 1623 } else { 1624 Idx = Builder.CreateNSWMul(Idx, numElements); 1625 Address = Builder.CreateInBoundsGEP(Address, Idx, "arrayidx"); 1626 } 1627 } else if (const ObjCObjectType *OIT = E->getType()->getAs<ObjCObjectType>()){ 1628 // Indexing over an interface, as in "NSString *P; P[4];" 1629 llvm::Value *InterfaceSize = 1630 llvm::ConstantInt::get(Idx->getType(), 1631 getContext().getTypeSizeInChars(OIT).getQuantity()); 1632 1633 Idx = Builder.CreateMul(Idx, InterfaceSize); 1634 1635 // The base must be a pointer, which is not an aggregate. Emit it. 1636 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1637 Address = EmitCastToVoidPtr(Base); 1638 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 1639 Address = Builder.CreateBitCast(Address, Base->getType()); 1640 } else if (const Expr *Array = isSimpleArrayDecayOperand(E->getBase())) { 1641 // If this is A[i] where A is an array, the frontend will have decayed the 1642 // base to be a ArrayToPointerDecay implicit cast. While correct, it is 1643 // inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a 1644 // "gep x, i" here. Emit one "gep A, 0, i". 1645 assert(Array->getType()->isArrayType() && 1646 "Array to pointer decay must have array source type!"); 1647 LValue ArrayLV = EmitLValue(Array); 1648 llvm::Value *ArrayPtr = ArrayLV.getAddress(); 1649 llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0); 1650 llvm::Value *Args[] = { Zero, Idx }; 1651 1652 // Propagate the alignment from the array itself to the result. 1653 ArrayAlignment = ArrayLV.getAlignment(); 1654 1655 if (getContext().getLangOptions().isSignedOverflowDefined()) 1656 Address = Builder.CreateGEP(ArrayPtr, Args, "arrayidx"); 1657 else 1658 Address = Builder.CreateInBoundsGEP(ArrayPtr, Args, "arrayidx"); 1659 } else { 1660 // The base must be a pointer, which is not an aggregate. Emit it. 1661 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1662 if (getContext().getLangOptions().isSignedOverflowDefined()) 1663 Address = Builder.CreateGEP(Base, Idx, "arrayidx"); 1664 else 1665 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1666 } 1667 1668 QualType T = E->getBase()->getType()->getPointeeType(); 1669 assert(!T.isNull() && 1670 "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); 1671 1672 // Limit the alignment to that of the result type. 1673 if (ArrayAlignment) { 1674 unsigned Align = getContext().getTypeAlignInChars(T).getQuantity(); 1675 ArrayAlignment = std::min(Align, ArrayAlignment); 1676 } 1677 1678 LValue LV = MakeAddrLValue(Address, T, ArrayAlignment); 1679 LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace()); 1680 1681 if (getContext().getLangOptions().ObjC1 && 1682 getContext().getLangOptions().getGCMode() != LangOptions::NonGC) { 1683 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 1684 setObjCGCLValueClass(getContext(), E, LV); 1685 } 1686 return LV; 1687 } 1688 1689 static 1690 llvm::Constant *GenerateConstantVector(llvm::LLVMContext &VMContext, 1691 SmallVector<unsigned, 4> &Elts) { 1692 SmallVector<llvm::Constant*, 4> CElts; 1693 1694 llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 1695 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 1696 CElts.push_back(llvm::ConstantInt::get(Int32Ty, Elts[i])); 1697 1698 return llvm::ConstantVector::get(CElts); 1699 } 1700 1701 LValue CodeGenFunction:: 1702 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 1703 // Emit the base vector as an l-value. 1704 LValue Base; 1705 1706 // ExtVectorElementExpr's base can either be a vector or pointer to vector. 1707 if (E->isArrow()) { 1708 // If it is a pointer to a vector, emit the address and form an lvalue with 1709 // it. 1710 llvm::Value *Ptr = EmitScalarExpr(E->getBase()); 1711 const PointerType *PT = E->getBase()->getType()->getAs<PointerType>(); 1712 Base = MakeAddrLValue(Ptr, PT->getPointeeType()); 1713 Base.getQuals().removeObjCGCAttr(); 1714 } else if (E->getBase()->isGLValue()) { 1715 // Otherwise, if the base is an lvalue ( as in the case of foo.x.x), 1716 // emit the base as an lvalue. 1717 assert(E->getBase()->getType()->isVectorType()); 1718 Base = EmitLValue(E->getBase()); 1719 } else { 1720 // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such. 1721 assert(E->getBase()->getType()->isVectorType() && 1722 "Result must be a vector"); 1723 llvm::Value *Vec = EmitScalarExpr(E->getBase()); 1724 1725 // Store the vector to memory (because LValue wants an address). 1726 llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType()); 1727 Builder.CreateStore(Vec, VecMem); 1728 Base = MakeAddrLValue(VecMem, E->getBase()->getType()); 1729 } 1730 1731 QualType type = 1732 E->getType().withCVRQualifiers(Base.getQuals().getCVRQualifiers()); 1733 1734 // Encode the element access list into a vector of unsigned indices. 1735 SmallVector<unsigned, 4> Indices; 1736 E->getEncodedElementAccess(Indices); 1737 1738 if (Base.isSimple()) { 1739 llvm::Constant *CV = GenerateConstantVector(getLLVMContext(), Indices); 1740 return LValue::MakeExtVectorElt(Base.getAddress(), CV, type); 1741 } 1742 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 1743 1744 llvm::Constant *BaseElts = Base.getExtVectorElts(); 1745 SmallVector<llvm::Constant *, 4> CElts; 1746 1747 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 1748 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 1749 CElts.push_back(llvm::ConstantInt::get(Int32Ty, 0)); 1750 else 1751 CElts.push_back(cast<llvm::Constant>(BaseElts->getOperand(Indices[i]))); 1752 } 1753 llvm::Constant *CV = llvm::ConstantVector::get(CElts); 1754 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, type); 1755 } 1756 1757 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 1758 bool isNonGC = false; 1759 Expr *BaseExpr = E->getBase(); 1760 llvm::Value *BaseValue = NULL; 1761 Qualifiers BaseQuals; 1762 1763 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 1764 if (E->isArrow()) { 1765 BaseValue = EmitScalarExpr(BaseExpr); 1766 const PointerType *PTy = 1767 BaseExpr->getType()->getAs<PointerType>(); 1768 BaseQuals = PTy->getPointeeType().getQualifiers(); 1769 } else { 1770 LValue BaseLV = EmitLValue(BaseExpr); 1771 if (BaseLV.isNonGC()) 1772 isNonGC = true; 1773 // FIXME: this isn't right for bitfields. 1774 BaseValue = BaseLV.getAddress(); 1775 QualType BaseTy = BaseExpr->getType(); 1776 BaseQuals = BaseTy.getQualifiers(); 1777 } 1778 1779 NamedDecl *ND = E->getMemberDecl(); 1780 if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) { 1781 LValue LV = EmitLValueForField(BaseValue, Field, 1782 BaseQuals.getCVRQualifiers()); 1783 LV.setNonGC(isNonGC); 1784 setObjCGCLValueClass(getContext(), E, LV); 1785 return LV; 1786 } 1787 1788 if (VarDecl *VD = dyn_cast<VarDecl>(ND)) 1789 return EmitGlobalVarDeclLValue(*this, E, VD); 1790 1791 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 1792 return EmitFunctionDeclLValue(*this, E, FD); 1793 1794 assert(false && "Unhandled member declaration!"); 1795 return LValue(); 1796 } 1797 1798 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value *BaseValue, 1799 const FieldDecl *Field, 1800 unsigned CVRQualifiers) { 1801 const CGRecordLayout &RL = 1802 CGM.getTypes().getCGRecordLayout(Field->getParent()); 1803 const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field); 1804 return LValue::MakeBitfield(BaseValue, Info, 1805 Field->getType().withCVRQualifiers(CVRQualifiers)); 1806 } 1807 1808 /// EmitLValueForAnonRecordField - Given that the field is a member of 1809 /// an anonymous struct or union buried inside a record, and given 1810 /// that the base value is a pointer to the enclosing record, derive 1811 /// an lvalue for the ultimate field. 1812 LValue CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value *BaseValue, 1813 const IndirectFieldDecl *Field, 1814 unsigned CVRQualifiers) { 1815 IndirectFieldDecl::chain_iterator I = Field->chain_begin(), 1816 IEnd = Field->chain_end(); 1817 while (true) { 1818 LValue LV = EmitLValueForField(BaseValue, cast<FieldDecl>(*I), 1819 CVRQualifiers); 1820 if (++I == IEnd) return LV; 1821 1822 assert(LV.isSimple()); 1823 BaseValue = LV.getAddress(); 1824 CVRQualifiers |= LV.getVRQualifiers(); 1825 } 1826 } 1827 1828 LValue CodeGenFunction::EmitLValueForField(llvm::Value *baseAddr, 1829 const FieldDecl *field, 1830 unsigned cvr) { 1831 if (field->isBitField()) 1832 return EmitLValueForBitfield(baseAddr, field, cvr); 1833 1834 const RecordDecl *rec = field->getParent(); 1835 QualType type = field->getType(); 1836 1837 bool mayAlias = rec->hasAttr<MayAliasAttr>(); 1838 1839 llvm::Value *addr = baseAddr; 1840 if (rec->isUnion()) { 1841 // For unions, there is no pointer adjustment. 1842 assert(!type->isReferenceType() && "union has reference member"); 1843 } else { 1844 // For structs, we GEP to the field that the record layout suggests. 1845 unsigned idx = CGM.getTypes().getCGRecordLayout(rec).getLLVMFieldNo(field); 1846 addr = Builder.CreateStructGEP(addr, idx, field->getName()); 1847 1848 // If this is a reference field, load the reference right now. 1849 if (const ReferenceType *refType = type->getAs<ReferenceType>()) { 1850 llvm::LoadInst *load = Builder.CreateLoad(addr, "ref"); 1851 if (cvr & Qualifiers::Volatile) load->setVolatile(true); 1852 1853 if (CGM.shouldUseTBAA()) { 1854 llvm::MDNode *tbaa; 1855 if (mayAlias) 1856 tbaa = CGM.getTBAAInfo(getContext().CharTy); 1857 else 1858 tbaa = CGM.getTBAAInfo(type); 1859 CGM.DecorateInstruction(load, tbaa); 1860 } 1861 1862 addr = load; 1863 mayAlias = false; 1864 type = refType->getPointeeType(); 1865 cvr = 0; // qualifiers don't recursively apply to referencee 1866 } 1867 } 1868 1869 // Make sure that the address is pointing to the right type. This is critical 1870 // for both unions and structs. A union needs a bitcast, a struct element 1871 // will need a bitcast if the LLVM type laid out doesn't match the desired 1872 // type. 1873 addr = EmitBitCastOfLValueToProperType(*this, addr, 1874 CGM.getTypes().ConvertTypeForMem(type), 1875 field->getName()); 1876 1877 unsigned alignment = getContext().getDeclAlign(field).getQuantity(); 1878 LValue LV = MakeAddrLValue(addr, type, alignment); 1879 LV.getQuals().addCVRQualifiers(cvr); 1880 1881 // __weak attribute on a field is ignored. 1882 if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak) 1883 LV.getQuals().removeObjCGCAttr(); 1884 1885 // Fields of may_alias structs act like 'char' for TBAA purposes. 1886 // FIXME: this should get propagated down through anonymous structs 1887 // and unions. 1888 if (mayAlias && LV.getTBAAInfo()) 1889 LV.setTBAAInfo(CGM.getTBAAInfo(getContext().CharTy)); 1890 1891 return LV; 1892 } 1893 1894 LValue 1895 CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value *BaseValue, 1896 const FieldDecl *Field, 1897 unsigned CVRQualifiers) { 1898 QualType FieldType = Field->getType(); 1899 1900 if (!FieldType->isReferenceType()) 1901 return EmitLValueForField(BaseValue, Field, CVRQualifiers); 1902 1903 const CGRecordLayout &RL = 1904 CGM.getTypes().getCGRecordLayout(Field->getParent()); 1905 unsigned idx = RL.getLLVMFieldNo(Field); 1906 llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 1907 assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs"); 1908 1909 1910 // Make sure that the address is pointing to the right type. This is critical 1911 // for both unions and structs. A union needs a bitcast, a struct element 1912 // will need a bitcast if the LLVM type laid out doesn't match the desired 1913 // type. 1914 llvm::Type *llvmType = ConvertTypeForMem(FieldType); 1915 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace(); 1916 V = Builder.CreateBitCast(V, llvmType->getPointerTo(AS)); 1917 1918 unsigned Alignment = getContext().getDeclAlign(Field).getQuantity(); 1919 return MakeAddrLValue(V, FieldType, Alignment); 1920 } 1921 1922 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){ 1923 llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral"); 1924 const Expr *InitExpr = E->getInitializer(); 1925 LValue Result = MakeAddrLValue(DeclPtr, E->getType()); 1926 1927 EmitAnyExprToMem(InitExpr, DeclPtr, E->getType().getQualifiers(), 1928 /*Init*/ true); 1929 1930 return Result; 1931 } 1932 1933 LValue CodeGenFunction:: 1934 EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) { 1935 if (!expr->isGLValue()) { 1936 // ?: here should be an aggregate. 1937 assert((hasAggregateLLVMType(expr->getType()) && 1938 !expr->getType()->isAnyComplexType()) && 1939 "Unexpected conditional operator!"); 1940 return EmitAggExprToLValue(expr); 1941 } 1942 1943 const Expr *condExpr = expr->getCond(); 1944 bool CondExprBool; 1945 if (ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) { 1946 const Expr *live = expr->getTrueExpr(), *dead = expr->getFalseExpr(); 1947 if (!CondExprBool) std::swap(live, dead); 1948 1949 if (!ContainsLabel(dead)) 1950 return EmitLValue(live); 1951 } 1952 1953 OpaqueValueMapping binding(*this, expr); 1954 1955 llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true"); 1956 llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false"); 1957 llvm::BasicBlock *contBlock = createBasicBlock("cond.end"); 1958 1959 ConditionalEvaluation eval(*this); 1960 EmitBranchOnBoolExpr(condExpr, lhsBlock, rhsBlock); 1961 1962 // Any temporaries created here are conditional. 1963 EmitBlock(lhsBlock); 1964 eval.begin(*this); 1965 LValue lhs = EmitLValue(expr->getTrueExpr()); 1966 eval.end(*this); 1967 1968 if (!lhs.isSimple()) 1969 return EmitUnsupportedLValue(expr, "conditional operator"); 1970 1971 lhsBlock = Builder.GetInsertBlock(); 1972 Builder.CreateBr(contBlock); 1973 1974 // Any temporaries created here are conditional. 1975 EmitBlock(rhsBlock); 1976 eval.begin(*this); 1977 LValue rhs = EmitLValue(expr->getFalseExpr()); 1978 eval.end(*this); 1979 if (!rhs.isSimple()) 1980 return EmitUnsupportedLValue(expr, "conditional operator"); 1981 rhsBlock = Builder.GetInsertBlock(); 1982 1983 EmitBlock(contBlock); 1984 1985 llvm::PHINode *phi = Builder.CreatePHI(lhs.getAddress()->getType(), 2, 1986 "cond-lvalue"); 1987 phi->addIncoming(lhs.getAddress(), lhsBlock); 1988 phi->addIncoming(rhs.getAddress(), rhsBlock); 1989 return MakeAddrLValue(phi, expr->getType()); 1990 } 1991 1992 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast. 1993 /// If the cast is a dynamic_cast, we can have the usual lvalue result, 1994 /// otherwise if a cast is needed by the code generator in an lvalue context, 1995 /// then it must mean that we need the address of an aggregate in order to 1996 /// access one of its fields. This can happen for all the reasons that casts 1997 /// are permitted with aggregate result, including noop aggregate casts, and 1998 /// cast from scalar to union. 1999 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { 2000 switch (E->getCastKind()) { 2001 case CK_ToVoid: 2002 return EmitUnsupportedLValue(E, "unexpected cast lvalue"); 2003 2004 case CK_Dependent: 2005 llvm_unreachable("dependent cast kind in IR gen!"); 2006 2007 case CK_GetObjCProperty: { 2008 LValue LV = EmitLValue(E->getSubExpr()); 2009 assert(LV.isPropertyRef()); 2010 RValue RV = EmitLoadOfPropertyRefLValue(LV); 2011 2012 // Property is an aggregate r-value. 2013 if (RV.isAggregate()) { 2014 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2015 } 2016 2017 // Implicit property returns an l-value. 2018 assert(RV.isScalar()); 2019 return MakeAddrLValue(RV.getScalarVal(), E->getSubExpr()->getType()); 2020 } 2021 2022 case CK_NoOp: 2023 case CK_LValueToRValue: 2024 if (!E->getSubExpr()->Classify(getContext()).isPRValue() 2025 || E->getType()->isRecordType()) 2026 return EmitLValue(E->getSubExpr()); 2027 // Fall through to synthesize a temporary. 2028 2029 case CK_BitCast: 2030 case CK_ArrayToPointerDecay: 2031 case CK_FunctionToPointerDecay: 2032 case CK_NullToMemberPointer: 2033 case CK_NullToPointer: 2034 case CK_IntegralToPointer: 2035 case CK_PointerToIntegral: 2036 case CK_PointerToBoolean: 2037 case CK_VectorSplat: 2038 case CK_IntegralCast: 2039 case CK_IntegralToBoolean: 2040 case CK_IntegralToFloating: 2041 case CK_FloatingToIntegral: 2042 case CK_FloatingToBoolean: 2043 case CK_FloatingCast: 2044 case CK_FloatingRealToComplex: 2045 case CK_FloatingComplexToReal: 2046 case CK_FloatingComplexToBoolean: 2047 case CK_FloatingComplexCast: 2048 case CK_FloatingComplexToIntegralComplex: 2049 case CK_IntegralRealToComplex: 2050 case CK_IntegralComplexToReal: 2051 case CK_IntegralComplexToBoolean: 2052 case CK_IntegralComplexCast: 2053 case CK_IntegralComplexToFloatingComplex: 2054 case CK_DerivedToBaseMemberPointer: 2055 case CK_BaseToDerivedMemberPointer: 2056 case CK_MemberPointerToBoolean: 2057 case CK_AnyPointerToBlockPointerCast: 2058 case CK_ObjCProduceObject: 2059 case CK_ObjCConsumeObject: 2060 case CK_ObjCReclaimReturnedObject: { 2061 // These casts only produce lvalues when we're binding a reference to a 2062 // temporary realized from a (converted) pure rvalue. Emit the expression 2063 // as a value, copy it into a temporary, and return an lvalue referring to 2064 // that temporary. 2065 llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp"); 2066 EmitAnyExprToMem(E, V, E->getType().getQualifiers(), false); 2067 return MakeAddrLValue(V, E->getType()); 2068 } 2069 2070 case CK_Dynamic: { 2071 LValue LV = EmitLValue(E->getSubExpr()); 2072 llvm::Value *V = LV.getAddress(); 2073 const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E); 2074 return MakeAddrLValue(EmitDynamicCast(V, DCE), E->getType()); 2075 } 2076 2077 case CK_ConstructorConversion: 2078 case CK_UserDefinedConversion: 2079 case CK_AnyPointerToObjCPointerCast: 2080 return EmitLValue(E->getSubExpr()); 2081 2082 case CK_UncheckedDerivedToBase: 2083 case CK_DerivedToBase: { 2084 const RecordType *DerivedClassTy = 2085 E->getSubExpr()->getType()->getAs<RecordType>(); 2086 CXXRecordDecl *DerivedClassDecl = 2087 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 2088 2089 LValue LV = EmitLValue(E->getSubExpr()); 2090 llvm::Value *This = LV.getAddress(); 2091 2092 // Perform the derived-to-base conversion 2093 llvm::Value *Base = 2094 GetAddressOfBaseClass(This, DerivedClassDecl, 2095 E->path_begin(), E->path_end(), 2096 /*NullCheckValue=*/false); 2097 2098 return MakeAddrLValue(Base, E->getType()); 2099 } 2100 case CK_ToUnion: 2101 return EmitAggExprToLValue(E); 2102 case CK_BaseToDerived: { 2103 const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>(); 2104 CXXRecordDecl *DerivedClassDecl = 2105 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 2106 2107 LValue LV = EmitLValue(E->getSubExpr()); 2108 2109 // Perform the base-to-derived conversion 2110 llvm::Value *Derived = 2111 GetAddressOfDerivedClass(LV.getAddress(), DerivedClassDecl, 2112 E->path_begin(), E->path_end(), 2113 /*NullCheckValue=*/false); 2114 2115 return MakeAddrLValue(Derived, E->getType()); 2116 } 2117 case CK_LValueBitCast: { 2118 // This must be a reinterpret_cast (or c-style equivalent). 2119 const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); 2120 2121 LValue LV = EmitLValue(E->getSubExpr()); 2122 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 2123 ConvertType(CE->getTypeAsWritten())); 2124 return MakeAddrLValue(V, E->getType()); 2125 } 2126 case CK_ObjCObjectLValueCast: { 2127 LValue LV = EmitLValue(E->getSubExpr()); 2128 QualType ToType = getContext().getLValueReferenceType(E->getType()); 2129 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 2130 ConvertType(ToType)); 2131 return MakeAddrLValue(V, E->getType()); 2132 } 2133 } 2134 2135 llvm_unreachable("Unhandled lvalue cast kind?"); 2136 } 2137 2138 LValue CodeGenFunction::EmitNullInitializationLValue( 2139 const CXXScalarValueInitExpr *E) { 2140 QualType Ty = E->getType(); 2141 LValue LV = MakeAddrLValue(CreateMemTemp(Ty), Ty); 2142 EmitNullInitialization(LV.getAddress(), Ty); 2143 return LV; 2144 } 2145 2146 LValue CodeGenFunction::EmitOpaqueValueLValue(const OpaqueValueExpr *e) { 2147 assert(e->isGLValue() || e->getType()->isRecordType()); 2148 return getOpaqueLValueMapping(e); 2149 } 2150 2151 LValue CodeGenFunction::EmitMaterializeTemporaryExpr( 2152 const MaterializeTemporaryExpr *E) { 2153 RValue RV = EmitReferenceBindingToExpr(E->GetTemporaryExpr(), 2154 /*InitializedDecl=*/0); 2155 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2156 } 2157 2158 2159 //===--------------------------------------------------------------------===// 2160 // Expression Emission 2161 //===--------------------------------------------------------------------===// 2162 2163 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, 2164 ReturnValueSlot ReturnValue) { 2165 if (CGDebugInfo *DI = getDebugInfo()) { 2166 DI->setLocation(E->getLocStart()); 2167 DI->UpdateLineDirectiveRegion(Builder); 2168 DI->EmitStopPoint(Builder); 2169 } 2170 2171 // Builtins never have block type. 2172 if (E->getCallee()->getType()->isBlockPointerType()) 2173 return EmitBlockCallExpr(E, ReturnValue); 2174 2175 if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E)) 2176 return EmitCXXMemberCallExpr(CE, ReturnValue); 2177 2178 const Decl *TargetDecl = 0; 2179 if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E->getCallee())) { 2180 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CE->getSubExpr())) { 2181 TargetDecl = DRE->getDecl(); 2182 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(TargetDecl)) 2183 if (unsigned builtinID = FD->getBuiltinID()) 2184 return EmitBuiltinExpr(FD, builtinID, E); 2185 } 2186 } 2187 2188 if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E)) 2189 if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl)) 2190 return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue); 2191 2192 if (const CXXPseudoDestructorExpr *PseudoDtor 2193 = dyn_cast<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) { 2194 QualType DestroyedType = PseudoDtor->getDestroyedType(); 2195 if (getContext().getLangOptions().ObjCAutoRefCount && 2196 DestroyedType->isObjCLifetimeType() && 2197 (DestroyedType.getObjCLifetime() == Qualifiers::OCL_Strong || 2198 DestroyedType.getObjCLifetime() == Qualifiers::OCL_Weak)) { 2199 // Automatic Reference Counting: 2200 // If the pseudo-expression names a retainable object with weak or 2201 // strong lifetime, the object shall be released. 2202 Expr *BaseExpr = PseudoDtor->getBase(); 2203 llvm::Value *BaseValue = NULL; 2204 Qualifiers BaseQuals; 2205 2206 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 2207 if (PseudoDtor->isArrow()) { 2208 BaseValue = EmitScalarExpr(BaseExpr); 2209 const PointerType *PTy = BaseExpr->getType()->getAs<PointerType>(); 2210 BaseQuals = PTy->getPointeeType().getQualifiers(); 2211 } else { 2212 LValue BaseLV = EmitLValue(BaseExpr); 2213 BaseValue = BaseLV.getAddress(); 2214 QualType BaseTy = BaseExpr->getType(); 2215 BaseQuals = BaseTy.getQualifiers(); 2216 } 2217 2218 switch (PseudoDtor->getDestroyedType().getObjCLifetime()) { 2219 case Qualifiers::OCL_None: 2220 case Qualifiers::OCL_ExplicitNone: 2221 case Qualifiers::OCL_Autoreleasing: 2222 break; 2223 2224 case Qualifiers::OCL_Strong: 2225 EmitARCRelease(Builder.CreateLoad(BaseValue, 2226 PseudoDtor->getDestroyedType().isVolatileQualified()), 2227 /*precise*/ true); 2228 break; 2229 2230 case Qualifiers::OCL_Weak: 2231 EmitARCDestroyWeak(BaseValue); 2232 break; 2233 } 2234 } else { 2235 // C++ [expr.pseudo]p1: 2236 // The result shall only be used as the operand for the function call 2237 // operator (), and the result of such a call has type void. The only 2238 // effect is the evaluation of the postfix-expression before the dot or 2239 // arrow. 2240 EmitScalarExpr(E->getCallee()); 2241 } 2242 2243 return RValue::get(0); 2244 } 2245 2246 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 2247 return EmitCall(E->getCallee()->getType(), Callee, ReturnValue, 2248 E->arg_begin(), E->arg_end(), TargetDecl); 2249 } 2250 2251 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 2252 // Comma expressions just emit their LHS then their RHS as an l-value. 2253 if (E->getOpcode() == BO_Comma) { 2254 EmitIgnoredExpr(E->getLHS()); 2255 EnsureInsertPoint(); 2256 return EmitLValue(E->getRHS()); 2257 } 2258 2259 if (E->getOpcode() == BO_PtrMemD || 2260 E->getOpcode() == BO_PtrMemI) 2261 return EmitPointerToDataMemberBinaryExpr(E); 2262 2263 assert(E->getOpcode() == BO_Assign && "unexpected binary l-value"); 2264 2265 // Note that in all of these cases, __block variables need the RHS 2266 // evaluated first just in case the variable gets moved by the RHS. 2267 2268 if (!hasAggregateLLVMType(E->getType())) { 2269 switch (E->getLHS()->getType().getObjCLifetime()) { 2270 case Qualifiers::OCL_Strong: 2271 return EmitARCStoreStrong(E, /*ignored*/ false).first; 2272 2273 case Qualifiers::OCL_Autoreleasing: 2274 return EmitARCStoreAutoreleasing(E).first; 2275 2276 // No reason to do any of these differently. 2277 case Qualifiers::OCL_None: 2278 case Qualifiers::OCL_ExplicitNone: 2279 case Qualifiers::OCL_Weak: 2280 break; 2281 } 2282 2283 RValue RV = EmitAnyExpr(E->getRHS()); 2284 LValue LV = EmitLValue(E->getLHS()); 2285 EmitStoreThroughLValue(RV, LV); 2286 return LV; 2287 } 2288 2289 if (E->getType()->isAnyComplexType()) 2290 return EmitComplexAssignmentLValue(E); 2291 2292 return EmitAggExprToLValue(E); 2293 } 2294 2295 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 2296 RValue RV = EmitCallExpr(E); 2297 2298 if (!RV.isScalar()) 2299 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2300 2301 assert(E->getCallReturnType()->isReferenceType() && 2302 "Can't have a scalar return unless the return type is a " 2303 "reference type!"); 2304 2305 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2306 } 2307 2308 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) { 2309 // FIXME: This shouldn't require another copy. 2310 return EmitAggExprToLValue(E); 2311 } 2312 2313 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) { 2314 assert(E->getType()->getAsCXXRecordDecl()->hasTrivialDestructor() 2315 && "binding l-value to type which needs a temporary"); 2316 AggValueSlot Slot = CreateAggTemp(E->getType(), "tmp"); 2317 EmitCXXConstructExpr(E, Slot); 2318 return MakeAddrLValue(Slot.getAddr(), E->getType()); 2319 } 2320 2321 LValue 2322 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) { 2323 return MakeAddrLValue(EmitCXXTypeidExpr(E), E->getType()); 2324 } 2325 2326 LValue 2327 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) { 2328 AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue"); 2329 Slot.setExternallyDestructed(); 2330 EmitAggExpr(E->getSubExpr(), Slot); 2331 EmitCXXTemporary(E->getTemporary(), Slot.getAddr()); 2332 return MakeAddrLValue(Slot.getAddr(), E->getType()); 2333 } 2334 2335 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 2336 RValue RV = EmitObjCMessageExpr(E); 2337 2338 if (!RV.isScalar()) 2339 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2340 2341 assert(E->getMethodDecl()->getResultType()->isReferenceType() && 2342 "Can't have a scalar return unless the return type is a " 2343 "reference type!"); 2344 2345 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2346 } 2347 2348 LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) { 2349 llvm::Value *V = 2350 CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true); 2351 return MakeAddrLValue(V, E->getType()); 2352 } 2353 2354 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, 2355 const ObjCIvarDecl *Ivar) { 2356 return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); 2357 } 2358 2359 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy, 2360 llvm::Value *BaseValue, 2361 const ObjCIvarDecl *Ivar, 2362 unsigned CVRQualifiers) { 2363 return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue, 2364 Ivar, CVRQualifiers); 2365 } 2366 2367 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 2368 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 2369 llvm::Value *BaseValue = 0; 2370 const Expr *BaseExpr = E->getBase(); 2371 Qualifiers BaseQuals; 2372 QualType ObjectTy; 2373 if (E->isArrow()) { 2374 BaseValue = EmitScalarExpr(BaseExpr); 2375 ObjectTy = BaseExpr->getType()->getPointeeType(); 2376 BaseQuals = ObjectTy.getQualifiers(); 2377 } else { 2378 LValue BaseLV = EmitLValue(BaseExpr); 2379 // FIXME: this isn't right for bitfields. 2380 BaseValue = BaseLV.getAddress(); 2381 ObjectTy = BaseExpr->getType(); 2382 BaseQuals = ObjectTy.getQualifiers(); 2383 } 2384 2385 LValue LV = 2386 EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 2387 BaseQuals.getCVRQualifiers()); 2388 setObjCGCLValueClass(getContext(), E, LV); 2389 return LV; 2390 } 2391 2392 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) { 2393 // Can only get l-value for message expression returning aggregate type 2394 RValue RV = EmitAnyExprToTemp(E); 2395 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2396 } 2397 2398 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee, 2399 ReturnValueSlot ReturnValue, 2400 CallExpr::const_arg_iterator ArgBeg, 2401 CallExpr::const_arg_iterator ArgEnd, 2402 const Decl *TargetDecl) { 2403 // Get the actual function type. The callee type will always be a pointer to 2404 // function type or a block pointer type. 2405 assert(CalleeType->isFunctionPointerType() && 2406 "Call must have function pointer type!"); 2407 2408 CalleeType = getContext().getCanonicalType(CalleeType); 2409 2410 const FunctionType *FnType 2411 = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType()); 2412 2413 CallArgList Args; 2414 EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); 2415 2416 return EmitCall(CGM.getTypes().getFunctionInfo(Args, FnType), 2417 Callee, ReturnValue, Args, TargetDecl); 2418 } 2419 2420 LValue CodeGenFunction:: 2421 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) { 2422 llvm::Value *BaseV; 2423 if (E->getOpcode() == BO_PtrMemI) 2424 BaseV = EmitScalarExpr(E->getLHS()); 2425 else 2426 BaseV = EmitLValue(E->getLHS()).getAddress(); 2427 2428 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS()); 2429 2430 const MemberPointerType *MPT 2431 = E->getRHS()->getType()->getAs<MemberPointerType>(); 2432 2433 llvm::Value *AddV = 2434 CGM.getCXXABI().EmitMemberDataPointerAddress(*this, BaseV, OffsetV, MPT); 2435 2436 return MakeAddrLValue(AddV, MPT->getPointeeType()); 2437 } 2438