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