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