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