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