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/Intrinsics.h" 21 #include "clang/CodeGen/CodeGenOptions.h" 22 #include "llvm/Target/TargetData.h" 23 using namespace clang; 24 using namespace CodeGen; 25 26 //===--------------------------------------------------------------------===// 27 // Miscellaneous Helper Methods 28 //===--------------------------------------------------------------------===// 29 30 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 31 /// block. 32 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty, 33 const llvm::Twine &Name) { 34 if (!Builder.isNamePreserving()) 35 return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt); 36 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 37 } 38 39 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 40 /// expression and compare the result against zero, returning an Int1Ty value. 41 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 42 QualType BoolTy = getContext().BoolTy; 43 if (E->getType()->isMemberFunctionPointerType()) { 44 LValue LV = EmitAggExprToLValue(E); 45 46 // Get the pointer. 47 llvm::Value *FuncPtr = Builder.CreateStructGEP(LV.getAddress(), 0, 48 "src.ptr"); 49 FuncPtr = Builder.CreateLoad(FuncPtr); 50 51 llvm::Value *IsNotNull = 52 Builder.CreateICmpNE(FuncPtr, 53 llvm::Constant::getNullValue(FuncPtr->getType()), 54 "tobool"); 55 56 return IsNotNull; 57 } 58 if (!E->getType()->isAnyComplexType()) 59 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 60 61 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 62 } 63 64 /// EmitAnyExpr - Emit code to compute the specified expression which can have 65 /// any type. The result is returned as an RValue struct. If this is an 66 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where the 67 /// result should be returned. 68 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc, 69 bool IsAggLocVolatile, bool IgnoreResult, 70 bool IsInitializer) { 71 if (!hasAggregateLLVMType(E->getType())) 72 return RValue::get(EmitScalarExpr(E, IgnoreResult)); 73 else if (E->getType()->isAnyComplexType()) 74 return RValue::getComplex(EmitComplexExpr(E, false, false, 75 IgnoreResult, IgnoreResult)); 76 77 EmitAggExpr(E, AggLoc, IsAggLocVolatile, IgnoreResult, IsInitializer); 78 return RValue::getAggregate(AggLoc, IsAggLocVolatile); 79 } 80 81 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 82 /// always be accessible even if no aggregate location is provided. 83 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E, 84 bool IsAggLocVolatile, 85 bool IsInitializer) { 86 llvm::Value *AggLoc = 0; 87 88 if (hasAggregateLLVMType(E->getType()) && 89 !E->getType()->isAnyComplexType()) 90 AggLoc = CreateTempAlloca(ConvertTypeForMem(E->getType()), "agg.tmp"); 91 return EmitAnyExpr(E, AggLoc, IsAggLocVolatile, /*IgnoreResult=*/false, 92 IsInitializer); 93 } 94 95 RValue CodeGenFunction::EmitReferenceBindingToExpr(const Expr* E, 96 bool IsInitializer) { 97 bool ShouldDestroyTemporaries = false; 98 unsigned OldNumLiveTemporaries = 0; 99 100 if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E)) 101 E = DAE->getExpr(); 102 103 if (const CXXExprWithTemporaries *TE = dyn_cast<CXXExprWithTemporaries>(E)) { 104 ShouldDestroyTemporaries = true; 105 106 // Keep track of the current cleanup stack depth. 107 OldNumLiveTemporaries = LiveTemporaries.size(); 108 109 E = TE->getSubExpr(); 110 } 111 112 RValue Val; 113 if (E->isLvalue(getContext()) == Expr::LV_Valid) { 114 // Emit the expr as an lvalue. 115 LValue LV = EmitLValue(E); 116 if (LV.isSimple()) { 117 if (ShouldDestroyTemporaries) { 118 // Pop temporaries. 119 while (LiveTemporaries.size() > OldNumLiveTemporaries) 120 PopCXXTemporary(); 121 } 122 123 return RValue::get(LV.getAddress()); 124 } 125 126 Val = EmitLoadOfLValue(LV, E->getType()); 127 128 if (ShouldDestroyTemporaries) { 129 // Pop temporaries. 130 while (LiveTemporaries.size() > OldNumLiveTemporaries) 131 PopCXXTemporary(); 132 } 133 } else { 134 const CXXRecordDecl *BaseClassDecl = 0; 135 const CXXRecordDecl *DerivedClassDecl = 0; 136 137 if (const CastExpr *CE = 138 dyn_cast<CastExpr>(E->IgnoreParenNoopCasts(getContext()))) { 139 if (CE->getCastKind() == CastExpr::CK_DerivedToBase) { 140 E = CE->getSubExpr(); 141 142 BaseClassDecl = 143 cast<CXXRecordDecl>(CE->getType()->getAs<RecordType>()->getDecl()); 144 DerivedClassDecl = 145 cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl()); 146 } 147 } 148 149 Val = EmitAnyExprToTemp(E, /*IsAggLocVolatile=*/false, 150 IsInitializer); 151 152 if (ShouldDestroyTemporaries) { 153 // Pop temporaries. 154 while (LiveTemporaries.size() > OldNumLiveTemporaries) 155 PopCXXTemporary(); 156 } 157 158 if (IsInitializer) { 159 // We might have to destroy the temporary variable. 160 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { 161 if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl())) { 162 if (!ClassDecl->hasTrivialDestructor()) { 163 const CXXDestructorDecl *Dtor = 164 ClassDecl->getDestructor(getContext()); 165 166 { 167 DelayedCleanupBlock Scope(*this); 168 EmitCXXDestructorCall(Dtor, Dtor_Complete, 169 Val.getAggregateAddr()); 170 171 // Make sure to jump to the exit block. 172 EmitBranch(Scope.getCleanupExitBlock()); 173 } 174 if (Exceptions) { 175 EHCleanupBlock Cleanup(*this); 176 EmitCXXDestructorCall(Dtor, Dtor_Complete, 177 Val.getAggregateAddr()); 178 } 179 } 180 } 181 } 182 } 183 184 // Check if need to perform the derived-to-base cast. 185 if (BaseClassDecl) { 186 llvm::Value *Derived = Val.getAggregateAddr(); 187 llvm::Value *Base = 188 GetAddressOfBaseClass(Derived, DerivedClassDecl, BaseClassDecl, 189 /*NullCheckValue=*/false); 190 return RValue::get(Base); 191 } 192 } 193 194 if (Val.isAggregate()) { 195 Val = RValue::get(Val.getAggregateAddr()); 196 } else { 197 // Create a temporary variable that we can bind the reference to. 198 llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), 199 "reftmp"); 200 if (Val.isScalar()) 201 EmitStoreOfScalar(Val.getScalarVal(), Temp, false, E->getType()); 202 else 203 StoreComplexToAddr(Val.getComplexVal(), Temp, false); 204 Val = RValue::get(Temp); 205 } 206 207 return Val; 208 } 209 210 211 /// getAccessedFieldNo - Given an encoded value and a result number, return the 212 /// input field number being accessed. 213 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 214 const llvm::Constant *Elts) { 215 if (isa<llvm::ConstantAggregateZero>(Elts)) 216 return 0; 217 218 return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue(); 219 } 220 221 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) { 222 if (!CatchUndefined) 223 return; 224 225 const llvm::IntegerType *Size_tTy 226 = llvm::IntegerType::get(VMContext, LLVMPointerWidth); 227 Address = Builder.CreateBitCast(Address, PtrToInt8Ty); 228 229 const llvm::Type *ResType[] = { 230 Size_tTy 231 }; 232 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, ResType, 1); 233 const llvm::IntegerType *IntTy = cast<llvm::IntegerType>( 234 CGM.getTypes().ConvertType(CGM.getContext().IntTy)); 235 // In time, people may want to control this and use a 1 here. 236 llvm::Value *Arg = llvm::ConstantInt::get(IntTy, 0); 237 llvm::Value *C = Builder.CreateCall2(F, Address, Arg); 238 llvm::BasicBlock *Cont = createBasicBlock(); 239 llvm::BasicBlock *Check = createBasicBlock(); 240 llvm::Value *NegativeOne = llvm::ConstantInt::get(Size_tTy, -1ULL); 241 Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check); 242 243 EmitBlock(Check); 244 Builder.CreateCondBr(Builder.CreateICmpUGE(C, 245 llvm::ConstantInt::get(Size_tTy, Size)), 246 Cont, getTrapBB()); 247 EmitBlock(Cont); 248 } 249 250 251 llvm::Value *CodeGenFunction:: 252 EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV, 253 bool isInc, bool isPre) { 254 QualType ValTy = E->getSubExpr()->getType(); 255 llvm::Value *InVal = EmitLoadOfLValue(LV, ValTy).getScalarVal(); 256 257 int AmountVal = isInc ? 1 : -1; 258 259 if (ValTy->isPointerType() && 260 ValTy->getAs<PointerType>()->isVariableArrayType()) { 261 // The amount of the addition/subtraction needs to account for the VLA size 262 ErrorUnsupported(E, "VLA pointer inc/dec"); 263 } 264 265 llvm::Value *NextVal; 266 if (const llvm::PointerType *PT = 267 dyn_cast<llvm::PointerType>(InVal->getType())) { 268 llvm::Constant *Inc = 269 llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), AmountVal); 270 if (!isa<llvm::FunctionType>(PT->getElementType())) { 271 QualType PTEE = ValTy->getPointeeType(); 272 if (const ObjCInterfaceType *OIT = 273 dyn_cast<ObjCInterfaceType>(PTEE)) { 274 // Handle interface types, which are not represented with a concrete 275 // type. 276 int size = getContext().getTypeSize(OIT) / 8; 277 if (!isInc) 278 size = -size; 279 Inc = llvm::ConstantInt::get(Inc->getType(), size); 280 const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext); 281 InVal = Builder.CreateBitCast(InVal, i8Ty); 282 NextVal = Builder.CreateGEP(InVal, Inc, "add.ptr"); 283 llvm::Value *lhs = LV.getAddress(); 284 lhs = Builder.CreateBitCast(lhs, llvm::PointerType::getUnqual(i8Ty)); 285 LV = LValue::MakeAddr(lhs, MakeQualifiers(ValTy)); 286 } else 287 NextVal = Builder.CreateInBoundsGEP(InVal, Inc, "ptrincdec"); 288 } else { 289 const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(VMContext); 290 NextVal = Builder.CreateBitCast(InVal, i8Ty, "tmp"); 291 NextVal = Builder.CreateGEP(NextVal, Inc, "ptrincdec"); 292 NextVal = Builder.CreateBitCast(NextVal, InVal->getType()); 293 } 294 } else if (InVal->getType() == llvm::Type::getInt1Ty(VMContext) && isInc) { 295 // Bool++ is an interesting case, due to promotion rules, we get: 296 // Bool++ -> Bool = Bool+1 -> Bool = (int)Bool+1 -> 297 // Bool = ((int)Bool+1) != 0 298 // An interesting aspect of this is that increment is always true. 299 // Decrement does not have this property. 300 NextVal = llvm::ConstantInt::getTrue(VMContext); 301 } else if (isa<llvm::IntegerType>(InVal->getType())) { 302 NextVal = llvm::ConstantInt::get(InVal->getType(), AmountVal); 303 304 // Signed integer overflow is undefined behavior. 305 if (ValTy->isSignedIntegerType()) 306 NextVal = Builder.CreateNSWAdd(InVal, NextVal, isInc ? "inc" : "dec"); 307 else 308 NextVal = Builder.CreateAdd(InVal, NextVal, isInc ? "inc" : "dec"); 309 } else { 310 // Add the inc/dec to the real part. 311 if (InVal->getType()->isFloatTy()) 312 NextVal = 313 llvm::ConstantFP::get(VMContext, 314 llvm::APFloat(static_cast<float>(AmountVal))); 315 else if (InVal->getType()->isDoubleTy()) 316 NextVal = 317 llvm::ConstantFP::get(VMContext, 318 llvm::APFloat(static_cast<double>(AmountVal))); 319 else { 320 llvm::APFloat F(static_cast<float>(AmountVal)); 321 bool ignored; 322 F.convert(Target.getLongDoubleFormat(), llvm::APFloat::rmTowardZero, 323 &ignored); 324 NextVal = llvm::ConstantFP::get(VMContext, F); 325 } 326 NextVal = Builder.CreateFAdd(InVal, NextVal, isInc ? "inc" : "dec"); 327 } 328 329 // Store the updated result through the lvalue. 330 if (LV.isBitfield()) 331 EmitStoreThroughBitfieldLValue(RValue::get(NextVal), LV, ValTy, &NextVal); 332 else 333 EmitStoreThroughLValue(RValue::get(NextVal), LV, ValTy); 334 335 // If this is a postinc, return the value read from memory, otherwise use the 336 // updated value. 337 return isPre ? NextVal : InVal; 338 } 339 340 341 CodeGenFunction::ComplexPairTy CodeGenFunction:: 342 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 343 bool isInc, bool isPre) { 344 ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(), 345 LV.isVolatileQualified()); 346 347 llvm::Value *NextVal; 348 if (isa<llvm::IntegerType>(InVal.first->getType())) { 349 uint64_t AmountVal = isInc ? 1 : -1; 350 NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true); 351 352 // Add the inc/dec to the real part. 353 NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 354 } else { 355 QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType(); 356 llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1); 357 if (!isInc) 358 FVal.changeSign(); 359 NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal); 360 361 // Add the inc/dec to the real part. 362 NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 363 } 364 365 ComplexPairTy IncVal(NextVal, InVal.second); 366 367 // Store the updated result through the lvalue. 368 StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified()); 369 370 // If this is a postinc, return the value read from memory, otherwise use the 371 // updated value. 372 return isPre ? IncVal : InVal; 373 } 374 375 376 //===----------------------------------------------------------------------===// 377 // LValue Expression Emission 378 //===----------------------------------------------------------------------===// 379 380 RValue CodeGenFunction::GetUndefRValue(QualType Ty) { 381 if (Ty->isVoidType()) 382 return RValue::get(0); 383 384 if (const ComplexType *CTy = Ty->getAs<ComplexType>()) { 385 const llvm::Type *EltTy = ConvertType(CTy->getElementType()); 386 llvm::Value *U = llvm::UndefValue::get(EltTy); 387 return RValue::getComplex(std::make_pair(U, U)); 388 } 389 390 if (hasAggregateLLVMType(Ty)) { 391 const llvm::Type *LTy = llvm::PointerType::getUnqual(ConvertType(Ty)); 392 return RValue::getAggregate(llvm::UndefValue::get(LTy)); 393 } 394 395 return RValue::get(llvm::UndefValue::get(ConvertType(Ty))); 396 } 397 398 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E, 399 const char *Name) { 400 ErrorUnsupported(E, Name); 401 return GetUndefRValue(E->getType()); 402 } 403 404 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 405 const char *Name) { 406 ErrorUnsupported(E, Name); 407 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 408 return LValue::MakeAddr(llvm::UndefValue::get(Ty), 409 MakeQualifiers(E->getType())); 410 } 411 412 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) { 413 LValue LV = EmitLValue(E); 414 if (!isa<DeclRefExpr>(E) && !LV.isBitfield() && LV.isSimple()) 415 EmitCheck(LV.getAddress(), getContext().getTypeSize(E->getType()) / 8); 416 return LV; 417 } 418 419 /// EmitLValue - Emit code to compute a designator that specifies the location 420 /// of the expression. 421 /// 422 /// This can return one of two things: a simple address or a bitfield reference. 423 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be 424 /// an LLVM pointer type. 425 /// 426 /// If this returns a bitfield reference, nothing about the pointee type of the 427 /// LLVM value is known: For example, it may not be a pointer to an integer. 428 /// 429 /// If this returns a normal address, and if the lvalue's C type is fixed size, 430 /// this method guarantees that the returned pointer type will point to an LLVM 431 /// type of the same size of the lvalue's type. If the lvalue has a variable 432 /// length type, this is not possible. 433 /// 434 LValue CodeGenFunction::EmitLValue(const Expr *E) { 435 switch (E->getStmtClass()) { 436 default: return EmitUnsupportedLValue(E, "l-value expression"); 437 438 case Expr::ObjCIsaExprClass: 439 return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E)); 440 case Expr::BinaryOperatorClass: 441 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 442 case Expr::CallExprClass: 443 case Expr::CXXMemberCallExprClass: 444 case Expr::CXXOperatorCallExprClass: 445 return EmitCallExprLValue(cast<CallExpr>(E)); 446 case Expr::VAArgExprClass: 447 return EmitVAArgExprLValue(cast<VAArgExpr>(E)); 448 case Expr::DeclRefExprClass: 449 return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 450 case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 451 case Expr::PredefinedExprClass: 452 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 453 case Expr::StringLiteralClass: 454 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 455 case Expr::ObjCEncodeExprClass: 456 return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E)); 457 458 case Expr::BlockDeclRefExprClass: 459 return EmitBlockDeclRefLValue(cast<BlockDeclRefExpr>(E)); 460 461 case Expr::CXXTemporaryObjectExprClass: 462 case Expr::CXXConstructExprClass: 463 return EmitCXXConstructLValue(cast<CXXConstructExpr>(E)); 464 case Expr::CXXBindTemporaryExprClass: 465 return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E)); 466 case Expr::CXXExprWithTemporariesClass: 467 return EmitCXXExprWithTemporariesLValue(cast<CXXExprWithTemporaries>(E)); 468 case Expr::CXXZeroInitValueExprClass: 469 return EmitNullInitializationLValue(cast<CXXZeroInitValueExpr>(E)); 470 case Expr::CXXDefaultArgExprClass: 471 return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr()); 472 case Expr::CXXTypeidExprClass: 473 return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E)); 474 475 case Expr::ObjCMessageExprClass: 476 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 477 case Expr::ObjCIvarRefExprClass: 478 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 479 case Expr::ObjCPropertyRefExprClass: 480 return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E)); 481 case Expr::ObjCImplicitSetterGetterRefExprClass: 482 return EmitObjCKVCRefLValue(cast<ObjCImplicitSetterGetterRefExpr>(E)); 483 case Expr::ObjCSuperExprClass: 484 return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E)); 485 486 case Expr::StmtExprClass: 487 return EmitStmtExprLValue(cast<StmtExpr>(E)); 488 case Expr::UnaryOperatorClass: 489 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 490 case Expr::ArraySubscriptExprClass: 491 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 492 case Expr::ExtVectorElementExprClass: 493 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 494 case Expr::MemberExprClass: 495 return EmitMemberExpr(cast<MemberExpr>(E)); 496 case Expr::CompoundLiteralExprClass: 497 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 498 case Expr::ConditionalOperatorClass: 499 return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E)); 500 case Expr::ChooseExprClass: 501 return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext())); 502 case Expr::ImplicitCastExprClass: 503 case Expr::CStyleCastExprClass: 504 case Expr::CXXFunctionalCastExprClass: 505 case Expr::CXXStaticCastExprClass: 506 case Expr::CXXDynamicCastExprClass: 507 case Expr::CXXReinterpretCastExprClass: 508 case Expr::CXXConstCastExprClass: 509 return EmitCastLValue(cast<CastExpr>(E)); 510 } 511 } 512 513 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 514 QualType Ty) { 515 llvm::LoadInst *Load = Builder.CreateLoad(Addr, "tmp"); 516 if (Volatile) 517 Load->setVolatile(true); 518 519 // Bool can have different representation in memory than in registers. 520 llvm::Value *V = Load; 521 if (Ty->isBooleanType()) 522 if (V->getType() != llvm::Type::getInt1Ty(VMContext)) 523 V = Builder.CreateTrunc(V, llvm::Type::getInt1Ty(VMContext), "tobool"); 524 525 return V; 526 } 527 528 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 529 bool Volatile, QualType Ty) { 530 531 if (Ty->isBooleanType()) { 532 // Bool can have different representation in memory than in registers. 533 const llvm::PointerType *DstPtr = cast<llvm::PointerType>(Addr->getType()); 534 Value = Builder.CreateIntCast(Value, DstPtr->getElementType(), false); 535 } 536 Builder.CreateStore(Value, Addr, Volatile); 537 } 538 539 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this 540 /// method emits the address of the lvalue, then loads the result as an rvalue, 541 /// returning the rvalue. 542 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) { 543 if (LV.isObjCWeak()) { 544 // load of a __weak object. 545 llvm::Value *AddrWeakObj = LV.getAddress(); 546 return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this, 547 AddrWeakObj)); 548 } 549 550 if (LV.isSimple()) { 551 llvm::Value *Ptr = LV.getAddress(); 552 const llvm::Type *EltTy = 553 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 554 555 // Simple scalar l-value. 556 if (EltTy->isSingleValueType()) 557 return RValue::get(EmitLoadOfScalar(Ptr, LV.isVolatileQualified(), 558 ExprType)); 559 560 assert(ExprType->isFunctionType() && "Unknown scalar value"); 561 return RValue::get(Ptr); 562 } 563 564 if (LV.isVectorElt()) { 565 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 566 LV.isVolatileQualified(), "tmp"); 567 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 568 "vecext")); 569 } 570 571 // If this is a reference to a subset of the elements of a vector, either 572 // shuffle the input or extract/insert them as appropriate. 573 if (LV.isExtVectorElt()) 574 return EmitLoadOfExtVectorElementLValue(LV, ExprType); 575 576 if (LV.isBitfield()) 577 return EmitLoadOfBitfieldLValue(LV, ExprType); 578 579 if (LV.isPropertyRef()) 580 return EmitLoadOfPropertyRefLValue(LV, ExprType); 581 582 assert(LV.isKVCRef() && "Unknown LValue type!"); 583 return EmitLoadOfKVCRefLValue(LV, ExprType); 584 } 585 586 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV, 587 QualType ExprType) { 588 unsigned StartBit = LV.getBitfieldStartBit(); 589 unsigned BitfieldSize = LV.getBitfieldSize(); 590 llvm::Value *Ptr = LV.getBitfieldAddr(); 591 592 const llvm::Type *EltTy = 593 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 594 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 595 596 // In some cases the bitfield may straddle two memory locations. Currently we 597 // load the entire bitfield, then do the magic to sign-extend it if 598 // necessary. This results in somewhat more code than necessary for the common 599 // case (one load), since two shifts accomplish both the masking and sign 600 // extension. 601 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 602 llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp"); 603 604 // Shift to proper location. 605 if (StartBit) 606 Val = Builder.CreateLShr(Val, StartBit, "bf.lo"); 607 608 // Mask off unused bits. 609 llvm::Constant *LowMask = llvm::ConstantInt::get(VMContext, 610 llvm::APInt::getLowBitsSet(EltTySize, LowBits)); 611 Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared"); 612 613 // Fetch the high bits if necessary. 614 if (LowBits < BitfieldSize) { 615 unsigned HighBits = BitfieldSize - LowBits; 616 llvm::Value *HighPtr = Builder.CreateGEP(Ptr, llvm::ConstantInt::get( 617 llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi"); 618 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 619 LV.isVolatileQualified(), 620 "tmp"); 621 622 // Mask off unused bits. 623 llvm::Constant *HighMask = llvm::ConstantInt::get(VMContext, 624 llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 625 HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared"); 626 627 // Shift to proper location and or in to bitfield value. 628 HighVal = Builder.CreateShl(HighVal, LowBits); 629 Val = Builder.CreateOr(Val, HighVal, "bf.val"); 630 } 631 632 // Sign extend if necessary. 633 if (LV.isBitfieldSigned()) { 634 llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy, 635 EltTySize - BitfieldSize); 636 Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits), 637 ExtraBits, "bf.val.sext"); 638 } 639 640 // The bitfield type and the normal type differ when the storage sizes differ 641 // (currently just _Bool). 642 Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp"); 643 644 return RValue::get(Val); 645 } 646 647 RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV, 648 QualType ExprType) { 649 return EmitObjCPropertyGet(LV.getPropertyRefExpr()); 650 } 651 652 RValue CodeGenFunction::EmitLoadOfKVCRefLValue(LValue LV, 653 QualType ExprType) { 654 return EmitObjCPropertyGet(LV.getKVCRefExpr()); 655 } 656 657 // If this is a reference to a subset of the elements of a vector, create an 658 // appropriate shufflevector. 659 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV, 660 QualType ExprType) { 661 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 662 LV.isVolatileQualified(), "tmp"); 663 664 const llvm::Constant *Elts = LV.getExtVectorElts(); 665 666 // If the result of the expression is a non-vector type, we must be extracting 667 // a single element. Just codegen as an extractelement. 668 const VectorType *ExprVT = ExprType->getAs<VectorType>(); 669 if (!ExprVT) { 670 unsigned InIdx = getAccessedFieldNo(0, Elts); 671 llvm::Value *Elt = llvm::ConstantInt::get( 672 llvm::Type::getInt32Ty(VMContext), InIdx); 673 return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp")); 674 } 675 676 // Always use shuffle vector to try to retain the original program structure 677 unsigned NumResultElts = ExprVT->getNumElements(); 678 679 llvm::SmallVector<llvm::Constant*, 4> Mask; 680 for (unsigned i = 0; i != NumResultElts; ++i) { 681 unsigned InIdx = getAccessedFieldNo(i, Elts); 682 Mask.push_back(llvm::ConstantInt::get( 683 llvm::Type::getInt32Ty(VMContext), InIdx)); 684 } 685 686 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 687 Vec = Builder.CreateShuffleVector(Vec, 688 llvm::UndefValue::get(Vec->getType()), 689 MaskV, "tmp"); 690 return RValue::get(Vec); 691 } 692 693 694 695 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 696 /// lvalue, where both are guaranteed to the have the same type, and that type 697 /// is 'Ty'. 698 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, 699 QualType Ty) { 700 if (!Dst.isSimple()) { 701 if (Dst.isVectorElt()) { 702 // Read/modify/write the vector, inserting the new element. 703 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 704 Dst.isVolatileQualified(), "tmp"); 705 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 706 Dst.getVectorIdx(), "vecins"); 707 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 708 return; 709 } 710 711 // If this is an update of extended vector elements, insert them as 712 // appropriate. 713 if (Dst.isExtVectorElt()) 714 return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty); 715 716 if (Dst.isBitfield()) 717 return EmitStoreThroughBitfieldLValue(Src, Dst, Ty); 718 719 if (Dst.isPropertyRef()) 720 return EmitStoreThroughPropertyRefLValue(Src, Dst, Ty); 721 722 assert(Dst.isKVCRef() && "Unknown LValue type"); 723 return EmitStoreThroughKVCRefLValue(Src, Dst, Ty); 724 } 725 726 if (Dst.isObjCWeak() && !Dst.isNonGC()) { 727 // load of a __weak object. 728 llvm::Value *LvalueDst = Dst.getAddress(); 729 llvm::Value *src = Src.getScalarVal(); 730 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 731 return; 732 } 733 734 if (Dst.isObjCStrong() && !Dst.isNonGC()) { 735 // load of a __strong object. 736 llvm::Value *LvalueDst = Dst.getAddress(); 737 llvm::Value *src = Src.getScalarVal(); 738 if (Dst.isObjCIvar()) { 739 assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL"); 740 const llvm::Type *ResultType = ConvertType(getContext().LongTy); 741 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp()); 742 llvm::Value *dst = RHS; 743 RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast"); 744 llvm::Value *LHS = 745 Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast"); 746 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset"); 747 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst, 748 BytesBetween); 749 } else if (Dst.isGlobalObjCRef()) 750 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst); 751 else 752 CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst); 753 return; 754 } 755 756 assert(Src.isScalar() && "Can't emit an agg store with this method"); 757 EmitStoreOfScalar(Src.getScalarVal(), Dst.getAddress(), 758 Dst.isVolatileQualified(), Ty); 759 } 760 761 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 762 QualType Ty, 763 llvm::Value **Result) { 764 unsigned StartBit = Dst.getBitfieldStartBit(); 765 unsigned BitfieldSize = Dst.getBitfieldSize(); 766 llvm::Value *Ptr = Dst.getBitfieldAddr(); 767 768 const llvm::Type *EltTy = 769 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 770 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 771 772 // Get the new value, cast to the appropriate type and masked to exactly the 773 // size of the bit-field. 774 llvm::Value *SrcVal = Src.getScalarVal(); 775 llvm::Value *NewVal = Builder.CreateIntCast(SrcVal, EltTy, false, "tmp"); 776 llvm::Constant *Mask = llvm::ConstantInt::get(VMContext, 777 llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize)); 778 NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value"); 779 780 // Return the new value of the bit-field, if requested. 781 if (Result) { 782 // Cast back to the proper type for result. 783 const llvm::Type *SrcTy = SrcVal->getType(); 784 llvm::Value *SrcTrunc = Builder.CreateIntCast(NewVal, SrcTy, false, 785 "bf.reload.val"); 786 787 // Sign extend if necessary. 788 if (Dst.isBitfieldSigned()) { 789 unsigned SrcTySize = CGM.getTargetData().getTypeSizeInBits(SrcTy); 790 llvm::Value *ExtraBits = llvm::ConstantInt::get(SrcTy, 791 SrcTySize - BitfieldSize); 792 SrcTrunc = Builder.CreateAShr(Builder.CreateShl(SrcTrunc, ExtraBits), 793 ExtraBits, "bf.reload.sext"); 794 } 795 796 *Result = SrcTrunc; 797 } 798 799 // In some cases the bitfield may straddle two memory locations. Emit the low 800 // part first and check to see if the high needs to be done. 801 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 802 llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(), 803 "bf.prev.low"); 804 805 // Compute the mask for zero-ing the low part of this bitfield. 806 llvm::Constant *InvMask = 807 llvm::ConstantInt::get(VMContext, 808 ~llvm::APInt::getBitsSet(EltTySize, StartBit, StartBit + LowBits)); 809 810 // Compute the new low part as 811 // LowVal = (LowVal & InvMask) | (NewVal << StartBit), 812 // with the shift of NewVal implicitly stripping the high bits. 813 llvm::Value *NewLowVal = 814 Builder.CreateShl(NewVal, StartBit, "bf.value.lo"); 815 LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared"); 816 LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo"); 817 818 // Write back. 819 Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified()); 820 821 // If the low part doesn't cover the bitfield emit a high part. 822 if (LowBits < BitfieldSize) { 823 unsigned HighBits = BitfieldSize - LowBits; 824 llvm::Value *HighPtr = Builder.CreateGEP(Ptr, llvm::ConstantInt::get( 825 llvm::Type::getInt32Ty(VMContext), 1), "bf.ptr.hi"); 826 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 827 Dst.isVolatileQualified(), 828 "bf.prev.hi"); 829 830 // Compute the mask for zero-ing the high part of this bitfield. 831 llvm::Constant *InvMask = 832 llvm::ConstantInt::get(VMContext, ~llvm::APInt::getLowBitsSet(EltTySize, 833 HighBits)); 834 835 // Compute the new high part as 836 // HighVal = (HighVal & InvMask) | (NewVal lshr LowBits), 837 // where the high bits of NewVal have already been cleared and the 838 // shift stripping the low bits. 839 llvm::Value *NewHighVal = 840 Builder.CreateLShr(NewVal, LowBits, "bf.value.high"); 841 HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared"); 842 HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi"); 843 844 // Write back. 845 Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified()); 846 } 847 } 848 849 void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src, 850 LValue Dst, 851 QualType Ty) { 852 EmitObjCPropertySet(Dst.getPropertyRefExpr(), Src); 853 } 854 855 void CodeGenFunction::EmitStoreThroughKVCRefLValue(RValue Src, 856 LValue Dst, 857 QualType Ty) { 858 EmitObjCPropertySet(Dst.getKVCRefExpr(), Src); 859 } 860 861 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 862 LValue Dst, 863 QualType Ty) { 864 // This access turns into a read/modify/write of the vector. Load the input 865 // value now. 866 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 867 Dst.isVolatileQualified(), "tmp"); 868 const llvm::Constant *Elts = Dst.getExtVectorElts(); 869 870 llvm::Value *SrcVal = Src.getScalarVal(); 871 872 if (const VectorType *VTy = Ty->getAs<VectorType>()) { 873 unsigned NumSrcElts = VTy->getNumElements(); 874 unsigned NumDstElts = 875 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 876 if (NumDstElts == NumSrcElts) { 877 // Use shuffle vector is the src and destination are the same number of 878 // elements and restore the vector mask since it is on the side it will be 879 // stored. 880 llvm::SmallVector<llvm::Constant*, 4> Mask(NumDstElts); 881 for (unsigned i = 0; i != NumSrcElts; ++i) { 882 unsigned InIdx = getAccessedFieldNo(i, Elts); 883 Mask[InIdx] = llvm::ConstantInt::get( 884 llvm::Type::getInt32Ty(VMContext), i); 885 } 886 887 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 888 Vec = Builder.CreateShuffleVector(SrcVal, 889 llvm::UndefValue::get(Vec->getType()), 890 MaskV, "tmp"); 891 } else if (NumDstElts > NumSrcElts) { 892 // Extended the source vector to the same length and then shuffle it 893 // into the destination. 894 // FIXME: since we're shuffling with undef, can we just use the indices 895 // into that? This could be simpler. 896 llvm::SmallVector<llvm::Constant*, 4> ExtMask; 897 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 898 unsigned i; 899 for (i = 0; i != NumSrcElts; ++i) 900 ExtMask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 901 for (; i != NumDstElts; ++i) 902 ExtMask.push_back(llvm::UndefValue::get(Int32Ty)); 903 llvm::Value *ExtMaskV = llvm::ConstantVector::get(&ExtMask[0], 904 ExtMask.size()); 905 llvm::Value *ExtSrcVal = 906 Builder.CreateShuffleVector(SrcVal, 907 llvm::UndefValue::get(SrcVal->getType()), 908 ExtMaskV, "tmp"); 909 // build identity 910 llvm::SmallVector<llvm::Constant*, 4> Mask; 911 for (unsigned i = 0; i != NumDstElts; ++i) 912 Mask.push_back(llvm::ConstantInt::get(Int32Ty, i)); 913 914 // modify when what gets shuffled in 915 for (unsigned i = 0; i != NumSrcElts; ++i) { 916 unsigned Idx = getAccessedFieldNo(i, Elts); 917 Mask[Idx] = llvm::ConstantInt::get(Int32Ty, i+NumDstElts); 918 } 919 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 920 Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV, "tmp"); 921 } else { 922 // We should never shorten the vector 923 assert(0 && "unexpected shorten vector length"); 924 } 925 } else { 926 // If the Src is a scalar (not a vector) it must be updating one element. 927 unsigned InIdx = getAccessedFieldNo(0, Elts); 928 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 929 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 930 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp"); 931 } 932 933 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 934 } 935 936 // setObjCGCLValueClass - sets class of he lvalue for the purpose of 937 // generating write-barries API. It is currently a global, ivar, 938 // or neither. 939 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E, 940 LValue &LV) { 941 if (Ctx.getLangOptions().getGCMode() == LangOptions::NonGC) 942 return; 943 944 if (isa<ObjCIvarRefExpr>(E)) { 945 LV.SetObjCIvar(LV, true); 946 ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E)); 947 LV.setBaseIvarExp(Exp->getBase()); 948 LV.SetObjCArray(LV, E->getType()->isArrayType()); 949 return; 950 } 951 952 if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) { 953 if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) { 954 if ((VD->isBlockVarDecl() && !VD->hasLocalStorage()) || 955 VD->isFileVarDecl()) 956 LV.SetGlobalObjCRef(LV, true); 957 } 958 LV.SetObjCArray(LV, E->getType()->isArrayType()); 959 return; 960 } 961 962 if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) { 963 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 964 return; 965 } 966 967 if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) { 968 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 969 if (LV.isObjCIvar()) { 970 // If cast is to a structure pointer, follow gcc's behavior and make it 971 // a non-ivar write-barrier. 972 QualType ExpTy = E->getType(); 973 if (ExpTy->isPointerType()) 974 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 975 if (ExpTy->isRecordType()) 976 LV.SetObjCIvar(LV, false); 977 } 978 return; 979 } 980 if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) { 981 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 982 return; 983 } 984 985 if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) { 986 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV); 987 return; 988 } 989 990 if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) { 991 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 992 if (LV.isObjCIvar() && !LV.isObjCArray()) 993 // Using array syntax to assigning to what an ivar points to is not 994 // same as assigning to the ivar itself. {id *Names;} Names[i] = 0; 995 LV.SetObjCIvar(LV, false); 996 else if (LV.isGlobalObjCRef() && !LV.isObjCArray()) 997 // Using array syntax to assigning to what global points to is not 998 // same as assigning to the global itself. {id *G;} G[i] = 0; 999 LV.SetGlobalObjCRef(LV, false); 1000 return; 1001 } 1002 1003 if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) { 1004 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 1005 // We don't know if member is an 'ivar', but this flag is looked at 1006 // only in the context of LV.isObjCIvar(). 1007 LV.SetObjCArray(LV, E->getType()->isArrayType()); 1008 return; 1009 } 1010 } 1011 1012 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, 1013 const Expr *E, const VarDecl *VD) { 1014 assert((VD->hasExternalStorage() || VD->isFileVarDecl()) && 1015 "Var decl must have external storage or be a file var decl!"); 1016 1017 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); 1018 if (VD->getType()->isReferenceType()) 1019 V = CGF.Builder.CreateLoad(V, "tmp"); 1020 LValue LV = LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType())); 1021 setObjCGCLValueClass(CGF.getContext(), E, LV); 1022 return LV; 1023 } 1024 1025 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF, 1026 const Expr *E, const FunctionDecl *FD) { 1027 llvm::Value* V = CGF.CGM.GetAddrOfFunction(FD); 1028 if (!FD->hasPrototype()) { 1029 if (const FunctionProtoType *Proto = 1030 FD->getType()->getAs<FunctionProtoType>()) { 1031 // Ugly case: for a K&R-style definition, the type of the definition 1032 // isn't the same as the type of a use. Correct for this with a 1033 // bitcast. 1034 QualType NoProtoType = 1035 CGF.getContext().getFunctionNoProtoType(Proto->getResultType()); 1036 NoProtoType = CGF.getContext().getPointerType(NoProtoType); 1037 V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType), "tmp"); 1038 } 1039 } 1040 return LValue::MakeAddr(V, CGF.MakeQualifiers(E->getType())); 1041 } 1042 1043 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 1044 const NamedDecl *ND = E->getDecl(); 1045 1046 if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) { 1047 1048 // Check if this is a global variable. 1049 if (VD->hasExternalStorage() || VD->isFileVarDecl()) 1050 return EmitGlobalVarDeclLValue(*this, E, VD); 1051 1052 bool NonGCable = VD->hasLocalStorage() && !VD->hasAttr<BlocksAttr>(); 1053 1054 llvm::Value *V = LocalDeclMap[VD]; 1055 assert(V && "DeclRefExpr not entered in LocalDeclMap?"); 1056 1057 Qualifiers Quals = MakeQualifiers(E->getType()); 1058 // local variables do not get their gc attribute set. 1059 // local static? 1060 if (NonGCable) Quals.removeObjCGCAttr(); 1061 1062 if (VD->hasAttr<BlocksAttr>()) { 1063 V = Builder.CreateStructGEP(V, 1, "forwarding"); 1064 V = Builder.CreateLoad(V); 1065 V = Builder.CreateStructGEP(V, getByRefValueLLVMField(VD), 1066 VD->getNameAsString()); 1067 } 1068 if (VD->getType()->isReferenceType()) 1069 V = Builder.CreateLoad(V, "tmp"); 1070 LValue LV = LValue::MakeAddr(V, Quals); 1071 LValue::SetObjCNonGC(LV, NonGCable); 1072 setObjCGCLValueClass(getContext(), E, LV); 1073 return LV; 1074 } 1075 1076 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 1077 return EmitFunctionDeclLValue(*this, E, FD); 1078 1079 // FIXME: the qualifier check does not seem sufficient here 1080 if (E->getQualifier()) { 1081 const FieldDecl *FD = cast<FieldDecl>(ND); 1082 llvm::Value *V = CGM.EmitPointerToDataMember(FD); 1083 1084 return LValue::MakeAddr(V, MakeQualifiers(FD->getType())); 1085 } 1086 1087 assert(false && "Unhandled DeclRefExpr"); 1088 1089 // an invalid LValue, but the assert will 1090 // ensure that this point is never reached. 1091 return LValue(); 1092 } 1093 1094 LValue CodeGenFunction::EmitBlockDeclRefLValue(const BlockDeclRefExpr *E) { 1095 return LValue::MakeAddr(GetAddrOfBlockDecl(E), MakeQualifiers(E->getType())); 1096 } 1097 1098 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 1099 // __extension__ doesn't affect lvalue-ness. 1100 if (E->getOpcode() == UnaryOperator::Extension) 1101 return EmitLValue(E->getSubExpr()); 1102 1103 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 1104 switch (E->getOpcode()) { 1105 default: assert(0 && "Unknown unary operator lvalue!"); 1106 case UnaryOperator::Deref: { 1107 QualType T = E->getSubExpr()->getType()->getPointeeType(); 1108 assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); 1109 1110 Qualifiers Quals = MakeQualifiers(T); 1111 Quals.setAddressSpace(ExprTy.getAddressSpace()); 1112 1113 LValue LV = LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), Quals); 1114 // We should not generate __weak write barrier on indirect reference 1115 // of a pointer to object; as in void foo (__weak id *param); *param = 0; 1116 // But, we continue to generate __strong write barrier on indirect write 1117 // into a pointer to object. 1118 if (getContext().getLangOptions().ObjC1 && 1119 getContext().getLangOptions().getGCMode() != LangOptions::NonGC && 1120 LV.isObjCWeak()) 1121 LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext())); 1122 return LV; 1123 } 1124 case UnaryOperator::Real: 1125 case UnaryOperator::Imag: { 1126 LValue LV = EmitLValue(E->getSubExpr()); 1127 unsigned Idx = E->getOpcode() == UnaryOperator::Imag; 1128 return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(), 1129 Idx, "idx"), 1130 MakeQualifiers(ExprTy)); 1131 } 1132 case UnaryOperator::PreInc: 1133 case UnaryOperator::PreDec: { 1134 LValue LV = EmitLValue(E->getSubExpr()); 1135 bool isInc = E->getOpcode() == UnaryOperator::PreInc; 1136 1137 if (E->getType()->isAnyComplexType()) 1138 EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/); 1139 else 1140 EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/); 1141 return LV; 1142 } 1143 } 1144 } 1145 1146 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 1147 return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromLiteral(E), 1148 Qualifiers()); 1149 } 1150 1151 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) { 1152 return LValue::MakeAddr(CGM.GetAddrOfConstantStringFromObjCEncode(E), 1153 Qualifiers()); 1154 } 1155 1156 1157 LValue CodeGenFunction::EmitPredefinedFunctionName(unsigned Type) { 1158 std::string GlobalVarName; 1159 1160 switch (Type) { 1161 default: assert(0 && "Invalid type"); 1162 case PredefinedExpr::Func: 1163 GlobalVarName = "__func__."; 1164 break; 1165 case PredefinedExpr::Function: 1166 GlobalVarName = "__FUNCTION__."; 1167 break; 1168 case PredefinedExpr::PrettyFunction: 1169 GlobalVarName = "__PRETTY_FUNCTION__."; 1170 break; 1171 } 1172 1173 llvm::StringRef FnName = CurFn->getName(); 1174 if (FnName.startswith("\01")) 1175 FnName = FnName.substr(1); 1176 GlobalVarName += FnName; 1177 1178 std::string FunctionName = 1179 PredefinedExpr::ComputeName(getContext(), (PredefinedExpr::IdentType)Type, 1180 CurCodeDecl); 1181 1182 llvm::Constant *C = 1183 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 1184 return LValue::MakeAddr(C, Qualifiers()); 1185 } 1186 1187 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 1188 switch (E->getIdentType()) { 1189 default: 1190 return EmitUnsupportedLValue(E, "predefined expression"); 1191 case PredefinedExpr::Func: 1192 case PredefinedExpr::Function: 1193 case PredefinedExpr::PrettyFunction: 1194 return EmitPredefinedFunctionName(E->getIdentType()); 1195 } 1196 } 1197 1198 llvm::BasicBlock *CodeGenFunction::getTrapBB() { 1199 const CodeGenOptions &GCO = CGM.getCodeGenOpts(); 1200 1201 // If we are not optimzing, don't collapse all calls to trap in the function 1202 // to the same call, that way, in the debugger they can see which operation 1203 // did in fact fail. If we are optimizing, we collpase all call to trap down 1204 // to just one per function to save on codesize. 1205 if (GCO.OptimizationLevel 1206 && TrapBB) 1207 return TrapBB; 1208 1209 llvm::BasicBlock *Cont = 0; 1210 if (HaveInsertPoint()) { 1211 Cont = createBasicBlock("cont"); 1212 EmitBranch(Cont); 1213 } 1214 TrapBB = createBasicBlock("trap"); 1215 EmitBlock(TrapBB); 1216 1217 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap, 0, 0); 1218 llvm::CallInst *TrapCall = Builder.CreateCall(F); 1219 TrapCall->setDoesNotReturn(); 1220 TrapCall->setDoesNotThrow(); 1221 Builder.CreateUnreachable(); 1222 1223 if (Cont) 1224 EmitBlock(Cont); 1225 return TrapBB; 1226 } 1227 1228 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 1229 // The index must always be an integer, which is not an aggregate. Emit it. 1230 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 1231 QualType IdxTy = E->getIdx()->getType(); 1232 bool IdxSigned = IdxTy->isSignedIntegerType(); 1233 1234 // If the base is a vector type, then we are forming a vector element lvalue 1235 // with this subscript. 1236 if (E->getBase()->getType()->isVectorType()) { 1237 // Emit the vector as an lvalue to get its address. 1238 LValue LHS = EmitLValue(E->getBase()); 1239 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 1240 Idx = Builder.CreateIntCast(Idx, 1241 llvm::Type::getInt32Ty(VMContext), IdxSigned, "vidx"); 1242 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 1243 E->getBase()->getType().getCVRQualifiers()); 1244 } 1245 1246 // The base must be a pointer, which is not an aggregate. Emit it. 1247 llvm::Value *Base = EmitScalarExpr(E->getBase()); 1248 1249 // Extend or truncate the index type to 32 or 64-bits. 1250 unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth(); 1251 if (IdxBitwidth != LLVMPointerWidth) 1252 Idx = Builder.CreateIntCast(Idx, 1253 llvm::IntegerType::get(VMContext, LLVMPointerWidth), 1254 IdxSigned, "idxprom"); 1255 1256 // FIXME: As llvm implements the object size checking, this can come out. 1257 if (CatchUndefined) { 1258 if (const ImplicitCastExpr *ICE=dyn_cast<ImplicitCastExpr>(E->getBase())) { 1259 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) { 1260 if (ICE->getCastKind() == CastExpr::CK_ArrayToPointerDecay) { 1261 if (const ConstantArrayType *CAT 1262 = getContext().getAsConstantArrayType(DRE->getType())) { 1263 llvm::APInt Size = CAT->getSize(); 1264 llvm::BasicBlock *Cont = createBasicBlock("cont"); 1265 Builder.CreateCondBr(Builder.CreateICmpULE(Idx, 1266 llvm::ConstantInt::get(Idx->getType(), Size)), 1267 Cont, getTrapBB()); 1268 EmitBlock(Cont); 1269 } 1270 } 1271 } 1272 } 1273 } 1274 1275 // We know that the pointer points to a type of the correct size, unless the 1276 // size is a VLA or Objective-C interface. 1277 llvm::Value *Address = 0; 1278 if (const VariableArrayType *VAT = 1279 getContext().getAsVariableArrayType(E->getType())) { 1280 llvm::Value *VLASize = GetVLASize(VAT); 1281 1282 Idx = Builder.CreateMul(Idx, VLASize); 1283 1284 QualType BaseType = getContext().getBaseElementType(VAT); 1285 1286 CharUnits BaseTypeSize = getContext().getTypeSizeInChars(BaseType); 1287 Idx = Builder.CreateUDiv(Idx, 1288 llvm::ConstantInt::get(Idx->getType(), 1289 BaseTypeSize.getQuantity())); 1290 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1291 } else if (const ObjCInterfaceType *OIT = 1292 dyn_cast<ObjCInterfaceType>(E->getType())) { 1293 llvm::Value *InterfaceSize = 1294 llvm::ConstantInt::get(Idx->getType(), 1295 getContext().getTypeSizeInChars(OIT).getQuantity()); 1296 1297 Idx = Builder.CreateMul(Idx, InterfaceSize); 1298 1299 const llvm::Type *i8PTy = llvm::Type::getInt8PtrTy(VMContext); 1300 Address = Builder.CreateGEP(Builder.CreateBitCast(Base, i8PTy), 1301 Idx, "arrayidx"); 1302 Address = Builder.CreateBitCast(Address, Base->getType()); 1303 } else { 1304 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 1305 } 1306 1307 QualType T = E->getBase()->getType()->getPointeeType(); 1308 assert(!T.isNull() && 1309 "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); 1310 1311 Qualifiers Quals = MakeQualifiers(T); 1312 Quals.setAddressSpace(E->getBase()->getType().getAddressSpace()); 1313 1314 LValue LV = LValue::MakeAddr(Address, Quals); 1315 if (getContext().getLangOptions().ObjC1 && 1316 getContext().getLangOptions().getGCMode() != LangOptions::NonGC) { 1317 LValue::SetObjCNonGC(LV, !E->isOBJCGCCandidate(getContext())); 1318 setObjCGCLValueClass(getContext(), E, LV); 1319 } 1320 return LV; 1321 } 1322 1323 static 1324 llvm::Constant *GenerateConstantVector(llvm::LLVMContext &VMContext, 1325 llvm::SmallVector<unsigned, 4> &Elts) { 1326 llvm::SmallVector<llvm::Constant*, 4> CElts; 1327 1328 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 1329 CElts.push_back(llvm::ConstantInt::get( 1330 llvm::Type::getInt32Ty(VMContext), Elts[i])); 1331 1332 return llvm::ConstantVector::get(&CElts[0], CElts.size()); 1333 } 1334 1335 LValue CodeGenFunction:: 1336 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 1337 const llvm::Type *Int32Ty = llvm::Type::getInt32Ty(VMContext); 1338 1339 // Emit the base vector as an l-value. 1340 LValue Base; 1341 1342 // ExtVectorElementExpr's base can either be a vector or pointer to vector. 1343 if (E->isArrow()) { 1344 // If it is a pointer to a vector, emit the address and form an lvalue with 1345 // it. 1346 llvm::Value *Ptr = EmitScalarExpr(E->getBase()); 1347 const PointerType *PT = E->getBase()->getType()->getAs<PointerType>(); 1348 Qualifiers Quals = MakeQualifiers(PT->getPointeeType()); 1349 Quals.removeObjCGCAttr(); 1350 Base = LValue::MakeAddr(Ptr, Quals); 1351 } else if (E->getBase()->isLvalue(getContext()) == Expr::LV_Valid) { 1352 // Otherwise, if the base is an lvalue ( as in the case of foo.x.x), 1353 // emit the base as an lvalue. 1354 assert(E->getBase()->getType()->isVectorType()); 1355 Base = EmitLValue(E->getBase()); 1356 } else { 1357 // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such. 1358 assert(E->getBase()->getType()->getAs<VectorType>() && 1359 "Result must be a vector"); 1360 llvm::Value *Vec = EmitScalarExpr(E->getBase()); 1361 1362 // Store the vector to memory (because LValue wants an address). 1363 llvm::Value *VecMem = CreateTempAlloca(ConvertTypeForMem( 1364 E->getBase()->getType())); 1365 Builder.CreateStore(Vec, VecMem); 1366 Base = LValue::MakeAddr(VecMem, Qualifiers()); 1367 } 1368 1369 // Encode the element access list into a vector of unsigned indices. 1370 llvm::SmallVector<unsigned, 4> Indices; 1371 E->getEncodedElementAccess(Indices); 1372 1373 if (Base.isSimple()) { 1374 llvm::Constant *CV = GenerateConstantVector(VMContext, Indices); 1375 return LValue::MakeExtVectorElt(Base.getAddress(), CV, 1376 Base.getVRQualifiers()); 1377 } 1378 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 1379 1380 llvm::Constant *BaseElts = Base.getExtVectorElts(); 1381 llvm::SmallVector<llvm::Constant *, 4> CElts; 1382 1383 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 1384 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 1385 CElts.push_back(llvm::ConstantInt::get(Int32Ty, 0)); 1386 else 1387 CElts.push_back(cast<llvm::Constant>(BaseElts->getOperand(Indices[i]))); 1388 } 1389 llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); 1390 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, 1391 Base.getVRQualifiers()); 1392 } 1393 1394 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 1395 bool isNonGC = false; 1396 Expr *BaseExpr = E->getBase(); 1397 llvm::Value *BaseValue = NULL; 1398 Qualifiers BaseQuals; 1399 1400 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 1401 if (E->isArrow()) { 1402 BaseValue = EmitScalarExpr(BaseExpr); 1403 const PointerType *PTy = 1404 BaseExpr->getType()->getAs<PointerType>(); 1405 BaseQuals = PTy->getPointeeType().getQualifiers(); 1406 } else if (isa<ObjCPropertyRefExpr>(BaseExpr->IgnoreParens()) || 1407 isa<ObjCImplicitSetterGetterRefExpr>( 1408 BaseExpr->IgnoreParens())) { 1409 RValue RV = EmitObjCPropertyGet(BaseExpr); 1410 BaseValue = RV.getAggregateAddr(); 1411 BaseQuals = BaseExpr->getType().getQualifiers(); 1412 } else { 1413 LValue BaseLV = EmitLValue(BaseExpr); 1414 if (BaseLV.isNonGC()) 1415 isNonGC = true; 1416 // FIXME: this isn't right for bitfields. 1417 BaseValue = BaseLV.getAddress(); 1418 QualType BaseTy = BaseExpr->getType(); 1419 BaseQuals = BaseTy.getQualifiers(); 1420 } 1421 1422 NamedDecl *ND = E->getMemberDecl(); 1423 if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) { 1424 LValue LV = EmitLValueForField(BaseValue, Field, 1425 BaseQuals.getCVRQualifiers()); 1426 LValue::SetObjCNonGC(LV, isNonGC); 1427 setObjCGCLValueClass(getContext(), E, LV); 1428 return LV; 1429 } 1430 1431 if (VarDecl *VD = dyn_cast<VarDecl>(ND)) 1432 return EmitGlobalVarDeclLValue(*this, E, VD); 1433 1434 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 1435 return EmitFunctionDeclLValue(*this, E, FD); 1436 1437 assert(false && "Unhandled member declaration!"); 1438 return LValue(); 1439 } 1440 1441 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value* BaseValue, 1442 const FieldDecl* Field, 1443 unsigned CVRQualifiers) { 1444 CodeGenTypes::BitFieldInfo Info = CGM.getTypes().getBitFieldInfo(Field); 1445 1446 // FIXME: CodeGenTypes should expose a method to get the appropriate type for 1447 // FieldTy (the appropriate type is ABI-dependent). 1448 const llvm::Type *FieldTy = 1449 CGM.getTypes().ConvertTypeForMem(Field->getType()); 1450 const llvm::PointerType *BaseTy = 1451 cast<llvm::PointerType>(BaseValue->getType()); 1452 unsigned AS = BaseTy->getAddressSpace(); 1453 BaseValue = Builder.CreateBitCast(BaseValue, 1454 llvm::PointerType::get(FieldTy, AS), 1455 "tmp"); 1456 1457 llvm::Value *Idx = 1458 llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), Info.FieldNo); 1459 llvm::Value *V = Builder.CreateGEP(BaseValue, Idx, "tmp"); 1460 1461 return LValue::MakeBitfield(V, Info.Start, Info.Size, 1462 Field->getType()->isSignedIntegerType(), 1463 Field->getType().getCVRQualifiers()|CVRQualifiers); 1464 } 1465 1466 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue, 1467 const FieldDecl* Field, 1468 unsigned CVRQualifiers) { 1469 if (Field->isBitField()) 1470 return EmitLValueForBitfield(BaseValue, Field, CVRQualifiers); 1471 1472 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 1473 llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 1474 1475 // Match union field type. 1476 if (Field->getParent()->isUnion()) { 1477 const llvm::Type *FieldTy = 1478 CGM.getTypes().ConvertTypeForMem(Field->getType()); 1479 const llvm::PointerType * BaseTy = 1480 cast<llvm::PointerType>(BaseValue->getType()); 1481 unsigned AS = BaseTy->getAddressSpace(); 1482 V = Builder.CreateBitCast(V, 1483 llvm::PointerType::get(FieldTy, AS), 1484 "tmp"); 1485 } 1486 if (Field->getType()->isReferenceType()) 1487 V = Builder.CreateLoad(V, "tmp"); 1488 1489 Qualifiers Quals = MakeQualifiers(Field->getType()); 1490 Quals.addCVRQualifiers(CVRQualifiers); 1491 // __weak attribute on a field is ignored. 1492 if (Quals.getObjCGCAttr() == Qualifiers::Weak) 1493 Quals.removeObjCGCAttr(); 1494 1495 return LValue::MakeAddr(V, Quals); 1496 } 1497 1498 LValue 1499 CodeGenFunction::EmitLValueForFieldInitialization(llvm::Value* BaseValue, 1500 const FieldDecl* Field, 1501 unsigned CVRQualifiers) { 1502 QualType FieldType = Field->getType(); 1503 1504 if (!FieldType->isReferenceType()) 1505 return EmitLValueForField(BaseValue, Field, CVRQualifiers); 1506 1507 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 1508 llvm::Value *V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 1509 1510 assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs"); 1511 1512 return LValue::MakeAddr(V, MakeQualifiers(FieldType)); 1513 } 1514 1515 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E){ 1516 llvm::Value *DeclPtr = CreateTempAlloca(ConvertTypeForMem(E->getType()), 1517 ".compoundliteral"); 1518 1519 const Expr* InitExpr = E->getInitializer(); 1520 LValue Result = LValue::MakeAddr(DeclPtr, MakeQualifiers(E->getType())); 1521 1522 if (E->getType()->isComplexType()) 1523 EmitComplexExprIntoAddr(InitExpr, DeclPtr, false); 1524 else if (hasAggregateLLVMType(E->getType())) 1525 EmitAnyExpr(InitExpr, DeclPtr, false); 1526 else 1527 EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType()); 1528 1529 return Result; 1530 } 1531 1532 LValue 1533 CodeGenFunction::EmitConditionalOperatorLValue(const ConditionalOperator* E) { 1534 if (E->isLvalue(getContext()) == Expr::LV_Valid) { 1535 if (int Cond = ConstantFoldsToSimpleInteger(E->getCond())) { 1536 Expr *Live = Cond == 1 ? E->getLHS() : E->getRHS(); 1537 if (Live) 1538 return EmitLValue(Live); 1539 } 1540 1541 if (!E->getLHS()) 1542 return EmitUnsupportedLValue(E, "conditional operator with missing LHS"); 1543 1544 llvm::BasicBlock *LHSBlock = createBasicBlock("cond.true"); 1545 llvm::BasicBlock *RHSBlock = createBasicBlock("cond.false"); 1546 llvm::BasicBlock *ContBlock = createBasicBlock("cond.end"); 1547 1548 EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock); 1549 1550 // Any temporaries created here are conditional. 1551 BeginConditionalBranch(); 1552 EmitBlock(LHSBlock); 1553 LValue LHS = EmitLValue(E->getLHS()); 1554 EndConditionalBranch(); 1555 1556 if (!LHS.isSimple()) 1557 return EmitUnsupportedLValue(E, "conditional operator"); 1558 1559 llvm::Value *Temp = CreateTempAlloca(LHS.getAddress()->getType(),"condtmp"); 1560 Builder.CreateStore(LHS.getAddress(), Temp); 1561 EmitBranch(ContBlock); 1562 1563 // Any temporaries created here are conditional. 1564 BeginConditionalBranch(); 1565 EmitBlock(RHSBlock); 1566 LValue RHS = EmitLValue(E->getRHS()); 1567 EndConditionalBranch(); 1568 if (!RHS.isSimple()) 1569 return EmitUnsupportedLValue(E, "conditional operator"); 1570 1571 Builder.CreateStore(RHS.getAddress(), Temp); 1572 EmitBranch(ContBlock); 1573 1574 EmitBlock(ContBlock); 1575 1576 Temp = Builder.CreateLoad(Temp, "lv"); 1577 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1578 } 1579 1580 // ?: here should be an aggregate. 1581 assert((hasAggregateLLVMType(E->getType()) && 1582 !E->getType()->isAnyComplexType()) && 1583 "Unexpected conditional operator!"); 1584 1585 return EmitAggExprToLValue(E); 1586 } 1587 1588 /// EmitCastLValue - Casts are never lvalues unless that cast is a dynamic_cast. 1589 /// If the cast is a dynamic_cast, we can have the usual lvalue result, 1590 /// otherwise if a cast is needed by the code generator in an lvalue context, 1591 /// then it must mean that we need the address of an aggregate in order to 1592 /// access one of its fields. This can happen for all the reasons that casts 1593 /// are permitted with aggregate result, including noop aggregate casts, and 1594 /// cast from scalar to union. 1595 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { 1596 switch (E->getCastKind()) { 1597 default: 1598 return EmitUnsupportedLValue(E, "unexpected cast lvalue"); 1599 1600 case CastExpr::CK_Dynamic: { 1601 LValue LV = EmitLValue(E->getSubExpr()); 1602 llvm::Value *V = LV.getAddress(); 1603 const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E); 1604 return LValue::MakeAddr(EmitDynamicCast(V, DCE), 1605 MakeQualifiers(E->getType())); 1606 } 1607 1608 case CastExpr::CK_NoOp: 1609 case CastExpr::CK_ConstructorConversion: 1610 case CastExpr::CK_UserDefinedConversion: 1611 case CastExpr::CK_AnyPointerToObjCPointerCast: 1612 return EmitLValue(E->getSubExpr()); 1613 1614 case CastExpr::CK_DerivedToBase: { 1615 const RecordType *DerivedClassTy = 1616 E->getSubExpr()->getType()->getAs<RecordType>(); 1617 CXXRecordDecl *DerivedClassDecl = 1618 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 1619 1620 const RecordType *BaseClassTy = E->getType()->getAs<RecordType>(); 1621 CXXRecordDecl *BaseClassDecl = cast<CXXRecordDecl>(BaseClassTy->getDecl()); 1622 1623 LValue LV = EmitLValue(E->getSubExpr()); 1624 1625 // Perform the derived-to-base conversion 1626 llvm::Value *Base = 1627 GetAddressOfBaseClass(LV.getAddress(), DerivedClassDecl, 1628 BaseClassDecl, /*NullCheckValue=*/false); 1629 1630 return LValue::MakeAddr(Base, MakeQualifiers(E->getType())); 1631 } 1632 case CastExpr::CK_ToUnion: 1633 return EmitAggExprToLValue(E); 1634 case CastExpr::CK_BaseToDerived: { 1635 const RecordType *BaseClassTy = 1636 E->getSubExpr()->getType()->getAs<RecordType>(); 1637 CXXRecordDecl *BaseClassDecl = 1638 cast<CXXRecordDecl>(BaseClassTy->getDecl()); 1639 1640 const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>(); 1641 CXXRecordDecl *DerivedClassDecl = 1642 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 1643 1644 LValue LV = EmitLValue(E->getSubExpr()); 1645 1646 // Perform the base-to-derived conversion 1647 llvm::Value *Derived = 1648 GetAddressOfDerivedClass(LV.getAddress(), BaseClassDecl, 1649 DerivedClassDecl, /*NullCheckValue=*/false); 1650 1651 return LValue::MakeAddr(Derived, MakeQualifiers(E->getType())); 1652 } 1653 case CastExpr::CK_BitCast: { 1654 // This must be a reinterpret_cast (or c-style equivalent). 1655 const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); 1656 1657 LValue LV = EmitLValue(E->getSubExpr()); 1658 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 1659 ConvertType(CE->getTypeAsWritten())); 1660 return LValue::MakeAddr(V, MakeQualifiers(E->getType())); 1661 } 1662 } 1663 } 1664 1665 LValue CodeGenFunction::EmitNullInitializationLValue( 1666 const CXXZeroInitValueExpr *E) { 1667 QualType Ty = E->getType(); 1668 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty)); 1669 CharUnits Align = getContext().getTypeAlignInChars(Ty); 1670 Alloc->setAlignment(Align.getQuantity()); 1671 LValue lvalue = LValue::MakeAddr(Alloc, Qualifiers()); 1672 EmitMemSetToZero(lvalue.getAddress(), Ty); 1673 return lvalue; 1674 } 1675 1676 //===--------------------------------------------------------------------===// 1677 // Expression Emission 1678 //===--------------------------------------------------------------------===// 1679 1680 1681 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, 1682 ReturnValueSlot ReturnValue) { 1683 // Builtins never have block type. 1684 if (E->getCallee()->getType()->isBlockPointerType()) 1685 return EmitBlockCallExpr(E, ReturnValue); 1686 1687 if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E)) 1688 return EmitCXXMemberCallExpr(CE, ReturnValue); 1689 1690 const Decl *TargetDecl = 0; 1691 if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E->getCallee())) { 1692 if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CE->getSubExpr())) { 1693 TargetDecl = DRE->getDecl(); 1694 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(TargetDecl)) 1695 if (unsigned builtinID = FD->getBuiltinID()) 1696 return EmitBuiltinExpr(FD, builtinID, E); 1697 } 1698 } 1699 1700 if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E)) 1701 if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl)) 1702 return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue); 1703 1704 if (isa<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) { 1705 // C++ [expr.pseudo]p1: 1706 // The result shall only be used as the operand for the function call 1707 // operator (), and the result of such a call has type void. The only 1708 // effect is the evaluation of the postfix-expression before the dot or 1709 // arrow. 1710 EmitScalarExpr(E->getCallee()); 1711 return RValue::get(0); 1712 } 1713 1714 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 1715 return EmitCall(E->getCallee()->getType(), Callee, ReturnValue, 1716 E->arg_begin(), E->arg_end(), TargetDecl); 1717 } 1718 1719 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 1720 // Comma expressions just emit their LHS then their RHS as an l-value. 1721 if (E->getOpcode() == BinaryOperator::Comma) { 1722 EmitAnyExpr(E->getLHS()); 1723 EnsureInsertPoint(); 1724 return EmitLValue(E->getRHS()); 1725 } 1726 1727 if (E->getOpcode() == BinaryOperator::PtrMemD || 1728 E->getOpcode() == BinaryOperator::PtrMemI) 1729 return EmitPointerToDataMemberBinaryExpr(E); 1730 1731 // Can only get l-value for binary operator expressions which are a 1732 // simple assignment of aggregate type. 1733 if (E->getOpcode() != BinaryOperator::Assign) 1734 return EmitUnsupportedLValue(E, "binary l-value expression"); 1735 1736 if (!hasAggregateLLVMType(E->getType())) { 1737 // Emit the LHS as an l-value. 1738 LValue LV = EmitLValue(E->getLHS()); 1739 1740 llvm::Value *RHS = EmitScalarExpr(E->getRHS()); 1741 EmitStoreOfScalar(RHS, LV.getAddress(), LV.isVolatileQualified(), 1742 E->getType()); 1743 return LV; 1744 } 1745 1746 return EmitAggExprToLValue(E); 1747 } 1748 1749 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 1750 RValue RV = EmitCallExpr(E); 1751 1752 if (!RV.isScalar()) 1753 return LValue::MakeAddr(RV.getAggregateAddr(),MakeQualifiers(E->getType())); 1754 1755 assert(E->getCallReturnType()->isReferenceType() && 1756 "Can't have a scalar return unless the return type is a " 1757 "reference type!"); 1758 1759 return LValue::MakeAddr(RV.getScalarVal(), MakeQualifiers(E->getType())); 1760 } 1761 1762 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) { 1763 // FIXME: This shouldn't require another copy. 1764 return EmitAggExprToLValue(E); 1765 } 1766 1767 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) { 1768 llvm::Value *Temp = CreateTempAlloca(ConvertTypeForMem(E->getType()), "tmp"); 1769 EmitCXXConstructExpr(Temp, E); 1770 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1771 } 1772 1773 LValue 1774 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) { 1775 llvm::Value *Temp = EmitCXXTypeidExpr(E); 1776 return LValue::MakeAddr(Temp, MakeQualifiers(E->getType())); 1777 } 1778 1779 LValue 1780 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) { 1781 LValue LV = EmitLValue(E->getSubExpr()); 1782 PushCXXTemporary(E->getTemporary(), LV.getAddress()); 1783 return LV; 1784 } 1785 1786 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 1787 // Can only get l-value for message expression returning aggregate type 1788 RValue RV = EmitObjCMessageExpr(E); 1789 // FIXME: can this be volatile? 1790 return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType())); 1791 } 1792 1793 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, 1794 const ObjCIvarDecl *Ivar) { 1795 return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); 1796 } 1797 1798 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy, 1799 llvm::Value *BaseValue, 1800 const ObjCIvarDecl *Ivar, 1801 unsigned CVRQualifiers) { 1802 return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue, 1803 Ivar, CVRQualifiers); 1804 } 1805 1806 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 1807 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 1808 llvm::Value *BaseValue = 0; 1809 const Expr *BaseExpr = E->getBase(); 1810 Qualifiers BaseQuals; 1811 QualType ObjectTy; 1812 if (E->isArrow()) { 1813 BaseValue = EmitScalarExpr(BaseExpr); 1814 ObjectTy = BaseExpr->getType()->getPointeeType(); 1815 BaseQuals = ObjectTy.getQualifiers(); 1816 } else { 1817 LValue BaseLV = EmitLValue(BaseExpr); 1818 // FIXME: this isn't right for bitfields. 1819 BaseValue = BaseLV.getAddress(); 1820 ObjectTy = BaseExpr->getType(); 1821 BaseQuals = ObjectTy.getQualifiers(); 1822 } 1823 1824 LValue LV = 1825 EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 1826 BaseQuals.getCVRQualifiers()); 1827 setObjCGCLValueClass(getContext(), E, LV); 1828 return LV; 1829 } 1830 1831 LValue 1832 CodeGenFunction::EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E) { 1833 // This is a special l-value that just issues sends when we load or store 1834 // through it. 1835 return LValue::MakePropertyRef(E, E->getType().getCVRQualifiers()); 1836 } 1837 1838 LValue CodeGenFunction::EmitObjCKVCRefLValue( 1839 const ObjCImplicitSetterGetterRefExpr *E) { 1840 // This is a special l-value that just issues sends when we load or store 1841 // through it. 1842 return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers()); 1843 } 1844 1845 LValue CodeGenFunction::EmitObjCSuperExprLValue(const ObjCSuperExpr *E) { 1846 return EmitUnsupportedLValue(E, "use of super"); 1847 } 1848 1849 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) { 1850 // Can only get l-value for message expression returning aggregate type 1851 RValue RV = EmitAnyExprToTemp(E); 1852 // FIXME: can this be volatile? 1853 return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType())); 1854 } 1855 1856 static unsigned ClangCallConvToLLVMCallConv(CallingConv CC) { 1857 switch (CC) { 1858 default: return llvm::CallingConv::C; 1859 case CC_X86StdCall: return llvm::CallingConv::X86_StdCall; 1860 case CC_X86FastCall: return llvm::CallingConv::X86_FastCall; 1861 } 1862 } 1863 1864 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee, 1865 ReturnValueSlot ReturnValue, 1866 CallExpr::const_arg_iterator ArgBeg, 1867 CallExpr::const_arg_iterator ArgEnd, 1868 const Decl *TargetDecl) { 1869 // Get the actual function type. The callee type will always be a pointer to 1870 // function type or a block pointer type. 1871 assert(CalleeType->isFunctionPointerType() && 1872 "Call must have function pointer type!"); 1873 1874 CalleeType = getContext().getCanonicalType(CalleeType); 1875 1876 QualType FnType = cast<PointerType>(CalleeType)->getPointeeType(); 1877 QualType ResultType = cast<FunctionType>(FnType)->getResultType(); 1878 1879 CallArgList Args; 1880 EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); 1881 1882 unsigned CallingConvention = 1883 ClangCallConvToLLVMCallConv(FnType->getAs<FunctionType>()->getCallConv()); 1884 return EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args, 1885 CallingConvention), 1886 Callee, ReturnValue, Args, TargetDecl); 1887 } 1888 1889 LValue CodeGenFunction:: 1890 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) { 1891 llvm::Value *BaseV; 1892 if (E->getOpcode() == BinaryOperator::PtrMemI) 1893 BaseV = EmitScalarExpr(E->getLHS()); 1894 else 1895 BaseV = EmitLValue(E->getLHS()).getAddress(); 1896 const llvm::Type *i8Ty = llvm::Type::getInt8PtrTy(getLLVMContext()); 1897 BaseV = Builder.CreateBitCast(BaseV, i8Ty); 1898 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS()); 1899 llvm::Value *AddV = Builder.CreateInBoundsGEP(BaseV, OffsetV, "add.ptr"); 1900 1901 QualType Ty = E->getRHS()->getType(); 1902 Ty = Ty->getAs<MemberPointerType>()->getPointeeType(); 1903 1904 const llvm::Type *PType = ConvertType(getContext().getPointerType(Ty)); 1905 AddV = Builder.CreateBitCast(AddV, PType); 1906 return LValue::MakeAddr(AddV, MakeQualifiers(Ty)); 1907 } 1908 1909