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 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 33 } 34 35 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 36 /// expression and compare the result against zero, returning an Int1Ty value. 37 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 38 QualType BoolTy = getContext().BoolTy; 39 if (!E->getType()->isAnyComplexType()) 40 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 41 42 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 43 } 44 45 /// EmitAnyExpr - Emit code to compute the specified expression which can have 46 /// any type. The result is returned as an RValue struct. If this is an 47 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where 48 /// the result should be returned. 49 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc, 50 bool isAggLocVolatile) { 51 if (!hasAggregateLLVMType(E->getType())) 52 return RValue::get(EmitScalarExpr(E)); 53 else if (E->getType()->isAnyComplexType()) 54 return RValue::getComplex(EmitComplexExpr(E)); 55 56 EmitAggExpr(E, AggLoc, isAggLocVolatile); 57 return RValue::getAggregate(AggLoc); 58 } 59 60 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result 61 /// will always be accessible even if no aggregate location is 62 /// provided. 63 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E, llvm::Value *AggLoc, 64 bool isAggLocVolatile) { 65 if (!AggLoc && hasAggregateLLVMType(E->getType()) && 66 !E->getType()->isAnyComplexType()) 67 AggLoc = CreateTempAlloca(ConvertType(E->getType()), "agg.tmp"); 68 return EmitAnyExpr(E, AggLoc, isAggLocVolatile); 69 } 70 71 /// getAccessedFieldNo - Given an encoded value and a result number, return 72 /// the input field number being accessed. 73 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 74 const llvm::Constant *Elts) { 75 if (isa<llvm::ConstantAggregateZero>(Elts)) 76 return 0; 77 78 return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue(); 79 } 80 81 82 //===----------------------------------------------------------------------===// 83 // LValue Expression Emission 84 //===----------------------------------------------------------------------===// 85 86 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 87 const char *Name) { 88 ErrorUnsupported(E, Name); 89 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 90 return LValue::MakeAddr(llvm::UndefValue::get(Ty), 91 E->getType().getCVRQualifiers()); 92 } 93 94 /// EmitLValue - Emit code to compute a designator that specifies the location 95 /// of the expression. 96 /// 97 /// This can return one of two things: a simple address or a bitfield 98 /// reference. In either case, the LLVM Value* in the LValue structure is 99 /// guaranteed to be an LLVM pointer type. 100 /// 101 /// If this returns a bitfield reference, nothing about the pointee type of 102 /// the LLVM value is known: For example, it may not be a pointer to an 103 /// integer. 104 /// 105 /// If this returns a normal address, and if the lvalue's C type is fixed 106 /// size, this method guarantees that the returned pointer type will point to 107 /// an LLVM type of the same size of the lvalue's type. If the lvalue has a 108 /// variable length type, this is not possible. 109 /// 110 LValue CodeGenFunction::EmitLValue(const Expr *E) { 111 switch (E->getStmtClass()) { 112 default: return EmitUnsupportedLValue(E, "l-value expression"); 113 114 case Expr::BinaryOperatorClass: 115 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 116 case Expr::CallExprClass: 117 case Expr::CXXOperatorCallExprClass: 118 return EmitCallExprLValue(cast<CallExpr>(E)); 119 case Expr::DeclRefExprClass: return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 120 case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 121 case Expr::PredefinedExprClass: 122 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 123 case Expr::StringLiteralClass: 124 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 125 126 case Expr::CXXConditionDeclExprClass: 127 return EmitCXXConditionDeclLValue(cast<CXXConditionDeclExpr>(E)); 128 129 case Expr::ObjCMessageExprClass: 130 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 131 case Expr::ObjCIvarRefExprClass: 132 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 133 case Expr::ObjCPropertyRefExprClass: 134 return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E)); 135 case Expr::ObjCKVCRefExprClass: 136 return EmitObjCKVCRefLValue(cast<ObjCKVCRefExpr>(E)); 137 case Expr::ObjCSuperExprClass: 138 return EmitObjCSuperExpr(cast<ObjCSuperExpr>(E)); 139 140 case Expr::UnaryOperatorClass: 141 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 142 case Expr::ArraySubscriptExprClass: 143 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 144 case Expr::ExtVectorElementExprClass: 145 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 146 case Expr::MemberExprClass: return EmitMemberExpr(cast<MemberExpr>(E)); 147 case Expr::CompoundLiteralExprClass: 148 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 149 } 150 } 151 152 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, 153 /// this method emits the address of the lvalue, then loads the result as an 154 /// rvalue, returning the rvalue. 155 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) { 156 if (LV.isObjCWeak()) { 157 // load of a __weak object. 158 llvm::Value *AddrWeakObj = LV.getAddress(); 159 llvm::Value *read_weak = CGM.getObjCRuntime().EmitObjCWeakRead(*this, 160 AddrWeakObj); 161 return RValue::get(read_weak); 162 } 163 164 if (LV.isSimple()) { 165 llvm::Value *Ptr = LV.getAddress(); 166 const llvm::Type *EltTy = 167 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 168 169 // Simple scalar l-value. 170 if (EltTy->isSingleValueType()) { 171 llvm::Value *V = Builder.CreateLoad(Ptr, LV.isVolatileQualified(),"tmp"); 172 173 // Bool can have different representation in memory than in registers. 174 if (ExprType->isBooleanType()) { 175 if (V->getType() != llvm::Type::Int1Ty) 176 V = Builder.CreateTrunc(V, llvm::Type::Int1Ty, "tobool"); 177 } 178 179 return RValue::get(V); 180 } 181 182 assert(ExprType->isFunctionType() && "Unknown scalar value"); 183 return RValue::get(Ptr); 184 } 185 186 if (LV.isVectorElt()) { 187 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 188 LV.isVolatileQualified(), "tmp"); 189 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 190 "vecext")); 191 } 192 193 // If this is a reference to a subset of the elements of a vector, either 194 // shuffle the input or extract/insert them as appropriate. 195 if (LV.isExtVectorElt()) 196 return EmitLoadOfExtVectorElementLValue(LV, ExprType); 197 198 if (LV.isBitfield()) 199 return EmitLoadOfBitfieldLValue(LV, ExprType); 200 201 if (LV.isPropertyRef()) 202 return EmitLoadOfPropertyRefLValue(LV, ExprType); 203 204 if (LV.isKVCRef()) 205 return EmitLoadOfKVCRefLValue(LV, ExprType); 206 207 assert(0 && "Unknown LValue type!"); 208 //an invalid RValue, but the assert will 209 //ensure that this point is never reached 210 return RValue(); 211 } 212 213 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV, 214 QualType ExprType) { 215 unsigned StartBit = LV.getBitfieldStartBit(); 216 unsigned BitfieldSize = LV.getBitfieldSize(); 217 llvm::Value *Ptr = LV.getBitfieldAddr(); 218 219 const llvm::Type *EltTy = 220 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 221 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 222 223 // In some cases the bitfield may straddle two memory locations. 224 // Currently we load the entire bitfield, then do the magic to 225 // sign-extend it if necessary. This results in somewhat more code 226 // than necessary for the common case (one load), since two shifts 227 // accomplish both the masking and sign extension. 228 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 229 llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp"); 230 231 // Shift to proper location. 232 if (StartBit) 233 Val = Builder.CreateLShr(Val, llvm::ConstantInt::get(EltTy, StartBit), 234 "bf.lo"); 235 236 // Mask off unused bits. 237 llvm::Constant *LowMask = 238 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, LowBits)); 239 Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared"); 240 241 // Fetch the high bits if necessary. 242 if (LowBits < BitfieldSize) { 243 unsigned HighBits = BitfieldSize - LowBits; 244 llvm::Value *HighPtr = 245 Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1), 246 "bf.ptr.hi"); 247 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 248 LV.isVolatileQualified(), 249 "tmp"); 250 251 // Mask off unused bits. 252 llvm::Constant *HighMask = 253 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 254 HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared"); 255 256 // Shift to proper location and or in to bitfield value. 257 HighVal = Builder.CreateShl(HighVal, 258 llvm::ConstantInt::get(EltTy, LowBits)); 259 Val = Builder.CreateOr(Val, HighVal, "bf.val"); 260 } 261 262 // Sign extend if necessary. 263 if (LV.isBitfieldSigned()) { 264 llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy, 265 EltTySize - BitfieldSize); 266 Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits), 267 ExtraBits, "bf.val.sext"); 268 } 269 270 // The bitfield type and the normal type differ when the storage sizes 271 // differ (currently just _Bool). 272 Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp"); 273 274 return RValue::get(Val); 275 } 276 277 RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV, 278 QualType ExprType) { 279 return EmitObjCPropertyGet(LV.getPropertyRefExpr()); 280 } 281 282 RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV, 283 QualType ExprType) { 284 return EmitObjCPropertyGet(LV.getKVCRefExpr()); 285 } 286 287 // If this is a reference to a subset of the elements of a vector, either 288 // shuffle the input or extract/insert them as appropriate. 289 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV, 290 QualType ExprType) { 291 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 292 LV.isVolatileQualified(), "tmp"); 293 294 const llvm::Constant *Elts = LV.getExtVectorElts(); 295 296 // If the result of the expression is a non-vector type, we must be 297 // extracting a single element. Just codegen as an extractelement. 298 const VectorType *ExprVT = ExprType->getAsVectorType(); 299 if (!ExprVT) { 300 unsigned InIdx = getAccessedFieldNo(0, Elts); 301 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 302 return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp")); 303 } 304 305 // If the source and destination have the same number of elements, use a 306 // vector shuffle instead of insert/extracts. 307 unsigned NumResultElts = ExprVT->getNumElements(); 308 unsigned NumSourceElts = 309 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 310 311 if (NumResultElts == NumSourceElts) { 312 llvm::SmallVector<llvm::Constant*, 4> Mask; 313 for (unsigned i = 0; i != NumResultElts; ++i) { 314 unsigned InIdx = getAccessedFieldNo(i, Elts); 315 Mask.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx)); 316 } 317 318 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 319 Vec = Builder.CreateShuffleVector(Vec, 320 llvm::UndefValue::get(Vec->getType()), 321 MaskV, "tmp"); 322 return RValue::get(Vec); 323 } 324 325 // Start out with an undef of the result type. 326 llvm::Value *Result = llvm::UndefValue::get(ConvertType(ExprType)); 327 328 // Extract/Insert each element of the result. 329 for (unsigned i = 0; i != NumResultElts; ++i) { 330 unsigned InIdx = getAccessedFieldNo(i, Elts); 331 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 332 Elt = Builder.CreateExtractElement(Vec, Elt, "tmp"); 333 334 llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); 335 Result = Builder.CreateInsertElement(Result, Elt, OutIdx, "tmp"); 336 } 337 338 return RValue::get(Result); 339 } 340 341 342 343 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 344 /// lvalue, where both are guaranteed to the have the same type, and that type 345 /// is 'Ty'. 346 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, 347 QualType Ty) { 348 if (!Dst.isSimple()) { 349 if (Dst.isVectorElt()) { 350 // Read/modify/write the vector, inserting the new element. 351 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 352 Dst.isVolatileQualified(), "tmp"); 353 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 354 Dst.getVectorIdx(), "vecins"); 355 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 356 return; 357 } 358 359 // If this is an update of extended vector elements, insert them as 360 // appropriate. 361 if (Dst.isExtVectorElt()) 362 return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty); 363 364 if (Dst.isBitfield()) 365 return EmitStoreThroughBitfieldLValue(Src, Dst, Ty); 366 367 if (Dst.isPropertyRef()) 368 return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty); 369 370 if (Dst.isKVCRef()) 371 return EmitStoreThroughKVCRefLValue(Src, Dst, Ty); 372 373 assert(0 && "Unknown LValue type"); 374 } 375 376 if (Dst.isObjCWeak()) { 377 // load of a __weak object. 378 llvm::Value *LvalueDst = Dst.getAddress(); 379 llvm::Value *src = Src.getScalarVal(); 380 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 381 return; 382 } 383 384 if (Dst.isObjCStrong()) { 385 // load of a __strong object. 386 llvm::Value *LvalueDst = Dst.getAddress(); 387 llvm::Value *src = Src.getScalarVal(); 388 if (Dst.isObjCIvar()) 389 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, LvalueDst); 390 else 391 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst); 392 return; 393 } 394 395 llvm::Value *DstAddr = Dst.getAddress(); 396 assert(Src.isScalar() && "Can't emit an agg store with this method"); 397 // FIXME: Handle volatility etc. 398 const llvm::Type *SrcTy = Src.getScalarVal()->getType(); 399 const llvm::PointerType *DstPtr = cast<llvm::PointerType>(DstAddr->getType()); 400 const llvm::Type *AddrTy = DstPtr->getElementType(); 401 unsigned AS = DstPtr->getAddressSpace(); 402 403 if (AddrTy != SrcTy) 404 DstAddr = Builder.CreateBitCast(DstAddr, 405 llvm::PointerType::get(SrcTy, AS), 406 "storetmp"); 407 Builder.CreateStore(Src.getScalarVal(), DstAddr, Dst.isVolatileQualified()); 408 } 409 410 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 411 QualType Ty, 412 llvm::Value **Result) { 413 unsigned StartBit = Dst.getBitfieldStartBit(); 414 unsigned BitfieldSize = Dst.getBitfieldSize(); 415 llvm::Value *Ptr = Dst.getBitfieldAddr(); 416 417 const llvm::Type *EltTy = 418 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 419 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 420 421 // Get the new value, cast to the appropriate type and masked to 422 // exactly the size of the bit-field. 423 llvm::Value *SrcVal = Src.getScalarVal(); 424 llvm::Value *NewVal = Builder.CreateIntCast(SrcVal, EltTy, false, "tmp"); 425 llvm::Constant *Mask = 426 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize)); 427 NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value"); 428 429 // Return the new value of the bit-field, if requested. 430 if (Result) { 431 // Cast back to the proper type for result. 432 const llvm::Type *SrcTy = SrcVal->getType(); 433 llvm::Value *SrcTrunc = Builder.CreateIntCast(NewVal, SrcTy, false, 434 "bf.reload.val"); 435 436 // Sign extend if necessary. 437 if (Dst.isBitfieldSigned()) { 438 unsigned SrcTySize = CGM.getTargetData().getTypeSizeInBits(SrcTy); 439 llvm::Value *ExtraBits = llvm::ConstantInt::get(SrcTy, 440 SrcTySize - BitfieldSize); 441 SrcTrunc = Builder.CreateAShr(Builder.CreateShl(SrcTrunc, ExtraBits), 442 ExtraBits, "bf.reload.sext"); 443 } 444 445 *Result = SrcTrunc; 446 } 447 448 // In some cases the bitfield may straddle two memory locations. 449 // Emit the low part first and check to see if the high needs to be 450 // done. 451 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 452 llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(), 453 "bf.prev.low"); 454 455 // Compute the mask for zero-ing the low part of this bitfield. 456 llvm::Constant *InvMask = 457 llvm::ConstantInt::get(~llvm::APInt::getBitsSet(EltTySize, StartBit, 458 StartBit + LowBits)); 459 460 // Compute the new low part as 461 // LowVal = (LowVal & InvMask) | (NewVal << StartBit), 462 // with the shift of NewVal implicitly stripping the high bits. 463 llvm::Value *NewLowVal = 464 Builder.CreateShl(NewVal, llvm::ConstantInt::get(EltTy, StartBit), 465 "bf.value.lo"); 466 LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared"); 467 LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo"); 468 469 // Write back. 470 Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified()); 471 472 // If the low part doesn't cover the bitfield emit a high part. 473 if (LowBits < BitfieldSize) { 474 unsigned HighBits = BitfieldSize - LowBits; 475 llvm::Value *HighPtr = 476 Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1), 477 "bf.ptr.hi"); 478 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 479 Dst.isVolatileQualified(), 480 "bf.prev.hi"); 481 482 // Compute the mask for zero-ing the high part of this bitfield. 483 llvm::Constant *InvMask = 484 llvm::ConstantInt::get(~llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 485 486 // Compute the new high part as 487 // HighVal = (HighVal & InvMask) | (NewVal lshr LowBits), 488 // where the high bits of NewVal have already been cleared and the 489 // shift stripping the low bits. 490 llvm::Value *NewHighVal = 491 Builder.CreateLShr(NewVal, llvm::ConstantInt::get(EltTy, LowBits), 492 "bf.value.high"); 493 HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared"); 494 HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi"); 495 496 // Write back. 497 Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified()); 498 } 499 } 500 501 void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src, 502 LValue Dst, 503 QualType Ty) { 504 EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src); 505 } 506 507 void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src, 508 LValue Dst, 509 QualType Ty) { 510 EmitObjCPropertySet(Dst.getKVCRefExpr(), Src); 511 } 512 513 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 514 LValue Dst, 515 QualType Ty) { 516 // This access turns into a read/modify/write of the vector. Load the input 517 // value now. 518 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 519 Dst.isVolatileQualified(), "tmp"); 520 const llvm::Constant *Elts = Dst.getExtVectorElts(); 521 522 llvm::Value *SrcVal = Src.getScalarVal(); 523 524 if (const VectorType *VTy = Ty->getAsVectorType()) { 525 unsigned NumSrcElts = VTy->getNumElements(); 526 527 // Extract/Insert each element. 528 for (unsigned i = 0; i != NumSrcElts; ++i) { 529 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); 530 Elt = Builder.CreateExtractElement(SrcVal, Elt, "tmp"); 531 532 unsigned Idx = getAccessedFieldNo(i, Elts); 533 llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Idx); 534 Vec = Builder.CreateInsertElement(Vec, Elt, OutIdx, "tmp"); 535 } 536 } else { 537 // If the Src is a scalar (not a vector) it must be updating one element. 538 unsigned InIdx = getAccessedFieldNo(0, Elts); 539 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 540 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp"); 541 } 542 543 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 544 } 545 546 /// SetVarDeclObjCAttribute - Set __weak/__strong attributes into the LValue 547 /// object. 548 static void SetVarDeclObjCAttribute(ASTContext &Ctx, const Decl *VD, 549 const QualType &Ty, LValue &LV) 550 { 551 if (const ObjCGCAttr *A = VD->getAttr<ObjCGCAttr>()) { 552 ObjCGCAttr::GCAttrTypes attrType = A->getType(); 553 LValue::SetObjCType(attrType == ObjCGCAttr::Weak, 554 attrType == ObjCGCAttr::Strong, LV); 555 } 556 else if (Ctx.getLangOptions().ObjC1 && 557 Ctx.getLangOptions().getGCMode() != LangOptions::NonGC) { 558 // Default behavious under objective-c's gc is for objective-c pointers 559 // be treated as though they were declared as __strong. 560 if (Ctx.isObjCObjectPointerType(Ty)) 561 LValue::SetObjCType(false, true, LV); 562 } 563 } 564 565 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 566 const VarDecl *VD = dyn_cast<VarDecl>(E->getDecl()); 567 568 if (VD && (VD->isBlockVarDecl() || isa<ParmVarDecl>(VD) || 569 isa<ImplicitParamDecl>(VD))) { 570 LValue LV; 571 if (VD->getStorageClass() == VarDecl::Extern) { 572 LV = LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD), 573 E->getType().getCVRQualifiers()); 574 } 575 else { 576 llvm::Value *V = LocalDeclMap[VD]; 577 assert(V && "BlockVarDecl not entered in LocalDeclMap?"); 578 LV = LValue::MakeAddr(V, E->getType().getCVRQualifiers()); 579 } 580 if (VD->isBlockVarDecl() && 581 (VD->getStorageClass() == VarDecl::Static || 582 VD->getStorageClass() == VarDecl::Extern)) 583 SetVarDeclObjCAttribute(getContext(), VD, E->getType(), LV); 584 return LV; 585 } else if (VD && VD->isFileVarDecl()) { 586 LValue LV = LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD), 587 E->getType().getCVRQualifiers()); 588 SetVarDeclObjCAttribute(getContext(), VD, E->getType(), LV); 589 return LV; 590 } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(E->getDecl())) { 591 return LValue::MakeAddr(CGM.GetAddrOfFunction(FD), 592 E->getType().getCVRQualifiers()); 593 } 594 else if (const ImplicitParamDecl *IPD = 595 dyn_cast<ImplicitParamDecl>(E->getDecl())) { 596 llvm::Value *V = LocalDeclMap[IPD]; 597 assert(V && "BlockVarDecl not entered in LocalDeclMap?"); 598 return LValue::MakeAddr(V, E->getType().getCVRQualifiers()); 599 } 600 assert(0 && "Unimp declref"); 601 //an invalid LValue, but the assert will 602 //ensure that this point is never reached. 603 return LValue(); 604 } 605 606 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 607 // __extension__ doesn't affect lvalue-ness. 608 if (E->getOpcode() == UnaryOperator::Extension) 609 return EmitLValue(E->getSubExpr()); 610 611 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 612 switch (E->getOpcode()) { 613 default: assert(0 && "Unknown unary operator lvalue!"); 614 case UnaryOperator::Deref: 615 return LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), 616 ExprTy->getAsPointerType()->getPointeeType() 617 .getCVRQualifiers()); 618 case UnaryOperator::Real: 619 case UnaryOperator::Imag: 620 LValue LV = EmitLValue(E->getSubExpr()); 621 unsigned Idx = E->getOpcode() == UnaryOperator::Imag; 622 return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(), 623 Idx, "idx"), 624 ExprTy.getCVRQualifiers()); 625 } 626 } 627 628 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 629 return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromLiteral(E), 0); 630 } 631 632 LValue CodeGenFunction::EmitPredefinedFunctionName(unsigned Type) { 633 std::string GlobalVarName; 634 635 switch (Type) { 636 default: 637 assert(0 && "Invalid type"); 638 case PredefinedExpr::Func: 639 GlobalVarName = "__func__."; 640 break; 641 case PredefinedExpr::Function: 642 GlobalVarName = "__FUNCTION__."; 643 break; 644 case PredefinedExpr::PrettyFunction: 645 // FIXME:: Demangle C++ method names 646 GlobalVarName = "__PRETTY_FUNCTION__."; 647 break; 648 } 649 650 std::string FunctionName; 651 if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) { 652 FunctionName = FD->getNameAsString(); 653 } else { 654 // Just get the mangled name. 655 FunctionName = CurFn->getName(); 656 } 657 658 GlobalVarName += FunctionName; 659 llvm::Constant *C = 660 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 661 return LValue::MakeAddr(C, 0); 662 } 663 664 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 665 switch (E->getIdentType()) { 666 default: 667 return EmitUnsupportedLValue(E, "predefined expression"); 668 case PredefinedExpr::Func: 669 case PredefinedExpr::Function: 670 case PredefinedExpr::PrettyFunction: 671 return EmitPredefinedFunctionName(E->getIdentType()); 672 } 673 } 674 675 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 676 // The index must always be an integer, which is not an aggregate. Emit it. 677 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 678 679 // If the base is a vector type, then we are forming a vector element lvalue 680 // with this subscript. 681 if (E->getBase()->getType()->isVectorType()) { 682 // Emit the vector as an lvalue to get its address. 683 LValue LHS = EmitLValue(E->getBase()); 684 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 685 // FIXME: This should properly sign/zero/extend or truncate Idx to i32. 686 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 687 E->getBase()->getType().getCVRQualifiers()); 688 } 689 690 // The base must be a pointer, which is not an aggregate. Emit it. 691 llvm::Value *Base = EmitScalarExpr(E->getBase()); 692 693 // Extend or truncate the index type to 32 or 64-bits. 694 QualType IdxTy = E->getIdx()->getType(); 695 bool IdxSigned = IdxTy->isSignedIntegerType(); 696 unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth(); 697 if (IdxBitwidth != LLVMPointerWidth) 698 Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth), 699 IdxSigned, "idxprom"); 700 701 // We know that the pointer points to a type of the correct size, unless the 702 // size is a VLA. 703 if (!E->getType()->isConstantSizeType()) 704 return EmitUnsupportedLValue(E, "VLA index"); 705 QualType ExprTy = getContext().getCanonicalType(E->getBase()->getType()); 706 707 return LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"), 708 ExprTy->getAsPointerType()->getPointeeType() 709 .getCVRQualifiers()); 710 } 711 712 static 713 llvm::Constant *GenerateConstantVector(llvm::SmallVector<unsigned, 4> &Elts) { 714 llvm::SmallVector<llvm::Constant *, 4> CElts; 715 716 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 717 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, Elts[i])); 718 719 return llvm::ConstantVector::get(&CElts[0], CElts.size()); 720 } 721 722 LValue CodeGenFunction:: 723 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 724 // Emit the base vector as an l-value. 725 LValue Base = EmitLValue(E->getBase()); 726 727 // Encode the element access list into a vector of unsigned indices. 728 llvm::SmallVector<unsigned, 4> Indices; 729 E->getEncodedElementAccess(Indices); 730 731 if (Base.isSimple()) { 732 llvm::Constant *CV = GenerateConstantVector(Indices); 733 return LValue::MakeExtVectorElt(Base.getAddress(), CV, 734 E->getBase()->getType().getCVRQualifiers()); 735 } 736 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 737 738 llvm::Constant *BaseElts = Base.getExtVectorElts(); 739 llvm::SmallVector<llvm::Constant *, 4> CElts; 740 741 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 742 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 743 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, 0)); 744 else 745 CElts.push_back(BaseElts->getOperand(Indices[i])); 746 } 747 llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); 748 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, 749 E->getBase()->getType().getCVRQualifiers()); 750 } 751 752 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 753 bool isUnion = false; 754 bool isIvar = false; 755 Expr *BaseExpr = E->getBase(); 756 llvm::Value *BaseValue = NULL; 757 unsigned CVRQualifiers=0; 758 759 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 760 if (E->isArrow()) { 761 BaseValue = EmitScalarExpr(BaseExpr); 762 const PointerType *PTy = 763 cast<PointerType>(getContext().getCanonicalType(BaseExpr->getType())); 764 if (PTy->getPointeeType()->isUnionType()) 765 isUnion = true; 766 CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); 767 } 768 else { 769 LValue BaseLV = EmitLValue(BaseExpr); 770 if (BaseLV.isObjCIvar()) 771 isIvar = true; 772 // FIXME: this isn't right for bitfields. 773 BaseValue = BaseLV.getAddress(); 774 if (BaseExpr->getType()->isUnionType()) 775 isUnion = true; 776 CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); 777 } 778 779 FieldDecl *Field = E->getMemberDecl(); 780 LValue MemExpLV = EmitLValueForField(BaseValue, Field, isUnion, CVRQualifiers); 781 LValue::SetObjCIvar(MemExpLV, isIvar); 782 return MemExpLV; 783 } 784 785 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue, 786 FieldDecl* Field, 787 bool isUnion, 788 unsigned CVRQualifiers) 789 { 790 llvm::Value *V; 791 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 792 793 if (Field->isBitField()) { 794 // FIXME: CodeGenTypes should expose a method to get the appropriate 795 // type for FieldTy (the appropriate type is ABI-dependent). 796 const llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(Field->getType()); 797 const llvm::PointerType *BaseTy = 798 cast<llvm::PointerType>(BaseValue->getType()); 799 unsigned AS = BaseTy->getAddressSpace(); 800 BaseValue = Builder.CreateBitCast(BaseValue, 801 llvm::PointerType::get(FieldTy, AS), 802 "tmp"); 803 V = Builder.CreateGEP(BaseValue, 804 llvm::ConstantInt::get(llvm::Type::Int32Ty, idx), 805 "tmp"); 806 807 CodeGenTypes::BitFieldInfo bitFieldInfo = 808 CGM.getTypes().getBitFieldInfo(Field); 809 return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size, 810 Field->getType()->isSignedIntegerType(), 811 Field->getType().getCVRQualifiers()|CVRQualifiers); 812 } 813 814 V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 815 816 // Match union field type. 817 if (isUnion) { 818 const llvm::Type *FieldTy = 819 CGM.getTypes().ConvertTypeForMem(Field->getType()); 820 const llvm::PointerType * BaseTy = 821 cast<llvm::PointerType>(BaseValue->getType()); 822 unsigned AS = BaseTy->getAddressSpace(); 823 V = Builder.CreateBitCast(V, 824 llvm::PointerType::get(FieldTy, AS), 825 "tmp"); 826 } 827 828 LValue LV = 829 LValue::MakeAddr(V, 830 Field->getType().getCVRQualifiers()|CVRQualifiers); 831 if (const ObjCGCAttr *A = Field->getAttr<ObjCGCAttr>()) { 832 ObjCGCAttr::GCAttrTypes attrType = A->getType(); 833 // __weak attribute on a field is ignored. 834 LValue::SetObjCType(false, attrType == ObjCGCAttr::Strong, LV); 835 } 836 else if (CGM.getLangOptions().ObjC1 && 837 CGM.getLangOptions().getGCMode() != LangOptions::NonGC) { 838 QualType ExprTy = Field->getType(); 839 if (getContext().isObjCObjectPointerType(ExprTy)) 840 LValue::SetObjCType(false, true, LV); 841 } 842 return LV; 843 } 844 845 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E) 846 { 847 const llvm::Type *LTy = ConvertType(E->getType()); 848 llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral"); 849 850 const Expr* InitExpr = E->getInitializer(); 851 LValue Result = LValue::MakeAddr(DeclPtr, E->getType().getCVRQualifiers()); 852 853 if (E->getType()->isComplexType()) { 854 EmitComplexExprIntoAddr(InitExpr, DeclPtr, false); 855 } else if (hasAggregateLLVMType(E->getType())) { 856 EmitAnyExpr(InitExpr, DeclPtr, false); 857 } else { 858 EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType()); 859 } 860 861 return Result; 862 } 863 864 //===--------------------------------------------------------------------===// 865 // Expression Emission 866 //===--------------------------------------------------------------------===// 867 868 869 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) { 870 if (const ImplicitCastExpr *IcExpr = 871 dyn_cast<const ImplicitCastExpr>(E->getCallee())) 872 if (const DeclRefExpr *DRExpr = 873 dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr())) 874 if (const FunctionDecl *FDecl = 875 dyn_cast<const FunctionDecl>(DRExpr->getDecl())) 876 if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID()) 877 return EmitBuiltinExpr(builtinID, E); 878 879 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 880 return EmitCallExpr(Callee, E->getCallee()->getType(), 881 E->arg_begin(), E->arg_end()); 882 } 883 884 RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr, 885 CallExpr::const_arg_iterator ArgBeg, 886 CallExpr::const_arg_iterator ArgEnd) { 887 888 llvm::Value *Callee = EmitScalarExpr(FnExpr); 889 return EmitCallExpr(Callee, FnExpr->getType(), ArgBeg, ArgEnd); 890 } 891 892 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 893 // Can only get l-value for binary operator expressions which are a 894 // simple assignment of aggregate type. 895 if (E->getOpcode() != BinaryOperator::Assign) 896 return EmitUnsupportedLValue(E, "binary l-value expression"); 897 898 llvm::Value *Temp = CreateTempAlloca(ConvertType(E->getType())); 899 EmitAggExpr(E, Temp, false); 900 // FIXME: Are these qualifiers correct? 901 return LValue::MakeAddr(Temp, E->getType().getCVRQualifiers()); 902 } 903 904 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 905 // Can only get l-value for call expression returning aggregate type 906 RValue RV = EmitCallExpr(E); 907 // FIXME: can this be volatile? 908 return LValue::MakeAddr(RV.getAggregateAddr(), 909 E->getType().getCVRQualifiers()); 910 } 911 912 LValue 913 CodeGenFunction::EmitCXXConditionDeclLValue(const CXXConditionDeclExpr *E) { 914 EmitLocalBlockVarDecl(*E->getVarDecl()); 915 return EmitDeclRefLValue(E); 916 } 917 918 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 919 // Can only get l-value for message expression returning aggregate type 920 RValue RV = EmitObjCMessageExpr(E); 921 // FIXME: can this be volatile? 922 return LValue::MakeAddr(RV.getAggregateAddr(), 923 E->getType().getCVRQualifiers()); 924 } 925 926 llvm::Value *CodeGenFunction::EmitIvarOffset(ObjCInterfaceDecl *Interface, 927 const ObjCIvarDecl *Ivar) { 928 // Objective-C objects are traditionally C structures with their layout 929 // defined at compile-time. In some implementations, their layout is not 930 // defined until run time in order to allow instance variables to be added to 931 // a class without recompiling all of the subclasses. If this is the case 932 // then the CGObjCRuntime subclass must return true to LateBoundIvars and 933 // implement the lookup itself. 934 if (CGM.getObjCRuntime().LateBoundIVars()) 935 assert(0 && "late-bound ivars are unsupported"); 936 937 const llvm::Type *InterfaceLTy = 938 CGM.getTypes().ConvertType(getContext().getObjCInterfaceType(Interface)); 939 const llvm::StructLayout *Layout = 940 CGM.getTargetData().getStructLayout(cast<llvm::StructType>(InterfaceLTy)); 941 uint64_t Offset = 942 Layout->getElementOffset(CGM.getTypes().getLLVMFieldNo(Ivar)); 943 944 return llvm::ConstantInt::get(CGM.getTypes().ConvertType(getContext().LongTy), 945 Offset); 946 } 947 948 LValue CodeGenFunction::EmitLValueForIvar(llvm::Value *BaseValue, 949 const ObjCIvarDecl *Ivar, 950 unsigned CVRQualifiers) { 951 // See comment in EmitIvarOffset. 952 if (CGM.getObjCRuntime().LateBoundIVars()) 953 assert(0 && "late-bound ivars are unsupported"); 954 955 if (Ivar->isBitField()) 956 assert(0 && "ivar bitfields are unsupported"); 957 958 // TODO: Add a special case for isa (index 0) 959 unsigned Index = CGM.getTypes().getLLVMFieldNo(Ivar); 960 961 llvm::Value *V = Builder.CreateStructGEP(BaseValue, Index, "tmp"); 962 LValue LV = LValue::MakeAddr(V, Ivar->getType().getCVRQualifiers()|CVRQualifiers); 963 SetVarDeclObjCAttribute(getContext(), Ivar, Ivar->getType(), LV); 964 LValue::SetObjCIvar(LV, true); 965 return LV; 966 } 967 968 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 969 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 970 llvm::Value *BaseValue = 0; 971 const Expr *BaseExpr = E->getBase(); 972 unsigned CVRQualifiers = 0; 973 if (E->isArrow()) { 974 BaseValue = EmitScalarExpr(BaseExpr); 975 const PointerType *PTy = 976 cast<PointerType>(getContext().getCanonicalType(BaseExpr->getType())); 977 CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); 978 } else { 979 LValue BaseLV = EmitLValue(BaseExpr); 980 // FIXME: this isn't right for bitfields. 981 BaseValue = BaseLV.getAddress(); 982 CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); 983 } 984 985 return EmitLValueForIvar(BaseValue, E->getDecl(), CVRQualifiers); 986 } 987 988 LValue 989 CodeGenFunction::EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E) { 990 // This is a special l-value that just issues sends when we load or 991 // store through it. 992 return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers()); 993 } 994 995 LValue 996 CodeGenFunction::EmitObjCKVCRefLValue(const ObjCKVCRefExpr *E) { 997 // This is a special l-value that just issues sends when we load or 998 // store through it. 999 return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers()); 1000 } 1001 1002 LValue 1003 CodeGenFunction::EmitObjCSuperExpr(const ObjCSuperExpr *E) { 1004 return EmitUnsupportedLValue(E, "use of super"); 1005 } 1006 1007 RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, 1008 CallExpr::const_arg_iterator ArgBeg, 1009 CallExpr::const_arg_iterator ArgEnd) { 1010 1011 // The callee type will always be a pointer to function type, get the function 1012 // type. 1013 FnType = FnType->getAsPointerType()->getPointeeType(); 1014 QualType ResultType = FnType->getAsFunctionType()->getResultType(); 1015 1016 CallArgList Args; 1017 for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I) 1018 Args.push_back(std::make_pair(EmitAnyExprToTemp(*I), 1019 I->getType())); 1020 1021 return EmitCall(Callee, ResultType, Args); 1022 } 1023