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 "CGObjCRuntime.h" 18 #include "clang/AST/ASTContext.h" 19 #include "clang/AST/DeclObjC.h" 20 #include "llvm/Target/TargetData.h" 21 using namespace clang; 22 using namespace CodeGen; 23 24 //===--------------------------------------------------------------------===// 25 // Miscellaneous Helper Methods 26 //===--------------------------------------------------------------------===// 27 28 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 29 /// block. 30 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty, 31 const llvm::Twine &Name) { 32 if (!Builder.isNamePreserving()) 33 return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt); 34 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 35 } 36 37 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 38 /// expression and compare the result against zero, returning an Int1Ty value. 39 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 40 QualType BoolTy = getContext().BoolTy; 41 if (!E->getType()->isAnyComplexType()) 42 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 43 44 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 45 } 46 47 /// EmitAnyExpr - Emit code to compute the specified expression which can have 48 /// any type. The result is returned as an RValue struct. If this is an 49 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where the 50 /// result should be returned. 51 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc, 52 bool IsAggLocVolatile, bool IgnoreResult, 53 bool IsInitializer) { 54 if (!hasAggregateLLVMType(E->getType())) 55 return RValue::get(EmitScalarExpr(E, IgnoreResult)); 56 else if (E->getType()->isAnyComplexType()) 57 return RValue::getComplex(EmitComplexExpr(E, false, false, 58 IgnoreResult, IgnoreResult)); 59 60 EmitAggExpr(E, AggLoc, IsAggLocVolatile, IgnoreResult, IsInitializer); 61 return RValue::getAggregate(AggLoc, IsAggLocVolatile); 62 } 63 64 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 65 /// always be accessible even if no aggregate location is provided. 66 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E, 67 bool IsAggLocVolatile, 68 bool IsInitializer) { 69 llvm::Value *AggLoc = 0; 70 71 if (hasAggregateLLVMType(E->getType()) && 72 !E->getType()->isAnyComplexType()) 73 AggLoc = CreateTempAlloca(ConvertType(E->getType()), "agg.tmp"); 74 return EmitAnyExpr(E, AggLoc, IsAggLocVolatile, /*IgnoreResult=*/false, 75 IsInitializer); 76 } 77 78 RValue CodeGenFunction::EmitReferenceBindingToExpr(const Expr* E, 79 QualType DestType, 80 bool IsInitializer) { 81 bool ShouldDestroyTemporaries = false; 82 unsigned OldNumLiveTemporaries = 0; 83 84 if (const CXXExprWithTemporaries *TE = dyn_cast<CXXExprWithTemporaries>(E)) { 85 ShouldDestroyTemporaries = TE->shouldDestroyTemporaries(); 86 87 // Keep track of the current cleanup stack depth. 88 if (ShouldDestroyTemporaries) 89 OldNumLiveTemporaries = LiveTemporaries.size(); 90 91 E = TE->getSubExpr(); 92 } 93 94 RValue Val; 95 if (E->isLvalue(getContext()) == Expr::LV_Valid) { 96 // Emit the expr as an lvalue. 97 LValue LV = EmitLValue(E); 98 if (LV.isSimple()) 99 return RValue::get(LV.getAddress()); 100 Val = EmitLoadOfLValue(LV, E->getType()); 101 102 if (ShouldDestroyTemporaries) { 103 // Pop temporaries. 104 while (LiveTemporaries.size() > OldNumLiveTemporaries) 105 PopCXXTemporary(); 106 } 107 } else { 108 const CXXRecordDecl *BaseClassDecl = 0; 109 const CXXRecordDecl *DerivedClassDecl = 0; 110 111 if (const CastExpr *CE = 112 dyn_cast<CastExpr>(E->IgnoreParenNoopCasts(getContext()))) { 113 if (CE->getCastKind() == CastExpr::CK_DerivedToBase) { 114 E = CE->getSubExpr(); 115 116 BaseClassDecl = 117 cast<CXXRecordDecl>(CE->getType()->getAs<RecordType>()->getDecl()); 118 DerivedClassDecl = 119 cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl()); 120 } 121 } 122 123 Val = EmitAnyExprToTemp(E, /*IsAggLocVolatile=*/false, 124 IsInitializer); 125 126 if (ShouldDestroyTemporaries) { 127 // Pop temporaries. 128 while (LiveTemporaries.size() > OldNumLiveTemporaries) 129 PopCXXTemporary(); 130 } 131 132 if (IsInitializer) { 133 // We might have to destroy the temporary variable. 134 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { 135 if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { 136 if (!ClassDecl->hasTrivialDestructor()) { 137 const CXXDestructorDecl *Dtor = 138 ClassDecl->getDestructor(getContext()); 139 140 DelayedCleanupBlock scope(*this); 141 EmitCXXDestructorCall(Dtor, Dtor_Complete, Val.getAggregateAddr()); 142 } 143 } 144 } 145 } 146 147 // Check if need to perform the derived-to-base cast. 148 if (BaseClassDecl) { 149 llvm::Value *Derived = Val.getAggregateAddr(); 150 llvm::Value *Base = 151 GetAddressOfBaseClass(Derived, DerivedClassDecl, BaseClassDecl, 152 /*NullCheckValue=*/false); 153 return RValue::get(Base); 154 } 155 } 156 157 if (Val.isAggregate()) { 158 Val = RValue::get(Val.getAggregateAddr()); 159 } else { 160 // Create a temporary variable that we can bind the reference to. 161 llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), 162 "reftmp"); 163 if (Val.isScalar()) 164 EmitStoreOfScalar(Val.getScalarVal(), Temp, false, E->getType()); 165 else 166 StoreComplexToAddr(Val.getComplexVal(), Temp, false); 167 Val = RValue::get(Temp); 168 } 169 170 return Val; 171 } 172 173 174 /// getAccessedFieldNo - Given an encoded value and a result number, return the 175 /// input field number being accessed. 176 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 177 const llvm::Constant *Elts) { 178 if (isa<llvm::ConstantAggregateZero>(Elts)) 179 return 0; 180 181 return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue(); 182 } 183 184 185 //===----------------------------------------------------------------------===// 186 // LValue Expression Emission 187 //===----------------------------------------------------------------------===// 188 189 RValue CodeGenFunction::GetUndefRValue(QualType Ty) { 190 if (Ty->isVoidType()) 191 return RValue::get(0); 192 193 if (const ComplexType *CTy = Ty->getAs<ComplexType>()) { 194 const llvm::Type *EltTy = ConvertType(CTy->getElementType()); 195 llvm::Value *U = llvm::UndefValue::get(EltTy); 196 return RValue::getComplex(std::make_pair(U, U)); 197 } 198 199 if (hasAggregateLLVMType(Ty)) { 200 const llvm::Type *LTy = llvm::PointerType::getUnqual(ConvertType(Ty)); 201 return RValue::getAggregate(llvm::UndefValue::get(LTy)); 202 } 203 204 return RValue::get(llvm::UndefValue::get(ConvertType(Ty))); 205 } 206 207 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E, 208 const char *Name) { 209 ErrorUnsupported(E, Name); 210 return GetUndefRValue(E->getType()); 211 } 212 213 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 214 const char *Name) { 215 ErrorUnsupported(E, Name); 216 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 217 return LValue::MakeAddr(llvm::UndefValue::get(Ty), 218 MakeQualifiers(E->getType())); 219 } 220 221 /// EmitLValue - Emit code to compute a designator that specifies the location 222 /// of the expression. 223 /// 224 /// This can return one of two things: a simple address or a bitfield reference. 225 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be 226 /// an LLVM pointer type. 227 /// 228 /// If this returns a bitfield reference, nothing about the pointee type of the 229 /// LLVM value is known: For example, it may not be a pointer to an integer. 230 /// 231 /// If this returns a normal address, and if the lvalue's C type is fixed size, 232 /// this method guarantees that the returned pointer type will point to an LLVM 233 /// type of the same size of the lvalue's type. If the lvalue has a variable 234 /// length type, this is not possible. 235 /// 236 LValue CodeGenFunction::EmitLValue(const Expr *E) { 237 switch (E->getStmtClass()) { 238 default: return EmitUnsupportedLValue(E, "l-value expression"); 239 240 case Expr::BinaryOperatorClass: 241 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 242 case Expr::CallExprClass: 243 case Expr::CXXMemberCallExprClass: 244 case Expr::CXXOperatorCallExprClass: 245 return EmitCallExprLValue(cast<CallExpr>(E)); 246 case Expr::VAArgExprClass: 247 return EmitVAArgExprLValue(cast<VAArgExpr>(E)); 248 case Expr::DeclRefExprClass: 249 return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 250 case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 251 case Expr::PredefinedExprClass: 252 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 253 case Expr::StringLiteralClass: 254 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 255 case Expr::ObjCEncodeExprClass: 256 return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E)); 257 258 case Expr::BlockDeclRefExprClass: 259 return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E)); 260 261 case Expr::CXXTemporaryObjectExprClass: 262 case Expr::CXXConstructExprClass: 263 return EmitCXXConstructLValue(cast<CXXConstructExpr>(E)); 264 case Expr::CXXBindTemporaryExprClass: 265 return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E)); 266 case Expr::CXXExprWithTemporariesClass: 267 return EmitCXXExprWithTemporariesLValue(cast<CXXExprWithTemporaries>(E)); 268 case Expr::CXXZeroInitValueExprClass: 269 return EmitNullInitializationLValue(cast<CXXZeroInitValueExpr>(E)); 270 case Expr::CXXDefaultArgExprClass: 271 return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr()); 272 case Expr::CXXTypeidExprClass: 273 return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E)); 274 275 case Expr::ObjCMessageExprClass: 276 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 277 case Expr::ObjCIvarRefExprClass: 278 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 279 case Expr::ObjCPropertyRefExprClass: 280 return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E)); 281 case Expr::ObjCImplicitSetterGetterRefExprClass: 282 return EmitObjCKVCRefLValue(cast<ObjCImplicitSetterGetterRefExpr>(E)); 283 case Expr::ObjCSuperExprClass: 284 return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E)); 285 286 case Expr::StmtExprClass: 287 return EmitStmtExprLValue(cast<StmtExpr>(E)); 288 case Expr::UnaryOperatorClass: 289 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 290 case Expr::ArraySubscriptExprClass: 291 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 292 case Expr::ExtVectorElementExprClass: 293 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 294 case Expr::MemberExprClass: 295 return EmitMemberExpr(cast<MemberExpr>(E)); 296 case Expr::CompoundLiteralExprClass: 297 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 298 case Expr::ConditionalOperatorClass: 299 return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E)); 300 case Expr::ChooseExprClass: 301 return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext())); 302 case Expr::ImplicitCastExprClass: 303 case Expr::CStyleCastExprClass: 304 case Expr::CXXFunctionalCastExprClass: 305 case Expr::CXXStaticCastExprClass: 306 case Expr::CXXDynamicCastExprClass: 307 case Expr::CXXReinterpretCastExprClass: 308 case Expr::CXXConstCastExprClass: 309 return EmitCastLValue(cast<CastExpr>(E)); 310 } 311 } 312 313 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 314 QualType Ty) { 315 llvm::LoadInst *Load = Builder.CreateLoad(Addr, "tmp"); 316 if (Volatile) 317 Load->setVolatile(true); 318 319 // Bool can have different representation in memory than in registers. 320 llvm::Value *V = Load; 321 if (Ty->isBooleanType()) 322 if (V->getType() != llvm::Type::getInt1Ty(VMContext)) 323 V = Builder.CreateTrunc(V, llvm::Type::getInt1Ty(VMContext), "tobool"); 324 325 return V; 326 } 327 328 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 329 bool Volatile, QualType Ty) { 330 331 if (Ty->isBooleanType()) { 332 // Bool can have different representation in memory than in registers. 333 const llvm::Type *SrcTy = Value->getType(); 334 const llvm::PointerType *DstPtr = cast<llvm::PointerType>(Addr->getType()); 335 if (DstPtr->getElementType() != SrcTy) { 336 const llvm::Type *MemTy = 337 llvm::PointerType::get(SrcTy, DstPtr->getAddressSpace()); 338 Addr = Builder.CreateBitCast(Addr, MemTy, "storetmp"); 339 } 340 } 341 Builder.CreateStore(Value, Addr, Volatile); 342 } 343 344 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this 345 /// method emits the address of the lvalue, then loads the result as an rvalue, 346 /// returning the rvalue. 347 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) { 348 if (LV.isObjCWeak()) { 349 // load of a __weak object. 350 llvm::Value *AddrWeakObj = LV.getAddress(); 351 return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this, 352 AddrWeakObj)); 353 } 354 355 if (LV.isSimple()) { 356 llvm::Value *Ptr = LV.getAddress(); 357 const llvm::Type *EltTy = 358 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 359 360 // Simple scalar l-value. 361 if (EltTy->isSingleValueType()) 362 return RValue::get(EmitLoadOfScalar(Ptr, LV.isVolatileQualified(), 363 ExprType)); 364 365 assert(ExprType->isFunctionType() && "Unknown scalar value"); 366 return RValue::get(Ptr); 367 } 368 369 if (LV.isVectorElt()) { 370 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 371 LV.isVolatileQualified(), "tmp"); 372 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 373 "vecext")); 374 } 375 376 // If this is a reference to a subset of the elements of a vector, either 377 // shuffle the input or extract/insert them as appropriate. 378 if (LV.isExtVectorElt()) 379 return EmitLoadOfExtVectorElementLValue(LV, ExprType); 380 381 if (LV.isBitfield()) 382 return EmitLoadOfBitfieldLValue(LV, ExprType); 383 384 if (LV.isPropertyRef()) 385 return EmitLoadOfPropertyRefLValue(LV, ExprType); 386 387 assert(LV.isKVCRef() && "Unknown LValue type!"); 388 return EmitLoadOfKVCRefLValue(LV, ExprType); 389 } 390 391 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV, 392 QualType ExprType) { 393 unsigned StartBit = LV.getBitfieldStartBit(); 394 unsigned BitfieldSize = LV.getBitfieldSize(); 395 llvm::Value *Ptr = LV.getBitfieldAddr(); 396 397 const llvm::Type *EltTy = 398 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 399 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 400 401 // In some cases the bitfield may straddle two memory locations. Currently we 402 // load the entire bitfield, then do the magic to sign-extend it if 403 // necessary. This results in somewhat more code than necessary for the common 404 // case (one load), since two shifts accomplish both the masking and sign 405 // extension. 406 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 407 llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp"); 408 409 // Shift to proper location. 410 if (StartBit) 411 Val = Builder.CreateLShr(Val, llvm::ConstantInt::get(EltTy, StartBit), 412 "bf.lo"); 413 414 // Mask off unused bits. 415 llvm::Constant *LowMask = llvm::ConstantInt::get(VMContext, 416 llvm::APInt::getLowBitsSet(EltTySize, LowBits)); 417 Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared"); 418 419 // Fetch the high bits if necessary. 420 if (LowBits < BitfieldSize) { 421 unsigned HighBits = BitfieldSize - LowBits; 422 llvm::Value *HighPtr = Builder.CreateGEP(Ptr, llvm::ConstantInt::get( 423 llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi"); 424 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 425 LV.isVolatileQualified(), 426 "tmp"); 427 428 // Mask off unused bits. 429 llvm::Constant *HighMask = llvm::ConstantInt::get(VMContext, 430 llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 431 HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared"); 432 433 // Shift to proper location and or in to bitfield value. 434 HighVal = Builder.CreateShl(HighVal, 435 llvm::ConstantInt::get(EltTy, LowBits)); 436 Val = Builder.CreateOr(Val, HighVal, "bf.val"); 437 } 438 439 // Sign extend if necessary. 440 if (LV.isBitfieldSigned()) { 441 llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy, 442 EltTySize - BitfieldSize); 443 Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits), 444 ExtraBits, "bf.val.sext"); 445 } 446 447 // The bitfield type and the normal type differ when the storage sizes differ 448 // (currently just _Bool). 449 Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp"); 450 451 return RValue::get(Val); 452 } 453 454 RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV, 455 QualType ExprType) { 456 return EmitObjCPropertyGet(LV.getPropertyRefExpr()); 457 } 458 459 RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV, 460 QualType ExprType) { 461 return EmitObjCPropertyGet(LV.getKVCRefExpr()); 462 } 463 464 // If this is a reference to a subset of the elements of a vector, create an 465 // appropriate shufflevector. 466 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV, 467 QualType ExprType) { 468 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 469 LV.isVolatileQualified(), "tmp"); 470 471 const llvm::Constant *Elts = LV.getExtVectorElts(); 472 473 // If the result of the expression is a non-vector type, we must be extracting 474 // a single element. Just codegen as an extractelement. 475 const VectorType *ExprVT = ExprType->getAs<VectorType>(); 476 if (!ExprVT) { 477 unsigned InIdx = getAccessedFieldNo(0, Elts); 478 llvm::Value *Elt = llvm::ConstantInt::get( 479 llvm::Type::getInt32Ty(VMContext), InIdx); 480 return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp")); 481 } 482 483 // Always use shuffle vector to try to retain the original program structure 484 unsigned NumResultElts = ExprVT->getNumElements(); 485 486 llvm::SmallVector<llvm::Constant*, 4> Mask; 487 for (unsigned i = 0; i != NumResultElts; ++i) { 488 unsigned InIdx = getAccessedFieldNo(i, Elts); 489 Mask.push_back(llvm::ConstantInt::get( 490 llvm::Type::getInt32Ty(VMContext), InIdx)); 491 } 492 493 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 494 Vec = Builder.CreateShuffleVector(Vec, 495 llvm::UndefValue::get(Vec->getType()), 496 MaskV, "tmp"); 497 return RValue::get(Vec); 498 } 499 500 501 502 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 503 /// lvalue, where both are guaranteed to the have the same type, and that type 504 /// is 'Ty'. 505 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, 506 QualType Ty) { 507 if (!Dst.isSimple()) { 508 if (Dst.isVectorElt()) { 509 // Read/modify/write the vector, inserting the new element. 510 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 511 Dst.isVolatileQualified(), "tmp"); 512 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 513 Dst.getVectorIdx(), "vecins"); 514 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 515 return; 516 } 517 518 // If this is an update of extended vector elements, insert them as 519 // appropriate. 520 if (Dst.isExtVectorElt()) 521 return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty); 522 523 if (Dst.isBitfield()) 524 return EmitStoreThroughBitfieldLValue(Src, Dst, Ty); 525 526 if (Dst.isPropertyRef()) 527 return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty); 528 529 assert(Dst.isKVCRef() && "Unknown LValue type"); 530 return EmitStoreThroughKVCRefLValue(Src, Dst, Ty); 531 } 532 533 if (Dst.isObjCWeak() && !Dst.isNonGC()) { 534 // load of a __weak object. 535 llvm::Value *LvalueDst = Dst.getAddress(); 536 llvm::Value *src = Src.getScalarVal(); 537 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 538 return; 539 } 540 541 if (Dst.isObjCStrong() && !Dst.isNonGC()) { 542 // load of a __strong object. 543 llvm::Value *LvalueDst = Dst.getAddress(); 544 llvm::Value *src = Src.getScalarVal(); 545 if (Dst.isObjCIvar()) { 546 assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL"); 547 const llvm::Type *ResultType = ConvertType(getContext().LongTy); 548 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp()); 549 llvm::Value *dst = RHS; 550 RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast"); 551 llvm::Value *LHS = 552 Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast"); 553 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset"); 554 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst, 555 BytesBetween); 556 } else if (Dst.isGlobalObjCRef()) 557 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst); 558 else 559 CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst); 560 return; 561 } 562 563 assert(Src.isScalar() && "Can't emit an agg store with this method"); 564 EmitStoreOfScalar(Src.getScalarVal(), Dst.getAddress(), 565 Dst.isVolatileQualified(), Ty); 566 } 567 568 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 569 QualType Ty, 570 llvm::Value **Result) { 571 unsigned StartBit = Dst.getBitfieldStartBit(); 572 unsigned BitfieldSize = Dst.getBitfieldSize(); 573 llvm::Value *Ptr = Dst.getBitfieldAddr(); 574 575 const llvm::Type *EltTy = 576 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 577 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 578 579 // Get the new value, cast to the appropriate type and masked to exactly the 580 // size of the bit-field. 581 llvm::Value *SrcVal = Src.getScalarVal(); 582 llvm::Value *NewVal = Builder.CreateIntCast(SrcVal, EltTy, false, "tmp"); 583 llvm::Constant *Mask = llvm::ConstantInt::get(VMContext, 584 llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize)); 585 NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value"); 586 587 // Return the new value of the bit-field, if requested. 588 if (Result) { 589 // Cast back to the proper type for result. 590 const llvm::Type *SrcTy = SrcVal->getType(); 591 llvm::Value *SrcTrunc = Builder.CreateIntCast(NewVal, SrcTy, false, 592 "bf.reload.val"); 593 594 // Sign extend if necessary. 595 if (Dst.isBitfieldSigned()) { 596 unsigned SrcTySize = CGM.getTargetData().getTypeSizeInBits(SrcTy); 597 llvm::Value *ExtraBits = llvm::ConstantInt::get(SrcTy, 598 SrcTySize - BitfieldSize); 599 SrcTrunc = Builder.CreateAShr(Builder.CreateShl(SrcTrunc, ExtraBits), 600 ExtraBits, "bf.reload.sext"); 601 } 602 603 *Result = SrcTrunc; 604 } 605 606 // In some cases the bitfield may straddle two memory locations. Emit the low 607 // part first and check to see if the high needs to be done. 608 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 609 llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(), 610 "bf.prev.low"); 611 612 // Compute the mask for zero-ing the low part of this bitfield. 613 llvm::Constant *InvMask = 614 llvm::ConstantInt::get(VMContext, 615 ~llvm::APInt::getBitsSet(EltTySize, StartBit, StartBit + LowBits)); 616 617 // Compute the new low part as 618 // LowVal = (LowVal & InvMask) | (NewVal << StartBit), 619 // with the shift of NewVal implicitly stripping the high bits. 620 llvm::Value *NewLowVal = 621 Builder.CreateShl(NewVal, llvm::ConstantInt::get(EltTy, StartBit), 622 "bf.value.lo"); 623 LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared"); 624 LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo"); 625 626 // Write back. 627 Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified()); 628 629 // If the low part doesn't cover the bitfield emit a high part. 630 if (LowBits < BitfieldSize) { 631 unsigned HighBits = BitfieldSize - LowBits; 632 llvm::Value *HighPtr = Builder.CreateGEP(Ptr, llvm::ConstantInt::get( 633 llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi"); 634 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 635 Dst.isVolatileQualified(), 636 "bf.prev.hi"); 637 638 // Compute the mask for zero-ing the high part of this bitfield. 639 llvm::Constant *InvMask = 640 llvm::ConstantInt::get(VMContext, ~llvm::APInt::getLowBitsSet(EltTySize, 641 HighBits)); 642 643 // Compute the new high part as 644 // HighVal = (HighVal & InvMask) | (NewVal lshr LowBits), 645 // where the high bits of NewVal have already been cleared and the 646 // shift stripping the low bits. 647 llvm::Value *NewHighVal = 648 Builder.CreateLShr(NewVal, llvm::ConstantInt::get(EltTy, LowBits), 649 "bf.value.high"); 650 HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared"); 651 HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi"); 652 653 // Write back. 654 Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified()); 655 } 656 } 657 658 void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src, 659 LValue Dst, 660 QualType Ty) { 661 EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src); 662 } 663 664 void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src, 665 LValue Dst, 666 QualType Ty) { 667 EmitObjCPropertySet(Dst.getKVCRefExpr(), Src); 668 } 669 670 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 671 LValue Dst, 672 QualType Ty) { 673 // This access turns into a read/modify/write of the vector. Load the input 674 // value now. 675 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 676 Dst.isVolatileQualified(), "tmp"); 677 const llvm::Constant *Elts = Dst.getExtVectorElts(); 678 679 llvm::Value *SrcVal = Src.getScalarVal(); 680 681 if (const VectorType *VTy = Ty->getAs<VectorType>()) { 682 unsigned NumSrcElts = VTy->getNumElements(); 683 unsigned NumDstElts = 684 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 685 if (NumDstElts == NumSrcElts) { 686 // Use shuffle vector is the src and destination are the same number of 687 // elements and restore the vector mask since it is on the side it will be 688 // stored. 689 llvm::SmallVector<llvm::Constant*, 4> Mask(NumDstElts); 690 for (unsigned i = 0; i != NumSrcElts; ++i) { 691 unsigned InIdx = getAccessedFieldNo(i, Elts); 692 Mask[InIdx] = llvm::ConstantInt::get( 693 llvm::Type::getInt32Ty(VMContext), i); 694 } 695 696 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 697 Vec = Builder.CreateShuffleVector(SrcVal, 698 llvm::UndefValue::get(Vec->getType()), 699 MaskV, "tmp"); 700 } else if (NumDstElts > NumSrcElts) { 701 // Extended the source vector to the same length and then shuffle it 702 // into the destination. 703 // FIXME: since we're shuffling with undef, can we just use the indices 704 // into that? This could be simpler. 705 llvm::SmallVector<llvm::Constant*, 4> ExtMask; 706 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 707 unsigned i; 708 for (i = 0; i != NumSrcElts; ++i) 709 ExtMask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 710 for (; i != NumDstElts; ++i) 711 ExtMask.push_back(llvm::UndefValue::get(Int32Ty)); 712 llvm::Value *ExtMaskV = llvm::ConstantVector::get(&ExtMask[0], 713 ExtMask.size()); 714 llvm::Value *ExtSrcVal = 715 Builder.CreateShuffleVector(SrcVal, 716 llvm::UndefValue::get(SrcVal->getType()), 717 ExtMaskV, "tmp"); 718 // build identity 719 llvm::SmallVector<llvm::Constant*, 4> Mask; 720 for (unsigned i = 0; i != NumDstElts; ++i) 721 Mask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 722 723 // modify when what gets shuffled in 724 for (unsigned i = 0; i != NumSrcElts; ++i) { 725 unsigned Idx = getAccessedFieldNo(i, Elts); 726 Mask[Idx] = llvm::ConstantInt::get(Int32Ty, i+NumDstElts); 727 } 728 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 729 Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp"); 730 } else { 731 // We should never shorten the vector 732 assert(0 && "unexpected shorten vector length"); 733 } 734 } else { 735 // If the Src is a scalar (not a vector) it must be updating one element. 736 unsigned InIdx = getAccessedFieldNo(0, Elts); 737 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 738 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 739 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp"); 740 } 741 742 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 743 } 744 745 // setObjCGCLValueClass - sets class of he lvalue for the purpose of 746 // generating write-barries API. It is currently a global, ivar, 747 // or neither. 748 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E, 749 LValue &LV) { 750 if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC) 751 return; 752 753 if (isa<ObjCIvarRefExpr>(E)) { 754 LV.SetObjCIvar(LV, true); 755 ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E)); 756 LV.setBaseIvarExp(Exp->getBase()); 757 LV.SetObjCArray(LV, E->getType()->isArrayType()); 758 return; 759 } 760 761 if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) { 762 if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) { 763 if ((VD->isBlockVarDecl() && !VD->hasLocalStorage()) || 764 VD->isFileVarDecl()) 765 LV.SetGlobalObjCRef(LV, true); 766 } 767 LV.SetObjCArray(LV, E->getType()->isArrayType()); 768 return; 769 } 770 771 if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) { 772 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 773 return; 774 } 775 776 if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) { 777 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 778 if (LV.isObjCIvar()) { 779 // If cast is to a structure pointer, follow gcc's behavior and make it 780 // a non-ivar write-barrier. 781 QualType ExpTy = E->getType(); 782 if (ExpTy->isPointerType()) 783 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 784 if (ExpTy->isRecordType()) 785 LV.SetObjCIvar(LV, false); 786 } 787 return; 788 } 789 if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) { 790 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 791 return; 792 } 793 794 if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) { 795 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 796 return; 797 } 798 799 if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) { 800 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 801 if (LV.isObjCIvar() && !LV.isObjCArray()) 802 // Using array syntax to assigning to what an ivar points to is not 803 // same as assigning to the ivar itself. {id *Names;} Names[i] = 0; 804 LV.SetObjCIvar(LV, false); 805 else if (LV.isGlobalObjCRef() && !LV.isObjCArray()) 806 // Using array syntax to assigning to what global points to is not 807 // same as assigning to the global itself. {id *G;} G[i] = 0; 808 LV.SetGlobalObjCRef(LV, false); 809 return; 810 } 811 812 if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) { 813 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 814 // We don't know if member is an 'ivar', but this flag is looked at 815 // only in the context of LV.isObjCIvar(). 816 LV.SetObjCArray(LV, E->getType()->isArrayType()); 817 return; 818 } 819 } 820 821 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, 822 const Expr *E, const VarDecl *VD) { 823 assert((VD->hasExternalStorage() || VD->isFileVarDecl()) && 824 "Var decl must have external storage or be a file var decl!"); 825 826 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); 827 if (VD->getType()->isReferenceType()) 828 V = CGF.Builder.CreateLoad(V, "tmp"); 829 LValue LV = LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType())); 830 setObjCGCLValueClass(CGF.getContext(), E, LV); 831 return LV; 832 } 833 834 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF, 835 const Expr *E, const FunctionDecl *FD) { 836 llvm::Value* V = CGF.CGM.GetAddrOfFunction(FD); 837 if (!FD->hasPrototype()) { 838 if (const FunctionProtoType *Proto = 839 FD->getType()->getAs<FunctionProtoType>()) { 840 // Ugly case: for a K&R-style definition, the type of the definition 841 // isn't the same as the type of a use. Correct for this with a 842 // bitcast. 843 QualType NoProtoType = 844 CGF.getContext().getFunctionNoProtoType(Proto->getResultType()); 845 NoProtoType = CGF.getContext().getPointerType(NoProtoType); 846 V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType), "tmp"); 847 } 848 } 849 return LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType())); 850 } 851 852 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 853 const NamedDecl *ND = E->getDecl(); 854 855 if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) { 856 857 // Check if this is a global variable. 858 if (VD->hasExternalStorage() || VD->isFileVarDecl()) 859 return EmitGlobalVarDeclLValue(*this, E, VD); 860 861 bool NonGCable = VD->hasLocalStorage() && !VD->hasAttr<BlocksAttr>(); 862 863 llvm::Value *V = LocalDeclMap[VD]; 864 assert(V && "DeclRefExpr not entered in LocalDeclMap?"); 865 866 Qualifiers Quals = MakeQualifiers(E->getType()); 867 // local variables do not get their gc attribute set. 868 // local static? 869 if (NonGCable) Quals.removeObjCGCAttr(); 870 871 if (VD->hasAttr<BlocksAttr>()) { 872 V = Builder.CreateStructGEP(V, 1, "forwarding"); 873 V = Builder.CreateLoad(V); 874 V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD), 875 VD->getNameAsString()); 876 } 877 if (VD->getType()->isReferenceType()) 878 V = Builder.CreateLoad(V, "tmp"); 879 LValue LV = LValue::MakeAddr(V, Quals); 880 LValue::SetObjCNonGC(LV, NonGCable); 881 setObjCGCLValueClass(getContext(), E, LV); 882 return LV; 883 } 884 885 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 886 return EmitFunctionDeclLValue(*this, E, FD); 887 888 if (E->getQualifier()) { 889 // FIXME: the qualifier check does not seem sufficient here 890 return EmitPointerToDataMemberLValue(cast<FieldDecl>(ND)); 891 } 892 893 assert(false && "Unhandled DeclRefExpr"); 894 895 // an invalid LValue, but the assert will 896 // ensure that this point is never reached. 897 return LValue(); 898 } 899 900 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) { 901 return LValue::MakeAddr(GetAddrOfBlockDecl(E), MakeQualifiers(E->getType())); 902 } 903 904 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 905 // __extension__ doesn't affect lvalue-ness. 906 if (E->getOpcode() == UnaryOperator::Extension) 907 return EmitLValue(E->getSubExpr()); 908 909 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 910 switch (E->getOpcode()) { 911 default: assert(0 && "Unknown unary operator lvalue!"); 912 case UnaryOperator::Deref: { 913 QualType T = E->getSubExpr()->getType()->getPointeeType(); 914 assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); 915 916 Qualifiers Quals = MakeQualifiers(T); 917 Quals.setAddressSpace(ExprTy.getAddressSpace()); 918 919 LValue LV = LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), Quals); 920 // We should not generate __weak write barrier on indirect reference 921 // of a pointer to object; as in void foo (__weak id *param); *param = 0; 922 // But, we continue to generate __strong write barrier on indirect write 923 // into a pointer to object. 924 if (getContext().getLangOptions().ObjC1 && 925 getContext().getLangOptions().getGCMode() != LangOptions::NonGC && 926 LV.isObjCWeak()) 927 LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext())); 928 return LV; 929 } 930 case UnaryOperator::Real: 931 case UnaryOperator::Imag: { 932 LValue LV = EmitLValue(E->getSubExpr()); 933 unsigned Idx = E->getOpcode() == UnaryOperator::Imag; 934 return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(), 935 Idx, "idx"), 936 MakeQualifiers(ExprTy)); 937 } 938 case UnaryOperator::PreInc: 939 case UnaryOperator::PreDec: 940 return EmitUnsupportedLValue(E, "pre-inc/dec expression"); 941 } 942 } 943 944 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 945 return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromLiteral(E), 946 Qualifiers()); 947 } 948 949 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) { 950 return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromObjCEncode(E), 951 Qualifiers()); 952 } 953 954 955 LValue CodeGenFunction::EmitPredefinedFunctionName(unsigned Type) { 956 std::string GlobalVarName; 957 958 switch (Type) { 959 default: assert(0 && "Invalid type"); 960 case PredefinedExpr::Func: 961 GlobalVarName = "__func__."; 962 break; 963 case PredefinedExpr::Function: 964 GlobalVarName = "__FUNCTION__."; 965 break; 966 case PredefinedExpr::PrettyFunction: 967 GlobalVarName = "__PRETTY_FUNCTION__."; 968 break; 969 } 970 971 llvm::StringRef FnName = CurFn->getName(); 972 if (FnName.startswith("\01")) 973 FnName = FnName.substr(1); 974 GlobalVarName += FnName; 975 976 std::string FunctionName = 977 PredefinedExpr::ComputeName(getContext(), (PredefinedExpr::IdentType)Type, 978 CurCodeDecl); 979 980 llvm::Constant *C = 981 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 982 return LValue::MakeAddr(C, Qualifiers()); 983 } 984 985 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 986 switch (E->getIdentType()) { 987 default: 988 return EmitUnsupportedLValue(E, "predefined expression"); 989 case PredefinedExpr::Func: 990 case PredefinedExpr::Function: 991 case PredefinedExpr::PrettyFunction: 992 return EmitPredefinedFunctionName(E->getIdentType()); 993 } 994 } 995 996 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 997 // The index must always be an integer, which is not an aggregate. Emit it. 998 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 999 QualType IdxTy = E->getIdx()->getType(); 1000 bool IdxSigned = IdxTy->isSignedIntegerType(); 1001 1002 // If the base is a vector type, then we are forming a vector element lvalue 1003 // with this subscript. 1004 if (E->getBase()->getType()->isVectorType()) { 1005 // Emit the vector as an lvalue to get its address. 1006 LValue LHS = EmitLValue(E->getBase()); 1007 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 1008 Idx = Builder.CreateIntCast(Idx, 1009 llvm::Type::getInt32Ty(VMContext), IdxSigned, "vidx"); 1010 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 1011 E->getBase()->getType().getCVRQualifiers()); 1012 } 1013 1014 // The base must be a pointer, which is not an aggregate. Emit it. 1015 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1016 1017 // Extend or truncate the index type to 32 or 64-bits. 1018 unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth(); 1019 if (IdxBitwidth != LLVMPointerWidth) 1020 Idx = Builder.CreateIntCast(Idx, 1021 llvm::IntegerType::get(VMContext, LLVMPointerWidth), 1022 IdxSigned, "idxprom"); 1023 1024 // We know that the pointer points to a type of the correct size, unless the 1025 // size is a VLA or Objective-C interface. 1026 llvm::Value *Address = 0; 1027 if (const VariableArrayType *VAT = 1028 getContext().getAsVariableArrayType(E->getType())) { 1029 llvm::Value *VLASize = GetVLASize(VAT); 1030 1031 Idx = Builder.CreateMul(Idx, VLASize); 1032 1033 QualType BaseType = getContext().getBaseElementType(VAT); 1034 1035 uint64_t BaseTypeSize = getContext().getTypeSize(BaseType) / 8; 1036 Idx = Builder.CreateUDiv(Idx, 1037 llvm::ConstantInt::get(Idx->getType(), 1038 BaseTypeSize)); 1039 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1040 } else if (const ObjCInterfaceType *OIT = 1041 dyn_cast<ObjCInterfaceType>(E->getType())) { 1042 llvm::Value *InterfaceSize = 1043 llvm::ConstantInt::get(Idx->getType(), 1044 getContext().getTypeSize(OIT) / 8); 1045 1046 Idx = Builder.CreateMul(Idx, InterfaceSize); 1047 1048 const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext); 1049 Address = Builder.CreateGEP(Builder.CreateBitCast(Base, i8PTy), 1050 Idx, "arrayidx"); 1051 Address = Builder.CreateBitCast(Address, Base->getType()); 1052 } else { 1053 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1054 } 1055 1056 QualType T = E->getBase()->getType()->getPointeeType(); 1057 assert(!T.isNull() && 1058 "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); 1059 1060 Qualifiers Quals = MakeQualifiers(T); 1061 Quals.setAddressSpace(E->getBase()->getType().getAddressSpace()); 1062 1063 LValue LV = LValue::MakeAddr(Address, Quals); 1064 if (getContext().getLangOptions().ObjC1 && 1065 getContext().getLangOptions().getGCMode() != LangOptions::NonGC) { 1066 LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext())); 1067 setObjCGCLValueClass(getContext(), E, LV); 1068 } 1069 return LV; 1070 } 1071 1072 static 1073 llvm::Constant *GenerateConstantVector(llvm::LLVMContext &VMContext, 1074 llvm::SmallVector<unsigned, 4> &Elts) { 1075 llvm::SmallVector<llvm::Constant *, 4> CElts; 1076 1077 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 1078 CElts.push_back(llvm::ConstantInt::get( 1079 llvm::Type::getInt32Ty(VMContext), Elts[i])); 1080 1081 return llvm::ConstantVector::get(&CElts[0], CElts.size()); 1082 } 1083 1084 LValue CodeGenFunction:: 1085 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 1086 // Emit the base vector as an l-value. 1087 LValue Base; 1088 1089 // ExtVectorElementExpr's base can either be a vector or pointer to vector. 1090 if (!E->isArrow()) { 1091 assert(E->getBase()->getType()->isVectorType()); 1092 Base = EmitLValue(E->getBase()); 1093 } else { 1094 const PointerType *PT = E->getBase()->getType()->getAs<PointerType>(); 1095 llvm::Value *Ptr = EmitScalarExpr(E->getBase()); 1096 Qualifiers Quals = MakeQualifiers(PT->getPointeeType()); 1097 Quals.removeObjCGCAttr(); 1098 Base = LValue::MakeAddr(Ptr, Quals); 1099 } 1100 1101 // Encode the element access list into a vector of unsigned indices. 1102 llvm::SmallVector<unsigned, 4> Indices; 1103 E->getEncodedElementAccess(Indices); 1104 1105 if (Base.isSimple()) { 1106 llvm::Constant *CV = GenerateConstantVector(VMContext, Indices); 1107 return LValue::MakeExtVectorElt(Base.getAddress(), CV, 1108 Base.getVRQualifiers()); 1109 } 1110 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 1111 1112 llvm::Constant *BaseElts = Base.getExtVectorElts(); 1113 llvm::SmallVector<llvm::Constant *, 4> CElts; 1114 1115 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 1116 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 1117 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 1118 CElts.push_back(llvm::ConstantInt::get(Int32Ty, 0)); 1119 else 1120 CElts.push_back(cast<llvm::Constant>(BaseElts->getOperand(Indices[i]))); 1121 } 1122 llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); 1123 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, 1124 Base.getVRQualifiers()); 1125 } 1126 1127 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 1128 bool isUnion = false; 1129 bool isNonGC = false; 1130 Expr *BaseExpr = E->getBase(); 1131 llvm::Value *BaseValue = NULL; 1132 Qualifiers BaseQuals; 1133 1134 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 1135 if (E->isArrow()) { 1136 BaseValue = EmitScalarExpr(BaseExpr); 1137 const PointerType *PTy = 1138 BaseExpr->getType()->getAs<PointerType>(); 1139 if (PTy->getPointeeType()->isUnionType()) 1140 isUnion = true; 1141 BaseQuals = PTy->getPointeeType().getQualifiers(); 1142 } else if (isa<ObjCPropertyRefExpr>(BaseExpr->IgnoreParens()) || 1143 isa<ObjCImplicitSetterGetterRefExpr>( 1144 BaseExpr->IgnoreParens())) { 1145 RValue RV = EmitObjCPropertyGet(BaseExpr); 1146 BaseValue = RV.getAggregateAddr(); 1147 if (BaseExpr->getType()->isUnionType()) 1148 isUnion = true; 1149 BaseQuals = BaseExpr->getType().getQualifiers(); 1150 } else { 1151 LValue BaseLV = EmitLValue(BaseExpr); 1152 if (BaseLV.isNonGC()) 1153 isNonGC = true; 1154 // FIXME: this isn't right for bitfields. 1155 BaseValue = BaseLV.getAddress(); 1156 QualType BaseTy = BaseExpr->getType(); 1157 if (BaseTy->isUnionType()) 1158 isUnion = true; 1159 BaseQuals = BaseTy.getQualifiers(); 1160 } 1161 1162 NamedDecl *ND = E->getMemberDecl(); 1163 if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) { 1164 LValue LV = EmitLValueForField(BaseValue, Field, isUnion, 1165 BaseQuals.getCVRQualifiers()); 1166 LValue::SetObjCNonGC(LV, isNonGC); 1167 setObjCGCLValueClass(getContext(), E, LV); 1168 return LV; 1169 } 1170 1171 if (VarDecl *VD = dyn_cast<VarDecl>(ND)) 1172 return EmitGlobalVarDeclLValue(*this, E, VD); 1173 1174 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 1175 return EmitFunctionDeclLValue(*this, E, FD); 1176 1177 assert(false && "Unhandled member declaration!"); 1178 return LValue(); 1179 } 1180 1181 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value* BaseValue, 1182 const FieldDecl* Field, 1183 unsigned CVRQualifiers) { 1184 CodeGenTypes::BitFieldInfo Info = CGM.getTypes().getBitFieldInfo(Field); 1185 1186 // FIXME: CodeGenTypes should expose a method to get the appropriate type for 1187 // FieldTy (the appropriate type is ABI-dependent). 1188 const llvm::Type *FieldTy = 1189 CGM.getTypes().ConvertTypeForMem(Field->getType()); 1190 const llvm::PointerType *BaseTy = 1191 cast<llvm::PointerType>(BaseValue->getType()); 1192 unsigned AS = BaseTy->getAddressSpace(); 1193 BaseValue = Builder.CreateBitCast(BaseValue, 1194 llvm::PointerType::get(FieldTy, AS), 1195 "tmp"); 1196 1197 llvm::Value *Idx = 1198 llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), Info.FieldNo); 1199 llvm::Value *V = Builder.CreateGEP(BaseValue, Idx, "tmp"); 1200 1201 return LValue::MakeBitfield(V, Info.Start, Info.Size, 1202 Field->getType()->isSignedIntegerType(), 1203 Field->getType().getCVRQualifiers()|CVRQualifiers); 1204 } 1205 1206 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue, 1207 const FieldDecl* Field, 1208 bool isUnion, 1209 unsigned CVRQualifiers) { 1210 if (Field->isBitField()) 1211 return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers); 1212 1213 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 1214 llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 1215 1216 // Match union field type. 1217 if (isUnion) { 1218 const llvm::Type *FieldTy = 1219 CGM.getTypes().ConvertTypeForMem(Field->getType()); 1220 const llvm::PointerType * BaseTy = 1221 cast<llvm::PointerType>(BaseValue->getType()); 1222 unsigned AS = BaseTy->getAddressSpace(); 1223 V = Builder.CreateBitCast(V, 1224 llvm::PointerType::get(FieldTy, AS), 1225 "tmp"); 1226 } 1227 if (Field->getType()->isReferenceType()) 1228 V = Builder.CreateLoad(V, "tmp"); 1229 1230 Qualifiers Quals = MakeQualifiers(Field->getType()); 1231 Quals.addCVRQualifiers(CVRQualifiers); 1232 // __weak attribute on a field is ignored. 1233 if (Quals.getObjCGCAttr() == Qualifiers::Weak) 1234 Quals.removeObjCGCAttr(); 1235 1236 return LValue::MakeAddr(V, Quals); 1237 } 1238 1239 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E){ 1240 const llvm::Type *LTy = ConvertType(E->getType()); 1241 llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral"); 1242 1243 const Expr* InitExpr = E->getInitializer(); 1244 LValue Result = LValue::MakeAddr(DeclPtr, MakeQualifiers(E->getType())); 1245 1246 if (E->getType()->isComplexType()) 1247 EmitComplexExprIntoAddr(InitExpr, DeclPtr, false); 1248 else if (hasAggregateLLVMType(E->getType())) 1249 EmitAnyExpr(InitExpr, DeclPtr, false); 1250 else 1251 EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType()); 1252 1253 return Result; 1254 } 1255 1256 LValue 1257 CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator* E) { 1258 if (E->isLvalue(getContext()) == Expr::LV_Valid) { 1259 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true"); 1260 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false"); 1261 llvm::BasicBlock *ContBlock = createBasicBlock("cond.end"); 1262 1263 llvm::Value *Cond = EvaluateExprAsBool(E->getCond()); 1264 Builder.CreateCondBr(Cond, LHSBlock, RHSBlock); 1265 1266 EmitBlock(LHSBlock); 1267 1268 LValue LHS = EmitLValue(E->getLHS()); 1269 if (!LHS.isSimple()) 1270 return EmitUnsupportedLValue(E, "conditional operator"); 1271 1272 llvm::Value *Temp = CreateTempAlloca(LHS.getAddress()->getType(),"condtmp"); 1273 Builder.CreateStore(LHS.getAddress(), Temp); 1274 EmitBranch(ContBlock); 1275 1276 EmitBlock(RHSBlock); 1277 LValue RHS = EmitLValue(E->getRHS()); 1278 if (!RHS.isSimple()) 1279 return EmitUnsupportedLValue(E, "conditional operator"); 1280 1281 Builder.CreateStore(RHS.getAddress(), Temp); 1282 EmitBranch(ContBlock); 1283 1284 EmitBlock(ContBlock); 1285 1286 Temp = Builder.CreateLoad(Temp, "lv"); 1287 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1288 } 1289 1290 // ?: here should be an aggregate. 1291 assert((hasAggregateLLVMType(E->getType()) && 1292 !E->getType()->isAnyComplexType()) && 1293 "Unexpected conditional operator!"); 1294 1295 llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType())); 1296 EmitAggExpr(E, Temp, false); 1297 1298 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1299 } 1300 1301 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast. 1302 /// If the cast is a dynamic_cast, we can have the usual lvalue result, 1303 /// otherwise if a cast is needed by the code generator in an lvalue context, 1304 /// then it must mean that we need the address of an aggregate in order to 1305 /// access one of its fields. This can happen for all the reasons that casts 1306 /// are permitted with aggregate result, including noop aggregate casts, and 1307 /// cast from scalar to union. 1308 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { 1309 switch (E->getCastKind()) { 1310 default: 1311 return EmitUnsupportedLValue(E, "unexpected cast lvalue"); 1312 1313 case CastExpr::CK_Dynamic: { 1314 LValue LV = EmitLValue(E->getSubExpr()); 1315 llvm::Value *V = LV.getAddress(); 1316 const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E); 1317 return LValue::MakeAddr(EmitDynamicCast(V, DCE), 1318 MakeQualifiers(E->getType())); 1319 } 1320 1321 case CastExpr::CK_NoOp: 1322 case CastExpr::CK_ConstructorConversion: 1323 case CastExpr::CK_UserDefinedConversion: 1324 return EmitLValue(E->getSubExpr()); 1325 1326 case CastExpr::CK_DerivedToBase: { 1327 const RecordType *DerivedClassTy = 1328 E->getSubExpr()->getType()->getAs<RecordType>(); 1329 CXXRecordDecl *DerivedClassDecl = 1330 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 1331 1332 const RecordType *BaseClassTy = E->getType()->getAs<RecordType>(); 1333 CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseClassTy->getDecl()); 1334 1335 LValue LV = EmitLValue(E->getSubExpr()); 1336 1337 // Perform the derived-to-base conversion 1338 llvm::Value *Base = 1339 GetAddressOfBaseClass(LV.getAddress(), DerivedClassDecl, 1340 BaseClassDecl, /*NullCheckValue=*/false); 1341 1342 return LValue::MakeAddr(Base, MakeQualifiers(E->getType())); 1343 } 1344 case CastExpr::CK_ToUnion: { 1345 llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType())); 1346 EmitAnyExpr(E->getSubExpr(), Temp, false); 1347 1348 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1349 } 1350 case CastExpr::CK_BaseToDerived: { 1351 const RecordType *BaseClassTy = 1352 E->getSubExpr()->getType()->getAs<RecordType>(); 1353 CXXRecordDecl *BaseClassDecl = 1354 cast<CXXRecordDecl>(BaseClassTy->getDecl()); 1355 1356 const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>(); 1357 CXXRecordDecl *DerivedClassDecl = 1358 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 1359 1360 LValue LV = EmitLValue(E->getSubExpr()); 1361 1362 // Perform the base-to-derived conversion 1363 llvm::Value *Derived = 1364 GetAddressOfDerivedClass(LV.getAddress(), BaseClassDecl, 1365 DerivedClassDecl, /*NullCheckValue=*/false); 1366 1367 return LValue::MakeAddr(Derived, MakeQualifiers(E->getType())); 1368 } 1369 case CastExpr::CK_BitCast: { 1370 // This must be a reinterpret_cast (or c-style equivalent). 1371 const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); 1372 1373 LValue LV = EmitLValue(E->getSubExpr()); 1374 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 1375 ConvertType(CE->getTypeAsWritten())); 1376 return LValue::MakeAddr(V, MakeQualifiers(E->getType())); 1377 } 1378 } 1379 } 1380 1381 LValue CodeGenFunction::EmitNullInitializationLValue( 1382 const CXXZeroInitValueExpr *E) { 1383 QualType Ty = E->getType(); 1384 const llvm::Type *LTy = ConvertTypeForMem(Ty); 1385 llvm::AllocaInst *Alloc = CreateTempAlloca(LTy); 1386 unsigned Align = getContext().getTypeAlign(Ty)/8; 1387 Alloc->setAlignment(Align); 1388 LValue lvalue = LValue::MakeAddr(Alloc, Qualifiers()); 1389 EmitMemSetToZero(lvalue.getAddress(), Ty); 1390 return lvalue; 1391 } 1392 1393 //===--------------------------------------------------------------------===// 1394 // Expression Emission 1395 //===--------------------------------------------------------------------===// 1396 1397 1398 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) { 1399 // Builtins never have block type. 1400 if (E->getCallee()->getType()->isBlockPointerType()) 1401 return EmitBlockCallExpr(E); 1402 1403 if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E)) 1404 return EmitCXXMemberCallExpr(CE); 1405 1406 const Decl *TargetDecl = 0; 1407 if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E->getCallee())) { 1408 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CE->getSubExpr())) { 1409 TargetDecl = DRE->getDecl(); 1410 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(TargetDecl)) 1411 if (unsigned builtinID = FD->getBuiltinID()) 1412 return EmitBuiltinExpr(FD, builtinID, E); 1413 } 1414 } 1415 1416 if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E)) 1417 if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl)) 1418 return EmitCXXOperatorMemberCallExpr(CE, MD); 1419 1420 if (isa<CXXPseudoDestructorExpr>(E->getCallee())) { 1421 // C++ [expr.pseudo]p1: 1422 // The result shall only be used as the operand for the function call 1423 // operator (), and the result of such a call has type void. The only 1424 // effect is the evaluation of the postfix-expression before the dot or 1425 // arrow. 1426 EmitScalarExpr(E->getCallee()); 1427 return RValue::get(0); 1428 } 1429 1430 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 1431 return EmitCall(Callee, E->getCallee()->getType(), 1432 E->arg_begin(), E->arg_end(), TargetDecl); 1433 } 1434 1435 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 1436 // Comma expressions just emit their LHS then their RHS as an l-value. 1437 if (E->getOpcode() == BinaryOperator::Comma) { 1438 EmitAnyExpr(E->getLHS()); 1439 return EmitLValue(E->getRHS()); 1440 } 1441 1442 if (E->getOpcode() == BinaryOperator::PtrMemD || 1443 E->getOpcode() == BinaryOperator::PtrMemI) 1444 return EmitPointerToDataMemberBinaryExpr(E); 1445 1446 // Can only get l-value for binary operator expressions which are a 1447 // simple assignment of aggregate type. 1448 if (E->getOpcode() != BinaryOperator::Assign) 1449 return EmitUnsupportedLValue(E, "binary l-value expression"); 1450 1451 if (!hasAggregateLLVMType(E->getType())) { 1452 // Emit the LHS as an l-value. 1453 LValue LV = EmitLValue(E->getLHS()); 1454 1455 llvm::Value *RHS = EmitScalarExpr(E->getRHS()); 1456 EmitStoreOfScalar(RHS, LV.getAddress(), LV.isVolatileQualified(), 1457 E->getType()); 1458 return LV; 1459 } 1460 1461 llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType())); 1462 EmitAggExpr(E, Temp, false); 1463 // FIXME: Are these qualifiers correct? 1464 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1465 } 1466 1467 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 1468 RValue RV = EmitCallExpr(E); 1469 1470 if (!RV.isScalar()) 1471 return LValue::MakeAddr(RV.getAggregateAddr(),MakeQualifiers(E->getType())); 1472 1473 assert(E->getCallReturnType()->isReferenceType() && 1474 "Can't have a scalar return unless the return type is a " 1475 "reference type!"); 1476 1477 return LValue::MakeAddr(RV.getScalarVal(), MakeQualifiers(E->getType())); 1478 } 1479 1480 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) { 1481 // FIXME: This shouldn't require another copy. 1482 llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType())); 1483 EmitAggExpr(E, Temp, false); 1484 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1485 } 1486 1487 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) { 1488 llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), "tmp"); 1489 EmitCXXConstructExpr(Temp, E); 1490 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1491 } 1492 1493 LValue 1494 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) { 1495 llvm::Value *Temp = EmitCXXTypeidExpr(E); 1496 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1497 } 1498 1499 LValue 1500 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) { 1501 LValue LV = EmitLValue(E->getSubExpr()); 1502 PushCXXTemporary(E->getTemporary(), LV.getAddress()); 1503 return LV; 1504 } 1505 1506 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 1507 // Can only get l-value for message expression returning aggregate type 1508 RValue RV = EmitObjCMessageExpr(E); 1509 // FIXME: can this be volatile? 1510 return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType())); 1511 } 1512 1513 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, 1514 const ObjCIvarDecl *Ivar) { 1515 return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); 1516 } 1517 1518 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy, 1519 llvm::Value *BaseValue, 1520 const ObjCIvarDecl *Ivar, 1521 unsigned CVRQualifiers) { 1522 return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue, 1523 Ivar, CVRQualifiers); 1524 } 1525 1526 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 1527 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 1528 llvm::Value *BaseValue = 0; 1529 const Expr *BaseExpr = E->getBase(); 1530 Qualifiers BaseQuals; 1531 QualType ObjectTy; 1532 if (E->isArrow()) { 1533 BaseValue = EmitScalarExpr(BaseExpr); 1534 ObjectTy = BaseExpr->getType()->getPointeeType(); 1535 BaseQuals = ObjectTy.getQualifiers(); 1536 } else { 1537 LValue BaseLV = EmitLValue(BaseExpr); 1538 // FIXME: this isn't right for bitfields. 1539 BaseValue = BaseLV.getAddress(); 1540 ObjectTy = BaseExpr->getType(); 1541 BaseQuals = ObjectTy.getQualifiers(); 1542 } 1543 1544 LValue LV = 1545 EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 1546 BaseQuals.getCVRQualifiers()); 1547 setObjCGCLValueClass(getContext(), E, LV); 1548 return LV; 1549 } 1550 1551 LValue 1552 CodeGenFunction::EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E) { 1553 // This is a special l-value that just issues sends when we load or store 1554 // through it. 1555 return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers()); 1556 } 1557 1558 LValue CodeGenFunction::EmitObjCKVCRefLValue( 1559 const ObjCImplicitSetterGetterRefExpr *E) { 1560 // This is a special l-value that just issues sends when we load or store 1561 // through it. 1562 return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers()); 1563 } 1564 1565 LValue CodeGenFunction::EmitObjCSuperExprLValue(const ObjCSuperExpr *E) { 1566 return EmitUnsupportedLValue(E, "use of super"); 1567 } 1568 1569 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) { 1570 // Can only get l-value for message expression returning aggregate type 1571 RValue RV = EmitAnyExprToTemp(E); 1572 // FIXME: can this be volatile? 1573 return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType())); 1574 } 1575 1576 1577 LValue CodeGenFunction::EmitPointerToDataMemberLValue(const FieldDecl *Field) { 1578 const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Field->getDeclContext()); 1579 QualType NNSpecTy = 1580 getContext().getCanonicalType( 1581 getContext().getTypeDeclType(const_cast<CXXRecordDecl*>(ClassDecl))); 1582 NNSpecTy = getContext().getPointerType(NNSpecTy); 1583 llvm::Value *V = llvm::Constant::getNullValue(ConvertType(NNSpecTy)); 1584 LValue MemExpLV = EmitLValueForField(V, Field, /*isUnion=*/false, 1585 /*Qualifiers=*/0); 1586 const llvm::Type *ResultType = ConvertType(getContext().getPointerDiffType()); 1587 V = Builder.CreatePtrToInt(MemExpLV.getAddress(), ResultType, "datamember"); 1588 return LValue::MakeAddr(V, MakeQualifiers(Field->getType())); 1589 } 1590 1591 RValue CodeGenFunction::EmitCall(llvm::Value *Callee, QualType CalleeType, 1592 CallExpr::const_arg_iterator ArgBeg, 1593 CallExpr::const_arg_iterator ArgEnd, 1594 const Decl *TargetDecl) { 1595 // Get the actual function type. The callee type will always be a pointer to 1596 // function type or a block pointer type. 1597 assert(CalleeType->isFunctionPointerType() && 1598 "Call must have function pointer type!"); 1599 1600 CalleeType = getContext().getCanonicalType(CalleeType); 1601 1602 QualType FnType = cast<PointerType>(CalleeType)->getPointeeType(); 1603 QualType ResultType = cast<FunctionType>(FnType)->getResultType(); 1604 1605 CallArgList Args; 1606 EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); 1607 1608 // FIXME: We should not need to do this, it should be part of the function 1609 // type. 1610 unsigned CallingConvention = 0; 1611 if (const llvm::Function *F = 1612 dyn_cast<llvm::Function>(Callee->stripPointerCasts())) 1613 CallingConvention = F->getCallingConv(); 1614 return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args, 1615 CallingConvention), 1616 Callee, Args, TargetDecl); 1617 } 1618 1619 LValue CodeGenFunction:: 1620 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) { 1621 llvm::Value *BaseV; 1622 if (E->getOpcode() == BinaryOperator::PtrMemI) 1623 BaseV = EmitScalarExpr(E->getLHS()); 1624 else 1625 BaseV = EmitLValue(E->getLHS()).getAddress(); 1626 const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(getLLVMContext()); 1627 BaseV = Builder.CreateBitCast(BaseV, i8Ty); 1628 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS()); 1629 llvm::Value *AddV = Builder.CreateInBoundsGEP(BaseV, OffsetV, "add.ptr"); 1630 1631 QualType Ty = E->getRHS()->getType(); 1632 Ty = Ty->getAs<MemberPointerType>()->getPointeeType(); 1633 1634 const llvm::Type *PType = ConvertType(getContext().getPointerType(Ty)); 1635 AddV = Builder.CreateBitCast(AddV, PType); 1636 return LValue::MakeAddr(AddV, MakeQualifiers(Ty)); 1637 } 1638 1639