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