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