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 "TargetInfo.h" 22 #include "clang/AST/ASTContext.h" 23 #include "clang/AST/DeclObjC.h" 24 #include "clang/Frontend/CodeGenOptions.h" 25 #include "llvm/Intrinsics.h" 26 #include "llvm/LLVMContext.h" 27 #include "llvm/Target/TargetData.h" 28 using namespace clang; 29 using namespace CodeGen; 30 31 //===--------------------------------------------------------------------===// 32 // Miscellaneous Helper Methods 33 //===--------------------------------------------------------------------===// 34 35 llvm::Value *CodeGenFunction::EmitCastToVoidPtr(llvm::Value *value) { 36 unsigned addressSpace = 37 cast<llvm::PointerType>(value->getType())->getAddressSpace(); 38 39 llvm::PointerType *destType = Int8PtrTy; 40 if (addressSpace) 41 destType = llvm::Type::getInt8PtrTy(getLLVMContext(), addressSpace); 42 43 if (value->getType() == destType) return value; 44 return Builder.CreateBitCast(value, destType); 45 } 46 47 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 48 /// block. 49 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(llvm::Type *Ty, 50 const Twine &Name) { 51 if (!Builder.isNamePreserving()) 52 return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt); 53 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 54 } 55 56 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var, 57 llvm::Value *Init) { 58 llvm::StoreInst *Store = new llvm::StoreInst(Init, Var); 59 llvm::BasicBlock *Block = AllocaInsertPt->getParent(); 60 Block->getInstList().insertAfter(&*AllocaInsertPt, Store); 61 } 62 63 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty, 64 const Twine &Name) { 65 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name); 66 // FIXME: Should we prefer the preferred type alignment here? 67 CharUnits Align = getContext().getTypeAlignInChars(Ty); 68 Alloc->setAlignment(Align.getQuantity()); 69 return Alloc; 70 } 71 72 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty, 73 const Twine &Name) { 74 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name); 75 // FIXME: Should we prefer the preferred type alignment here? 76 CharUnits Align = getContext().getTypeAlignInChars(Ty); 77 Alloc->setAlignment(Align.getQuantity()); 78 return Alloc; 79 } 80 81 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 82 /// expression and compare the result against zero, returning an Int1Ty value. 83 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 84 if (const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>()) { 85 llvm::Value *MemPtr = EmitScalarExpr(E); 86 return CGM.getCXXABI().EmitMemberPointerIsNotNull(*this, MemPtr, MPT); 87 } 88 89 QualType BoolTy = getContext().BoolTy; 90 if (!E->getType()->isAnyComplexType()) 91 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 92 93 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 94 } 95 96 /// EmitIgnoredExpr - Emit code to compute the specified expression, 97 /// ignoring the result. 98 void CodeGenFunction::EmitIgnoredExpr(const Expr *E) { 99 if (E->isRValue()) 100 return (void) EmitAnyExpr(E, AggValueSlot::ignored(), true); 101 102 // Just emit it as an l-value and drop the result. 103 EmitLValue(E); 104 } 105 106 /// EmitAnyExpr - Emit code to compute the specified expression which 107 /// can have any type. The result is returned as an RValue struct. 108 /// If this is an aggregate expression, AggSlot indicates where the 109 /// result should be returned. 110 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, AggValueSlot AggSlot, 111 bool IgnoreResult) { 112 if (!hasAggregateLLVMType(E->getType())) 113 return RValue::get(EmitScalarExpr(E, IgnoreResult)); 114 else if (E->getType()->isAnyComplexType()) 115 return RValue::getComplex(EmitComplexExpr(E, IgnoreResult, IgnoreResult)); 116 117 EmitAggExpr(E, AggSlot, IgnoreResult); 118 return AggSlot.asRValue(); 119 } 120 121 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 122 /// always be accessible even if no aggregate location is provided. 123 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E) { 124 AggValueSlot AggSlot = AggValueSlot::ignored(); 125 126 if (hasAggregateLLVMType(E->getType()) && 127 !E->getType()->isAnyComplexType()) 128 AggSlot = CreateAggTemp(E->getType(), "agg.tmp"); 129 return EmitAnyExpr(E, AggSlot); 130 } 131 132 /// EmitAnyExprToMem - Evaluate an expression into a given memory 133 /// location. 134 void CodeGenFunction::EmitAnyExprToMem(const Expr *E, 135 llvm::Value *Location, 136 Qualifiers Quals, 137 bool IsInit) { 138 // FIXME: This function should take an LValue as an argument. 139 if (E->getType()->isAnyComplexType()) { 140 EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile()); 141 } else if (hasAggregateLLVMType(E->getType())) { 142 CharUnits Alignment = getContext().getTypeAlignInChars(E->getType()); 143 EmitAggExpr(E, AggValueSlot::forAddr(Location, Alignment, Quals, 144 AggValueSlot::IsDestructed_t(IsInit), 145 AggValueSlot::DoesNotNeedGCBarriers, 146 AggValueSlot::IsAliased_t(!IsInit))); 147 } else { 148 RValue RV = RValue::get(EmitScalarExpr(E, /*Ignore*/ false)); 149 LValue LV = MakeAddrLValue(Location, E->getType()); 150 EmitStoreThroughLValue(RV, LV); 151 } 152 } 153 154 namespace { 155 /// \brief An adjustment to be made to the temporary created when emitting a 156 /// reference binding, which accesses a particular subobject of that temporary. 157 struct SubobjectAdjustment { 158 enum { DerivedToBaseAdjustment, FieldAdjustment } Kind; 159 160 union { 161 struct { 162 const CastExpr *BasePath; 163 const CXXRecordDecl *DerivedClass; 164 } DerivedToBase; 165 166 FieldDecl *Field; 167 }; 168 169 SubobjectAdjustment(const CastExpr *BasePath, 170 const CXXRecordDecl *DerivedClass) 171 : Kind(DerivedToBaseAdjustment) { 172 DerivedToBase.BasePath = BasePath; 173 DerivedToBase.DerivedClass = DerivedClass; 174 } 175 176 SubobjectAdjustment(FieldDecl *Field) 177 : Kind(FieldAdjustment) { 178 this->Field = Field; 179 } 180 }; 181 } 182 183 static llvm::Value * 184 CreateReferenceTemporary(CodeGenFunction &CGF, QualType Type, 185 const NamedDecl *InitializedDecl) { 186 if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 187 if (VD->hasGlobalStorage()) { 188 SmallString<256> Name; 189 llvm::raw_svector_ostream Out(Name); 190 CGF.CGM.getCXXABI().getMangleContext().mangleReferenceTemporary(VD, Out); 191 Out.flush(); 192 193 llvm::Type *RefTempTy = CGF.ConvertTypeForMem(Type); 194 195 // Create the reference temporary. 196 llvm::GlobalValue *RefTemp = 197 new llvm::GlobalVariable(CGF.CGM.getModule(), 198 RefTempTy, /*isConstant=*/false, 199 llvm::GlobalValue::InternalLinkage, 200 llvm::Constant::getNullValue(RefTempTy), 201 Name.str()); 202 return RefTemp; 203 } 204 } 205 206 return CGF.CreateMemTemp(Type, "ref.tmp"); 207 } 208 209 static llvm::Value * 210 EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E, 211 llvm::Value *&ReferenceTemporary, 212 const CXXDestructorDecl *&ReferenceTemporaryDtor, 213 QualType &ObjCARCReferenceLifetimeType, 214 const NamedDecl *InitializedDecl) { 215 // Look through single-element init lists that claim to be lvalues. They're 216 // just syntactic wrappers in this case. 217 if (const InitListExpr *ILE = dyn_cast<InitListExpr>(E)) { 218 if (ILE->getNumInits() == 1 && ILE->isGLValue()) 219 E = ILE->getInit(0); 220 } 221 222 // Look through expressions for materialized temporaries (for now). 223 if (const MaterializeTemporaryExpr *M 224 = dyn_cast<MaterializeTemporaryExpr>(E)) { 225 // Objective-C++ ARC: 226 // If we are binding a reference to a temporary that has ownership, we 227 // need to perform retain/release operations on the temporary. 228 if (CGF.getContext().getLangOptions().ObjCAutoRefCount && 229 E->getType()->isObjCLifetimeType() && 230 (E->getType().getObjCLifetime() == Qualifiers::OCL_Strong || 231 E->getType().getObjCLifetime() == Qualifiers::OCL_Weak || 232 E->getType().getObjCLifetime() == Qualifiers::OCL_Autoreleasing)) 233 ObjCARCReferenceLifetimeType = E->getType(); 234 235 E = M->GetTemporaryExpr(); 236 } 237 238 if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E)) 239 E = DAE->getExpr(); 240 241 if (const ExprWithCleanups *EWC = dyn_cast<ExprWithCleanups>(E)) { 242 CGF.enterFullExpression(EWC); 243 CodeGenFunction::RunCleanupsScope Scope(CGF); 244 245 return EmitExprForReferenceBinding(CGF, EWC->getSubExpr(), 246 ReferenceTemporary, 247 ReferenceTemporaryDtor, 248 ObjCARCReferenceLifetimeType, 249 InitializedDecl); 250 } 251 252 RValue RV; 253 if (E->isGLValue()) { 254 // Emit the expression as an lvalue. 255 LValue LV = CGF.EmitLValue(E); 256 257 if (LV.isSimple()) 258 return LV.getAddress(); 259 260 // We have to load the lvalue. 261 RV = CGF.EmitLoadOfLValue(LV); 262 } else { 263 if (!ObjCARCReferenceLifetimeType.isNull()) { 264 ReferenceTemporary = CreateReferenceTemporary(CGF, 265 ObjCARCReferenceLifetimeType, 266 InitializedDecl); 267 268 269 LValue RefTempDst = CGF.MakeAddrLValue(ReferenceTemporary, 270 ObjCARCReferenceLifetimeType); 271 272 CGF.EmitScalarInit(E, dyn_cast_or_null<ValueDecl>(InitializedDecl), 273 RefTempDst, false); 274 275 bool ExtendsLifeOfTemporary = false; 276 if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 277 if (Var->extendsLifetimeOfTemporary()) 278 ExtendsLifeOfTemporary = true; 279 } else if (InitializedDecl && isa<FieldDecl>(InitializedDecl)) { 280 ExtendsLifeOfTemporary = true; 281 } 282 283 if (!ExtendsLifeOfTemporary) { 284 // Since the lifetime of this temporary isn't going to be extended, 285 // we need to clean it up ourselves at the end of the full expression. 286 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 287 case Qualifiers::OCL_None: 288 case Qualifiers::OCL_ExplicitNone: 289 case Qualifiers::OCL_Autoreleasing: 290 break; 291 292 case Qualifiers::OCL_Strong: { 293 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 294 CleanupKind cleanupKind = CGF.getARCCleanupKind(); 295 CGF.pushDestroy(cleanupKind, 296 ReferenceTemporary, 297 ObjCARCReferenceLifetimeType, 298 CodeGenFunction::destroyARCStrongImprecise, 299 cleanupKind & EHCleanup); 300 break; 301 } 302 303 case Qualifiers::OCL_Weak: 304 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 305 CGF.pushDestroy(NormalAndEHCleanup, 306 ReferenceTemporary, 307 ObjCARCReferenceLifetimeType, 308 CodeGenFunction::destroyARCWeak, 309 /*useEHCleanupForArray*/ true); 310 break; 311 } 312 313 ObjCARCReferenceLifetimeType = QualType(); 314 } 315 316 return ReferenceTemporary; 317 } 318 319 SmallVector<SubobjectAdjustment, 2> Adjustments; 320 while (true) { 321 E = E->IgnoreParens(); 322 323 if (const CastExpr *CE = dyn_cast<CastExpr>(E)) { 324 if ((CE->getCastKind() == CK_DerivedToBase || 325 CE->getCastKind() == CK_UncheckedDerivedToBase) && 326 E->getType()->isRecordType()) { 327 E = CE->getSubExpr(); 328 CXXRecordDecl *Derived 329 = cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl()); 330 Adjustments.push_back(SubobjectAdjustment(CE, Derived)); 331 continue; 332 } 333 334 if (CE->getCastKind() == CK_NoOp) { 335 E = CE->getSubExpr(); 336 continue; 337 } 338 } else if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) { 339 if (!ME->isArrow() && ME->getBase()->isRValue()) { 340 assert(ME->getBase()->getType()->isRecordType()); 341 if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) { 342 E = ME->getBase(); 343 Adjustments.push_back(SubobjectAdjustment(Field)); 344 continue; 345 } 346 } 347 } 348 349 if (const OpaqueValueExpr *opaque = dyn_cast<OpaqueValueExpr>(E)) 350 if (opaque->getType()->isRecordType()) 351 return CGF.EmitOpaqueValueLValue(opaque).getAddress(); 352 353 // Nothing changed. 354 break; 355 } 356 357 // Create a reference temporary if necessary. 358 AggValueSlot AggSlot = AggValueSlot::ignored(); 359 if (CGF.hasAggregateLLVMType(E->getType()) && 360 !E->getType()->isAnyComplexType()) { 361 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 362 InitializedDecl); 363 CharUnits Alignment = CGF.getContext().getTypeAlignInChars(E->getType()); 364 AggValueSlot::IsDestructed_t isDestructed 365 = AggValueSlot::IsDestructed_t(InitializedDecl != 0); 366 AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Alignment, 367 Qualifiers(), isDestructed, 368 AggValueSlot::DoesNotNeedGCBarriers, 369 AggValueSlot::IsNotAliased); 370 } 371 372 if (InitializedDecl) { 373 // Get the destructor for the reference temporary. 374 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { 375 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 376 if (!ClassDecl->hasTrivialDestructor()) 377 ReferenceTemporaryDtor = ClassDecl->getDestructor(); 378 } 379 } 380 381 RV = CGF.EmitAnyExpr(E, AggSlot); 382 383 // Check if need to perform derived-to-base casts and/or field accesses, to 384 // get from the temporary object we created (and, potentially, for which we 385 // extended the lifetime) to the subobject we're binding the reference to. 386 if (!Adjustments.empty()) { 387 llvm::Value *Object = RV.getAggregateAddr(); 388 for (unsigned I = Adjustments.size(); I != 0; --I) { 389 SubobjectAdjustment &Adjustment = Adjustments[I-1]; 390 switch (Adjustment.Kind) { 391 case SubobjectAdjustment::DerivedToBaseAdjustment: 392 Object = 393 CGF.GetAddressOfBaseClass(Object, 394 Adjustment.DerivedToBase.DerivedClass, 395 Adjustment.DerivedToBase.BasePath->path_begin(), 396 Adjustment.DerivedToBase.BasePath->path_end(), 397 /*NullCheckValue=*/false); 398 break; 399 400 case SubobjectAdjustment::FieldAdjustment: { 401 LValue LV = 402 CGF.EmitLValueForField(Object, Adjustment.Field, 0); 403 if (LV.isSimple()) { 404 Object = LV.getAddress(); 405 break; 406 } 407 408 // For non-simple lvalues, we actually have to create a copy of 409 // the object we're binding to. 410 QualType T = Adjustment.Field->getType().getNonReferenceType() 411 .getUnqualifiedType(); 412 Object = CreateReferenceTemporary(CGF, T, InitializedDecl); 413 LValue TempLV = CGF.MakeAddrLValue(Object, 414 Adjustment.Field->getType()); 415 CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV), TempLV); 416 break; 417 } 418 419 } 420 } 421 422 return Object; 423 } 424 } 425 426 if (RV.isAggregate()) 427 return RV.getAggregateAddr(); 428 429 // Create a temporary variable that we can bind the reference to. 430 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 431 InitializedDecl); 432 433 434 unsigned Alignment = 435 CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity(); 436 if (RV.isScalar()) 437 CGF.EmitStoreOfScalar(RV.getScalarVal(), ReferenceTemporary, 438 /*Volatile=*/false, Alignment, E->getType()); 439 else 440 CGF.StoreComplexToAddr(RV.getComplexVal(), ReferenceTemporary, 441 /*Volatile=*/false); 442 return ReferenceTemporary; 443 } 444 445 RValue 446 CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E, 447 const NamedDecl *InitializedDecl) { 448 llvm::Value *ReferenceTemporary = 0; 449 const CXXDestructorDecl *ReferenceTemporaryDtor = 0; 450 QualType ObjCARCReferenceLifetimeType; 451 llvm::Value *Value = EmitExprForReferenceBinding(*this, E, ReferenceTemporary, 452 ReferenceTemporaryDtor, 453 ObjCARCReferenceLifetimeType, 454 InitializedDecl); 455 if (!ReferenceTemporaryDtor && ObjCARCReferenceLifetimeType.isNull()) 456 return RValue::get(Value); 457 458 // Make sure to call the destructor for the reference temporary. 459 const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl); 460 if (VD && VD->hasGlobalStorage()) { 461 if (ReferenceTemporaryDtor) { 462 llvm::Constant *DtorFn = 463 CGM.GetAddrOfCXXDestructor(ReferenceTemporaryDtor, Dtor_Complete); 464 EmitCXXGlobalDtorRegistration(DtorFn, 465 cast<llvm::Constant>(ReferenceTemporary)); 466 } else { 467 assert(!ObjCARCReferenceLifetimeType.isNull()); 468 // Note: We intentionally do not register a global "destructor" to 469 // release the object. 470 } 471 472 return RValue::get(Value); 473 } 474 475 if (ReferenceTemporaryDtor) 476 PushDestructorCleanup(ReferenceTemporaryDtor, ReferenceTemporary); 477 else { 478 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 479 case Qualifiers::OCL_None: 480 llvm_unreachable( 481 "Not a reference temporary that needs to be deallocated"); 482 case Qualifiers::OCL_ExplicitNone: 483 case Qualifiers::OCL_Autoreleasing: 484 // Nothing to do. 485 break; 486 487 case Qualifiers::OCL_Strong: { 488 bool precise = VD && VD->hasAttr<ObjCPreciseLifetimeAttr>(); 489 CleanupKind cleanupKind = getARCCleanupKind(); 490 pushDestroy(cleanupKind, ReferenceTemporary, ObjCARCReferenceLifetimeType, 491 precise ? destroyARCStrongPrecise : destroyARCStrongImprecise, 492 cleanupKind & EHCleanup); 493 break; 494 } 495 496 case Qualifiers::OCL_Weak: { 497 // __weak objects always get EH cleanups; otherwise, exceptions 498 // could cause really nasty crashes instead of mere leaks. 499 pushDestroy(NormalAndEHCleanup, ReferenceTemporary, 500 ObjCARCReferenceLifetimeType, destroyARCWeak, true); 501 break; 502 } 503 } 504 } 505 506 return RValue::get(Value); 507 } 508 509 510 /// getAccessedFieldNo - Given an encoded value and a result number, return the 511 /// input field number being accessed. 512 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 513 const llvm::Constant *Elts) { 514 return cast<llvm::ConstantInt>(Elts->getAggregateElement(Idx)) 515 ->getZExtValue(); 516 } 517 518 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) { 519 if (!CatchUndefined) 520 return; 521 522 // This needs to be to the standard address space. 523 Address = Builder.CreateBitCast(Address, Int8PtrTy); 524 525 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy); 526 527 // In time, people may want to control this and use a 1 here. 528 llvm::Value *Arg = Builder.getFalse(); 529 llvm::Value *C = Builder.CreateCall2(F, Address, Arg); 530 llvm::BasicBlock *Cont = createBasicBlock(); 531 llvm::BasicBlock *Check = createBasicBlock(); 532 llvm::Value *NegativeOne = llvm::ConstantInt::get(IntPtrTy, -1ULL); 533 Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check); 534 535 EmitBlock(Check); 536 Builder.CreateCondBr(Builder.CreateICmpUGE(C, 537 llvm::ConstantInt::get(IntPtrTy, Size)), 538 Cont, getTrapBB()); 539 EmitBlock(Cont); 540 } 541 542 543 CodeGenFunction::ComplexPairTy CodeGenFunction:: 544 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 545 bool isInc, bool isPre) { 546 ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(), 547 LV.isVolatileQualified()); 548 549 llvm::Value *NextVal; 550 if (isa<llvm::IntegerType>(InVal.first->getType())) { 551 uint64_t AmountVal = isInc ? 1 : -1; 552 NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true); 553 554 // Add the inc/dec to the real part. 555 NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 556 } else { 557 QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType(); 558 llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1); 559 if (!isInc) 560 FVal.changeSign(); 561 NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal); 562 563 // Add the inc/dec to the real part. 564 NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 565 } 566 567 ComplexPairTy IncVal(NextVal, InVal.second); 568 569 // Store the updated result through the lvalue. 570 StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified()); 571 572 // If this is a postinc, return the value read from memory, otherwise use the 573 // updated value. 574 return isPre ? IncVal : InVal; 575 } 576 577 578 //===----------------------------------------------------------------------===// 579 // LValue Expression Emission 580 //===----------------------------------------------------------------------===// 581 582 RValue CodeGenFunction::GetUndefRValue(QualType Ty) { 583 if (Ty->isVoidType()) 584 return RValue::get(0); 585 586 if (const ComplexType *CTy = Ty->getAs<ComplexType>()) { 587 llvm::Type *EltTy = ConvertType(CTy->getElementType()); 588 llvm::Value *U = llvm::UndefValue::get(EltTy); 589 return RValue::getComplex(std::make_pair(U, U)); 590 } 591 592 // If this is a use of an undefined aggregate type, the aggregate must have an 593 // identifiable address. Just because the contents of the value are undefined 594 // doesn't mean that the address can't be taken and compared. 595 if (hasAggregateLLVMType(Ty)) { 596 llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp"); 597 return RValue::getAggregate(DestPtr); 598 } 599 600 return RValue::get(llvm::UndefValue::get(ConvertType(Ty))); 601 } 602 603 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E, 604 const char *Name) { 605 ErrorUnsupported(E, Name); 606 return GetUndefRValue(E->getType()); 607 } 608 609 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 610 const char *Name) { 611 ErrorUnsupported(E, Name); 612 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 613 return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType()); 614 } 615 616 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) { 617 LValue LV = EmitLValue(E); 618 if (!isa<DeclRefExpr>(E) && !LV.isBitField() && LV.isSimple()) 619 EmitCheck(LV.getAddress(), 620 getContext().getTypeSizeInChars(E->getType()).getQuantity()); 621 return LV; 622 } 623 624 /// EmitLValue - Emit code to compute a designator that specifies the location 625 /// of the expression. 626 /// 627 /// This can return one of two things: a simple address or a bitfield reference. 628 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be 629 /// an LLVM pointer type. 630 /// 631 /// If this returns a bitfield reference, nothing about the pointee type of the 632 /// LLVM value is known: For example, it may not be a pointer to an integer. 633 /// 634 /// If this returns a normal address, and if the lvalue's C type is fixed size, 635 /// this method guarantees that the returned pointer type will point to an LLVM 636 /// type of the same size of the lvalue's type. If the lvalue has a variable 637 /// length type, this is not possible. 638 /// 639 LValue CodeGenFunction::EmitLValue(const Expr *E) { 640 switch (E->getStmtClass()) { 641 default: return EmitUnsupportedLValue(E, "l-value expression"); 642 643 case Expr::ObjCPropertyRefExprClass: 644 llvm_unreachable("cannot emit a property reference directly"); 645 646 case Expr::ObjCSelectorExprClass: 647 return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E)); 648 case Expr::ObjCIsaExprClass: 649 return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E)); 650 case Expr::BinaryOperatorClass: 651 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 652 case Expr::CompoundAssignOperatorClass: 653 if (!E->getType()->isAnyComplexType()) 654 return EmitCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 655 return EmitComplexCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 656 case Expr::CallExprClass: 657 case Expr::CXXMemberCallExprClass: 658 case Expr::CXXOperatorCallExprClass: 659 case Expr::UserDefinedLiteralClass: 660 return EmitCallExprLValue(cast<CallExpr>(E)); 661 case Expr::VAArgExprClass: 662 return EmitVAArgExprLValue(cast<VAArgExpr>(E)); 663 case Expr::DeclRefExprClass: 664 return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 665 case Expr::ParenExprClass: 666 return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 667 case Expr::GenericSelectionExprClass: 668 return EmitLValue(cast<GenericSelectionExpr>(E)->getResultExpr()); 669 case Expr::PredefinedExprClass: 670 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 671 case Expr::StringLiteralClass: 672 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 673 case Expr::ObjCEncodeExprClass: 674 return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E)); 675 case Expr::PseudoObjectExprClass: 676 return EmitPseudoObjectLValue(cast<PseudoObjectExpr>(E)); 677 case Expr::InitListExprClass: 678 assert(cast<InitListExpr>(E)->getNumInits() == 1 && 679 "Only single-element init list can be lvalue."); 680 return EmitLValue(cast<InitListExpr>(E)->getInit(0)); 681 682 case Expr::BlockDeclRefExprClass: 683 return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E)); 684 685 case Expr::CXXTemporaryObjectExprClass: 686 case Expr::CXXConstructExprClass: 687 return EmitCXXConstructLValue(cast<CXXConstructExpr>(E)); 688 case Expr::CXXBindTemporaryExprClass: 689 return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E)); 690 case Expr::LambdaExprClass: 691 return EmitLambdaLValue(cast<LambdaExpr>(E)); 692 693 case Expr::ExprWithCleanupsClass: { 694 const ExprWithCleanups *cleanups = cast<ExprWithCleanups>(E); 695 enterFullExpression(cleanups); 696 RunCleanupsScope Scope(*this); 697 return EmitLValue(cleanups->getSubExpr()); 698 } 699 700 case Expr::CXXScalarValueInitExprClass: 701 return EmitNullInitializationLValue(cast<CXXScalarValueInitExpr>(E)); 702 case Expr::CXXDefaultArgExprClass: 703 return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr()); 704 case Expr::CXXTypeidExprClass: 705 return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E)); 706 707 case Expr::ObjCMessageExprClass: 708 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 709 case Expr::ObjCIvarRefExprClass: 710 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 711 case Expr::StmtExprClass: 712 return EmitStmtExprLValue(cast<StmtExpr>(E)); 713 case Expr::UnaryOperatorClass: 714 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 715 case Expr::ArraySubscriptExprClass: 716 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 717 case Expr::ExtVectorElementExprClass: 718 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 719 case Expr::MemberExprClass: 720 return EmitMemberExpr(cast<MemberExpr>(E)); 721 case Expr::CompoundLiteralExprClass: 722 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 723 case Expr::ConditionalOperatorClass: 724 return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E)); 725 case Expr::BinaryConditionalOperatorClass: 726 return EmitConditionalOperatorLValue(cast<BinaryConditionalOperator>(E)); 727 case Expr::ChooseExprClass: 728 return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext())); 729 case Expr::OpaqueValueExprClass: 730 return EmitOpaqueValueLValue(cast<OpaqueValueExpr>(E)); 731 case Expr::SubstNonTypeTemplateParmExprClass: 732 return EmitLValue(cast<SubstNonTypeTemplateParmExpr>(E)->getReplacement()); 733 case Expr::ImplicitCastExprClass: 734 case Expr::CStyleCastExprClass: 735 case Expr::CXXFunctionalCastExprClass: 736 case Expr::CXXStaticCastExprClass: 737 case Expr::CXXDynamicCastExprClass: 738 case Expr::CXXReinterpretCastExprClass: 739 case Expr::CXXConstCastExprClass: 740 case Expr::ObjCBridgedCastExprClass: 741 return EmitCastLValue(cast<CastExpr>(E)); 742 743 case Expr::MaterializeTemporaryExprClass: 744 return EmitMaterializeTemporaryExpr(cast<MaterializeTemporaryExpr>(E)); 745 } 746 } 747 748 /// Given an object of the given canonical type, can we safely copy a 749 /// value out of it based on its initializer? 750 static bool isConstantEmittableObjectType(QualType type) { 751 assert(type.isCanonical()); 752 assert(!type->isReferenceType()); 753 754 // Must be const-qualified but non-volatile. 755 Qualifiers qs = type.getLocalQualifiers(); 756 if (!qs.hasConst() || qs.hasVolatile()) return false; 757 758 // Otherwise, all object types satisfy this except C++ classes with 759 // mutable subobjects or non-trivial copy/destroy behavior. 760 if (const RecordType *RT = dyn_cast<RecordType>(type)) 761 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl())) 762 if (RD->hasMutableFields() || !RD->isTrivial()) 763 return false; 764 765 return true; 766 } 767 768 /// Can we constant-emit a load of a reference to a variable of the 769 /// given type? This is different from predicates like 770 /// Decl::isUsableInConstantExpressions because we do want it to apply 771 /// in situations that don't necessarily satisfy the language's rules 772 /// for this (e.g. C++'s ODR-use rules). For example, we want to able 773 /// to do this with const float variables even if those variables 774 /// aren't marked 'constexpr'. 775 enum ConstantEmissionKind { 776 CEK_None, 777 CEK_AsReferenceOnly, 778 CEK_AsValueOrReference, 779 CEK_AsValueOnly 780 }; 781 static ConstantEmissionKind checkVarTypeForConstantEmission(QualType type) { 782 type = type.getCanonicalType(); 783 if (const ReferenceType *ref = dyn_cast<ReferenceType>(type)) { 784 if (isConstantEmittableObjectType(ref->getPointeeType())) 785 return CEK_AsValueOrReference; 786 return CEK_AsReferenceOnly; 787 } 788 if (isConstantEmittableObjectType(type)) 789 return CEK_AsValueOnly; 790 return CEK_None; 791 } 792 793 /// Try to emit a reference to the given value without producing it as 794 /// an l-value. This is actually more than an optimization: we can't 795 /// produce an l-value for variables that we never actually captured 796 /// in a block or lambda, which means const int variables or constexpr 797 /// literals or similar. 798 CodeGenFunction::ConstantEmission 799 CodeGenFunction::tryEmitAsConstant(ValueDecl *value, Expr *refExpr) { 800 // The value needs to be an enum constant or a constant variable. 801 ConstantEmissionKind CEK; 802 if (isa<ParmVarDecl>(value)) { 803 CEK = CEK_None; 804 } else if (VarDecl *var = dyn_cast<VarDecl>(value)) { 805 CEK = checkVarTypeForConstantEmission(var->getType()); 806 } else if (isa<EnumConstantDecl>(value)) { 807 CEK = CEK_AsValueOnly; 808 } else { 809 CEK = CEK_None; 810 } 811 if (CEK == CEK_None) return ConstantEmission(); 812 813 // We evaluate use an on-stack DeclRefExpr because the constant 814 // evaluator (quite reasonably) ignores BlockDeclRefExprs. 815 DeclRefExpr stackRef(value, refExpr->getType(), refExpr->getValueKind(), 816 refExpr->getExprLoc()); 817 818 // If it's okay to evaluate as a 819 Expr::EvalResult result; 820 bool resultIsReference; 821 QualType resultType; 822 823 // It's best to evaluate all the way as an r-value if that's permitted. 824 if (CEK != CEK_AsReferenceOnly && 825 stackRef.EvaluateAsRValue(result, getContext())) { 826 resultIsReference = false; 827 resultType = refExpr->getType(); 828 829 // Otherwise, try to evaluate as an l-value. 830 } else if (CEK != CEK_AsValueOnly && 831 stackRef.EvaluateAsLValue(result, getContext())) { 832 resultIsReference = true; 833 resultType = value->getType(); 834 835 // Failure. 836 } else { 837 return ConstantEmission(); 838 } 839 840 // In any case, if the initializer has side-effects, abandon ship. 841 if (result.HasSideEffects) 842 return ConstantEmission(); 843 844 // Emit as a constant. 845 llvm::Constant *C = CGM.EmitConstantValue(result.Val, resultType, this); 846 847 // Make sure we emit a debug reference to the global variable. 848 // This should probably fire even for 849 if (isa<VarDecl>(value)) { 850 if (!getContext().DeclMustBeEmitted(cast<VarDecl>(value))) 851 EmitDeclRefExprDbgValue(&stackRef, C); 852 } else { 853 assert(isa<EnumConstantDecl>(value)); 854 EmitDeclRefExprDbgValue(&stackRef, C); 855 } 856 857 // If we emitted a reference constant, we need to dereference that. 858 if (resultIsReference) 859 return ConstantEmission::forReference(C); 860 861 return ConstantEmission::forValue(C); 862 } 863 864 llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue) { 865 return EmitLoadOfScalar(lvalue.getAddress(), lvalue.isVolatile(), 866 lvalue.getAlignment().getQuantity(), 867 lvalue.getType(), lvalue.getTBAAInfo()); 868 } 869 870 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 871 unsigned Alignment, QualType Ty, 872 llvm::MDNode *TBAAInfo) { 873 llvm::LoadInst *Load = Builder.CreateLoad(Addr); 874 if (Volatile) 875 Load->setVolatile(true); 876 if (Alignment) 877 Load->setAlignment(Alignment); 878 if (TBAAInfo) 879 CGM.DecorateInstruction(Load, TBAAInfo); 880 // If this is an atomic type, all normal reads must be atomic 881 if (Ty->isAtomicType()) 882 Load->setAtomic(llvm::SequentiallyConsistent); 883 884 return EmitFromMemory(Load, Ty); 885 } 886 887 static bool isBooleanUnderlyingType(QualType Ty) { 888 if (const EnumType *ET = dyn_cast<EnumType>(Ty)) 889 return ET->getDecl()->getIntegerType()->isBooleanType(); 890 return false; 891 } 892 893 llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) { 894 // Bool has a different representation in memory than in registers. 895 if (Ty->isBooleanType() || isBooleanUnderlyingType(Ty)) { 896 // This should really always be an i1, but sometimes it's already 897 // an i8, and it's awkward to track those cases down. 898 if (Value->getType()->isIntegerTy(1)) 899 return Builder.CreateZExt(Value, Builder.getInt8Ty(), "frombool"); 900 assert(Value->getType()->isIntegerTy(8) && "value rep of bool not i1/i8"); 901 } 902 903 return Value; 904 } 905 906 llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) { 907 // Bool has a different representation in memory than in registers. 908 if (Ty->isBooleanType() || isBooleanUnderlyingType(Ty)) { 909 assert(Value->getType()->isIntegerTy(8) && "memory rep of bool not i8"); 910 return Builder.CreateTrunc(Value, Builder.getInt1Ty(), "tobool"); 911 } 912 913 return Value; 914 } 915 916 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 917 bool Volatile, unsigned Alignment, 918 QualType Ty, 919 llvm::MDNode *TBAAInfo, 920 bool isInit) { 921 Value = EmitToMemory(Value, Ty); 922 923 llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile); 924 if (Alignment) 925 Store->setAlignment(Alignment); 926 if (TBAAInfo) 927 CGM.DecorateInstruction(Store, TBAAInfo); 928 if (!isInit && Ty->isAtomicType()) 929 Store->setAtomic(llvm::SequentiallyConsistent); 930 } 931 932 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *value, LValue lvalue, 933 bool isInit) { 934 EmitStoreOfScalar(value, lvalue.getAddress(), lvalue.isVolatile(), 935 lvalue.getAlignment().getQuantity(), lvalue.getType(), 936 lvalue.getTBAAInfo(), isInit); 937 } 938 939 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this 940 /// method emits the address of the lvalue, then loads the result as an rvalue, 941 /// returning the rvalue. 942 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV) { 943 if (LV.isObjCWeak()) { 944 // load of a __weak object. 945 llvm::Value *AddrWeakObj = LV.getAddress(); 946 return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this, 947 AddrWeakObj)); 948 } 949 if (LV.getQuals().getObjCLifetime() == Qualifiers::OCL_Weak) 950 return RValue::get(EmitARCLoadWeak(LV.getAddress())); 951 952 if (LV.isSimple()) { 953 assert(!LV.getType()->isFunctionType()); 954 955 // Everything needs a load. 956 return RValue::get(EmitLoadOfScalar(LV)); 957 } 958 959 if (LV.isVectorElt()) { 960 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 961 LV.isVolatileQualified()); 962 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 963 "vecext")); 964 } 965 966 // If this is a reference to a subset of the elements of a vector, either 967 // shuffle the input or extract/insert them as appropriate. 968 if (LV.isExtVectorElt()) 969 return EmitLoadOfExtVectorElementLValue(LV); 970 971 assert(LV.isBitField() && "Unknown LValue type!"); 972 return EmitLoadOfBitfieldLValue(LV); 973 } 974 975 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV) { 976 const CGBitFieldInfo &Info = LV.getBitFieldInfo(); 977 978 // Get the output type. 979 llvm::Type *ResLTy = ConvertType(LV.getType()); 980 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 981 982 // Compute the result as an OR of all of the individual component accesses. 983 llvm::Value *Res = 0; 984 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 985 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 986 987 // Get the field pointer. 988 llvm::Value *Ptr = LV.getBitFieldBaseAddr(); 989 990 // Only offset by the field index if used, so that incoming values are not 991 // required to be structures. 992 if (AI.FieldIndex) 993 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 994 995 // Offset by the byte offset, if used. 996 if (!AI.FieldByteOffset.isZero()) { 997 Ptr = EmitCastToVoidPtr(Ptr); 998 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 999 "bf.field.offs"); 1000 } 1001 1002 // Cast to the access type. 1003 llvm::Type *PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), AI.AccessWidth, 1004 CGM.getContext().getTargetAddressSpace(LV.getType())); 1005 Ptr = Builder.CreateBitCast(Ptr, PTy); 1006 1007 // Perform the load. 1008 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, LV.isVolatileQualified()); 1009 if (!AI.AccessAlignment.isZero()) 1010 Load->setAlignment(AI.AccessAlignment.getQuantity()); 1011 1012 // Shift out unused low bits and mask out unused high bits. 1013 llvm::Value *Val = Load; 1014 if (AI.FieldBitStart) 1015 Val = Builder.CreateLShr(Load, AI.FieldBitStart); 1016 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(AI.AccessWidth, 1017 AI.TargetBitWidth), 1018 "bf.clear"); 1019 1020 // Extend or truncate to the target size. 1021 if (AI.AccessWidth < ResSizeInBits) 1022 Val = Builder.CreateZExt(Val, ResLTy); 1023 else if (AI.AccessWidth > ResSizeInBits) 1024 Val = Builder.CreateTrunc(Val, ResLTy); 1025 1026 // Shift into place, and OR into the result. 1027 if (AI.TargetBitOffset) 1028 Val = Builder.CreateShl(Val, AI.TargetBitOffset); 1029 Res = Res ? Builder.CreateOr(Res, Val) : Val; 1030 } 1031 1032 // If the bit-field is signed, perform the sign-extension. 1033 // 1034 // FIXME: This can easily be folded into the load of the high bits, which 1035 // could also eliminate the mask of high bits in some situations. 1036 if (Info.isSigned()) { 1037 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 1038 if (ExtraBits) 1039 Res = Builder.CreateAShr(Builder.CreateShl(Res, ExtraBits), 1040 ExtraBits, "bf.val.sext"); 1041 } 1042 1043 return RValue::get(Res); 1044 } 1045 1046 // If this is a reference to a subset of the elements of a vector, create an 1047 // appropriate shufflevector. 1048 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV) { 1049 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 1050 LV.isVolatileQualified()); 1051 1052 const llvm::Constant *Elts = LV.getExtVectorElts(); 1053 1054 // If the result of the expression is a non-vector type, we must be extracting 1055 // a single element. Just codegen as an extractelement. 1056 const VectorType *ExprVT = LV.getType()->getAs<VectorType>(); 1057 if (!ExprVT) { 1058 unsigned InIdx = getAccessedFieldNo(0, Elts); 1059 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 1060 return RValue::get(Builder.CreateExtractElement(Vec, Elt)); 1061 } 1062 1063 // Always use shuffle vector to try to retain the original program structure 1064 unsigned NumResultElts = ExprVT->getNumElements(); 1065 1066 SmallVector<llvm::Constant*, 4> Mask; 1067 for (unsigned i = 0; i != NumResultElts; ++i) 1068 Mask.push_back(Builder.getInt32(getAccessedFieldNo(i, Elts))); 1069 1070 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 1071 Vec = Builder.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()), 1072 MaskV); 1073 return RValue::get(Vec); 1074 } 1075 1076 1077 1078 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 1079 /// lvalue, where both are guaranteed to the have the same type, and that type 1080 /// is 'Ty'. 1081 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, bool isInit) { 1082 if (!Dst.isSimple()) { 1083 if (Dst.isVectorElt()) { 1084 // Read/modify/write the vector, inserting the new element. 1085 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 1086 Dst.isVolatileQualified()); 1087 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 1088 Dst.getVectorIdx(), "vecins"); 1089 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 1090 return; 1091 } 1092 1093 // If this is an update of extended vector elements, insert them as 1094 // appropriate. 1095 if (Dst.isExtVectorElt()) 1096 return EmitStoreThroughExtVectorComponentLValue(Src, Dst); 1097 1098 assert(Dst.isBitField() && "Unknown LValue type"); 1099 return EmitStoreThroughBitfieldLValue(Src, Dst); 1100 } 1101 1102 // There's special magic for assigning into an ARC-qualified l-value. 1103 if (Qualifiers::ObjCLifetime Lifetime = Dst.getQuals().getObjCLifetime()) { 1104 switch (Lifetime) { 1105 case Qualifiers::OCL_None: 1106 llvm_unreachable("present but none"); 1107 1108 case Qualifiers::OCL_ExplicitNone: 1109 // nothing special 1110 break; 1111 1112 case Qualifiers::OCL_Strong: 1113 EmitARCStoreStrong(Dst, Src.getScalarVal(), /*ignore*/ true); 1114 return; 1115 1116 case Qualifiers::OCL_Weak: 1117 EmitARCStoreWeak(Dst.getAddress(), Src.getScalarVal(), /*ignore*/ true); 1118 return; 1119 1120 case Qualifiers::OCL_Autoreleasing: 1121 Src = RValue::get(EmitObjCExtendObjectLifetime(Dst.getType(), 1122 Src.getScalarVal())); 1123 // fall into the normal path 1124 break; 1125 } 1126 } 1127 1128 if (Dst.isObjCWeak() && !Dst.isNonGC()) { 1129 // load of a __weak object. 1130 llvm::Value *LvalueDst = Dst.getAddress(); 1131 llvm::Value *src = Src.getScalarVal(); 1132 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 1133 return; 1134 } 1135 1136 if (Dst.isObjCStrong() && !Dst.isNonGC()) { 1137 // load of a __strong object. 1138 llvm::Value *LvalueDst = Dst.getAddress(); 1139 llvm::Value *src = Src.getScalarVal(); 1140 if (Dst.isObjCIvar()) { 1141 assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL"); 1142 llvm::Type *ResultType = ConvertType(getContext().LongTy); 1143 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp()); 1144 llvm::Value *dst = RHS; 1145 RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast"); 1146 llvm::Value *LHS = 1147 Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast"); 1148 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset"); 1149 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst, 1150 BytesBetween); 1151 } else if (Dst.isGlobalObjCRef()) { 1152 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst, 1153 Dst.isThreadLocalRef()); 1154 } 1155 else 1156 CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst); 1157 return; 1158 } 1159 1160 assert(Src.isScalar() && "Can't emit an agg store with this method"); 1161 EmitStoreOfScalar(Src.getScalarVal(), Dst, isInit); 1162 } 1163 1164 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 1165 llvm::Value **Result) { 1166 const CGBitFieldInfo &Info = Dst.getBitFieldInfo(); 1167 1168 // Get the output type. 1169 llvm::Type *ResLTy = ConvertTypeForMem(Dst.getType()); 1170 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 1171 1172 // Get the source value, truncated to the width of the bit-field. 1173 llvm::Value *SrcVal = Src.getScalarVal(); 1174 1175 if (Dst.getType()->isBooleanType()) 1176 SrcVal = Builder.CreateIntCast(SrcVal, ResLTy, /*IsSigned=*/false); 1177 1178 SrcVal = Builder.CreateAnd(SrcVal, llvm::APInt::getLowBitsSet(ResSizeInBits, 1179 Info.getSize()), 1180 "bf.value"); 1181 1182 // Return the new value of the bit-field, if requested. 1183 if (Result) { 1184 // Cast back to the proper type for result. 1185 llvm::Type *SrcTy = Src.getScalarVal()->getType(); 1186 llvm::Value *ReloadVal = Builder.CreateIntCast(SrcVal, SrcTy, false, 1187 "bf.reload.val"); 1188 1189 // Sign extend if necessary. 1190 if (Info.isSigned()) { 1191 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 1192 if (ExtraBits) 1193 ReloadVal = Builder.CreateAShr(Builder.CreateShl(ReloadVal, ExtraBits), 1194 ExtraBits, "bf.reload.sext"); 1195 } 1196 1197 *Result = ReloadVal; 1198 } 1199 1200 // Iterate over the components, writing each piece to memory. 1201 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 1202 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 1203 1204 // Get the field pointer. 1205 llvm::Value *Ptr = Dst.getBitFieldBaseAddr(); 1206 unsigned addressSpace = 1207 cast<llvm::PointerType>(Ptr->getType())->getAddressSpace(); 1208 1209 // Only offset by the field index if used, so that incoming values are not 1210 // required to be structures. 1211 if (AI.FieldIndex) 1212 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 1213 1214 // Offset by the byte offset, if used. 1215 if (!AI.FieldByteOffset.isZero()) { 1216 Ptr = EmitCastToVoidPtr(Ptr); 1217 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 1218 "bf.field.offs"); 1219 } 1220 1221 // Cast to the access type. 1222 llvm::Type *AccessLTy = 1223 llvm::Type::getIntNTy(getLLVMContext(), AI.AccessWidth); 1224 1225 llvm::Type *PTy = AccessLTy->getPointerTo(addressSpace); 1226 Ptr = Builder.CreateBitCast(Ptr, PTy); 1227 1228 // Extract the piece of the bit-field value to write in this access, limited 1229 // to the values that are part of this access. 1230 llvm::Value *Val = SrcVal; 1231 if (AI.TargetBitOffset) 1232 Val = Builder.CreateLShr(Val, AI.TargetBitOffset); 1233 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(ResSizeInBits, 1234 AI.TargetBitWidth)); 1235 1236 // Extend or truncate to the access size. 1237 if (ResSizeInBits < AI.AccessWidth) 1238 Val = Builder.CreateZExt(Val, AccessLTy); 1239 else if (ResSizeInBits > AI.AccessWidth) 1240 Val = Builder.CreateTrunc(Val, AccessLTy); 1241 1242 // Shift into the position in memory. 1243 if (AI.FieldBitStart) 1244 Val = Builder.CreateShl(Val, AI.FieldBitStart); 1245 1246 // If necessary, load and OR in bits that are outside of the bit-field. 1247 if (AI.TargetBitWidth != AI.AccessWidth) { 1248 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, Dst.isVolatileQualified()); 1249 if (!AI.AccessAlignment.isZero()) 1250 Load->setAlignment(AI.AccessAlignment.getQuantity()); 1251 1252 // Compute the mask for zeroing the bits that are part of the bit-field. 1253 llvm::APInt InvMask = 1254 ~llvm::APInt::getBitsSet(AI.AccessWidth, AI.FieldBitStart, 1255 AI.FieldBitStart + AI.TargetBitWidth); 1256 1257 // Apply the mask and OR in to the value to write. 1258 Val = Builder.CreateOr(Builder.CreateAnd(Load, InvMask), Val); 1259 } 1260 1261 // Write the value. 1262 llvm::StoreInst *Store = Builder.CreateStore(Val, Ptr, 1263 Dst.isVolatileQualified()); 1264 if (!AI.AccessAlignment.isZero()) 1265 Store->setAlignment(AI.AccessAlignment.getQuantity()); 1266 } 1267 } 1268 1269 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 1270 LValue Dst) { 1271 // This access turns into a read/modify/write of the vector. Load the input 1272 // value now. 1273 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 1274 Dst.isVolatileQualified()); 1275 const llvm::Constant *Elts = Dst.getExtVectorElts(); 1276 1277 llvm::Value *SrcVal = Src.getScalarVal(); 1278 1279 if (const VectorType *VTy = Dst.getType()->getAs<VectorType>()) { 1280 unsigned NumSrcElts = VTy->getNumElements(); 1281 unsigned NumDstElts = 1282 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 1283 if (NumDstElts == NumSrcElts) { 1284 // Use shuffle vector is the src and destination are the same number of 1285 // elements and restore the vector mask since it is on the side it will be 1286 // stored. 1287 SmallVector<llvm::Constant*, 4> Mask(NumDstElts); 1288 for (unsigned i = 0; i != NumSrcElts; ++i) 1289 Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i); 1290 1291 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 1292 Vec = Builder.CreateShuffleVector(SrcVal, 1293 llvm::UndefValue::get(Vec->getType()), 1294 MaskV); 1295 } else if (NumDstElts > NumSrcElts) { 1296 // Extended the source vector to the same length and then shuffle it 1297 // into the destination. 1298 // FIXME: since we're shuffling with undef, can we just use the indices 1299 // into that? This could be simpler. 1300 SmallVector<llvm::Constant*, 4> ExtMask; 1301 for (unsigned i = 0; i != NumSrcElts; ++i) 1302 ExtMask.push_back(Builder.getInt32(i)); 1303 ExtMask.resize(NumDstElts, llvm::UndefValue::get(Int32Ty)); 1304 llvm::Value *ExtMaskV = llvm::ConstantVector::get(ExtMask); 1305 llvm::Value *ExtSrcVal = 1306 Builder.CreateShuffleVector(SrcVal, 1307 llvm::UndefValue::get(SrcVal->getType()), 1308 ExtMaskV); 1309 // build identity 1310 SmallVector<llvm::Constant*, 4> Mask; 1311 for (unsigned i = 0; i != NumDstElts; ++i) 1312 Mask.push_back(Builder.getInt32(i)); 1313 1314 // modify when what gets shuffled in 1315 for (unsigned i = 0; i != NumSrcElts; ++i) 1316 Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i+NumDstElts); 1317 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 1318 Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV); 1319 } else { 1320 // We should never shorten the vector 1321 llvm_unreachable("unexpected shorten vector length"); 1322 } 1323 } else { 1324 // If the Src is a scalar (not a vector) it must be updating one element. 1325 unsigned InIdx = getAccessedFieldNo(0, Elts); 1326 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 1327 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt); 1328 } 1329 1330 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 1331 } 1332 1333 // setObjCGCLValueClass - sets class of he lvalue for the purpose of 1334 // generating write-barries API. It is currently a global, ivar, 1335 // or neither. 1336 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E, 1337 LValue &LV, 1338 bool IsMemberAccess=false) { 1339 if (Ctx.getLangOptions().getGC() == LangOptions::NonGC) 1340 return; 1341 1342 if (isa<ObjCIvarRefExpr>(E)) { 1343 QualType ExpTy = E->getType(); 1344 if (IsMemberAccess && ExpTy->isPointerType()) { 1345 // If ivar is a structure pointer, assigning to field of 1346 // this struct follows gcc's behavior and makes it a non-ivar 1347 // writer-barrier conservatively. 1348 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 1349 if (ExpTy->isRecordType()) { 1350 LV.setObjCIvar(false); 1351 return; 1352 } 1353 } 1354 LV.setObjCIvar(true); 1355 ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E)); 1356 LV.setBaseIvarExp(Exp->getBase()); 1357 LV.setObjCArray(E->getType()->isArrayType()); 1358 return; 1359 } 1360 1361 if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) { 1362 if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) { 1363 if (VD->hasGlobalStorage()) { 1364 LV.setGlobalObjCRef(true); 1365 LV.setThreadLocalRef(VD->isThreadSpecified()); 1366 } 1367 } 1368 LV.setObjCArray(E->getType()->isArrayType()); 1369 return; 1370 } 1371 1372 if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) { 1373 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 1374 return; 1375 } 1376 1377 if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) { 1378 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 1379 if (LV.isObjCIvar()) { 1380 // If cast is to a structure pointer, follow gcc's behavior and make it 1381 // a non-ivar write-barrier. 1382 QualType ExpTy = E->getType(); 1383 if (ExpTy->isPointerType()) 1384 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 1385 if (ExpTy->isRecordType()) 1386 LV.setObjCIvar(false); 1387 } 1388 return; 1389 } 1390 1391 if (const GenericSelectionExpr *Exp = dyn_cast<GenericSelectionExpr>(E)) { 1392 setObjCGCLValueClass(Ctx, Exp->getResultExpr(), LV); 1393 return; 1394 } 1395 1396 if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) { 1397 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 1398 return; 1399 } 1400 1401 if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) { 1402 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 1403 return; 1404 } 1405 1406 if (const ObjCBridgedCastExpr *Exp = dyn_cast<ObjCBridgedCastExpr>(E)) { 1407 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 1408 return; 1409 } 1410 1411 if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) { 1412 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 1413 if (LV.isObjCIvar() && !LV.isObjCArray()) 1414 // Using array syntax to assigning to what an ivar points to is not 1415 // same as assigning to the ivar itself. {id *Names;} Names[i] = 0; 1416 LV.setObjCIvar(false); 1417 else if (LV.isGlobalObjCRef() && !LV.isObjCArray()) 1418 // Using array syntax to assigning to what global points to is not 1419 // same as assigning to the global itself. {id *G;} G[i] = 0; 1420 LV.setGlobalObjCRef(false); 1421 return; 1422 } 1423 1424 if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) { 1425 setObjCGCLValueClass(Ctx, Exp->getBase(), LV, true); 1426 // We don't know if member is an 'ivar', but this flag is looked at 1427 // only in the context of LV.isObjCIvar(). 1428 LV.setObjCArray(E->getType()->isArrayType()); 1429 return; 1430 } 1431 } 1432 1433 static llvm::Value * 1434 EmitBitCastOfLValueToProperType(CodeGenFunction &CGF, 1435 llvm::Value *V, llvm::Type *IRType, 1436 StringRef Name = StringRef()) { 1437 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace(); 1438 return CGF.Builder.CreateBitCast(V, IRType->getPointerTo(AS), Name); 1439 } 1440 1441 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, 1442 const Expr *E, const VarDecl *VD) { 1443 assert((VD->hasExternalStorage() || VD->isFileVarDecl()) && 1444 "Var decl must have external storage or be a file var decl!"); 1445 1446 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); 1447 llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType()); 1448 V = EmitBitCastOfLValueToProperType(CGF, V, RealVarTy); 1449 CharUnits Alignment = CGF.getContext().getDeclAlign(VD); 1450 QualType T = E->getType(); 1451 LValue LV; 1452 if (VD->getType()->isReferenceType()) { 1453 llvm::LoadInst *LI = CGF.Builder.CreateLoad(V); 1454 LI->setAlignment(Alignment.getQuantity()); 1455 V = LI; 1456 LV = CGF.MakeNaturalAlignAddrLValue(V, T); 1457 } else { 1458 LV = CGF.MakeAddrLValue(V, E->getType(), Alignment); 1459 } 1460 setObjCGCLValueClass(CGF.getContext(), E, LV); 1461 return LV; 1462 } 1463 1464 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF, 1465 const Expr *E, const FunctionDecl *FD) { 1466 llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD); 1467 if (!FD->hasPrototype()) { 1468 if (const FunctionProtoType *Proto = 1469 FD->getType()->getAs<FunctionProtoType>()) { 1470 // Ugly case: for a K&R-style definition, the type of the definition 1471 // isn't the same as the type of a use. Correct for this with a 1472 // bitcast. 1473 QualType NoProtoType = 1474 CGF.getContext().getFunctionNoProtoType(Proto->getResultType()); 1475 NoProtoType = CGF.getContext().getPointerType(NoProtoType); 1476 V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType)); 1477 } 1478 } 1479 CharUnits Alignment = CGF.getContext().getDeclAlign(FD); 1480 return CGF.MakeAddrLValue(V, E->getType(), Alignment); 1481 } 1482 1483 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 1484 const NamedDecl *ND = E->getDecl(); 1485 CharUnits Alignment = getContext().getDeclAlign(ND); 1486 QualType T = E->getType(); 1487 1488 // FIXME: We should be able to assert this for FunctionDecls as well! 1489 // FIXME: We should be able to assert this for all DeclRefExprs, not just 1490 // those with a valid source location. 1491 assert((ND->isUsed(false) || !isa<VarDecl>(ND) || 1492 !E->getLocation().isValid()) && 1493 "Should not use decl without marking it used!"); 1494 1495 if (ND->hasAttr<WeakRefAttr>()) { 1496 const ValueDecl *VD = cast<ValueDecl>(ND); 1497 llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD); 1498 return MakeAddrLValue(Aliasee, E->getType(), Alignment); 1499 } 1500 1501 if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) { 1502 1503 // Check if this is a global variable. 1504 if (VD->hasExternalStorage() || VD->isFileVarDecl()) 1505 return EmitGlobalVarDeclLValue(*this, E, VD); 1506 1507 bool NonGCable = VD->hasLocalStorage() && 1508 !VD->getType()->isReferenceType() && 1509 !VD->hasAttr<BlocksAttr>(); 1510 1511 llvm::Value *V = LocalDeclMap[VD]; 1512 if (!V && VD->isStaticLocal()) 1513 V = CGM.getStaticLocalDeclAddress(VD); 1514 1515 // Use special handling for lambdas. 1516 if (!V) 1517 if (FieldDecl *FD = LambdaCaptureFields.lookup(VD)) 1518 return EmitLValueForField(CXXABIThisValue, FD, 0); 1519 1520 assert(V && "DeclRefExpr not entered in LocalDeclMap?"); 1521 1522 if (VD->hasAttr<BlocksAttr>()) 1523 V = BuildBlockByrefAddress(V, VD); 1524 1525 LValue LV; 1526 if (VD->getType()->isReferenceType()) { 1527 llvm::LoadInst *LI = Builder.CreateLoad(V); 1528 LI->setAlignment(Alignment.getQuantity()); 1529 V = LI; 1530 LV = MakeNaturalAlignAddrLValue(V, T); 1531 } else { 1532 LV = MakeAddrLValue(V, T, Alignment); 1533 } 1534 1535 if (NonGCable) { 1536 LV.getQuals().removeObjCGCAttr(); 1537 LV.setNonGC(true); 1538 } 1539 setObjCGCLValueClass(getContext(), E, LV); 1540 return LV; 1541 } 1542 1543 if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(ND)) 1544 return EmitFunctionDeclLValue(*this, E, fn); 1545 1546 llvm_unreachable("Unhandled DeclRefExpr"); 1547 } 1548 1549 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) { 1550 CharUnits Alignment = getContext().getDeclAlign(E->getDecl()); 1551 return MakeAddrLValue(GetAddrOfBlockDecl(E), E->getType(), Alignment); 1552 } 1553 1554 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 1555 // __extension__ doesn't affect lvalue-ness. 1556 if (E->getOpcode() == UO_Extension) 1557 return EmitLValue(E->getSubExpr()); 1558 1559 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 1560 switch (E->getOpcode()) { 1561 default: llvm_unreachable("Unknown unary operator lvalue!"); 1562 case UO_Deref: { 1563 QualType T = E->getSubExpr()->getType()->getPointeeType(); 1564 assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); 1565 1566 LValue LV = MakeNaturalAlignAddrLValue(EmitScalarExpr(E->getSubExpr()), T); 1567 LV.getQuals().setAddressSpace(ExprTy.getAddressSpace()); 1568 1569 // We should not generate __weak write barrier on indirect reference 1570 // of a pointer to object; as in void foo (__weak id *param); *param = 0; 1571 // But, we continue to generate __strong write barrier on indirect write 1572 // into a pointer to object. 1573 if (getContext().getLangOptions().ObjC1 && 1574 getContext().getLangOptions().getGC() != LangOptions::NonGC && 1575 LV.isObjCWeak()) 1576 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 1577 return LV; 1578 } 1579 case UO_Real: 1580 case UO_Imag: { 1581 LValue LV = EmitLValue(E->getSubExpr()); 1582 assert(LV.isSimple() && "real/imag on non-ordinary l-value"); 1583 llvm::Value *Addr = LV.getAddress(); 1584 1585 // __real is valid on scalars. This is a faster way of testing that. 1586 // __imag can only produce an rvalue on scalars. 1587 if (E->getOpcode() == UO_Real && 1588 !cast<llvm::PointerType>(Addr->getType()) 1589 ->getElementType()->isStructTy()) { 1590 assert(E->getSubExpr()->getType()->isArithmeticType()); 1591 return LV; 1592 } 1593 1594 assert(E->getSubExpr()->getType()->isAnyComplexType()); 1595 1596 unsigned Idx = E->getOpcode() == UO_Imag; 1597 return MakeAddrLValue(Builder.CreateStructGEP(LV.getAddress(), 1598 Idx, "idx"), 1599 ExprTy); 1600 } 1601 case UO_PreInc: 1602 case UO_PreDec: { 1603 LValue LV = EmitLValue(E->getSubExpr()); 1604 bool isInc = E->getOpcode() == UO_PreInc; 1605 1606 if (E->getType()->isAnyComplexType()) 1607 EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/); 1608 else 1609 EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/); 1610 return LV; 1611 } 1612 } 1613 } 1614 1615 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 1616 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromLiteral(E), 1617 E->getType()); 1618 } 1619 1620 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) { 1621 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromObjCEncode(E), 1622 E->getType()); 1623 } 1624 1625 1626 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 1627 switch (E->getIdentType()) { 1628 default: 1629 return EmitUnsupportedLValue(E, "predefined expression"); 1630 1631 case PredefinedExpr::Func: 1632 case PredefinedExpr::Function: 1633 case PredefinedExpr::PrettyFunction: { 1634 unsigned Type = E->getIdentType(); 1635 std::string GlobalVarName; 1636 1637 switch (Type) { 1638 default: llvm_unreachable("Invalid type"); 1639 case PredefinedExpr::Func: 1640 GlobalVarName = "__func__."; 1641 break; 1642 case PredefinedExpr::Function: 1643 GlobalVarName = "__FUNCTION__."; 1644 break; 1645 case PredefinedExpr::PrettyFunction: 1646 GlobalVarName = "__PRETTY_FUNCTION__."; 1647 break; 1648 } 1649 1650 StringRef FnName = CurFn->getName(); 1651 if (FnName.startswith("\01")) 1652 FnName = FnName.substr(1); 1653 GlobalVarName += FnName; 1654 1655 const Decl *CurDecl = CurCodeDecl; 1656 if (CurDecl == 0) 1657 CurDecl = getContext().getTranslationUnitDecl(); 1658 1659 std::string FunctionName = 1660 (isa<BlockDecl>(CurDecl) 1661 ? FnName.str() 1662 : PredefinedExpr::ComputeName((PredefinedExpr::IdentType)Type, CurDecl)); 1663 1664 llvm::Constant *C = 1665 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 1666 return MakeAddrLValue(C, E->getType()); 1667 } 1668 } 1669 } 1670 1671 llvm::BasicBlock *CodeGenFunction::getTrapBB() { 1672 const CodeGenOptions &GCO = CGM.getCodeGenOpts(); 1673 1674 // If we are not optimzing, don't collapse all calls to trap in the function 1675 // to the same call, that way, in the debugger they can see which operation 1676 // did in fact fail. If we are optimizing, we collapse all calls to trap down 1677 // to just one per function to save on codesize. 1678 if (GCO.OptimizationLevel && TrapBB) 1679 return TrapBB; 1680 1681 llvm::BasicBlock *Cont = 0; 1682 if (HaveInsertPoint()) { 1683 Cont = createBasicBlock("cont"); 1684 EmitBranch(Cont); 1685 } 1686 TrapBB = createBasicBlock("trap"); 1687 EmitBlock(TrapBB); 1688 1689 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap); 1690 llvm::CallInst *TrapCall = Builder.CreateCall(F); 1691 TrapCall->setDoesNotReturn(); 1692 TrapCall->setDoesNotThrow(); 1693 Builder.CreateUnreachable(); 1694 1695 if (Cont) 1696 EmitBlock(Cont); 1697 return TrapBB; 1698 } 1699 1700 /// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an 1701 /// array to pointer, return the array subexpression. 1702 static const Expr *isSimpleArrayDecayOperand(const Expr *E) { 1703 // If this isn't just an array->pointer decay, bail out. 1704 const CastExpr *CE = dyn_cast<CastExpr>(E); 1705 if (CE == 0 || CE->getCastKind() != CK_ArrayToPointerDecay) 1706 return 0; 1707 1708 // If this is a decay from variable width array, bail out. 1709 const Expr *SubExpr = CE->getSubExpr(); 1710 if (SubExpr->getType()->isVariableArrayType()) 1711 return 0; 1712 1713 return SubExpr; 1714 } 1715 1716 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 1717 // The index must always be an integer, which is not an aggregate. Emit it. 1718 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 1719 QualType IdxTy = E->getIdx()->getType(); 1720 bool IdxSigned = IdxTy->isSignedIntegerOrEnumerationType(); 1721 1722 // If the base is a vector type, then we are forming a vector element lvalue 1723 // with this subscript. 1724 if (E->getBase()->getType()->isVectorType()) { 1725 // Emit the vector as an lvalue to get its address. 1726 LValue LHS = EmitLValue(E->getBase()); 1727 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 1728 Idx = Builder.CreateIntCast(Idx, Int32Ty, IdxSigned, "vidx"); 1729 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 1730 E->getBase()->getType()); 1731 } 1732 1733 // Extend or truncate the index type to 32 or 64-bits. 1734 if (Idx->getType() != IntPtrTy) 1735 Idx = Builder.CreateIntCast(Idx, IntPtrTy, IdxSigned, "idxprom"); 1736 1737 // FIXME: As llvm implements the object size checking, this can come out. 1738 if (CatchUndefined) { 1739 if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E->getBase())){ 1740 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) { 1741 if (ICE->getCastKind() == CK_ArrayToPointerDecay) { 1742 if (const ConstantArrayType *CAT 1743 = getContext().getAsConstantArrayType(DRE->getType())) { 1744 llvm::APInt Size = CAT->getSize(); 1745 llvm::BasicBlock *Cont = createBasicBlock("cont"); 1746 Builder.CreateCondBr(Builder.CreateICmpULE(Idx, 1747 llvm::ConstantInt::get(Idx->getType(), Size)), 1748 Cont, getTrapBB()); 1749 EmitBlock(Cont); 1750 } 1751 } 1752 } 1753 } 1754 } 1755 1756 // We know that the pointer points to a type of the correct size, unless the 1757 // size is a VLA or Objective-C interface. 1758 llvm::Value *Address = 0; 1759 CharUnits ArrayAlignment; 1760 if (const VariableArrayType *vla = 1761 getContext().getAsVariableArrayType(E->getType())) { 1762 // The base must be a pointer, which is not an aggregate. Emit 1763 // it. It needs to be emitted first in case it's what captures 1764 // the VLA bounds. 1765 Address = EmitScalarExpr(E->getBase()); 1766 1767 // The element count here is the total number of non-VLA elements. 1768 llvm::Value *numElements = getVLASize(vla).first; 1769 1770 // Effectively, the multiply by the VLA size is part of the GEP. 1771 // GEP indexes are signed, and scaling an index isn't permitted to 1772 // signed-overflow, so we use the same semantics for our explicit 1773 // multiply. We suppress this if overflow is not undefined behavior. 1774 if (getLangOptions().isSignedOverflowDefined()) { 1775 Idx = Builder.CreateMul(Idx, numElements); 1776 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 1777 } else { 1778 Idx = Builder.CreateNSWMul(Idx, numElements); 1779 Address = Builder.CreateInBoundsGEP(Address, Idx, "arrayidx"); 1780 } 1781 } else if (const ObjCObjectType *OIT = E->getType()->getAs<ObjCObjectType>()){ 1782 // Indexing over an interface, as in "NSString *P; P[4];" 1783 llvm::Value *InterfaceSize = 1784 llvm::ConstantInt::get(Idx->getType(), 1785 getContext().getTypeSizeInChars(OIT).getQuantity()); 1786 1787 Idx = Builder.CreateMul(Idx, InterfaceSize); 1788 1789 // The base must be a pointer, which is not an aggregate. Emit it. 1790 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1791 Address = EmitCastToVoidPtr(Base); 1792 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 1793 Address = Builder.CreateBitCast(Address, Base->getType()); 1794 } else if (const Expr *Array = isSimpleArrayDecayOperand(E->getBase())) { 1795 // If this is A[i] where A is an array, the frontend will have decayed the 1796 // base to be a ArrayToPointerDecay implicit cast. While correct, it is 1797 // inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a 1798 // "gep x, i" here. Emit one "gep A, 0, i". 1799 assert(Array->getType()->isArrayType() && 1800 "Array to pointer decay must have array source type!"); 1801 LValue ArrayLV = EmitLValue(Array); 1802 llvm::Value *ArrayPtr = ArrayLV.getAddress(); 1803 llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0); 1804 llvm::Value *Args[] = { Zero, Idx }; 1805 1806 // Propagate the alignment from the array itself to the result. 1807 ArrayAlignment = ArrayLV.getAlignment(); 1808 1809 if (getContext().getLangOptions().isSignedOverflowDefined()) 1810 Address = Builder.CreateGEP(ArrayPtr, Args, "arrayidx"); 1811 else 1812 Address = Builder.CreateInBoundsGEP(ArrayPtr, Args, "arrayidx"); 1813 } else { 1814 // The base must be a pointer, which is not an aggregate. Emit it. 1815 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1816 if (getContext().getLangOptions().isSignedOverflowDefined()) 1817 Address = Builder.CreateGEP(Base, Idx, "arrayidx"); 1818 else 1819 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1820 } 1821 1822 QualType T = E->getBase()->getType()->getPointeeType(); 1823 assert(!T.isNull() && 1824 "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); 1825 1826 1827 // Limit the alignment to that of the result type. 1828 LValue LV; 1829 if (!ArrayAlignment.isZero()) { 1830 CharUnits Align = getContext().getTypeAlignInChars(T); 1831 ArrayAlignment = std::min(Align, ArrayAlignment); 1832 LV = MakeAddrLValue(Address, T, ArrayAlignment); 1833 } else { 1834 LV = MakeNaturalAlignAddrLValue(Address, T); 1835 } 1836 1837 LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace()); 1838 1839 if (getContext().getLangOptions().ObjC1 && 1840 getContext().getLangOptions().getGC() != LangOptions::NonGC) { 1841 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 1842 setObjCGCLValueClass(getContext(), E, LV); 1843 } 1844 return LV; 1845 } 1846 1847 static 1848 llvm::Constant *GenerateConstantVector(CGBuilderTy &Builder, 1849 SmallVector<unsigned, 4> &Elts) { 1850 SmallVector<llvm::Constant*, 4> CElts; 1851 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 1852 CElts.push_back(Builder.getInt32(Elts[i])); 1853 1854 return llvm::ConstantVector::get(CElts); 1855 } 1856 1857 LValue CodeGenFunction:: 1858 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 1859 // Emit the base vector as an l-value. 1860 LValue Base; 1861 1862 // ExtVectorElementExpr's base can either be a vector or pointer to vector. 1863 if (E->isArrow()) { 1864 // If it is a pointer to a vector, emit the address and form an lvalue with 1865 // it. 1866 llvm::Value *Ptr = EmitScalarExpr(E->getBase()); 1867 const PointerType *PT = E->getBase()->getType()->getAs<PointerType>(); 1868 Base = MakeAddrLValue(Ptr, PT->getPointeeType()); 1869 Base.getQuals().removeObjCGCAttr(); 1870 } else if (E->getBase()->isGLValue()) { 1871 // Otherwise, if the base is an lvalue ( as in the case of foo.x.x), 1872 // emit the base as an lvalue. 1873 assert(E->getBase()->getType()->isVectorType()); 1874 Base = EmitLValue(E->getBase()); 1875 } else { 1876 // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such. 1877 assert(E->getBase()->getType()->isVectorType() && 1878 "Result must be a vector"); 1879 llvm::Value *Vec = EmitScalarExpr(E->getBase()); 1880 1881 // Store the vector to memory (because LValue wants an address). 1882 llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType()); 1883 Builder.CreateStore(Vec, VecMem); 1884 Base = MakeAddrLValue(VecMem, E->getBase()->getType()); 1885 } 1886 1887 QualType type = 1888 E->getType().withCVRQualifiers(Base.getQuals().getCVRQualifiers()); 1889 1890 // Encode the element access list into a vector of unsigned indices. 1891 SmallVector<unsigned, 4> Indices; 1892 E->getEncodedElementAccess(Indices); 1893 1894 if (Base.isSimple()) { 1895 llvm::Constant *CV = GenerateConstantVector(Builder, Indices); 1896 return LValue::MakeExtVectorElt(Base.getAddress(), CV, type); 1897 } 1898 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 1899 1900 llvm::Constant *BaseElts = Base.getExtVectorElts(); 1901 SmallVector<llvm::Constant *, 4> CElts; 1902 1903 for (unsigned i = 0, e = Indices.size(); i != e; ++i) 1904 CElts.push_back(BaseElts->getAggregateElement(Indices[i])); 1905 llvm::Constant *CV = llvm::ConstantVector::get(CElts); 1906 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, type); 1907 } 1908 1909 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 1910 bool isNonGC = false; 1911 Expr *BaseExpr = E->getBase(); 1912 llvm::Value *BaseValue = NULL; 1913 Qualifiers BaseQuals; 1914 1915 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 1916 if (E->isArrow()) { 1917 BaseValue = EmitScalarExpr(BaseExpr); 1918 const PointerType *PTy = 1919 BaseExpr->getType()->getAs<PointerType>(); 1920 BaseQuals = PTy->getPointeeType().getQualifiers(); 1921 } else { 1922 LValue BaseLV = EmitLValue(BaseExpr); 1923 if (BaseLV.isNonGC()) 1924 isNonGC = true; 1925 // FIXME: this isn't right for bitfields. 1926 BaseValue = BaseLV.getAddress(); 1927 QualType BaseTy = BaseExpr->getType(); 1928 BaseQuals = BaseTy.getQualifiers(); 1929 } 1930 1931 NamedDecl *ND = E->getMemberDecl(); 1932 if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) { 1933 LValue LV = EmitLValueForField(BaseValue, Field, 1934 BaseQuals.getCVRQualifiers()); 1935 LV.setNonGC(isNonGC); 1936 setObjCGCLValueClass(getContext(), E, LV); 1937 return LV; 1938 } 1939 1940 if (VarDecl *VD = dyn_cast<VarDecl>(ND)) 1941 return EmitGlobalVarDeclLValue(*this, E, VD); 1942 1943 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 1944 return EmitFunctionDeclLValue(*this, E, FD); 1945 1946 llvm_unreachable("Unhandled member declaration!"); 1947 } 1948 1949 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value *BaseValue, 1950 const FieldDecl *Field, 1951 unsigned CVRQualifiers) { 1952 const CGRecordLayout &RL = 1953 CGM.getTypes().getCGRecordLayout(Field->getParent()); 1954 const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field); 1955 return LValue::MakeBitfield(BaseValue, Info, 1956 Field->getType().withCVRQualifiers(CVRQualifiers)); 1957 } 1958 1959 /// EmitLValueForAnonRecordField - Given that the field is a member of 1960 /// an anonymous struct or union buried inside a record, and given 1961 /// that the base value is a pointer to the enclosing record, derive 1962 /// an lvalue for the ultimate field. 1963 LValue CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value *BaseValue, 1964 const IndirectFieldDecl *Field, 1965 unsigned CVRQualifiers) { 1966 IndirectFieldDecl::chain_iterator I = Field->chain_begin(), 1967 IEnd = Field->chain_end(); 1968 while (true) { 1969 LValue LV = EmitLValueForField(BaseValue, cast<FieldDecl>(*I), 1970 CVRQualifiers); 1971 if (++I == IEnd) return LV; 1972 1973 assert(LV.isSimple()); 1974 BaseValue = LV.getAddress(); 1975 CVRQualifiers |= LV.getVRQualifiers(); 1976 } 1977 } 1978 1979 LValue CodeGenFunction::EmitLValueForField(llvm::Value *baseAddr, 1980 const FieldDecl *field, 1981 unsigned cvr) { 1982 if (field->isBitField()) 1983 return EmitLValueForBitfield(baseAddr, field, cvr); 1984 1985 const RecordDecl *rec = field->getParent(); 1986 QualType type = field->getType(); 1987 CharUnits alignment = getContext().getDeclAlign(field); 1988 1989 bool mayAlias = rec->hasAttr<MayAliasAttr>(); 1990 1991 llvm::Value *addr = baseAddr; 1992 if (rec->isUnion()) { 1993 // For unions, there is no pointer adjustment. 1994 assert(!type->isReferenceType() && "union has reference member"); 1995 } else { 1996 // For structs, we GEP to the field that the record layout suggests. 1997 unsigned idx = CGM.getTypes().getCGRecordLayout(rec).getLLVMFieldNo(field); 1998 addr = Builder.CreateStructGEP(addr, idx, field->getName()); 1999 2000 // If this is a reference field, load the reference right now. 2001 if (const ReferenceType *refType = type->getAs<ReferenceType>()) { 2002 llvm::LoadInst *load = Builder.CreateLoad(addr, "ref"); 2003 if (cvr & Qualifiers::Volatile) load->setVolatile(true); 2004 load->setAlignment(alignment.getQuantity()); 2005 2006 if (CGM.shouldUseTBAA()) { 2007 llvm::MDNode *tbaa; 2008 if (mayAlias) 2009 tbaa = CGM.getTBAAInfo(getContext().CharTy); 2010 else 2011 tbaa = CGM.getTBAAInfo(type); 2012 CGM.DecorateInstruction(load, tbaa); 2013 } 2014 2015 addr = load; 2016 mayAlias = false; 2017 type = refType->getPointeeType(); 2018 if (type->isIncompleteType()) 2019 alignment = CharUnits(); 2020 else 2021 alignment = getContext().getTypeAlignInChars(type); 2022 cvr = 0; // qualifiers don't recursively apply to referencee 2023 } 2024 } 2025 2026 // Make sure that the address is pointing to the right type. This is critical 2027 // for both unions and structs. A union needs a bitcast, a struct element 2028 // will need a bitcast if the LLVM type laid out doesn't match the desired 2029 // type. 2030 addr = EmitBitCastOfLValueToProperType(*this, addr, 2031 CGM.getTypes().ConvertTypeForMem(type), 2032 field->getName()); 2033 2034 if (field->hasAttr<AnnotateAttr>()) 2035 addr = EmitFieldAnnotations(field, addr); 2036 2037 LValue LV = MakeAddrLValue(addr, type, alignment); 2038 LV.getQuals().addCVRQualifiers(cvr); 2039 2040 // __weak attribute on a field is ignored. 2041 if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak) 2042 LV.getQuals().removeObjCGCAttr(); 2043 2044 // Fields of may_alias structs act like 'char' for TBAA purposes. 2045 // FIXME: this should get propagated down through anonymous structs 2046 // and unions. 2047 if (mayAlias && LV.getTBAAInfo()) 2048 LV.setTBAAInfo(CGM.getTBAAInfo(getContext().CharTy)); 2049 2050 return LV; 2051 } 2052 2053 LValue 2054 CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value *BaseValue, 2055 const FieldDecl *Field, 2056 unsigned CVRQualifiers) { 2057 QualType FieldType = Field->getType(); 2058 2059 if (!FieldType->isReferenceType()) 2060 return EmitLValueForField(BaseValue, Field, CVRQualifiers); 2061 2062 const CGRecordLayout &RL = 2063 CGM.getTypes().getCGRecordLayout(Field->getParent()); 2064 unsigned idx = RL.getLLVMFieldNo(Field); 2065 llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx); 2066 assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs"); 2067 2068 2069 // Make sure that the address is pointing to the right type. This is critical 2070 // for both unions and structs. A union needs a bitcast, a struct element 2071 // will need a bitcast if the LLVM type laid out doesn't match the desired 2072 // type. 2073 llvm::Type *llvmType = ConvertTypeForMem(FieldType); 2074 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace(); 2075 V = Builder.CreateBitCast(V, llvmType->getPointerTo(AS)); 2076 2077 CharUnits Alignment = getContext().getDeclAlign(Field); 2078 return MakeAddrLValue(V, FieldType, Alignment); 2079 } 2080 2081 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){ 2082 if (E->isFileScope()) { 2083 llvm::Value *GlobalPtr = CGM.GetAddrOfConstantCompoundLiteral(E); 2084 return MakeAddrLValue(GlobalPtr, E->getType()); 2085 } 2086 2087 llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral"); 2088 const Expr *InitExpr = E->getInitializer(); 2089 LValue Result = MakeAddrLValue(DeclPtr, E->getType()); 2090 2091 EmitAnyExprToMem(InitExpr, DeclPtr, E->getType().getQualifiers(), 2092 /*Init*/ true); 2093 2094 return Result; 2095 } 2096 2097 LValue CodeGenFunction:: 2098 EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) { 2099 if (!expr->isGLValue()) { 2100 // ?: here should be an aggregate. 2101 assert((hasAggregateLLVMType(expr->getType()) && 2102 !expr->getType()->isAnyComplexType()) && 2103 "Unexpected conditional operator!"); 2104 return EmitAggExprToLValue(expr); 2105 } 2106 2107 OpaqueValueMapping binding(*this, expr); 2108 2109 const Expr *condExpr = expr->getCond(); 2110 bool CondExprBool; 2111 if (ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) { 2112 const Expr *live = expr->getTrueExpr(), *dead = expr->getFalseExpr(); 2113 if (!CondExprBool) std::swap(live, dead); 2114 2115 if (!ContainsLabel(dead)) 2116 return EmitLValue(live); 2117 } 2118 2119 llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true"); 2120 llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false"); 2121 llvm::BasicBlock *contBlock = createBasicBlock("cond.end"); 2122 2123 ConditionalEvaluation eval(*this); 2124 EmitBranchOnBoolExpr(condExpr, lhsBlock, rhsBlock); 2125 2126 // Any temporaries created here are conditional. 2127 EmitBlock(lhsBlock); 2128 eval.begin(*this); 2129 LValue lhs = EmitLValue(expr->getTrueExpr()); 2130 eval.end(*this); 2131 2132 if (!lhs.isSimple()) 2133 return EmitUnsupportedLValue(expr, "conditional operator"); 2134 2135 lhsBlock = Builder.GetInsertBlock(); 2136 Builder.CreateBr(contBlock); 2137 2138 // Any temporaries created here are conditional. 2139 EmitBlock(rhsBlock); 2140 eval.begin(*this); 2141 LValue rhs = EmitLValue(expr->getFalseExpr()); 2142 eval.end(*this); 2143 if (!rhs.isSimple()) 2144 return EmitUnsupportedLValue(expr, "conditional operator"); 2145 rhsBlock = Builder.GetInsertBlock(); 2146 2147 EmitBlock(contBlock); 2148 2149 llvm::PHINode *phi = Builder.CreatePHI(lhs.getAddress()->getType(), 2, 2150 "cond-lvalue"); 2151 phi->addIncoming(lhs.getAddress(), lhsBlock); 2152 phi->addIncoming(rhs.getAddress(), rhsBlock); 2153 return MakeAddrLValue(phi, expr->getType()); 2154 } 2155 2156 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast. 2157 /// If the cast is a dynamic_cast, we can have the usual lvalue result, 2158 /// otherwise if a cast is needed by the code generator in an lvalue context, 2159 /// then it must mean that we need the address of an aggregate in order to 2160 /// access one of its fields. This can happen for all the reasons that casts 2161 /// are permitted with aggregate result, including noop aggregate casts, and 2162 /// cast from scalar to union. 2163 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { 2164 switch (E->getCastKind()) { 2165 case CK_ToVoid: 2166 return EmitUnsupportedLValue(E, "unexpected cast lvalue"); 2167 2168 case CK_Dependent: 2169 llvm_unreachable("dependent cast kind in IR gen!"); 2170 2171 // These two casts are currently treated as no-ops, although they could 2172 // potentially be real operations depending on the target's ABI. 2173 case CK_NonAtomicToAtomic: 2174 case CK_AtomicToNonAtomic: 2175 2176 case CK_NoOp: 2177 case CK_LValueToRValue: 2178 if (!E->getSubExpr()->Classify(getContext()).isPRValue() 2179 || E->getType()->isRecordType()) 2180 return EmitLValue(E->getSubExpr()); 2181 // Fall through to synthesize a temporary. 2182 2183 case CK_BitCast: 2184 case CK_ArrayToPointerDecay: 2185 case CK_FunctionToPointerDecay: 2186 case CK_NullToMemberPointer: 2187 case CK_NullToPointer: 2188 case CK_IntegralToPointer: 2189 case CK_PointerToIntegral: 2190 case CK_PointerToBoolean: 2191 case CK_VectorSplat: 2192 case CK_IntegralCast: 2193 case CK_IntegralToBoolean: 2194 case CK_IntegralToFloating: 2195 case CK_FloatingToIntegral: 2196 case CK_FloatingToBoolean: 2197 case CK_FloatingCast: 2198 case CK_FloatingRealToComplex: 2199 case CK_FloatingComplexToReal: 2200 case CK_FloatingComplexToBoolean: 2201 case CK_FloatingComplexCast: 2202 case CK_FloatingComplexToIntegralComplex: 2203 case CK_IntegralRealToComplex: 2204 case CK_IntegralComplexToReal: 2205 case CK_IntegralComplexToBoolean: 2206 case CK_IntegralComplexCast: 2207 case CK_IntegralComplexToFloatingComplex: 2208 case CK_DerivedToBaseMemberPointer: 2209 case CK_BaseToDerivedMemberPointer: 2210 case CK_MemberPointerToBoolean: 2211 case CK_ReinterpretMemberPointer: 2212 case CK_AnyPointerToBlockPointerCast: 2213 case CK_ARCProduceObject: 2214 case CK_ARCConsumeObject: 2215 case CK_ARCReclaimReturnedObject: 2216 case CK_ARCExtendBlockObject: 2217 case CK_CopyAndAutoreleaseBlockObject: { 2218 // These casts only produce lvalues when we're binding a reference to a 2219 // temporary realized from a (converted) pure rvalue. Emit the expression 2220 // as a value, copy it into a temporary, and return an lvalue referring to 2221 // that temporary. 2222 llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp"); 2223 EmitAnyExprToMem(E, V, E->getType().getQualifiers(), false); 2224 return MakeAddrLValue(V, E->getType()); 2225 } 2226 2227 case CK_Dynamic: { 2228 LValue LV = EmitLValue(E->getSubExpr()); 2229 llvm::Value *V = LV.getAddress(); 2230 const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E); 2231 return MakeAddrLValue(EmitDynamicCast(V, DCE), E->getType()); 2232 } 2233 2234 case CK_ConstructorConversion: 2235 case CK_UserDefinedConversion: 2236 case CK_CPointerToObjCPointerCast: 2237 case CK_BlockPointerToObjCPointerCast: 2238 return EmitLValue(E->getSubExpr()); 2239 2240 case CK_UncheckedDerivedToBase: 2241 case CK_DerivedToBase: { 2242 const RecordType *DerivedClassTy = 2243 E->getSubExpr()->getType()->getAs<RecordType>(); 2244 CXXRecordDecl *DerivedClassDecl = 2245 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 2246 2247 LValue LV = EmitLValue(E->getSubExpr()); 2248 llvm::Value *This = LV.getAddress(); 2249 2250 // Perform the derived-to-base conversion 2251 llvm::Value *Base = 2252 GetAddressOfBaseClass(This, DerivedClassDecl, 2253 E->path_begin(), E->path_end(), 2254 /*NullCheckValue=*/false); 2255 2256 return MakeAddrLValue(Base, E->getType()); 2257 } 2258 case CK_ToUnion: 2259 return EmitAggExprToLValue(E); 2260 case CK_BaseToDerived: { 2261 const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>(); 2262 CXXRecordDecl *DerivedClassDecl = 2263 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 2264 2265 LValue LV = EmitLValue(E->getSubExpr()); 2266 2267 // Perform the base-to-derived conversion 2268 llvm::Value *Derived = 2269 GetAddressOfDerivedClass(LV.getAddress(), DerivedClassDecl, 2270 E->path_begin(), E->path_end(), 2271 /*NullCheckValue=*/false); 2272 2273 return MakeAddrLValue(Derived, E->getType()); 2274 } 2275 case CK_LValueBitCast: { 2276 // This must be a reinterpret_cast (or c-style equivalent). 2277 const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); 2278 2279 LValue LV = EmitLValue(E->getSubExpr()); 2280 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 2281 ConvertType(CE->getTypeAsWritten())); 2282 return MakeAddrLValue(V, E->getType()); 2283 } 2284 case CK_ObjCObjectLValueCast: { 2285 LValue LV = EmitLValue(E->getSubExpr()); 2286 QualType ToType = getContext().getLValueReferenceType(E->getType()); 2287 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 2288 ConvertType(ToType)); 2289 return MakeAddrLValue(V, E->getType()); 2290 } 2291 } 2292 2293 llvm_unreachable("Unhandled lvalue cast kind?"); 2294 } 2295 2296 LValue CodeGenFunction::EmitNullInitializationLValue( 2297 const CXXScalarValueInitExpr *E) { 2298 QualType Ty = E->getType(); 2299 LValue LV = MakeAddrLValue(CreateMemTemp(Ty), Ty); 2300 EmitNullInitialization(LV.getAddress(), Ty); 2301 return LV; 2302 } 2303 2304 LValue CodeGenFunction::EmitOpaqueValueLValue(const OpaqueValueExpr *e) { 2305 assert(OpaqueValueMappingData::shouldBindAsLValue(e)); 2306 return getOpaqueLValueMapping(e); 2307 } 2308 2309 LValue CodeGenFunction::EmitMaterializeTemporaryExpr( 2310 const MaterializeTemporaryExpr *E) { 2311 RValue RV = EmitReferenceBindingToExpr(E, /*InitializedDecl=*/0); 2312 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2313 } 2314 2315 2316 //===--------------------------------------------------------------------===// 2317 // Expression Emission 2318 //===--------------------------------------------------------------------===// 2319 2320 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, 2321 ReturnValueSlot ReturnValue) { 2322 if (CGDebugInfo *DI = getDebugInfo()) 2323 DI->EmitLocation(Builder, E->getLocStart()); 2324 2325 // Builtins never have block type. 2326 if (E->getCallee()->getType()->isBlockPointerType()) 2327 return EmitBlockCallExpr(E, ReturnValue); 2328 2329 if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E)) 2330 return EmitCXXMemberCallExpr(CE, ReturnValue); 2331 2332 if (const CUDAKernelCallExpr *CE = dyn_cast<CUDAKernelCallExpr>(E)) 2333 return EmitCUDAKernelCallExpr(CE, ReturnValue); 2334 2335 const Decl *TargetDecl = E->getCalleeDecl(); 2336 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl)) { 2337 if (unsigned builtinID = FD->getBuiltinID()) 2338 return EmitBuiltinExpr(FD, builtinID, E); 2339 } 2340 2341 if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E)) 2342 if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl)) 2343 return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue); 2344 2345 if (const CXXPseudoDestructorExpr *PseudoDtor 2346 = dyn_cast<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) { 2347 QualType DestroyedType = PseudoDtor->getDestroyedType(); 2348 if (getContext().getLangOptions().ObjCAutoRefCount && 2349 DestroyedType->isObjCLifetimeType() && 2350 (DestroyedType.getObjCLifetime() == Qualifiers::OCL_Strong || 2351 DestroyedType.getObjCLifetime() == Qualifiers::OCL_Weak)) { 2352 // Automatic Reference Counting: 2353 // If the pseudo-expression names a retainable object with weak or 2354 // strong lifetime, the object shall be released. 2355 Expr *BaseExpr = PseudoDtor->getBase(); 2356 llvm::Value *BaseValue = NULL; 2357 Qualifiers BaseQuals; 2358 2359 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 2360 if (PseudoDtor->isArrow()) { 2361 BaseValue = EmitScalarExpr(BaseExpr); 2362 const PointerType *PTy = BaseExpr->getType()->getAs<PointerType>(); 2363 BaseQuals = PTy->getPointeeType().getQualifiers(); 2364 } else { 2365 LValue BaseLV = EmitLValue(BaseExpr); 2366 BaseValue = BaseLV.getAddress(); 2367 QualType BaseTy = BaseExpr->getType(); 2368 BaseQuals = BaseTy.getQualifiers(); 2369 } 2370 2371 switch (PseudoDtor->getDestroyedType().getObjCLifetime()) { 2372 case Qualifiers::OCL_None: 2373 case Qualifiers::OCL_ExplicitNone: 2374 case Qualifiers::OCL_Autoreleasing: 2375 break; 2376 2377 case Qualifiers::OCL_Strong: 2378 EmitARCRelease(Builder.CreateLoad(BaseValue, 2379 PseudoDtor->getDestroyedType().isVolatileQualified()), 2380 /*precise*/ true); 2381 break; 2382 2383 case Qualifiers::OCL_Weak: 2384 EmitARCDestroyWeak(BaseValue); 2385 break; 2386 } 2387 } else { 2388 // C++ [expr.pseudo]p1: 2389 // The result shall only be used as the operand for the function call 2390 // operator (), and the result of such a call has type void. The only 2391 // effect is the evaluation of the postfix-expression before the dot or 2392 // arrow. 2393 EmitScalarExpr(E->getCallee()); 2394 } 2395 2396 return RValue::get(0); 2397 } 2398 2399 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 2400 return EmitCall(E->getCallee()->getType(), Callee, ReturnValue, 2401 E->arg_begin(), E->arg_end(), TargetDecl); 2402 } 2403 2404 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 2405 // Comma expressions just emit their LHS then their RHS as an l-value. 2406 if (E->getOpcode() == BO_Comma) { 2407 EmitIgnoredExpr(E->getLHS()); 2408 EnsureInsertPoint(); 2409 return EmitLValue(E->getRHS()); 2410 } 2411 2412 if (E->getOpcode() == BO_PtrMemD || 2413 E->getOpcode() == BO_PtrMemI) 2414 return EmitPointerToDataMemberBinaryExpr(E); 2415 2416 assert(E->getOpcode() == BO_Assign && "unexpected binary l-value"); 2417 2418 // Note that in all of these cases, __block variables need the RHS 2419 // evaluated first just in case the variable gets moved by the RHS. 2420 2421 if (!hasAggregateLLVMType(E->getType())) { 2422 switch (E->getLHS()->getType().getObjCLifetime()) { 2423 case Qualifiers::OCL_Strong: 2424 return EmitARCStoreStrong(E, /*ignored*/ false).first; 2425 2426 case Qualifiers::OCL_Autoreleasing: 2427 return EmitARCStoreAutoreleasing(E).first; 2428 2429 // No reason to do any of these differently. 2430 case Qualifiers::OCL_None: 2431 case Qualifiers::OCL_ExplicitNone: 2432 case Qualifiers::OCL_Weak: 2433 break; 2434 } 2435 2436 RValue RV = EmitAnyExpr(E->getRHS()); 2437 LValue LV = EmitLValue(E->getLHS()); 2438 EmitStoreThroughLValue(RV, LV); 2439 return LV; 2440 } 2441 2442 if (E->getType()->isAnyComplexType()) 2443 return EmitComplexAssignmentLValue(E); 2444 2445 return EmitAggExprToLValue(E); 2446 } 2447 2448 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 2449 RValue RV = EmitCallExpr(E); 2450 2451 if (!RV.isScalar()) 2452 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2453 2454 assert(E->getCallReturnType()->isReferenceType() && 2455 "Can't have a scalar return unless the return type is a " 2456 "reference type!"); 2457 2458 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2459 } 2460 2461 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) { 2462 // FIXME: This shouldn't require another copy. 2463 return EmitAggExprToLValue(E); 2464 } 2465 2466 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) { 2467 assert(E->getType()->getAsCXXRecordDecl()->hasTrivialDestructor() 2468 && "binding l-value to type which needs a temporary"); 2469 AggValueSlot Slot = CreateAggTemp(E->getType()); 2470 EmitCXXConstructExpr(E, Slot); 2471 return MakeAddrLValue(Slot.getAddr(), E->getType()); 2472 } 2473 2474 LValue 2475 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) { 2476 return MakeAddrLValue(EmitCXXTypeidExpr(E), E->getType()); 2477 } 2478 2479 LValue 2480 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) { 2481 AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue"); 2482 Slot.setExternallyDestructed(); 2483 EmitAggExpr(E->getSubExpr(), Slot); 2484 EmitCXXTemporary(E->getTemporary(), E->getType(), Slot.getAddr()); 2485 return MakeAddrLValue(Slot.getAddr(), E->getType()); 2486 } 2487 2488 LValue 2489 CodeGenFunction::EmitLambdaLValue(const LambdaExpr *E) { 2490 AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue"); 2491 EmitLambdaExpr(E, Slot); 2492 return MakeAddrLValue(Slot.getAddr(), E->getType()); 2493 } 2494 2495 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 2496 RValue RV = EmitObjCMessageExpr(E); 2497 2498 if (!RV.isScalar()) 2499 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2500 2501 assert(E->getMethodDecl()->getResultType()->isReferenceType() && 2502 "Can't have a scalar return unless the return type is a " 2503 "reference type!"); 2504 2505 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 2506 } 2507 2508 LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) { 2509 llvm::Value *V = 2510 CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true); 2511 return MakeAddrLValue(V, E->getType()); 2512 } 2513 2514 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, 2515 const ObjCIvarDecl *Ivar) { 2516 return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); 2517 } 2518 2519 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy, 2520 llvm::Value *BaseValue, 2521 const ObjCIvarDecl *Ivar, 2522 unsigned CVRQualifiers) { 2523 return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue, 2524 Ivar, CVRQualifiers); 2525 } 2526 2527 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 2528 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 2529 llvm::Value *BaseValue = 0; 2530 const Expr *BaseExpr = E->getBase(); 2531 Qualifiers BaseQuals; 2532 QualType ObjectTy; 2533 if (E->isArrow()) { 2534 BaseValue = EmitScalarExpr(BaseExpr); 2535 ObjectTy = BaseExpr->getType()->getPointeeType(); 2536 BaseQuals = ObjectTy.getQualifiers(); 2537 } else { 2538 LValue BaseLV = EmitLValue(BaseExpr); 2539 // FIXME: this isn't right for bitfields. 2540 BaseValue = BaseLV.getAddress(); 2541 ObjectTy = BaseExpr->getType(); 2542 BaseQuals = ObjectTy.getQualifiers(); 2543 } 2544 2545 LValue LV = 2546 EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 2547 BaseQuals.getCVRQualifiers()); 2548 setObjCGCLValueClass(getContext(), E, LV); 2549 return LV; 2550 } 2551 2552 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) { 2553 // Can only get l-value for message expression returning aggregate type 2554 RValue RV = EmitAnyExprToTemp(E); 2555 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 2556 } 2557 2558 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee, 2559 ReturnValueSlot ReturnValue, 2560 CallExpr::const_arg_iterator ArgBeg, 2561 CallExpr::const_arg_iterator ArgEnd, 2562 const Decl *TargetDecl) { 2563 // Get the actual function type. The callee type will always be a pointer to 2564 // function type or a block pointer type. 2565 assert(CalleeType->isFunctionPointerType() && 2566 "Call must have function pointer type!"); 2567 2568 CalleeType = getContext().getCanonicalType(CalleeType); 2569 2570 const FunctionType *FnType 2571 = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType()); 2572 2573 CallArgList Args; 2574 EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); 2575 2576 const CGFunctionInfo &FnInfo = 2577 CGM.getTypes().arrangeFunctionCall(Args, FnType); 2578 2579 // C99 6.5.2.2p6: 2580 // If the expression that denotes the called function has a type 2581 // that does not include a prototype, [the default argument 2582 // promotions are performed]. If the number of arguments does not 2583 // equal the number of parameters, the behavior is undefined. If 2584 // the function is defined with a type that includes a prototype, 2585 // and either the prototype ends with an ellipsis (, ...) or the 2586 // types of the arguments after promotion are not compatible with 2587 // the types of the parameters, the behavior is undefined. If the 2588 // function is defined with a type that does not include a 2589 // prototype, and the types of the arguments after promotion are 2590 // not compatible with those of the parameters after promotion, 2591 // the behavior is undefined [except in some trivial cases]. 2592 // That is, in the general case, we should assume that a call 2593 // through an unprototyped function type works like a *non-variadic* 2594 // call. The way we make this work is to cast to the exact type 2595 // of the promoted arguments. 2596 if (isa<FunctionNoProtoType>(FnType) && !FnInfo.isVariadic()) { 2597 llvm::Type *CalleeTy = getTypes().GetFunctionType(FnInfo); 2598 CalleeTy = CalleeTy->getPointerTo(); 2599 Callee = Builder.CreateBitCast(Callee, CalleeTy, "callee.knr.cast"); 2600 } 2601 2602 return EmitCall(FnInfo, Callee, ReturnValue, Args, TargetDecl); 2603 } 2604 2605 LValue CodeGenFunction:: 2606 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) { 2607 llvm::Value *BaseV; 2608 if (E->getOpcode() == BO_PtrMemI) 2609 BaseV = EmitScalarExpr(E->getLHS()); 2610 else 2611 BaseV = EmitLValue(E->getLHS()).getAddress(); 2612 2613 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS()); 2614 2615 const MemberPointerType *MPT 2616 = E->getRHS()->getType()->getAs<MemberPointerType>(); 2617 2618 llvm::Value *AddV = 2619 CGM.getCXXABI().EmitMemberDataPointerAddress(*this, BaseV, OffsetV, MPT); 2620 2621 return MakeAddrLValue(AddV, MPT->getPointeeType()); 2622 } 2623 2624 static void 2625 EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, llvm::Value *Dest, 2626 llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2, 2627 uint64_t Size, unsigned Align, llvm::AtomicOrdering Order) { 2628 if (E->isCmpXChg()) { 2629 // Note that cmpxchg only supports specifying one ordering and 2630 // doesn't support weak cmpxchg, at least at the moment. 2631 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 2632 LoadVal1->setAlignment(Align); 2633 llvm::LoadInst *LoadVal2 = CGF.Builder.CreateLoad(Val2); 2634 LoadVal2->setAlignment(Align); 2635 llvm::AtomicCmpXchgInst *CXI = 2636 CGF.Builder.CreateAtomicCmpXchg(Ptr, LoadVal1, LoadVal2, Order); 2637 CXI->setVolatile(E->isVolatile()); 2638 llvm::StoreInst *StoreVal1 = CGF.Builder.CreateStore(CXI, Val1); 2639 StoreVal1->setAlignment(Align); 2640 llvm::Value *Cmp = CGF.Builder.CreateICmpEQ(CXI, LoadVal1); 2641 CGF.EmitStoreOfScalar(Cmp, CGF.MakeAddrLValue(Dest, E->getType())); 2642 return; 2643 } 2644 2645 if (E->getOp() == AtomicExpr::Load) { 2646 llvm::LoadInst *Load = CGF.Builder.CreateLoad(Ptr); 2647 Load->setAtomic(Order); 2648 Load->setAlignment(Size); 2649 Load->setVolatile(E->isVolatile()); 2650 llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(Load, Dest); 2651 StoreDest->setAlignment(Align); 2652 return; 2653 } 2654 2655 if (E->getOp() == AtomicExpr::Store) { 2656 assert(!Dest && "Store does not return a value"); 2657 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 2658 LoadVal1->setAlignment(Align); 2659 llvm::StoreInst *Store = CGF.Builder.CreateStore(LoadVal1, Ptr); 2660 Store->setAtomic(Order); 2661 Store->setAlignment(Size); 2662 Store->setVolatile(E->isVolatile()); 2663 return; 2664 } 2665 2666 llvm::AtomicRMWInst::BinOp Op = llvm::AtomicRMWInst::Add; 2667 switch (E->getOp()) { 2668 case AtomicExpr::CmpXchgWeak: 2669 case AtomicExpr::CmpXchgStrong: 2670 case AtomicExpr::Store: 2671 case AtomicExpr::Init: 2672 case AtomicExpr::Load: assert(0 && "Already handled!"); 2673 case AtomicExpr::Add: Op = llvm::AtomicRMWInst::Add; break; 2674 case AtomicExpr::Sub: Op = llvm::AtomicRMWInst::Sub; break; 2675 case AtomicExpr::And: Op = llvm::AtomicRMWInst::And; break; 2676 case AtomicExpr::Or: Op = llvm::AtomicRMWInst::Or; break; 2677 case AtomicExpr::Xor: Op = llvm::AtomicRMWInst::Xor; break; 2678 case AtomicExpr::Xchg: Op = llvm::AtomicRMWInst::Xchg; break; 2679 } 2680 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 2681 LoadVal1->setAlignment(Align); 2682 llvm::AtomicRMWInst *RMWI = 2683 CGF.Builder.CreateAtomicRMW(Op, Ptr, LoadVal1, Order); 2684 RMWI->setVolatile(E->isVolatile()); 2685 llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(RMWI, Dest); 2686 StoreDest->setAlignment(Align); 2687 } 2688 2689 // This function emits any expression (scalar, complex, or aggregate) 2690 // into a temporary alloca. 2691 static llvm::Value * 2692 EmitValToTemp(CodeGenFunction &CGF, Expr *E) { 2693 llvm::Value *DeclPtr = CGF.CreateMemTemp(E->getType(), ".atomictmp"); 2694 CGF.EmitAnyExprToMem(E, DeclPtr, E->getType().getQualifiers(), 2695 /*Init*/ true); 2696 return DeclPtr; 2697 } 2698 2699 static RValue ConvertTempToRValue(CodeGenFunction &CGF, QualType Ty, 2700 llvm::Value *Dest) { 2701 if (Ty->isAnyComplexType()) 2702 return RValue::getComplex(CGF.LoadComplexFromAddr(Dest, false)); 2703 if (CGF.hasAggregateLLVMType(Ty)) 2704 return RValue::getAggregate(Dest); 2705 return RValue::get(CGF.EmitLoadOfScalar(CGF.MakeAddrLValue(Dest, Ty))); 2706 } 2707 2708 RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E, llvm::Value *Dest) { 2709 QualType AtomicTy = E->getPtr()->getType()->getPointeeType(); 2710 QualType MemTy = AtomicTy->getAs<AtomicType>()->getValueType(); 2711 CharUnits sizeChars = getContext().getTypeSizeInChars(AtomicTy); 2712 uint64_t Size = sizeChars.getQuantity(); 2713 CharUnits alignChars = getContext().getTypeAlignInChars(AtomicTy); 2714 unsigned Align = alignChars.getQuantity(); 2715 unsigned MaxInlineWidth = 2716 getContext().getTargetInfo().getMaxAtomicInlineWidth(); 2717 bool UseLibcall = (Size != Align || Size > MaxInlineWidth); 2718 2719 2720 2721 llvm::Value *Ptr, *Order, *OrderFail = 0, *Val1 = 0, *Val2 = 0; 2722 Ptr = EmitScalarExpr(E->getPtr()); 2723 2724 if (E->getOp() == AtomicExpr::Init) { 2725 assert(!Dest && "Init does not return a value"); 2726 Val1 = EmitScalarExpr(E->getVal1()); 2727 llvm::StoreInst *Store = Builder.CreateStore(Val1, Ptr); 2728 Store->setAlignment(Size); 2729 Store->setVolatile(E->isVolatile()); 2730 return RValue::get(0); 2731 } 2732 2733 Order = EmitScalarExpr(E->getOrder()); 2734 if (E->isCmpXChg()) { 2735 Val1 = EmitScalarExpr(E->getVal1()); 2736 Val2 = EmitValToTemp(*this, E->getVal2()); 2737 OrderFail = EmitScalarExpr(E->getOrderFail()); 2738 (void)OrderFail; // OrderFail is unused at the moment 2739 } else if ((E->getOp() == AtomicExpr::Add || E->getOp() == AtomicExpr::Sub) && 2740 MemTy->isPointerType()) { 2741 // For pointers, we're required to do a bit of math: adding 1 to an int* 2742 // is not the same as adding 1 to a uintptr_t. 2743 QualType Val1Ty = E->getVal1()->getType(); 2744 llvm::Value *Val1Scalar = EmitScalarExpr(E->getVal1()); 2745 CharUnits PointeeIncAmt = 2746 getContext().getTypeSizeInChars(MemTy->getPointeeType()); 2747 Val1Scalar = Builder.CreateMul(Val1Scalar, CGM.getSize(PointeeIncAmt)); 2748 Val1 = CreateMemTemp(Val1Ty, ".atomictmp"); 2749 EmitStoreOfScalar(Val1Scalar, MakeAddrLValue(Val1, Val1Ty)); 2750 } else if (E->getOp() != AtomicExpr::Load) { 2751 Val1 = EmitValToTemp(*this, E->getVal1()); 2752 } 2753 2754 if (E->getOp() != AtomicExpr::Store && !Dest) 2755 Dest = CreateMemTemp(E->getType(), ".atomicdst"); 2756 2757 if (UseLibcall) { 2758 // FIXME: Finalize what the libcalls are actually supposed to look like. 2759 // See also http://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary . 2760 return EmitUnsupportedRValue(E, "atomic library call"); 2761 } 2762 #if 0 2763 if (UseLibcall) { 2764 const char* LibCallName; 2765 switch (E->getOp()) { 2766 case AtomicExpr::CmpXchgWeak: 2767 LibCallName = "__atomic_compare_exchange_generic"; break; 2768 case AtomicExpr::CmpXchgStrong: 2769 LibCallName = "__atomic_compare_exchange_generic"; break; 2770 case AtomicExpr::Add: LibCallName = "__atomic_fetch_add_generic"; break; 2771 case AtomicExpr::Sub: LibCallName = "__atomic_fetch_sub_generic"; break; 2772 case AtomicExpr::And: LibCallName = "__atomic_fetch_and_generic"; break; 2773 case AtomicExpr::Or: LibCallName = "__atomic_fetch_or_generic"; break; 2774 case AtomicExpr::Xor: LibCallName = "__atomic_fetch_xor_generic"; break; 2775 case AtomicExpr::Xchg: LibCallName = "__atomic_exchange_generic"; break; 2776 case AtomicExpr::Store: LibCallName = "__atomic_store_generic"; break; 2777 case AtomicExpr::Load: LibCallName = "__atomic_load_generic"; break; 2778 } 2779 llvm::SmallVector<QualType, 4> Params; 2780 CallArgList Args; 2781 QualType RetTy = getContext().VoidTy; 2782 if (E->getOp() != AtomicExpr::Store && !E->isCmpXChg()) 2783 Args.add(RValue::get(EmitCastToVoidPtr(Dest)), 2784 getContext().VoidPtrTy); 2785 Args.add(RValue::get(EmitCastToVoidPtr(Ptr)), 2786 getContext().VoidPtrTy); 2787 if (E->getOp() != AtomicExpr::Load) 2788 Args.add(RValue::get(EmitCastToVoidPtr(Val1)), 2789 getContext().VoidPtrTy); 2790 if (E->isCmpXChg()) { 2791 Args.add(RValue::get(EmitCastToVoidPtr(Val2)), 2792 getContext().VoidPtrTy); 2793 RetTy = getContext().IntTy; 2794 } 2795 Args.add(RValue::get(llvm::ConstantInt::get(SizeTy, Size)), 2796 getContext().getSizeType()); 2797 const CGFunctionInfo &FuncInfo = 2798 CGM.getTypes().arrangeFunctionCall(RetTy, Args, FunctionType::ExtInfo(), 2799 /*variadic*/ false); 2800 llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FuncInfo, false); 2801 llvm::Constant *Func = CGM.CreateRuntimeFunction(FTy, LibCallName); 2802 RValue Res = EmitCall(FuncInfo, Func, ReturnValueSlot(), Args); 2803 if (E->isCmpXChg()) 2804 return Res; 2805 if (E->getOp() == AtomicExpr::Store) 2806 return RValue::get(0); 2807 return ConvertTempToRValue(*this, E->getType(), Dest); 2808 } 2809 #endif 2810 llvm::Type *IPtrTy = 2811 llvm::IntegerType::get(getLLVMContext(), Size * 8)->getPointerTo(); 2812 llvm::Value *OrigDest = Dest; 2813 Ptr = Builder.CreateBitCast(Ptr, IPtrTy); 2814 if (Val1) Val1 = Builder.CreateBitCast(Val1, IPtrTy); 2815 if (Val2) Val2 = Builder.CreateBitCast(Val2, IPtrTy); 2816 if (Dest && !E->isCmpXChg()) Dest = Builder.CreateBitCast(Dest, IPtrTy); 2817 2818 if (isa<llvm::ConstantInt>(Order)) { 2819 int ord = cast<llvm::ConstantInt>(Order)->getZExtValue(); 2820 switch (ord) { 2821 case 0: // memory_order_relaxed 2822 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2823 llvm::Monotonic); 2824 break; 2825 case 1: // memory_order_consume 2826 case 2: // memory_order_acquire 2827 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2828 llvm::Acquire); 2829 break; 2830 case 3: // memory_order_release 2831 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2832 llvm::Release); 2833 break; 2834 case 4: // memory_order_acq_rel 2835 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2836 llvm::AcquireRelease); 2837 break; 2838 case 5: // memory_order_seq_cst 2839 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2840 llvm::SequentiallyConsistent); 2841 break; 2842 default: // invalid order 2843 // We should not ever get here normally, but it's hard to 2844 // enforce that in general. 2845 break; 2846 } 2847 if (E->getOp() == AtomicExpr::Store || E->getOp() == AtomicExpr::Init) 2848 return RValue::get(0); 2849 return ConvertTempToRValue(*this, E->getType(), OrigDest); 2850 } 2851 2852 // Long case, when Order isn't obviously constant. 2853 2854 // Create all the relevant BB's 2855 llvm::BasicBlock *MonotonicBB = 0, *AcquireBB = 0, *ReleaseBB = 0, 2856 *AcqRelBB = 0, *SeqCstBB = 0; 2857 MonotonicBB = createBasicBlock("monotonic", CurFn); 2858 if (E->getOp() != AtomicExpr::Store) 2859 AcquireBB = createBasicBlock("acquire", CurFn); 2860 if (E->getOp() != AtomicExpr::Load) 2861 ReleaseBB = createBasicBlock("release", CurFn); 2862 if (E->getOp() != AtomicExpr::Load && E->getOp() != AtomicExpr::Store) 2863 AcqRelBB = createBasicBlock("acqrel", CurFn); 2864 SeqCstBB = createBasicBlock("seqcst", CurFn); 2865 llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn); 2866 2867 // Create the switch for the split 2868 // MonotonicBB is arbitrarily chosen as the default case; in practice, this 2869 // doesn't matter unless someone is crazy enough to use something that 2870 // doesn't fold to a constant for the ordering. 2871 Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false); 2872 llvm::SwitchInst *SI = Builder.CreateSwitch(Order, MonotonicBB); 2873 2874 // Emit all the different atomics 2875 Builder.SetInsertPoint(MonotonicBB); 2876 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2877 llvm::Monotonic); 2878 Builder.CreateBr(ContBB); 2879 if (E->getOp() != AtomicExpr::Store) { 2880 Builder.SetInsertPoint(AcquireBB); 2881 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2882 llvm::Acquire); 2883 Builder.CreateBr(ContBB); 2884 SI->addCase(Builder.getInt32(1), AcquireBB); 2885 SI->addCase(Builder.getInt32(2), AcquireBB); 2886 } 2887 if (E->getOp() != AtomicExpr::Load) { 2888 Builder.SetInsertPoint(ReleaseBB); 2889 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2890 llvm::Release); 2891 Builder.CreateBr(ContBB); 2892 SI->addCase(Builder.getInt32(3), ReleaseBB); 2893 } 2894 if (E->getOp() != AtomicExpr::Load && E->getOp() != AtomicExpr::Store) { 2895 Builder.SetInsertPoint(AcqRelBB); 2896 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2897 llvm::AcquireRelease); 2898 Builder.CreateBr(ContBB); 2899 SI->addCase(Builder.getInt32(4), AcqRelBB); 2900 } 2901 Builder.SetInsertPoint(SeqCstBB); 2902 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 2903 llvm::SequentiallyConsistent); 2904 Builder.CreateBr(ContBB); 2905 SI->addCase(Builder.getInt32(5), SeqCstBB); 2906 2907 // Cleanup and return 2908 Builder.SetInsertPoint(ContBB); 2909 if (E->getOp() == AtomicExpr::Store) 2910 return RValue::get(0); 2911 return ConvertTempToRValue(*this, E->getType(), OrigDest); 2912 } 2913 2914 void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, unsigned AccuracyN, 2915 unsigned AccuracyD) { 2916 assert(Val->getType()->isFPOrFPVectorTy()); 2917 if (!AccuracyN || !isa<llvm::Instruction>(Val)) 2918 return; 2919 2920 llvm::Value *Vals[2]; 2921 Vals[0] = llvm::ConstantInt::get(Int32Ty, AccuracyN); 2922 Vals[1] = llvm::ConstantInt::get(Int32Ty, AccuracyD); 2923 llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(), Vals); 2924 2925 cast<llvm::Instruction>(Val)->setMetadata(llvm::LLVMContext::MD_fpaccuracy, 2926 Node); 2927 } 2928 2929 namespace { 2930 struct LValueOrRValue { 2931 LValue LV; 2932 RValue RV; 2933 }; 2934 } 2935 2936 static LValueOrRValue emitPseudoObjectExpr(CodeGenFunction &CGF, 2937 const PseudoObjectExpr *E, 2938 bool forLValue, 2939 AggValueSlot slot) { 2940 llvm::SmallVector<CodeGenFunction::OpaqueValueMappingData, 4> opaques; 2941 2942 // Find the result expression, if any. 2943 const Expr *resultExpr = E->getResultExpr(); 2944 LValueOrRValue result; 2945 2946 for (PseudoObjectExpr::const_semantics_iterator 2947 i = E->semantics_begin(), e = E->semantics_end(); i != e; ++i) { 2948 const Expr *semantic = *i; 2949 2950 // If this semantic expression is an opaque value, bind it 2951 // to the result of its source expression. 2952 if (const OpaqueValueExpr *ov = dyn_cast<OpaqueValueExpr>(semantic)) { 2953 2954 // If this is the result expression, we may need to evaluate 2955 // directly into the slot. 2956 typedef CodeGenFunction::OpaqueValueMappingData OVMA; 2957 OVMA opaqueData; 2958 if (ov == resultExpr && ov->isRValue() && !forLValue && 2959 CodeGenFunction::hasAggregateLLVMType(ov->getType()) && 2960 !ov->getType()->isAnyComplexType()) { 2961 CGF.EmitAggExpr(ov->getSourceExpr(), slot); 2962 2963 LValue LV = CGF.MakeAddrLValue(slot.getAddr(), ov->getType()); 2964 opaqueData = OVMA::bind(CGF, ov, LV); 2965 result.RV = slot.asRValue(); 2966 2967 // Otherwise, emit as normal. 2968 } else { 2969 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr()); 2970 2971 // If this is the result, also evaluate the result now. 2972 if (ov == resultExpr) { 2973 if (forLValue) 2974 result.LV = CGF.EmitLValue(ov); 2975 else 2976 result.RV = CGF.EmitAnyExpr(ov, slot); 2977 } 2978 } 2979 2980 opaques.push_back(opaqueData); 2981 2982 // Otherwise, if the expression is the result, evaluate it 2983 // and remember the result. 2984 } else if (semantic == resultExpr) { 2985 if (forLValue) 2986 result.LV = CGF.EmitLValue(semantic); 2987 else 2988 result.RV = CGF.EmitAnyExpr(semantic, slot); 2989 2990 // Otherwise, evaluate the expression in an ignored context. 2991 } else { 2992 CGF.EmitIgnoredExpr(semantic); 2993 } 2994 } 2995 2996 // Unbind all the opaques now. 2997 for (unsigned i = 0, e = opaques.size(); i != e; ++i) 2998 opaques[i].unbind(CGF); 2999 3000 return result; 3001 } 3002 3003 RValue CodeGenFunction::EmitPseudoObjectRValue(const PseudoObjectExpr *E, 3004 AggValueSlot slot) { 3005 return emitPseudoObjectExpr(*this, E, false, slot).RV; 3006 } 3007 3008 LValue CodeGenFunction::EmitPseudoObjectLValue(const PseudoObjectExpr *E) { 3009 return emitPseudoObjectExpr(*this, E, true, AggValueSlot::ignored()).LV; 3010 } 3011