clang API Documentation
00001 //===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This contains code to emit Expr nodes as LLVM code. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #include "CodeGenFunction.h" 00015 #include "CodeGenModule.h" 00016 #include "CGCall.h" 00017 #include "CGCXXABI.h" 00018 #include "CGDebugInfo.h" 00019 #include "CGRecordLayout.h" 00020 #include "CGObjCRuntime.h" 00021 #include "TargetInfo.h" 00022 #include "clang/AST/ASTContext.h" 00023 #include "clang/AST/DeclObjC.h" 00024 #include "clang/Frontend/CodeGenOptions.h" 00025 #include "llvm/Intrinsics.h" 00026 #include "llvm/LLVMContext.h" 00027 #include "llvm/Support/MDBuilder.h" 00028 #include "llvm/Target/TargetData.h" 00029 using namespace clang; 00030 using namespace CodeGen; 00031 00032 //===--------------------------------------------------------------------===// 00033 // Miscellaneous Helper Methods 00034 //===--------------------------------------------------------------------===// 00035 00036 llvm::Value *CodeGenFunction::EmitCastToVoidPtr(llvm::Value *value) { 00037 unsigned addressSpace = 00038 cast<llvm::PointerType>(value->getType())->getAddressSpace(); 00039 00040 llvm::PointerType *destType = Int8PtrTy; 00041 if (addressSpace) 00042 destType = llvm::Type::getInt8PtrTy(getLLVMContext(), addressSpace); 00043 00044 if (value->getType() == destType) return value; 00045 return Builder.CreateBitCast(value, destType); 00046 } 00047 00048 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 00049 /// block. 00050 llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(llvm::Type *Ty, 00051 const Twine &Name) { 00052 if (!Builder.isNamePreserving()) 00053 return new llvm::AllocaInst(Ty, 0, "", AllocaInsertPt); 00054 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 00055 } 00056 00057 void CodeGenFunction::InitTempAlloca(llvm::AllocaInst *Var, 00058 llvm::Value *Init) { 00059 llvm::StoreInst *Store = new llvm::StoreInst(Init, Var); 00060 llvm::BasicBlock *Block = AllocaInsertPt->getParent(); 00061 Block->getInstList().insertAfter(&*AllocaInsertPt, Store); 00062 } 00063 00064 llvm::AllocaInst *CodeGenFunction::CreateIRTemp(QualType Ty, 00065 const Twine &Name) { 00066 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertType(Ty), Name); 00067 // FIXME: Should we prefer the preferred type alignment here? 00068 CharUnits Align = getContext().getTypeAlignInChars(Ty); 00069 Alloc->setAlignment(Align.getQuantity()); 00070 return Alloc; 00071 } 00072 00073 llvm::AllocaInst *CodeGenFunction::CreateMemTemp(QualType Ty, 00074 const Twine &Name) { 00075 llvm::AllocaInst *Alloc = CreateTempAlloca(ConvertTypeForMem(Ty), Name); 00076 // FIXME: Should we prefer the preferred type alignment here? 00077 CharUnits Align = getContext().getTypeAlignInChars(Ty); 00078 Alloc->setAlignment(Align.getQuantity()); 00079 return Alloc; 00080 } 00081 00082 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 00083 /// expression and compare the result against zero, returning an Int1Ty value. 00084 llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 00085 if (const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>()) { 00086 llvm::Value *MemPtr = EmitScalarExpr(E); 00087 return CGM.getCXXABI().EmitMemberPointerIsNotNull(*this, MemPtr, MPT); 00088 } 00089 00090 QualType BoolTy = getContext().BoolTy; 00091 if (!E->getType()->isAnyComplexType()) 00092 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 00093 00094 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 00095 } 00096 00097 /// EmitIgnoredExpr - Emit code to compute the specified expression, 00098 /// ignoring the result. 00099 void CodeGenFunction::EmitIgnoredExpr(const Expr *E) { 00100 if (E->isRValue()) 00101 return (void) EmitAnyExpr(E, AggValueSlot::ignored(), true); 00102 00103 // Just emit it as an l-value and drop the result. 00104 EmitLValue(E); 00105 } 00106 00107 /// EmitAnyExpr - Emit code to compute the specified expression which 00108 /// can have any type. The result is returned as an RValue struct. 00109 /// If this is an aggregate expression, AggSlot indicates where the 00110 /// result should be returned. 00111 RValue CodeGenFunction::EmitAnyExpr(const Expr *E, AggValueSlot AggSlot, 00112 bool IgnoreResult) { 00113 if (!hasAggregateLLVMType(E->getType())) 00114 return RValue::get(EmitScalarExpr(E, IgnoreResult)); 00115 else if (E->getType()->isAnyComplexType()) 00116 return RValue::getComplex(EmitComplexExpr(E, IgnoreResult, IgnoreResult)); 00117 00118 EmitAggExpr(E, AggSlot, IgnoreResult); 00119 return AggSlot.asRValue(); 00120 } 00121 00122 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 00123 /// always be accessible even if no aggregate location is provided. 00124 RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E) { 00125 AggValueSlot AggSlot = AggValueSlot::ignored(); 00126 00127 if (hasAggregateLLVMType(E->getType()) && 00128 !E->getType()->isAnyComplexType()) 00129 AggSlot = CreateAggTemp(E->getType(), "agg.tmp"); 00130 return EmitAnyExpr(E, AggSlot); 00131 } 00132 00133 /// EmitAnyExprToMem - Evaluate an expression into a given memory 00134 /// location. 00135 void CodeGenFunction::EmitAnyExprToMem(const Expr *E, 00136 llvm::Value *Location, 00137 Qualifiers Quals, 00138 bool IsInit) { 00139 // FIXME: This function should take an LValue as an argument. 00140 if (E->getType()->isAnyComplexType()) { 00141 EmitComplexExprIntoAddr(E, Location, Quals.hasVolatile()); 00142 } else if (hasAggregateLLVMType(E->getType())) { 00143 CharUnits Alignment = getContext().getTypeAlignInChars(E->getType()); 00144 EmitAggExpr(E, AggValueSlot::forAddr(Location, Alignment, Quals, 00145 AggValueSlot::IsDestructed_t(IsInit), 00146 AggValueSlot::DoesNotNeedGCBarriers, 00147 AggValueSlot::IsAliased_t(!IsInit))); 00148 } else { 00149 RValue RV = RValue::get(EmitScalarExpr(E, /*Ignore*/ false)); 00150 LValue LV = MakeAddrLValue(Location, E->getType()); 00151 EmitStoreThroughLValue(RV, LV); 00152 } 00153 } 00154 00155 namespace { 00156 /// \brief An adjustment to be made to the temporary created when emitting a 00157 /// reference binding, which accesses a particular subobject of that temporary. 00158 struct SubobjectAdjustment { 00159 enum { DerivedToBaseAdjustment, FieldAdjustment } Kind; 00160 00161 union { 00162 struct { 00163 const CastExpr *BasePath; 00164 const CXXRecordDecl *DerivedClass; 00165 } DerivedToBase; 00166 00167 FieldDecl *Field; 00168 }; 00169 00170 SubobjectAdjustment(const CastExpr *BasePath, 00171 const CXXRecordDecl *DerivedClass) 00172 : Kind(DerivedToBaseAdjustment) { 00173 DerivedToBase.BasePath = BasePath; 00174 DerivedToBase.DerivedClass = DerivedClass; 00175 } 00176 00177 SubobjectAdjustment(FieldDecl *Field) 00178 : Kind(FieldAdjustment) { 00179 this->Field = Field; 00180 } 00181 }; 00182 } 00183 00184 static llvm::Value * 00185 CreateReferenceTemporary(CodeGenFunction &CGF, QualType Type, 00186 const NamedDecl *InitializedDecl) { 00187 if (const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 00188 if (VD->hasGlobalStorage()) { 00189 SmallString<256> Name; 00190 llvm::raw_svector_ostream Out(Name); 00191 CGF.CGM.getCXXABI().getMangleContext().mangleReferenceTemporary(VD, Out); 00192 Out.flush(); 00193 00194 llvm::Type *RefTempTy = CGF.ConvertTypeForMem(Type); 00195 00196 // Create the reference temporary. 00197 llvm::GlobalValue *RefTemp = 00198 new llvm::GlobalVariable(CGF.CGM.getModule(), 00199 RefTempTy, /*isConstant=*/false, 00200 llvm::GlobalValue::InternalLinkage, 00201 llvm::Constant::getNullValue(RefTempTy), 00202 Name.str()); 00203 return RefTemp; 00204 } 00205 } 00206 00207 return CGF.CreateMemTemp(Type, "ref.tmp"); 00208 } 00209 00210 static llvm::Value * 00211 EmitExprForReferenceBinding(CodeGenFunction &CGF, const Expr *E, 00212 llvm::Value *&ReferenceTemporary, 00213 const CXXDestructorDecl *&ReferenceTemporaryDtor, 00214 QualType &ObjCARCReferenceLifetimeType, 00215 const NamedDecl *InitializedDecl) { 00216 // Look through single-element init lists that claim to be lvalues. They're 00217 // just syntactic wrappers in this case. 00218 if (const InitListExpr *ILE = dyn_cast<InitListExpr>(E)) { 00219 if (ILE->getNumInits() == 1 && ILE->isGLValue()) 00220 E = ILE->getInit(0); 00221 } 00222 00223 // Look through expressions for materialized temporaries (for now). 00224 if (const MaterializeTemporaryExpr *M 00225 = dyn_cast<MaterializeTemporaryExpr>(E)) { 00226 // Objective-C++ ARC: 00227 // If we are binding a reference to a temporary that has ownership, we 00228 // need to perform retain/release operations on the temporary. 00229 if (CGF.getContext().getLangOpts().ObjCAutoRefCount && 00230 E->getType()->isObjCLifetimeType() && 00231 (E->getType().getObjCLifetime() == Qualifiers::OCL_Strong || 00232 E->getType().getObjCLifetime() == Qualifiers::OCL_Weak || 00233 E->getType().getObjCLifetime() == Qualifiers::OCL_Autoreleasing)) 00234 ObjCARCReferenceLifetimeType = E->getType(); 00235 00236 E = M->GetTemporaryExpr(); 00237 } 00238 00239 if (const CXXDefaultArgExpr *DAE = dyn_cast<CXXDefaultArgExpr>(E)) 00240 E = DAE->getExpr(); 00241 00242 if (const ExprWithCleanups *EWC = dyn_cast<ExprWithCleanups>(E)) { 00243 CGF.enterFullExpression(EWC); 00244 CodeGenFunction::RunCleanupsScope Scope(CGF); 00245 00246 return EmitExprForReferenceBinding(CGF, EWC->getSubExpr(), 00247 ReferenceTemporary, 00248 ReferenceTemporaryDtor, 00249 ObjCARCReferenceLifetimeType, 00250 InitializedDecl); 00251 } 00252 00253 RValue RV; 00254 if (E->isGLValue()) { 00255 // Emit the expression as an lvalue. 00256 LValue LV = CGF.EmitLValue(E); 00257 00258 if (LV.isSimple()) 00259 return LV.getAddress(); 00260 00261 // We have to load the lvalue. 00262 RV = CGF.EmitLoadOfLValue(LV); 00263 } else { 00264 if (!ObjCARCReferenceLifetimeType.isNull()) { 00265 ReferenceTemporary = CreateReferenceTemporary(CGF, 00266 ObjCARCReferenceLifetimeType, 00267 InitializedDecl); 00268 00269 00270 LValue RefTempDst = CGF.MakeAddrLValue(ReferenceTemporary, 00271 ObjCARCReferenceLifetimeType); 00272 00273 CGF.EmitScalarInit(E, dyn_cast_or_null<ValueDecl>(InitializedDecl), 00274 RefTempDst, false); 00275 00276 bool ExtendsLifeOfTemporary = false; 00277 if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(InitializedDecl)) { 00278 if (Var->extendsLifetimeOfTemporary()) 00279 ExtendsLifeOfTemporary = true; 00280 } else if (InitializedDecl && isa<FieldDecl>(InitializedDecl)) { 00281 ExtendsLifeOfTemporary = true; 00282 } 00283 00284 if (!ExtendsLifeOfTemporary) { 00285 // Since the lifetime of this temporary isn't going to be extended, 00286 // we need to clean it up ourselves at the end of the full expression. 00287 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 00288 case Qualifiers::OCL_None: 00289 case Qualifiers::OCL_ExplicitNone: 00290 case Qualifiers::OCL_Autoreleasing: 00291 break; 00292 00293 case Qualifiers::OCL_Strong: { 00294 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 00295 CleanupKind cleanupKind = CGF.getARCCleanupKind(); 00296 CGF.pushDestroy(cleanupKind, 00297 ReferenceTemporary, 00298 ObjCARCReferenceLifetimeType, 00299 CodeGenFunction::destroyARCStrongImprecise, 00300 cleanupKind & EHCleanup); 00301 break; 00302 } 00303 00304 case Qualifiers::OCL_Weak: 00305 assert(!ObjCARCReferenceLifetimeType->isArrayType()); 00306 CGF.pushDestroy(NormalAndEHCleanup, 00307 ReferenceTemporary, 00308 ObjCARCReferenceLifetimeType, 00309 CodeGenFunction::destroyARCWeak, 00310 /*useEHCleanupForArray*/ true); 00311 break; 00312 } 00313 00314 ObjCARCReferenceLifetimeType = QualType(); 00315 } 00316 00317 return ReferenceTemporary; 00318 } 00319 00320 SmallVector<SubobjectAdjustment, 2> Adjustments; 00321 while (true) { 00322 E = E->IgnoreParens(); 00323 00324 if (const CastExpr *CE = dyn_cast<CastExpr>(E)) { 00325 if ((CE->getCastKind() == CK_DerivedToBase || 00326 CE->getCastKind() == CK_UncheckedDerivedToBase) && 00327 E->getType()->isRecordType()) { 00328 E = CE->getSubExpr(); 00329 CXXRecordDecl *Derived 00330 = cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl()); 00331 Adjustments.push_back(SubobjectAdjustment(CE, Derived)); 00332 continue; 00333 } 00334 00335 if (CE->getCastKind() == CK_NoOp) { 00336 E = CE->getSubExpr(); 00337 continue; 00338 } 00339 } else if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) { 00340 if (!ME->isArrow() && ME->getBase()->isRValue()) { 00341 assert(ME->getBase()->getType()->isRecordType()); 00342 if (FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl())) { 00343 E = ME->getBase(); 00344 Adjustments.push_back(SubobjectAdjustment(Field)); 00345 continue; 00346 } 00347 } 00348 } 00349 00350 if (const OpaqueValueExpr *opaque = dyn_cast<OpaqueValueExpr>(E)) 00351 if (opaque->getType()->isRecordType()) 00352 return CGF.EmitOpaqueValueLValue(opaque).getAddress(); 00353 00354 // Nothing changed. 00355 break; 00356 } 00357 00358 // Create a reference temporary if necessary. 00359 AggValueSlot AggSlot = AggValueSlot::ignored(); 00360 if (CGF.hasAggregateLLVMType(E->getType()) && 00361 !E->getType()->isAnyComplexType()) { 00362 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 00363 InitializedDecl); 00364 CharUnits Alignment = CGF.getContext().getTypeAlignInChars(E->getType()); 00365 AggValueSlot::IsDestructed_t isDestructed 00366 = AggValueSlot::IsDestructed_t(InitializedDecl != 0); 00367 AggSlot = AggValueSlot::forAddr(ReferenceTemporary, Alignment, 00368 Qualifiers(), isDestructed, 00369 AggValueSlot::DoesNotNeedGCBarriers, 00370 AggValueSlot::IsNotAliased); 00371 } 00372 00373 if (InitializedDecl) { 00374 // Get the destructor for the reference temporary. 00375 if (const RecordType *RT = E->getType()->getAs<RecordType>()) { 00376 CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 00377 if (!ClassDecl->hasTrivialDestructor()) 00378 ReferenceTemporaryDtor = ClassDecl->getDestructor(); 00379 } 00380 } 00381 00382 RV = CGF.EmitAnyExpr(E, AggSlot); 00383 00384 // Check if need to perform derived-to-base casts and/or field accesses, to 00385 // get from the temporary object we created (and, potentially, for which we 00386 // extended the lifetime) to the subobject we're binding the reference to. 00387 if (!Adjustments.empty()) { 00388 llvm::Value *Object = RV.getAggregateAddr(); 00389 for (unsigned I = Adjustments.size(); I != 0; --I) { 00390 SubobjectAdjustment &Adjustment = Adjustments[I-1]; 00391 switch (Adjustment.Kind) { 00392 case SubobjectAdjustment::DerivedToBaseAdjustment: 00393 Object = 00394 CGF.GetAddressOfBaseClass(Object, 00395 Adjustment.DerivedToBase.DerivedClass, 00396 Adjustment.DerivedToBase.BasePath->path_begin(), 00397 Adjustment.DerivedToBase.BasePath->path_end(), 00398 /*NullCheckValue=*/false); 00399 break; 00400 00401 case SubobjectAdjustment::FieldAdjustment: { 00402 LValue LV = CGF.MakeAddrLValue(Object, E->getType()); 00403 LV = CGF.EmitLValueForField(LV, Adjustment.Field); 00404 if (LV.isSimple()) { 00405 Object = LV.getAddress(); 00406 break; 00407 } 00408 00409 // For non-simple lvalues, we actually have to create a copy of 00410 // the object we're binding to. 00411 QualType T = Adjustment.Field->getType().getNonReferenceType() 00412 .getUnqualifiedType(); 00413 Object = CreateReferenceTemporary(CGF, T, InitializedDecl); 00414 LValue TempLV = CGF.MakeAddrLValue(Object, 00415 Adjustment.Field->getType()); 00416 CGF.EmitStoreThroughLValue(CGF.EmitLoadOfLValue(LV), TempLV); 00417 break; 00418 } 00419 00420 } 00421 } 00422 00423 return Object; 00424 } 00425 } 00426 00427 if (RV.isAggregate()) 00428 return RV.getAggregateAddr(); 00429 00430 // Create a temporary variable that we can bind the reference to. 00431 ReferenceTemporary = CreateReferenceTemporary(CGF, E->getType(), 00432 InitializedDecl); 00433 00434 00435 unsigned Alignment = 00436 CGF.getContext().getTypeAlignInChars(E->getType()).getQuantity(); 00437 if (RV.isScalar()) 00438 CGF.EmitStoreOfScalar(RV.getScalarVal(), ReferenceTemporary, 00439 /*Volatile=*/false, Alignment, E->getType()); 00440 else 00441 CGF.StoreComplexToAddr(RV.getComplexVal(), ReferenceTemporary, 00442 /*Volatile=*/false); 00443 return ReferenceTemporary; 00444 } 00445 00446 RValue 00447 CodeGenFunction::EmitReferenceBindingToExpr(const Expr *E, 00448 const NamedDecl *InitializedDecl) { 00449 llvm::Value *ReferenceTemporary = 0; 00450 const CXXDestructorDecl *ReferenceTemporaryDtor = 0; 00451 QualType ObjCARCReferenceLifetimeType; 00452 llvm::Value *Value = EmitExprForReferenceBinding(*this, E, ReferenceTemporary, 00453 ReferenceTemporaryDtor, 00454 ObjCARCReferenceLifetimeType, 00455 InitializedDecl); 00456 if (!ReferenceTemporaryDtor && ObjCARCReferenceLifetimeType.isNull()) 00457 return RValue::get(Value); 00458 00459 // Make sure to call the destructor for the reference temporary. 00460 const VarDecl *VD = dyn_cast_or_null<VarDecl>(InitializedDecl); 00461 if (VD && VD->hasGlobalStorage()) { 00462 if (ReferenceTemporaryDtor) { 00463 llvm::Constant *DtorFn = 00464 CGM.GetAddrOfCXXDestructor(ReferenceTemporaryDtor, Dtor_Complete); 00465 CGM.getCXXABI().registerGlobalDtor(*this, DtorFn, 00466 cast<llvm::Constant>(ReferenceTemporary)); 00467 } else { 00468 assert(!ObjCARCReferenceLifetimeType.isNull()); 00469 // Note: We intentionally do not register a global "destructor" to 00470 // release the object. 00471 } 00472 00473 return RValue::get(Value); 00474 } 00475 00476 if (ReferenceTemporaryDtor) 00477 PushDestructorCleanup(ReferenceTemporaryDtor, ReferenceTemporary); 00478 else { 00479 switch (ObjCARCReferenceLifetimeType.getObjCLifetime()) { 00480 case Qualifiers::OCL_None: 00481 llvm_unreachable( 00482 "Not a reference temporary that needs to be deallocated"); 00483 case Qualifiers::OCL_ExplicitNone: 00484 case Qualifiers::OCL_Autoreleasing: 00485 // Nothing to do. 00486 break; 00487 00488 case Qualifiers::OCL_Strong: { 00489 bool precise = VD && VD->hasAttr<ObjCPreciseLifetimeAttr>(); 00490 CleanupKind cleanupKind = getARCCleanupKind(); 00491 pushDestroy(cleanupKind, ReferenceTemporary, ObjCARCReferenceLifetimeType, 00492 precise ? destroyARCStrongPrecise : destroyARCStrongImprecise, 00493 cleanupKind & EHCleanup); 00494 break; 00495 } 00496 00497 case Qualifiers::OCL_Weak: { 00498 // __weak objects always get EH cleanups; otherwise, exceptions 00499 // could cause really nasty crashes instead of mere leaks. 00500 pushDestroy(NormalAndEHCleanup, ReferenceTemporary, 00501 ObjCARCReferenceLifetimeType, destroyARCWeak, true); 00502 break; 00503 } 00504 } 00505 } 00506 00507 return RValue::get(Value); 00508 } 00509 00510 00511 /// getAccessedFieldNo - Given an encoded value and a result number, return the 00512 /// input field number being accessed. 00513 unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 00514 const llvm::Constant *Elts) { 00515 return cast<llvm::ConstantInt>(Elts->getAggregateElement(Idx)) 00516 ->getZExtValue(); 00517 } 00518 00519 void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) { 00520 if (BoundsChecking <= 0) 00521 return; 00522 00523 // This needs to be to the standard address space. 00524 Address = Builder.CreateBitCast(Address, Int8PtrTy); 00525 00526 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy); 00527 00528 llvm::Value *Min = Builder.getFalse(); 00529 llvm::Value *Runtime = Builder.getInt32(BoundsChecking); 00530 llvm::Value *C = Builder.CreateCall3(F, Address, Min, Runtime); 00531 llvm::BasicBlock *Cont = createBasicBlock(); 00532 Builder.CreateCondBr(Builder.CreateICmpUGE(C, 00533 llvm::ConstantInt::get(IntPtrTy, Size)), 00534 Cont, getTrapBB()); 00535 EmitBlock(Cont); 00536 } 00537 00538 00539 CodeGenFunction::ComplexPairTy CodeGenFunction:: 00540 EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 00541 bool isInc, bool isPre) { 00542 ComplexPairTy InVal = LoadComplexFromAddr(LV.getAddress(), 00543 LV.isVolatileQualified()); 00544 00545 llvm::Value *NextVal; 00546 if (isa<llvm::IntegerType>(InVal.first->getType())) { 00547 uint64_t AmountVal = isInc ? 1 : -1; 00548 NextVal = llvm::ConstantInt::get(InVal.first->getType(), AmountVal, true); 00549 00550 // Add the inc/dec to the real part. 00551 NextVal = Builder.CreateAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 00552 } else { 00553 QualType ElemTy = E->getType()->getAs<ComplexType>()->getElementType(); 00554 llvm::APFloat FVal(getContext().getFloatTypeSemantics(ElemTy), 1); 00555 if (!isInc) 00556 FVal.changeSign(); 00557 NextVal = llvm::ConstantFP::get(getLLVMContext(), FVal); 00558 00559 // Add the inc/dec to the real part. 00560 NextVal = Builder.CreateFAdd(InVal.first, NextVal, isInc ? "inc" : "dec"); 00561 } 00562 00563 ComplexPairTy IncVal(NextVal, InVal.second); 00564 00565 // Store the updated result through the lvalue. 00566 StoreComplexToAddr(IncVal, LV.getAddress(), LV.isVolatileQualified()); 00567 00568 // If this is a postinc, return the value read from memory, otherwise use the 00569 // updated value. 00570 return isPre ? IncVal : InVal; 00571 } 00572 00573 00574 //===----------------------------------------------------------------------===// 00575 // LValue Expression Emission 00576 //===----------------------------------------------------------------------===// 00577 00578 RValue CodeGenFunction::GetUndefRValue(QualType Ty) { 00579 if (Ty->isVoidType()) 00580 return RValue::get(0); 00581 00582 if (const ComplexType *CTy = Ty->getAs<ComplexType>()) { 00583 llvm::Type *EltTy = ConvertType(CTy->getElementType()); 00584 llvm::Value *U = llvm::UndefValue::get(EltTy); 00585 return RValue::getComplex(std::make_pair(U, U)); 00586 } 00587 00588 // If this is a use of an undefined aggregate type, the aggregate must have an 00589 // identifiable address. Just because the contents of the value are undefined 00590 // doesn't mean that the address can't be taken and compared. 00591 if (hasAggregateLLVMType(Ty)) { 00592 llvm::Value *DestPtr = CreateMemTemp(Ty, "undef.agg.tmp"); 00593 return RValue::getAggregate(DestPtr); 00594 } 00595 00596 return RValue::get(llvm::UndefValue::get(ConvertType(Ty))); 00597 } 00598 00599 RValue CodeGenFunction::EmitUnsupportedRValue(const Expr *E, 00600 const char *Name) { 00601 ErrorUnsupported(E, Name); 00602 return GetUndefRValue(E->getType()); 00603 } 00604 00605 LValue CodeGenFunction::EmitUnsupportedLValue(const Expr *E, 00606 const char *Name) { 00607 ErrorUnsupported(E, Name); 00608 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 00609 return MakeAddrLValue(llvm::UndefValue::get(Ty), E->getType()); 00610 } 00611 00612 LValue CodeGenFunction::EmitCheckedLValue(const Expr *E) { 00613 LValue LV = EmitLValue(E); 00614 if (!isa<DeclRefExpr>(E) && !LV.isBitField() && LV.isSimple()) 00615 EmitCheck(LV.getAddress(), 00616 getContext().getTypeSizeInChars(E->getType()).getQuantity()); 00617 return LV; 00618 } 00619 00620 /// EmitLValue - Emit code to compute a designator that specifies the location 00621 /// of the expression. 00622 /// 00623 /// This can return one of two things: a simple address or a bitfield reference. 00624 /// In either case, the LLVM Value* in the LValue structure is guaranteed to be 00625 /// an LLVM pointer type. 00626 /// 00627 /// If this returns a bitfield reference, nothing about the pointee type of the 00628 /// LLVM value is known: For example, it may not be a pointer to an integer. 00629 /// 00630 /// If this returns a normal address, and if the lvalue's C type is fixed size, 00631 /// this method guarantees that the returned pointer type will point to an LLVM 00632 /// type of the same size of the lvalue's type. If the lvalue has a variable 00633 /// length type, this is not possible. 00634 /// 00635 LValue CodeGenFunction::EmitLValue(const Expr *E) { 00636 switch (E->getStmtClass()) { 00637 default: return EmitUnsupportedLValue(E, "l-value expression"); 00638 00639 case Expr::ObjCPropertyRefExprClass: 00640 llvm_unreachable("cannot emit a property reference directly"); 00641 00642 case Expr::ObjCSelectorExprClass: 00643 return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E)); 00644 case Expr::ObjCIsaExprClass: 00645 return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E)); 00646 case Expr::BinaryOperatorClass: 00647 return EmitBinaryOperatorLValue(cast<BinaryOperator>(E)); 00648 case Expr::CompoundAssignOperatorClass: 00649 if (!E->getType()->isAnyComplexType()) 00650 return EmitCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 00651 return EmitComplexCompoundAssignmentLValue(cast<CompoundAssignOperator>(E)); 00652 case Expr::CallExprClass: 00653 case Expr::CXXMemberCallExprClass: 00654 case Expr::CXXOperatorCallExprClass: 00655 case Expr::UserDefinedLiteralClass: 00656 return EmitCallExprLValue(cast<CallExpr>(E)); 00657 case Expr::VAArgExprClass: 00658 return EmitVAArgExprLValue(cast<VAArgExpr>(E)); 00659 case Expr::DeclRefExprClass: 00660 return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 00661 case Expr::ParenExprClass: 00662 return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 00663 case Expr::GenericSelectionExprClass: 00664 return EmitLValue(cast<GenericSelectionExpr>(E)->getResultExpr()); 00665 case Expr::PredefinedExprClass: 00666 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 00667 case Expr::StringLiteralClass: 00668 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 00669 case Expr::ObjCEncodeExprClass: 00670 return EmitObjCEncodeExprLValue(cast<ObjCEncodeExpr>(E)); 00671 case Expr::PseudoObjectExprClass: 00672 return EmitPseudoObjectLValue(cast<PseudoObjectExpr>(E)); 00673 case Expr::InitListExprClass: 00674 return EmitInitListLValue(cast<InitListExpr>(E)); 00675 case Expr::CXXTemporaryObjectExprClass: 00676 case Expr::CXXConstructExprClass: 00677 return EmitCXXConstructLValue(cast<CXXConstructExpr>(E)); 00678 case Expr::CXXBindTemporaryExprClass: 00679 return EmitCXXBindTemporaryLValue(cast<CXXBindTemporaryExpr>(E)); 00680 case Expr::LambdaExprClass: 00681 return EmitLambdaLValue(cast<LambdaExpr>(E)); 00682 00683 case Expr::ExprWithCleanupsClass: { 00684 const ExprWithCleanups *cleanups = cast<ExprWithCleanups>(E); 00685 enterFullExpression(cleanups); 00686 RunCleanupsScope Scope(*this); 00687 return EmitLValue(cleanups->getSubExpr()); 00688 } 00689 00690 case Expr::CXXScalarValueInitExprClass: 00691 return EmitNullInitializationLValue(cast<CXXScalarValueInitExpr>(E)); 00692 case Expr::CXXDefaultArgExprClass: 00693 return EmitLValue(cast<CXXDefaultArgExpr>(E)->getExpr()); 00694 case Expr::CXXTypeidExprClass: 00695 return EmitCXXTypeidLValue(cast<CXXTypeidExpr>(E)); 00696 00697 case Expr::ObjCMessageExprClass: 00698 return EmitObjCMessageExprLValue(cast<ObjCMessageExpr>(E)); 00699 case Expr::ObjCIvarRefExprClass: 00700 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 00701 case Expr::StmtExprClass: 00702 return EmitStmtExprLValue(cast<StmtExpr>(E)); 00703 case Expr::UnaryOperatorClass: 00704 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 00705 case Expr::ArraySubscriptExprClass: 00706 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 00707 case Expr::ExtVectorElementExprClass: 00708 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 00709 case Expr::MemberExprClass: 00710 return EmitMemberExpr(cast<MemberExpr>(E)); 00711 case Expr::CompoundLiteralExprClass: 00712 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 00713 case Expr::ConditionalOperatorClass: 00714 return EmitConditionalOperatorLValue(cast<ConditionalOperator>(E)); 00715 case Expr::BinaryConditionalOperatorClass: 00716 return EmitConditionalOperatorLValue(cast<BinaryConditionalOperator>(E)); 00717 case Expr::ChooseExprClass: 00718 return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext())); 00719 case Expr::OpaqueValueExprClass: 00720 return EmitOpaqueValueLValue(cast<OpaqueValueExpr>(E)); 00721 case Expr::SubstNonTypeTemplateParmExprClass: 00722 return EmitLValue(cast<SubstNonTypeTemplateParmExpr>(E)->getReplacement()); 00723 case Expr::ImplicitCastExprClass: 00724 case Expr::CStyleCastExprClass: 00725 case Expr::CXXFunctionalCastExprClass: 00726 case Expr::CXXStaticCastExprClass: 00727 case Expr::CXXDynamicCastExprClass: 00728 case Expr::CXXReinterpretCastExprClass: 00729 case Expr::CXXConstCastExprClass: 00730 case Expr::ObjCBridgedCastExprClass: 00731 return EmitCastLValue(cast<CastExpr>(E)); 00732 00733 case Expr::MaterializeTemporaryExprClass: 00734 return EmitMaterializeTemporaryExpr(cast<MaterializeTemporaryExpr>(E)); 00735 } 00736 } 00737 00738 /// Given an object of the given canonical type, can we safely copy a 00739 /// value out of it based on its initializer? 00740 static bool isConstantEmittableObjectType(QualType type) { 00741 assert(type.isCanonical()); 00742 assert(!type->isReferenceType()); 00743 00744 // Must be const-qualified but non-volatile. 00745 Qualifiers qs = type.getLocalQualifiers(); 00746 if (!qs.hasConst() || qs.hasVolatile()) return false; 00747 00748 // Otherwise, all object types satisfy this except C++ classes with 00749 // mutable subobjects or non-trivial copy/destroy behavior. 00750 if (const RecordType *RT = dyn_cast<RecordType>(type)) 00751 if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl())) 00752 if (RD->hasMutableFields() || !RD->isTrivial()) 00753 return false; 00754 00755 return true; 00756 } 00757 00758 /// Can we constant-emit a load of a reference to a variable of the 00759 /// given type? This is different from predicates like 00760 /// Decl::isUsableInConstantExpressions because we do want it to apply 00761 /// in situations that don't necessarily satisfy the language's rules 00762 /// for this (e.g. C++'s ODR-use rules). For example, we want to able 00763 /// to do this with const float variables even if those variables 00764 /// aren't marked 'constexpr'. 00765 enum ConstantEmissionKind { 00766 CEK_None, 00767 CEK_AsReferenceOnly, 00768 CEK_AsValueOrReference, 00769 CEK_AsValueOnly 00770 }; 00771 static ConstantEmissionKind checkVarTypeForConstantEmission(QualType type) { 00772 type = type.getCanonicalType(); 00773 if (const ReferenceType *ref = dyn_cast<ReferenceType>(type)) { 00774 if (isConstantEmittableObjectType(ref->getPointeeType())) 00775 return CEK_AsValueOrReference; 00776 return CEK_AsReferenceOnly; 00777 } 00778 if (isConstantEmittableObjectType(type)) 00779 return CEK_AsValueOnly; 00780 return CEK_None; 00781 } 00782 00783 /// Try to emit a reference to the given value without producing it as 00784 /// an l-value. This is actually more than an optimization: we can't 00785 /// produce an l-value for variables that we never actually captured 00786 /// in a block or lambda, which means const int variables or constexpr 00787 /// literals or similar. 00788 CodeGenFunction::ConstantEmission 00789 CodeGenFunction::tryEmitAsConstant(DeclRefExpr *refExpr) { 00790 ValueDecl *value = refExpr->getDecl(); 00791 00792 // The value needs to be an enum constant or a constant variable. 00793 ConstantEmissionKind CEK; 00794 if (isa<ParmVarDecl>(value)) { 00795 CEK = CEK_None; 00796 } else if (VarDecl *var = dyn_cast<VarDecl>(value)) { 00797 CEK = checkVarTypeForConstantEmission(var->getType()); 00798 } else if (isa<EnumConstantDecl>(value)) { 00799 CEK = CEK_AsValueOnly; 00800 } else { 00801 CEK = CEK_None; 00802 } 00803 if (CEK == CEK_None) return ConstantEmission(); 00804 00805 Expr::EvalResult result; 00806 bool resultIsReference; 00807 QualType resultType; 00808 00809 // It's best to evaluate all the way as an r-value if that's permitted. 00810 if (CEK != CEK_AsReferenceOnly && 00811 refExpr->EvaluateAsRValue(result, getContext())) { 00812 resultIsReference = false; 00813 resultType = refExpr->getType(); 00814 00815 // Otherwise, try to evaluate as an l-value. 00816 } else if (CEK != CEK_AsValueOnly && 00817 refExpr->EvaluateAsLValue(result, getContext())) { 00818 resultIsReference = true; 00819 resultType = value->getType(); 00820 00821 // Failure. 00822 } else { 00823 return ConstantEmission(); 00824 } 00825 00826 // In any case, if the initializer has side-effects, abandon ship. 00827 if (result.HasSideEffects) 00828 return ConstantEmission(); 00829 00830 // Emit as a constant. 00831 llvm::Constant *C = CGM.EmitConstantValue(result.Val, resultType, this); 00832 00833 // Make sure we emit a debug reference to the global variable. 00834 // This should probably fire even for 00835 if (isa<VarDecl>(value)) { 00836 if (!getContext().DeclMustBeEmitted(cast<VarDecl>(value))) 00837 EmitDeclRefExprDbgValue(refExpr, C); 00838 } else { 00839 assert(isa<EnumConstantDecl>(value)); 00840 EmitDeclRefExprDbgValue(refExpr, C); 00841 } 00842 00843 // If we emitted a reference constant, we need to dereference that. 00844 if (resultIsReference) 00845 return ConstantEmission::forReference(C); 00846 00847 return ConstantEmission::forValue(C); 00848 } 00849 00850 llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue) { 00851 return EmitLoadOfScalar(lvalue.getAddress(), lvalue.isVolatile(), 00852 lvalue.getAlignment().getQuantity(), 00853 lvalue.getType(), lvalue.getTBAAInfo()); 00854 } 00855 00856 static bool hasBooleanRepresentation(QualType Ty) { 00857 if (Ty->isBooleanType()) 00858 return true; 00859 00860 if (const EnumType *ET = Ty->getAs<EnumType>()) 00861 return ET->getDecl()->getIntegerType()->isBooleanType(); 00862 00863 if (const AtomicType *AT = Ty->getAs<AtomicType>()) 00864 return hasBooleanRepresentation(AT->getValueType()); 00865 00866 return false; 00867 } 00868 00869 llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(QualType Ty) { 00870 const EnumType *ET = Ty->getAs<EnumType>(); 00871 bool IsRegularCPlusPlusEnum = (getLangOpts().CPlusPlus && ET && 00872 CGM.getCodeGenOpts().StrictEnums && 00873 !ET->getDecl()->isFixed()); 00874 bool IsBool = hasBooleanRepresentation(Ty); 00875 if (!IsBool && !IsRegularCPlusPlusEnum) 00876 return NULL; 00877 00878 llvm::APInt Min; 00879 llvm::APInt End; 00880 if (IsBool) { 00881 Min = llvm::APInt(8, 0); 00882 End = llvm::APInt(8, 2); 00883 } else { 00884 const EnumDecl *ED = ET->getDecl(); 00885 llvm::Type *LTy = ConvertTypeForMem(ED->getIntegerType()); 00886 unsigned Bitwidth = LTy->getScalarSizeInBits(); 00887 unsigned NumNegativeBits = ED->getNumNegativeBits(); 00888 unsigned NumPositiveBits = ED->getNumPositiveBits(); 00889 00890 if (NumNegativeBits) { 00891 unsigned NumBits = std::max(NumNegativeBits, NumPositiveBits + 1); 00892 assert(NumBits <= Bitwidth); 00893 End = llvm::APInt(Bitwidth, 1) << (NumBits - 1); 00894 Min = -End; 00895 } else { 00896 assert(NumPositiveBits <= Bitwidth); 00897 End = llvm::APInt(Bitwidth, 1) << NumPositiveBits; 00898 Min = llvm::APInt(Bitwidth, 0); 00899 } 00900 } 00901 00902 llvm::MDBuilder MDHelper(getLLVMContext()); 00903 return MDHelper.createRange(Min, End); 00904 } 00905 00906 llvm::Value *CodeGenFunction::EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 00907 unsigned Alignment, QualType Ty, 00908 llvm::MDNode *TBAAInfo) { 00909 llvm::LoadInst *Load = Builder.CreateLoad(Addr); 00910 if (Volatile) 00911 Load->setVolatile(true); 00912 if (Alignment) 00913 Load->setAlignment(Alignment); 00914 if (TBAAInfo) 00915 CGM.DecorateInstruction(Load, TBAAInfo); 00916 // If this is an atomic type, all normal reads must be atomic 00917 if (Ty->isAtomicType()) 00918 Load->setAtomic(llvm::SequentiallyConsistent); 00919 00920 if (CGM.getCodeGenOpts().OptimizationLevel > 0) 00921 if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty)) 00922 Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo); 00923 00924 return EmitFromMemory(Load, Ty); 00925 } 00926 00927 llvm::Value *CodeGenFunction::EmitToMemory(llvm::Value *Value, QualType Ty) { 00928 // Bool has a different representation in memory than in registers. 00929 if (hasBooleanRepresentation(Ty)) { 00930 // This should really always be an i1, but sometimes it's already 00931 // an i8, and it's awkward to track those cases down. 00932 if (Value->getType()->isIntegerTy(1)) 00933 return Builder.CreateZExt(Value, Builder.getInt8Ty(), "frombool"); 00934 assert(Value->getType()->isIntegerTy(8) && "value rep of bool not i1/i8"); 00935 } 00936 00937 return Value; 00938 } 00939 00940 llvm::Value *CodeGenFunction::EmitFromMemory(llvm::Value *Value, QualType Ty) { 00941 // Bool has a different representation in memory than in registers. 00942 if (hasBooleanRepresentation(Ty)) { 00943 assert(Value->getType()->isIntegerTy(8) && "memory rep of bool not i8"); 00944 return Builder.CreateTrunc(Value, Builder.getInt1Ty(), "tobool"); 00945 } 00946 00947 return Value; 00948 } 00949 00950 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 00951 bool Volatile, unsigned Alignment, 00952 QualType Ty, 00953 llvm::MDNode *TBAAInfo, 00954 bool isInit) { 00955 Value = EmitToMemory(Value, Ty); 00956 00957 llvm::StoreInst *Store = Builder.CreateStore(Value, Addr, Volatile); 00958 if (Alignment) 00959 Store->setAlignment(Alignment); 00960 if (TBAAInfo) 00961 CGM.DecorateInstruction(Store, TBAAInfo); 00962 if (!isInit && Ty->isAtomicType()) 00963 Store->setAtomic(llvm::SequentiallyConsistent); 00964 } 00965 00966 void CodeGenFunction::EmitStoreOfScalar(llvm::Value *value, LValue lvalue, 00967 bool isInit) { 00968 EmitStoreOfScalar(value, lvalue.getAddress(), lvalue.isVolatile(), 00969 lvalue.getAlignment().getQuantity(), lvalue.getType(), 00970 lvalue.getTBAAInfo(), isInit); 00971 } 00972 00973 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, this 00974 /// method emits the address of the lvalue, then loads the result as an rvalue, 00975 /// returning the rvalue. 00976 RValue CodeGenFunction::EmitLoadOfLValue(LValue LV) { 00977 if (LV.isObjCWeak()) { 00978 // load of a __weak object. 00979 llvm::Value *AddrWeakObj = LV.getAddress(); 00980 return RValue::get(CGM.getObjCRuntime().EmitObjCWeakRead(*this, 00981 AddrWeakObj)); 00982 } 00983 if (LV.getQuals().getObjCLifetime() == Qualifiers::OCL_Weak) 00984 return RValue::get(EmitARCLoadWeak(LV.getAddress())); 00985 00986 if (LV.isSimple()) { 00987 assert(!LV.getType()->isFunctionType()); 00988 00989 // Everything needs a load. 00990 return RValue::get(EmitLoadOfScalar(LV)); 00991 } 00992 00993 if (LV.isVectorElt()) { 00994 llvm::LoadInst *Load = Builder.CreateLoad(LV.getVectorAddr(), 00995 LV.isVolatileQualified()); 00996 Load->setAlignment(LV.getAlignment().getQuantity()); 00997 return RValue::get(Builder.CreateExtractElement(Load, LV.getVectorIdx(), 00998 "vecext")); 00999 } 01000 01001 // If this is a reference to a subset of the elements of a vector, either 01002 // shuffle the input or extract/insert them as appropriate. 01003 if (LV.isExtVectorElt()) 01004 return EmitLoadOfExtVectorElementLValue(LV); 01005 01006 assert(LV.isBitField() && "Unknown LValue type!"); 01007 return EmitLoadOfBitfieldLValue(LV); 01008 } 01009 01010 RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV) { 01011 const CGBitFieldInfo &Info = LV.getBitFieldInfo(); 01012 01013 // Get the output type. 01014 llvm::Type *ResLTy = ConvertType(LV.getType()); 01015 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 01016 01017 // Compute the result as an OR of all of the individual component accesses. 01018 llvm::Value *Res = 0; 01019 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 01020 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 01021 01022 // Get the field pointer. 01023 llvm::Value *Ptr = LV.getBitFieldBaseAddr(); 01024 01025 // Only offset by the field index if used, so that incoming values are not 01026 // required to be structures. 01027 if (AI.FieldIndex) 01028 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 01029 01030 // Offset by the byte offset, if used. 01031 if (!AI.FieldByteOffset.isZero()) { 01032 Ptr = EmitCastToVoidPtr(Ptr); 01033 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 01034 "bf.field.offs"); 01035 } 01036 01037 // Cast to the access type. 01038 llvm::Type *PTy = llvm::Type::getIntNPtrTy(getLLVMContext(), AI.AccessWidth, 01039 CGM.getContext().getTargetAddressSpace(LV.getType())); 01040 Ptr = Builder.CreateBitCast(Ptr, PTy); 01041 01042 // Perform the load. 01043 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, LV.isVolatileQualified()); 01044 if (!AI.AccessAlignment.isZero()) 01045 Load->setAlignment(AI.AccessAlignment.getQuantity()); 01046 01047 // Shift out unused low bits and mask out unused high bits. 01048 llvm::Value *Val = Load; 01049 if (AI.FieldBitStart) 01050 Val = Builder.CreateLShr(Load, AI.FieldBitStart); 01051 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(AI.AccessWidth, 01052 AI.TargetBitWidth), 01053 "bf.clear"); 01054 01055 // Extend or truncate to the target size. 01056 if (AI.AccessWidth < ResSizeInBits) 01057 Val = Builder.CreateZExt(Val, ResLTy); 01058 else if (AI.AccessWidth > ResSizeInBits) 01059 Val = Builder.CreateTrunc(Val, ResLTy); 01060 01061 // Shift into place, and OR into the result. 01062 if (AI.TargetBitOffset) 01063 Val = Builder.CreateShl(Val, AI.TargetBitOffset); 01064 Res = Res ? Builder.CreateOr(Res, Val) : Val; 01065 } 01066 01067 // If the bit-field is signed, perform the sign-extension. 01068 // 01069 // FIXME: This can easily be folded into the load of the high bits, which 01070 // could also eliminate the mask of high bits in some situations. 01071 if (Info.isSigned()) { 01072 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 01073 if (ExtraBits) 01074 Res = Builder.CreateAShr(Builder.CreateShl(Res, ExtraBits), 01075 ExtraBits, "bf.val.sext"); 01076 } 01077 01078 return RValue::get(Res); 01079 } 01080 01081 // If this is a reference to a subset of the elements of a vector, create an 01082 // appropriate shufflevector. 01083 RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV) { 01084 llvm::LoadInst *Load = Builder.CreateLoad(LV.getExtVectorAddr(), 01085 LV.isVolatileQualified()); 01086 Load->setAlignment(LV.getAlignment().getQuantity()); 01087 llvm::Value *Vec = Load; 01088 01089 const llvm::Constant *Elts = LV.getExtVectorElts(); 01090 01091 // If the result of the expression is a non-vector type, we must be extracting 01092 // a single element. Just codegen as an extractelement. 01093 const VectorType *ExprVT = LV.getType()->getAs<VectorType>(); 01094 if (!ExprVT) { 01095 unsigned InIdx = getAccessedFieldNo(0, Elts); 01096 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 01097 return RValue::get(Builder.CreateExtractElement(Vec, Elt)); 01098 } 01099 01100 // Always use shuffle vector to try to retain the original program structure 01101 unsigned NumResultElts = ExprVT->getNumElements(); 01102 01103 SmallVector<llvm::Constant*, 4> Mask; 01104 for (unsigned i = 0; i != NumResultElts; ++i) 01105 Mask.push_back(Builder.getInt32(getAccessedFieldNo(i, Elts))); 01106 01107 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 01108 Vec = Builder.CreateShuffleVector(Vec, llvm::UndefValue::get(Vec->getType()), 01109 MaskV); 01110 return RValue::get(Vec); 01111 } 01112 01113 01114 01115 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 01116 /// lvalue, where both are guaranteed to the have the same type, and that type 01117 /// is 'Ty'. 01118 void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, bool isInit) { 01119 if (!Dst.isSimple()) { 01120 if (Dst.isVectorElt()) { 01121 // Read/modify/write the vector, inserting the new element. 01122 llvm::LoadInst *Load = Builder.CreateLoad(Dst.getVectorAddr(), 01123 Dst.isVolatileQualified()); 01124 Load->setAlignment(Dst.getAlignment().getQuantity()); 01125 llvm::Value *Vec = Load; 01126 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 01127 Dst.getVectorIdx(), "vecins"); 01128 llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getVectorAddr(), 01129 Dst.isVolatileQualified()); 01130 Store->setAlignment(Dst.getAlignment().getQuantity()); 01131 return; 01132 } 01133 01134 // If this is an update of extended vector elements, insert them as 01135 // appropriate. 01136 if (Dst.isExtVectorElt()) 01137 return EmitStoreThroughExtVectorComponentLValue(Src, Dst); 01138 01139 assert(Dst.isBitField() && "Unknown LValue type"); 01140 return EmitStoreThroughBitfieldLValue(Src, Dst); 01141 } 01142 01143 // There's special magic for assigning into an ARC-qualified l-value. 01144 if (Qualifiers::ObjCLifetime Lifetime = Dst.getQuals().getObjCLifetime()) { 01145 switch (Lifetime) { 01146 case Qualifiers::OCL_None: 01147 llvm_unreachable("present but none"); 01148 01149 case Qualifiers::OCL_ExplicitNone: 01150 // nothing special 01151 break; 01152 01153 case Qualifiers::OCL_Strong: 01154 EmitARCStoreStrong(Dst, Src.getScalarVal(), /*ignore*/ true); 01155 return; 01156 01157 case Qualifiers::OCL_Weak: 01158 EmitARCStoreWeak(Dst.getAddress(), Src.getScalarVal(), /*ignore*/ true); 01159 return; 01160 01161 case Qualifiers::OCL_Autoreleasing: 01162 Src = RValue::get(EmitObjCExtendObjectLifetime(Dst.getType(), 01163 Src.getScalarVal())); 01164 // fall into the normal path 01165 break; 01166 } 01167 } 01168 01169 if (Dst.isObjCWeak() && !Dst.isNonGC()) { 01170 // load of a __weak object. 01171 llvm::Value *LvalueDst = Dst.getAddress(); 01172 llvm::Value *src = Src.getScalarVal(); 01173 CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst); 01174 return; 01175 } 01176 01177 if (Dst.isObjCStrong() && !Dst.isNonGC()) { 01178 // load of a __strong object. 01179 llvm::Value *LvalueDst = Dst.getAddress(); 01180 llvm::Value *src = Src.getScalarVal(); 01181 if (Dst.isObjCIvar()) { 01182 assert(Dst.getBaseIvarExp() && "BaseIvarExp is NULL"); 01183 llvm::Type *ResultType = ConvertType(getContext().LongTy); 01184 llvm::Value *RHS = EmitScalarExpr(Dst.getBaseIvarExp()); 01185 llvm::Value *dst = RHS; 01186 RHS = Builder.CreatePtrToInt(RHS, ResultType, "sub.ptr.rhs.cast"); 01187 llvm::Value *LHS = 01188 Builder.CreatePtrToInt(LvalueDst, ResultType, "sub.ptr.lhs.cast"); 01189 llvm::Value *BytesBetween = Builder.CreateSub(LHS, RHS, "ivar.offset"); 01190 CGM.getObjCRuntime().EmitObjCIvarAssign(*this, src, dst, 01191 BytesBetween); 01192 } else if (Dst.isGlobalObjCRef()) { 01193 CGM.getObjCRuntime().EmitObjCGlobalAssign(*this, src, LvalueDst, 01194 Dst.isThreadLocalRef()); 01195 } 01196 else 01197 CGM.getObjCRuntime().EmitObjCStrongCastAssign(*this, src, LvalueDst); 01198 return; 01199 } 01200 01201 assert(Src.isScalar() && "Can't emit an agg store with this method"); 01202 EmitStoreOfScalar(Src.getScalarVal(), Dst, isInit); 01203 } 01204 01205 void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 01206 llvm::Value **Result) { 01207 const CGBitFieldInfo &Info = Dst.getBitFieldInfo(); 01208 01209 // Get the output type. 01210 llvm::Type *ResLTy = ConvertTypeForMem(Dst.getType()); 01211 unsigned ResSizeInBits = CGM.getTargetData().getTypeSizeInBits(ResLTy); 01212 01213 // Get the source value, truncated to the width of the bit-field. 01214 llvm::Value *SrcVal = Src.getScalarVal(); 01215 01216 if (hasBooleanRepresentation(Dst.getType())) 01217 SrcVal = Builder.CreateIntCast(SrcVal, ResLTy, /*IsSigned=*/false); 01218 01219 SrcVal = Builder.CreateAnd(SrcVal, llvm::APInt::getLowBitsSet(ResSizeInBits, 01220 Info.getSize()), 01221 "bf.value"); 01222 01223 // Return the new value of the bit-field, if requested. 01224 if (Result) { 01225 // Cast back to the proper type for result. 01226 llvm::Type *SrcTy = Src.getScalarVal()->getType(); 01227 llvm::Value *ReloadVal = Builder.CreateIntCast(SrcVal, SrcTy, false, 01228 "bf.reload.val"); 01229 01230 // Sign extend if necessary. 01231 if (Info.isSigned()) { 01232 unsigned ExtraBits = ResSizeInBits - Info.getSize(); 01233 if (ExtraBits) 01234 ReloadVal = Builder.CreateAShr(Builder.CreateShl(ReloadVal, ExtraBits), 01235 ExtraBits, "bf.reload.sext"); 01236 } 01237 01238 *Result = ReloadVal; 01239 } 01240 01241 // Iterate over the components, writing each piece to memory. 01242 for (unsigned i = 0, e = Info.getNumComponents(); i != e; ++i) { 01243 const CGBitFieldInfo::AccessInfo &AI = Info.getComponent(i); 01244 01245 // Get the field pointer. 01246 llvm::Value *Ptr = Dst.getBitFieldBaseAddr(); 01247 unsigned addressSpace = 01248 cast<llvm::PointerType>(Ptr->getType())->getAddressSpace(); 01249 01250 // Only offset by the field index if used, so that incoming values are not 01251 // required to be structures. 01252 if (AI.FieldIndex) 01253 Ptr = Builder.CreateStructGEP(Ptr, AI.FieldIndex, "bf.field"); 01254 01255 // Offset by the byte offset, if used. 01256 if (!AI.FieldByteOffset.isZero()) { 01257 Ptr = EmitCastToVoidPtr(Ptr); 01258 Ptr = Builder.CreateConstGEP1_32(Ptr, AI.FieldByteOffset.getQuantity(), 01259 "bf.field.offs"); 01260 } 01261 01262 // Cast to the access type. 01263 llvm::Type *AccessLTy = 01264 llvm::Type::getIntNTy(getLLVMContext(), AI.AccessWidth); 01265 01266 llvm::Type *PTy = AccessLTy->getPointerTo(addressSpace); 01267 Ptr = Builder.CreateBitCast(Ptr, PTy); 01268 01269 // Extract the piece of the bit-field value to write in this access, limited 01270 // to the values that are part of this access. 01271 llvm::Value *Val = SrcVal; 01272 if (AI.TargetBitOffset) 01273 Val = Builder.CreateLShr(Val, AI.TargetBitOffset); 01274 Val = Builder.CreateAnd(Val, llvm::APInt::getLowBitsSet(ResSizeInBits, 01275 AI.TargetBitWidth)); 01276 01277 // Extend or truncate to the access size. 01278 if (ResSizeInBits < AI.AccessWidth) 01279 Val = Builder.CreateZExt(Val, AccessLTy); 01280 else if (ResSizeInBits > AI.AccessWidth) 01281 Val = Builder.CreateTrunc(Val, AccessLTy); 01282 01283 // Shift into the position in memory. 01284 if (AI.FieldBitStart) 01285 Val = Builder.CreateShl(Val, AI.FieldBitStart); 01286 01287 // If necessary, load and OR in bits that are outside of the bit-field. 01288 if (AI.TargetBitWidth != AI.AccessWidth) { 01289 llvm::LoadInst *Load = Builder.CreateLoad(Ptr, Dst.isVolatileQualified()); 01290 if (!AI.AccessAlignment.isZero()) 01291 Load->setAlignment(AI.AccessAlignment.getQuantity()); 01292 01293 // Compute the mask for zeroing the bits that are part of the bit-field. 01294 llvm::APInt InvMask = 01295 ~llvm::APInt::getBitsSet(AI.AccessWidth, AI.FieldBitStart, 01296 AI.FieldBitStart + AI.TargetBitWidth); 01297 01298 // Apply the mask and OR in to the value to write. 01299 Val = Builder.CreateOr(Builder.CreateAnd(Load, InvMask), Val); 01300 } 01301 01302 // Write the value. 01303 llvm::StoreInst *Store = Builder.CreateStore(Val, Ptr, 01304 Dst.isVolatileQualified()); 01305 if (!AI.AccessAlignment.isZero()) 01306 Store->setAlignment(AI.AccessAlignment.getQuantity()); 01307 } 01308 } 01309 01310 void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 01311 LValue Dst) { 01312 // This access turns into a read/modify/write of the vector. Load the input 01313 // value now. 01314 llvm::LoadInst *Load = Builder.CreateLoad(Dst.getExtVectorAddr(), 01315 Dst.isVolatileQualified()); 01316 Load->setAlignment(Dst.getAlignment().getQuantity()); 01317 llvm::Value *Vec = Load; 01318 const llvm::Constant *Elts = Dst.getExtVectorElts(); 01319 01320 llvm::Value *SrcVal = Src.getScalarVal(); 01321 01322 if (const VectorType *VTy = Dst.getType()->getAs<VectorType>()) { 01323 unsigned NumSrcElts = VTy->getNumElements(); 01324 unsigned NumDstElts = 01325 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 01326 if (NumDstElts == NumSrcElts) { 01327 // Use shuffle vector is the src and destination are the same number of 01328 // elements and restore the vector mask since it is on the side it will be 01329 // stored. 01330 SmallVector<llvm::Constant*, 4> Mask(NumDstElts); 01331 for (unsigned i = 0; i != NumSrcElts; ++i) 01332 Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i); 01333 01334 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 01335 Vec = Builder.CreateShuffleVector(SrcVal, 01336 llvm::UndefValue::get(Vec->getType()), 01337 MaskV); 01338 } else if (NumDstElts > NumSrcElts) { 01339 // Extended the source vector to the same length and then shuffle it 01340 // into the destination. 01341 // FIXME: since we're shuffling with undef, can we just use the indices 01342 // into that? This could be simpler. 01343 SmallVector<llvm::Constant*, 4> ExtMask; 01344 for (unsigned i = 0; i != NumSrcElts; ++i) 01345 ExtMask.push_back(Builder.getInt32(i)); 01346 ExtMask.resize(NumDstElts, llvm::UndefValue::get(Int32Ty)); 01347 llvm::Value *ExtMaskV = llvm::ConstantVector::get(ExtMask); 01348 llvm::Value *ExtSrcVal = 01349 Builder.CreateShuffleVector(SrcVal, 01350 llvm::UndefValue::get(SrcVal->getType()), 01351 ExtMaskV); 01352 // build identity 01353 SmallVector<llvm::Constant*, 4> Mask; 01354 for (unsigned i = 0; i != NumDstElts; ++i) 01355 Mask.push_back(Builder.getInt32(i)); 01356 01357 // modify when what gets shuffled in 01358 for (unsigned i = 0; i != NumSrcElts; ++i) 01359 Mask[getAccessedFieldNo(i, Elts)] = Builder.getInt32(i+NumDstElts); 01360 llvm::Value *MaskV = llvm::ConstantVector::get(Mask); 01361 Vec = Builder.CreateShuffleVector(Vec, ExtSrcVal, MaskV); 01362 } else { 01363 // We should never shorten the vector 01364 llvm_unreachable("unexpected shorten vector length"); 01365 } 01366 } else { 01367 // If the Src is a scalar (not a vector) it must be updating one element. 01368 unsigned InIdx = getAccessedFieldNo(0, Elts); 01369 llvm::Value *Elt = llvm::ConstantInt::get(Int32Ty, InIdx); 01370 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt); 01371 } 01372 01373 llvm::StoreInst *Store = Builder.CreateStore(Vec, Dst.getExtVectorAddr(), 01374 Dst.isVolatileQualified()); 01375 Store->setAlignment(Dst.getAlignment().getQuantity()); 01376 } 01377 01378 // setObjCGCLValueClass - sets class of he lvalue for the purpose of 01379 // generating write-barries API. It is currently a global, ivar, 01380 // or neither. 01381 static void setObjCGCLValueClass(const ASTContext &Ctx, const Expr *E, 01382 LValue &LV, 01383 bool IsMemberAccess=false) { 01384 if (Ctx.getLangOpts().getGC() == LangOptions::NonGC) 01385 return; 01386 01387 if (isa<ObjCIvarRefExpr>(E)) { 01388 QualType ExpTy = E->getType(); 01389 if (IsMemberAccess && ExpTy->isPointerType()) { 01390 // If ivar is a structure pointer, assigning to field of 01391 // this struct follows gcc's behavior and makes it a non-ivar 01392 // writer-barrier conservatively. 01393 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 01394 if (ExpTy->isRecordType()) { 01395 LV.setObjCIvar(false); 01396 return; 01397 } 01398 } 01399 LV.setObjCIvar(true); 01400 ObjCIvarRefExpr *Exp = cast<ObjCIvarRefExpr>(const_cast<Expr*>(E)); 01401 LV.setBaseIvarExp(Exp->getBase()); 01402 LV.setObjCArray(E->getType()->isArrayType()); 01403 return; 01404 } 01405 01406 if (const DeclRefExpr *Exp = dyn_cast<DeclRefExpr>(E)) { 01407 if (const VarDecl *VD = dyn_cast<VarDecl>(Exp->getDecl())) { 01408 if (VD->hasGlobalStorage()) { 01409 LV.setGlobalObjCRef(true); 01410 LV.setThreadLocalRef(VD->isThreadSpecified()); 01411 } 01412 } 01413 LV.setObjCArray(E->getType()->isArrayType()); 01414 return; 01415 } 01416 01417 if (const UnaryOperator *Exp = dyn_cast<UnaryOperator>(E)) { 01418 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 01419 return; 01420 } 01421 01422 if (const ParenExpr *Exp = dyn_cast<ParenExpr>(E)) { 01423 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 01424 if (LV.isObjCIvar()) { 01425 // If cast is to a structure pointer, follow gcc's behavior and make it 01426 // a non-ivar write-barrier. 01427 QualType ExpTy = E->getType(); 01428 if (ExpTy->isPointerType()) 01429 ExpTy = ExpTy->getAs<PointerType>()->getPointeeType(); 01430 if (ExpTy->isRecordType()) 01431 LV.setObjCIvar(false); 01432 } 01433 return; 01434 } 01435 01436 if (const GenericSelectionExpr *Exp = dyn_cast<GenericSelectionExpr>(E)) { 01437 setObjCGCLValueClass(Ctx, Exp->getResultExpr(), LV); 01438 return; 01439 } 01440 01441 if (const ImplicitCastExpr *Exp = dyn_cast<ImplicitCastExpr>(E)) { 01442 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 01443 return; 01444 } 01445 01446 if (const CStyleCastExpr *Exp = dyn_cast<CStyleCastExpr>(E)) { 01447 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 01448 return; 01449 } 01450 01451 if (const ObjCBridgedCastExpr *Exp = dyn_cast<ObjCBridgedCastExpr>(E)) { 01452 setObjCGCLValueClass(Ctx, Exp->getSubExpr(), LV, IsMemberAccess); 01453 return; 01454 } 01455 01456 if (const ArraySubscriptExpr *Exp = dyn_cast<ArraySubscriptExpr>(E)) { 01457 setObjCGCLValueClass(Ctx, Exp->getBase(), LV); 01458 if (LV.isObjCIvar() && !LV.isObjCArray()) 01459 // Using array syntax to assigning to what an ivar points to is not 01460 // same as assigning to the ivar itself. {id *Names;} Names[i] = 0; 01461 LV.setObjCIvar(false); 01462 else if (LV.isGlobalObjCRef() && !LV.isObjCArray()) 01463 // Using array syntax to assigning to what global points to is not 01464 // same as assigning to the global itself. {id *G;} G[i] = 0; 01465 LV.setGlobalObjCRef(false); 01466 return; 01467 } 01468 01469 if (const MemberExpr *Exp = dyn_cast<MemberExpr>(E)) { 01470 setObjCGCLValueClass(Ctx, Exp->getBase(), LV, true); 01471 // We don't know if member is an 'ivar', but this flag is looked at 01472 // only in the context of LV.isObjCIvar(). 01473 LV.setObjCArray(E->getType()->isArrayType()); 01474 return; 01475 } 01476 } 01477 01478 static llvm::Value * 01479 EmitBitCastOfLValueToProperType(CodeGenFunction &CGF, 01480 llvm::Value *V, llvm::Type *IRType, 01481 StringRef Name = StringRef()) { 01482 unsigned AS = cast<llvm::PointerType>(V->getType())->getAddressSpace(); 01483 return CGF.Builder.CreateBitCast(V, IRType->getPointerTo(AS), Name); 01484 } 01485 01486 static LValue EmitGlobalVarDeclLValue(CodeGenFunction &CGF, 01487 const Expr *E, const VarDecl *VD) { 01488 assert((VD->hasExternalStorage() || VD->isFileVarDecl()) && 01489 "Var decl must have external storage or be a file var decl!"); 01490 01491 llvm::Value *V = CGF.CGM.GetAddrOfGlobalVar(VD); 01492 llvm::Type *RealVarTy = CGF.getTypes().ConvertTypeForMem(VD->getType()); 01493 V = EmitBitCastOfLValueToProperType(CGF, V, RealVarTy); 01494 CharUnits Alignment = CGF.getContext().getDeclAlign(VD); 01495 QualType T = E->getType(); 01496 LValue LV; 01497 if (VD->getType()->isReferenceType()) { 01498 llvm::LoadInst *LI = CGF.Builder.CreateLoad(V); 01499 LI->setAlignment(Alignment.getQuantity()); 01500 V = LI; 01501 LV = CGF.MakeNaturalAlignAddrLValue(V, T); 01502 } else { 01503 LV = CGF.MakeAddrLValue(V, E->getType(), Alignment); 01504 } 01505 setObjCGCLValueClass(CGF.getContext(), E, LV); 01506 return LV; 01507 } 01508 01509 static LValue EmitFunctionDeclLValue(CodeGenFunction &CGF, 01510 const Expr *E, const FunctionDecl *FD) { 01511 llvm::Value *V = CGF.CGM.GetAddrOfFunction(FD); 01512 if (!FD->hasPrototype()) { 01513 if (const FunctionProtoType *Proto = 01514 FD->getType()->getAs<FunctionProtoType>()) { 01515 // Ugly case: for a K&R-style definition, the type of the definition 01516 // isn't the same as the type of a use. Correct for this with a 01517 // bitcast. 01518 QualType NoProtoType = 01519 CGF.getContext().getFunctionNoProtoType(Proto->getResultType()); 01520 NoProtoType = CGF.getContext().getPointerType(NoProtoType); 01521 V = CGF.Builder.CreateBitCast(V, CGF.ConvertType(NoProtoType)); 01522 } 01523 } 01524 CharUnits Alignment = CGF.getContext().getDeclAlign(FD); 01525 return CGF.MakeAddrLValue(V, E->getType(), Alignment); 01526 } 01527 01528 LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 01529 const NamedDecl *ND = E->getDecl(); 01530 CharUnits Alignment = getContext().getDeclAlign(ND); 01531 QualType T = E->getType(); 01532 01533 // FIXME: We should be able to assert this for FunctionDecls as well! 01534 // FIXME: We should be able to assert this for all DeclRefExprs, not just 01535 // those with a valid source location. 01536 assert((ND->isUsed(false) || !isa<VarDecl>(ND) || 01537 !E->getLocation().isValid()) && 01538 "Should not use decl without marking it used!"); 01539 01540 if (ND->hasAttr<WeakRefAttr>()) { 01541 const ValueDecl *VD = cast<ValueDecl>(ND); 01542 llvm::Constant *Aliasee = CGM.GetWeakRefReference(VD); 01543 return MakeAddrLValue(Aliasee, E->getType(), Alignment); 01544 } 01545 01546 if (const VarDecl *VD = dyn_cast<VarDecl>(ND)) { 01547 // Check if this is a global variable. 01548 if (VD->hasExternalStorage() || VD->isFileVarDecl()) 01549 return EmitGlobalVarDeclLValue(*this, E, VD); 01550 01551 bool isBlockVariable = VD->hasAttr<BlocksAttr>(); 01552 01553 bool NonGCable = VD->hasLocalStorage() && 01554 !VD->getType()->isReferenceType() && 01555 !isBlockVariable; 01556 01557 llvm::Value *V = LocalDeclMap[VD]; 01558 if (!V && VD->isStaticLocal()) 01559 V = CGM.getStaticLocalDeclAddress(VD); 01560 01561 // Use special handling for lambdas. 01562 if (!V) { 01563 if (FieldDecl *FD = LambdaCaptureFields.lookup(VD)) { 01564 QualType LambdaTagType = getContext().getTagDeclType(FD->getParent()); 01565 LValue LambdaLV = MakeNaturalAlignAddrLValue(CXXABIThisValue, 01566 LambdaTagType); 01567 return EmitLValueForField(LambdaLV, FD); 01568 } 01569 01570 assert(isa<BlockDecl>(CurCodeDecl) && E->refersToEnclosingLocal()); 01571 CharUnits alignment = getContext().getDeclAlign(VD); 01572 return MakeAddrLValue(GetAddrOfBlockDecl(VD, isBlockVariable), 01573 E->getType(), alignment); 01574 } 01575 01576 assert(V && "DeclRefExpr not entered in LocalDeclMap?"); 01577 01578 if (isBlockVariable) 01579 V = BuildBlockByrefAddress(V, VD); 01580 01581 LValue LV; 01582 if (VD->getType()->isReferenceType()) { 01583 llvm::LoadInst *LI = Builder.CreateLoad(V); 01584 LI->setAlignment(Alignment.getQuantity()); 01585 V = LI; 01586 LV = MakeNaturalAlignAddrLValue(V, T); 01587 } else { 01588 LV = MakeAddrLValue(V, T, Alignment); 01589 } 01590 01591 if (NonGCable) { 01592 LV.getQuals().removeObjCGCAttr(); 01593 LV.setNonGC(true); 01594 } 01595 setObjCGCLValueClass(getContext(), E, LV); 01596 return LV; 01597 } 01598 01599 if (const FunctionDecl *fn = dyn_cast<FunctionDecl>(ND)) 01600 return EmitFunctionDeclLValue(*this, E, fn); 01601 01602 llvm_unreachable("Unhandled DeclRefExpr"); 01603 } 01604 01605 LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 01606 // __extension__ doesn't affect lvalue-ness. 01607 if (E->getOpcode() == UO_Extension) 01608 return EmitLValue(E->getSubExpr()); 01609 01610 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 01611 switch (E->getOpcode()) { 01612 default: llvm_unreachable("Unknown unary operator lvalue!"); 01613 case UO_Deref: { 01614 QualType T = E->getSubExpr()->getType()->getPointeeType(); 01615 assert(!T.isNull() && "CodeGenFunction::EmitUnaryOpLValue: Illegal type"); 01616 01617 LValue LV = MakeNaturalAlignAddrLValue(EmitScalarExpr(E->getSubExpr()), T); 01618 LV.getQuals().setAddressSpace(ExprTy.getAddressSpace()); 01619 01620 // We should not generate __weak write barrier on indirect reference 01621 // of a pointer to object; as in void foo (__weak id *param); *param = 0; 01622 // But, we continue to generate __strong write barrier on indirect write 01623 // into a pointer to object. 01624 if (getContext().getLangOpts().ObjC1 && 01625 getContext().getLangOpts().getGC() != LangOptions::NonGC && 01626 LV.isObjCWeak()) 01627 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 01628 return LV; 01629 } 01630 case UO_Real: 01631 case UO_Imag: { 01632 LValue LV = EmitLValue(E->getSubExpr()); 01633 assert(LV.isSimple() && "real/imag on non-ordinary l-value"); 01634 llvm::Value *Addr = LV.getAddress(); 01635 01636 // __real is valid on scalars. This is a faster way of testing that. 01637 // __imag can only produce an rvalue on scalars. 01638 if (E->getOpcode() == UO_Real && 01639 !cast<llvm::PointerType>(Addr->getType()) 01640 ->getElementType()->isStructTy()) { 01641 assert(E->getSubExpr()->getType()->isArithmeticType()); 01642 return LV; 01643 } 01644 01645 assert(E->getSubExpr()->getType()->isAnyComplexType()); 01646 01647 unsigned Idx = E->getOpcode() == UO_Imag; 01648 return MakeAddrLValue(Builder.CreateStructGEP(LV.getAddress(), 01649 Idx, "idx"), 01650 ExprTy); 01651 } 01652 case UO_PreInc: 01653 case UO_PreDec: { 01654 LValue LV = EmitLValue(E->getSubExpr()); 01655 bool isInc = E->getOpcode() == UO_PreInc; 01656 01657 if (E->getType()->isAnyComplexType()) 01658 EmitComplexPrePostIncDec(E, LV, isInc, true/*isPre*/); 01659 else 01660 EmitScalarPrePostIncDec(E, LV, isInc, true/*isPre*/); 01661 return LV; 01662 } 01663 } 01664 } 01665 01666 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 01667 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromLiteral(E), 01668 E->getType()); 01669 } 01670 01671 LValue CodeGenFunction::EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E) { 01672 return MakeAddrLValue(CGM.GetAddrOfConstantStringFromObjCEncode(E), 01673 E->getType()); 01674 } 01675 01676 01677 LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 01678 switch (E->getIdentType()) { 01679 default: 01680 return EmitUnsupportedLValue(E, "predefined expression"); 01681 01682 case PredefinedExpr::Func: 01683 case PredefinedExpr::Function: 01684 case PredefinedExpr::PrettyFunction: { 01685 unsigned Type = E->getIdentType(); 01686 std::string GlobalVarName; 01687 01688 switch (Type) { 01689 default: llvm_unreachable("Invalid type"); 01690 case PredefinedExpr::Func: 01691 GlobalVarName = "__func__."; 01692 break; 01693 case PredefinedExpr::Function: 01694 GlobalVarName = "__FUNCTION__."; 01695 break; 01696 case PredefinedExpr::PrettyFunction: 01697 GlobalVarName = "__PRETTY_FUNCTION__."; 01698 break; 01699 } 01700 01701 StringRef FnName = CurFn->getName(); 01702 if (FnName.startswith("\01")) 01703 FnName = FnName.substr(1); 01704 GlobalVarName += FnName; 01705 01706 const Decl *CurDecl = CurCodeDecl; 01707 if (CurDecl == 0) 01708 CurDecl = getContext().getTranslationUnitDecl(); 01709 01710 std::string FunctionName = 01711 (isa<BlockDecl>(CurDecl) 01712 ? FnName.str() 01713 : PredefinedExpr::ComputeName((PredefinedExpr::IdentType)Type, CurDecl)); 01714 01715 llvm::Constant *C = 01716 CGM.GetAddrOfConstantCString(FunctionName, GlobalVarName.c_str()); 01717 return MakeAddrLValue(C, E->getType()); 01718 } 01719 } 01720 } 01721 01722 llvm::BasicBlock *CodeGenFunction::getTrapBB() { 01723 const CodeGenOptions &GCO = CGM.getCodeGenOpts(); 01724 01725 // If we are not optimzing, don't collapse all calls to trap in the function 01726 // to the same call, that way, in the debugger they can see which operation 01727 // did in fact fail. If we are optimizing, we collapse all calls to trap down 01728 // to just one per function to save on codesize. 01729 if (GCO.OptimizationLevel && TrapBB) 01730 return TrapBB; 01731 01732 llvm::BasicBlock *Cont = 0; 01733 if (HaveInsertPoint()) { 01734 Cont = createBasicBlock("cont"); 01735 EmitBranch(Cont); 01736 } 01737 TrapBB = createBasicBlock("trap"); 01738 EmitBlock(TrapBB); 01739 01740 llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::trap); 01741 llvm::CallInst *TrapCall = Builder.CreateCall(F); 01742 TrapCall->setDoesNotReturn(); 01743 TrapCall->setDoesNotThrow(); 01744 Builder.CreateUnreachable(); 01745 01746 if (Cont) 01747 EmitBlock(Cont); 01748 return TrapBB; 01749 } 01750 01751 /// isSimpleArrayDecayOperand - If the specified expr is a simple decay from an 01752 /// array to pointer, return the array subexpression. 01753 static const Expr *isSimpleArrayDecayOperand(const Expr *E) { 01754 // If this isn't just an array->pointer decay, bail out. 01755 const CastExpr *CE = dyn_cast<CastExpr>(E); 01756 if (CE == 0 || CE->getCastKind() != CK_ArrayToPointerDecay) 01757 return 0; 01758 01759 // If this is a decay from variable width array, bail out. 01760 const Expr *SubExpr = CE->getSubExpr(); 01761 if (SubExpr->getType()->isVariableArrayType()) 01762 return 0; 01763 01764 return SubExpr; 01765 } 01766 01767 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 01768 // The index must always be an integer, which is not an aggregate. Emit it. 01769 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 01770 QualType IdxTy = E->getIdx()->getType(); 01771 bool IdxSigned = IdxTy->isSignedIntegerOrEnumerationType(); 01772 01773 // If the base is a vector type, then we are forming a vector element lvalue 01774 // with this subscript. 01775 if (E->getBase()->getType()->isVectorType()) { 01776 // Emit the vector as an lvalue to get its address. 01777 LValue LHS = EmitLValue(E->getBase()); 01778 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 01779 Idx = Builder.CreateIntCast(Idx, Int32Ty, IdxSigned, "vidx"); 01780 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 01781 E->getBase()->getType(), LHS.getAlignment()); 01782 } 01783 01784 // Extend or truncate the index type to 32 or 64-bits. 01785 if (Idx->getType() != IntPtrTy) 01786 Idx = Builder.CreateIntCast(Idx, IntPtrTy, IdxSigned, "idxprom"); 01787 01788 // We know that the pointer points to a type of the correct size, unless the 01789 // size is a VLA or Objective-C interface. 01790 llvm::Value *Address = 0; 01791 CharUnits ArrayAlignment; 01792 if (const VariableArrayType *vla = 01793 getContext().getAsVariableArrayType(E->getType())) { 01794 // The base must be a pointer, which is not an aggregate. Emit 01795 // it. It needs to be emitted first in case it's what captures 01796 // the VLA bounds. 01797 Address = EmitScalarExpr(E->getBase()); 01798 01799 // The element count here is the total number of non-VLA elements. 01800 llvm::Value *numElements = getVLASize(vla).first; 01801 01802 // Effectively, the multiply by the VLA size is part of the GEP. 01803 // GEP indexes are signed, and scaling an index isn't permitted to 01804 // signed-overflow, so we use the same semantics for our explicit 01805 // multiply. We suppress this if overflow is not undefined behavior. 01806 if (getLangOpts().isSignedOverflowDefined()) { 01807 Idx = Builder.CreateMul(Idx, numElements); 01808 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 01809 } else { 01810 Idx = Builder.CreateNSWMul(Idx, numElements); 01811 Address = Builder.CreateInBoundsGEP(Address, Idx, "arrayidx"); 01812 } 01813 } else if (const ObjCObjectType *OIT = E->getType()->getAs<ObjCObjectType>()){ 01814 // Indexing over an interface, as in "NSString *P; P[4];" 01815 llvm::Value *InterfaceSize = 01816 llvm::ConstantInt::get(Idx->getType(), 01817 getContext().getTypeSizeInChars(OIT).getQuantity()); 01818 01819 Idx = Builder.CreateMul(Idx, InterfaceSize); 01820 01821 // The base must be a pointer, which is not an aggregate. Emit it. 01822 llvm::Value *Base = EmitScalarExpr(E->getBase()); 01823 Address = EmitCastToVoidPtr(Base); 01824 Address = Builder.CreateGEP(Address, Idx, "arrayidx"); 01825 Address = Builder.CreateBitCast(Address, Base->getType()); 01826 } else if (const Expr *Array = isSimpleArrayDecayOperand(E->getBase())) { 01827 // If this is A[i] where A is an array, the frontend will have decayed the 01828 // base to be a ArrayToPointerDecay implicit cast. While correct, it is 01829 // inefficient at -O0 to emit a "gep A, 0, 0" when codegen'ing it, then a 01830 // "gep x, i" here. Emit one "gep A, 0, i". 01831 assert(Array->getType()->isArrayType() && 01832 "Array to pointer decay must have array source type!"); 01833 LValue ArrayLV = EmitLValue(Array); 01834 llvm::Value *ArrayPtr = ArrayLV.getAddress(); 01835 llvm::Value *Zero = llvm::ConstantInt::get(Int32Ty, 0); 01836 llvm::Value *Args[] = { Zero, Idx }; 01837 01838 // Propagate the alignment from the array itself to the result. 01839 ArrayAlignment = ArrayLV.getAlignment(); 01840 01841 if (getContext().getLangOpts().isSignedOverflowDefined()) 01842 Address = Builder.CreateGEP(ArrayPtr, Args, "arrayidx"); 01843 else 01844 Address = Builder.CreateInBoundsGEP(ArrayPtr, Args, "arrayidx"); 01845 } else { 01846 // The base must be a pointer, which is not an aggregate. Emit it. 01847 llvm::Value *Base = EmitScalarExpr(E->getBase()); 01848 if (getContext().getLangOpts().isSignedOverflowDefined()) 01849 Address = Builder.CreateGEP(Base, Idx, "arrayidx"); 01850 else 01851 Address = Builder.CreateInBoundsGEP(Base, Idx, "arrayidx"); 01852 } 01853 01854 QualType T = E->getBase()->getType()->getPointeeType(); 01855 assert(!T.isNull() && 01856 "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); 01857 01858 01859 // Limit the alignment to that of the result type. 01860 LValue LV; 01861 if (!ArrayAlignment.isZero()) { 01862 CharUnits Align = getContext().getTypeAlignInChars(T); 01863 ArrayAlignment = std::min(Align, ArrayAlignment); 01864 LV = MakeAddrLValue(Address, T, ArrayAlignment); 01865 } else { 01866 LV = MakeNaturalAlignAddrLValue(Address, T); 01867 } 01868 01869 LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace()); 01870 01871 if (getContext().getLangOpts().ObjC1 && 01872 getContext().getLangOpts().getGC() != LangOptions::NonGC) { 01873 LV.setNonGC(!E->isOBJCGCCandidate(getContext())); 01874 setObjCGCLValueClass(getContext(), E, LV); 01875 } 01876 return LV; 01877 } 01878 01879 static 01880 llvm::Constant *GenerateConstantVector(CGBuilderTy &Builder, 01881 SmallVector<unsigned, 4> &Elts) { 01882 SmallVector<llvm::Constant*, 4> CElts; 01883 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 01884 CElts.push_back(Builder.getInt32(Elts[i])); 01885 01886 return llvm::ConstantVector::get(CElts); 01887 } 01888 01889 LValue CodeGenFunction:: 01890 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 01891 // Emit the base vector as an l-value. 01892 LValue Base; 01893 01894 // ExtVectorElementExpr's base can either be a vector or pointer to vector. 01895 if (E->isArrow()) { 01896 // If it is a pointer to a vector, emit the address and form an lvalue with 01897 // it. 01898 llvm::Value *Ptr = EmitScalarExpr(E->getBase()); 01899 const PointerType *PT = E->getBase()->getType()->getAs<PointerType>(); 01900 Base = MakeAddrLValue(Ptr, PT->getPointeeType()); 01901 Base.getQuals().removeObjCGCAttr(); 01902 } else if (E->getBase()->isGLValue()) { 01903 // Otherwise, if the base is an lvalue ( as in the case of foo.x.x), 01904 // emit the base as an lvalue. 01905 assert(E->getBase()->getType()->isVectorType()); 01906 Base = EmitLValue(E->getBase()); 01907 } else { 01908 // Otherwise, the base is a normal rvalue (as in (V+V).x), emit it as such. 01909 assert(E->getBase()->getType()->isVectorType() && 01910 "Result must be a vector"); 01911 llvm::Value *Vec = EmitScalarExpr(E->getBase()); 01912 01913 // Store the vector to memory (because LValue wants an address). 01914 llvm::Value *VecMem = CreateMemTemp(E->getBase()->getType()); 01915 Builder.CreateStore(Vec, VecMem); 01916 Base = MakeAddrLValue(VecMem, E->getBase()->getType()); 01917 } 01918 01919 QualType type = 01920 E->getType().withCVRQualifiers(Base.getQuals().getCVRQualifiers()); 01921 01922 // Encode the element access list into a vector of unsigned indices. 01923 SmallVector<unsigned, 4> Indices; 01924 E->getEncodedElementAccess(Indices); 01925 01926 if (Base.isSimple()) { 01927 llvm::Constant *CV = GenerateConstantVector(Builder, Indices); 01928 return LValue::MakeExtVectorElt(Base.getAddress(), CV, type, 01929 Base.getAlignment()); 01930 } 01931 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 01932 01933 llvm::Constant *BaseElts = Base.getExtVectorElts(); 01934 SmallVector<llvm::Constant *, 4> CElts; 01935 01936 for (unsigned i = 0, e = Indices.size(); i != e; ++i) 01937 CElts.push_back(BaseElts->getAggregateElement(Indices[i])); 01938 llvm::Constant *CV = llvm::ConstantVector::get(CElts); 01939 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, type, 01940 Base.getAlignment()); 01941 } 01942 01943 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 01944 Expr *BaseExpr = E->getBase(); 01945 01946 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 01947 LValue BaseLV; 01948 if (E->isArrow()) 01949 BaseLV = MakeNaturalAlignAddrLValue(EmitScalarExpr(BaseExpr), 01950 BaseExpr->getType()->getPointeeType()); 01951 else 01952 BaseLV = EmitLValue(BaseExpr); 01953 01954 NamedDecl *ND = E->getMemberDecl(); 01955 if (FieldDecl *Field = dyn_cast<FieldDecl>(ND)) { 01956 LValue LV = EmitLValueForField(BaseLV, Field); 01957 setObjCGCLValueClass(getContext(), E, LV); 01958 return LV; 01959 } 01960 01961 if (VarDecl *VD = dyn_cast<VarDecl>(ND)) 01962 return EmitGlobalVarDeclLValue(*this, E, VD); 01963 01964 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) 01965 return EmitFunctionDeclLValue(*this, E, FD); 01966 01967 llvm_unreachable("Unhandled member declaration!"); 01968 } 01969 01970 LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value *BaseValue, 01971 const FieldDecl *Field, 01972 unsigned CVRQualifiers) { 01973 const CGRecordLayout &RL = 01974 CGM.getTypes().getCGRecordLayout(Field->getParent()); 01975 const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field); 01976 return LValue::MakeBitfield(BaseValue, Info, 01977 Field->getType().withCVRQualifiers(CVRQualifiers)); 01978 } 01979 01980 /// EmitLValueForAnonRecordField - Given that the field is a member of 01981 /// an anonymous struct or union buried inside a record, and given 01982 /// that the base value is a pointer to the enclosing record, derive 01983 /// an lvalue for the ultimate field. 01984 LValue CodeGenFunction::EmitLValueForAnonRecordField(llvm::Value *BaseValue, 01985 const IndirectFieldDecl *Field, 01986 unsigned CVRQualifiers) { 01987 IndirectFieldDecl::chain_iterator I = Field->chain_begin(), 01988 IEnd = Field->chain_end(); 01989 while (true) { 01990 QualType RecordTy = 01991 getContext().getTypeDeclType(cast<FieldDecl>(*I)->getParent()); 01992 LValue LV = EmitLValueForField(MakeAddrLValue(BaseValue, RecordTy), 01993 cast<FieldDecl>(*I)); 01994 if (++I == IEnd) return LV; 01995 01996 assert(LV.isSimple()); 01997 BaseValue = LV.getAddress(); 01998 CVRQualifiers |= LV.getVRQualifiers(); 01999 } 02000 } 02001 02002 LValue CodeGenFunction::EmitLValueForField(LValue base, 02003 const FieldDecl *field) { 02004 if (field->isBitField()) 02005 return EmitLValueForBitfield(base.getAddress(), field, 02006 base.getVRQualifiers()); 02007 02008 const RecordDecl *rec = field->getParent(); 02009 QualType type = field->getType(); 02010 CharUnits alignment = getContext().getDeclAlign(field); 02011 02012 // FIXME: It should be impossible to have an LValue without alignment for a 02013 // complete type. 02014 if (!base.getAlignment().isZero()) 02015 alignment = std::min(alignment, base.getAlignment()); 02016 02017 bool mayAlias = rec->hasAttr<MayAliasAttr>(); 02018 02019 llvm::Value *addr = base.getAddress(); 02020 unsigned cvr = base.getVRQualifiers(); 02021 if (rec->isUnion()) { 02022 // For unions, there is no pointer adjustment. 02023 assert(!type->isReferenceType() && "union has reference member"); 02024 } else { 02025 // For structs, we GEP to the field that the record layout suggests. 02026 unsigned idx = CGM.getTypes().getCGRecordLayout(rec).getLLVMFieldNo(field); 02027 addr = Builder.CreateStructGEP(addr, idx, field->getName()); 02028 02029 // If this is a reference field, load the reference right now. 02030 if (const ReferenceType *refType = type->getAs<ReferenceType>()) { 02031 llvm::LoadInst *load = Builder.CreateLoad(addr, "ref"); 02032 if (cvr & Qualifiers::Volatile) load->setVolatile(true); 02033 load->setAlignment(alignment.getQuantity()); 02034 02035 if (CGM.shouldUseTBAA()) { 02036 llvm::MDNode *tbaa; 02037 if (mayAlias) 02038 tbaa = CGM.getTBAAInfo(getContext().CharTy); 02039 else 02040 tbaa = CGM.getTBAAInfo(type); 02041 CGM.DecorateInstruction(load, tbaa); 02042 } 02043 02044 addr = load; 02045 mayAlias = false; 02046 type = refType->getPointeeType(); 02047 if (type->isIncompleteType()) 02048 alignment = CharUnits(); 02049 else 02050 alignment = getContext().getTypeAlignInChars(type); 02051 cvr = 0; // qualifiers don't recursively apply to referencee 02052 } 02053 } 02054 02055 // Make sure that the address is pointing to the right type. This is critical 02056 // for both unions and structs. A union needs a bitcast, a struct element 02057 // will need a bitcast if the LLVM type laid out doesn't match the desired 02058 // type. 02059 addr = EmitBitCastOfLValueToProperType(*this, addr, 02060 CGM.getTypes().ConvertTypeForMem(type), 02061 field->getName()); 02062 02063 if (field->hasAttr<AnnotateAttr>()) 02064 addr = EmitFieldAnnotations(field, addr); 02065 02066 LValue LV = MakeAddrLValue(addr, type, alignment); 02067 LV.getQuals().addCVRQualifiers(cvr); 02068 02069 // __weak attribute on a field is ignored. 02070 if (LV.getQuals().getObjCGCAttr() == Qualifiers::Weak) 02071 LV.getQuals().removeObjCGCAttr(); 02072 02073 // Fields of may_alias structs act like 'char' for TBAA purposes. 02074 // FIXME: this should get propagated down through anonymous structs 02075 // and unions. 02076 if (mayAlias && LV.getTBAAInfo()) 02077 LV.setTBAAInfo(CGM.getTBAAInfo(getContext().CharTy)); 02078 02079 return LV; 02080 } 02081 02082 LValue 02083 CodeGenFunction::EmitLValueForFieldInitialization(LValue Base, 02084 const FieldDecl *Field) { 02085 QualType FieldType = Field->getType(); 02086 02087 if (!FieldType->isReferenceType()) 02088 return EmitLValueForField(Base, Field); 02089 02090 const CGRecordLayout &RL = 02091 CGM.getTypes().getCGRecordLayout(Field->getParent()); 02092 unsigned idx = RL.getLLVMFieldNo(Field); 02093 llvm::Value *V = Builder.CreateStructGEP(Base.getAddress(), idx); 02094 assert(!FieldType.getObjCGCAttr() && "fields cannot have GC attrs"); 02095 02096 // Make sure that the address is pointing to the right type. This is critical 02097 // for both unions and structs. A union needs a bitcast, a struct element 02098 // will need a bitcast if the LLVM type laid out doesn't match the desired 02099 // type. 02100 llvm::Type *llvmType = ConvertTypeForMem(FieldType); 02101 V = EmitBitCastOfLValueToProperType(*this, V, llvmType, Field->getName()); 02102 02103 CharUnits Alignment = getContext().getDeclAlign(Field); 02104 02105 // FIXME: It should be impossible to have an LValue without alignment for a 02106 // complete type. 02107 if (!Base.getAlignment().isZero()) 02108 Alignment = std::min(Alignment, Base.getAlignment()); 02109 02110 return MakeAddrLValue(V, FieldType, Alignment); 02111 } 02112 02113 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr *E){ 02114 if (E->isFileScope()) { 02115 llvm::Value *GlobalPtr = CGM.GetAddrOfConstantCompoundLiteral(E); 02116 return MakeAddrLValue(GlobalPtr, E->getType()); 02117 } 02118 02119 llvm::Value *DeclPtr = CreateMemTemp(E->getType(), ".compoundliteral"); 02120 const Expr *InitExpr = E->getInitializer(); 02121 LValue Result = MakeAddrLValue(DeclPtr, E->getType()); 02122 02123 EmitAnyExprToMem(InitExpr, DeclPtr, E->getType().getQualifiers(), 02124 /*Init*/ true); 02125 02126 return Result; 02127 } 02128 02129 LValue CodeGenFunction::EmitInitListLValue(const InitListExpr *E) { 02130 if (!E->isGLValue()) 02131 // Initializing an aggregate temporary in C++11: T{...}. 02132 return EmitAggExprToLValue(E); 02133 02134 // An lvalue initializer list must be initializing a reference. 02135 assert(E->getNumInits() == 1 && "reference init with multiple values"); 02136 return EmitLValue(E->getInit(0)); 02137 } 02138 02139 LValue CodeGenFunction:: 02140 EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) { 02141 if (!expr->isGLValue()) { 02142 // ?: here should be an aggregate. 02143 assert((hasAggregateLLVMType(expr->getType()) && 02144 !expr->getType()->isAnyComplexType()) && 02145 "Unexpected conditional operator!"); 02146 return EmitAggExprToLValue(expr); 02147 } 02148 02149 OpaqueValueMapping binding(*this, expr); 02150 02151 const Expr *condExpr = expr->getCond(); 02152 bool CondExprBool; 02153 if (ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) { 02154 const Expr *live = expr->getTrueExpr(), *dead = expr->getFalseExpr(); 02155 if (!CondExprBool) std::swap(live, dead); 02156 02157 if (!ContainsLabel(dead)) 02158 return EmitLValue(live); 02159 } 02160 02161 llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true"); 02162 llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false"); 02163 llvm::BasicBlock *contBlock = createBasicBlock("cond.end"); 02164 02165 ConditionalEvaluation eval(*this); 02166 EmitBranchOnBoolExpr(condExpr, lhsBlock, rhsBlock); 02167 02168 // Any temporaries created here are conditional. 02169 EmitBlock(lhsBlock); 02170 eval.begin(*this); 02171 LValue lhs = EmitLValue(expr->getTrueExpr()); 02172 eval.end(*this); 02173 02174 if (!lhs.isSimple()) 02175 return EmitUnsupportedLValue(expr, "conditional operator"); 02176 02177 lhsBlock = Builder.GetInsertBlock(); 02178 Builder.CreateBr(contBlock); 02179 02180 // Any temporaries created here are conditional. 02181 EmitBlock(rhsBlock); 02182 eval.begin(*this); 02183 LValue rhs = EmitLValue(expr->getFalseExpr()); 02184 eval.end(*this); 02185 if (!rhs.isSimple()) 02186 return EmitUnsupportedLValue(expr, "conditional operator"); 02187 rhsBlock = Builder.GetInsertBlock(); 02188 02189 EmitBlock(contBlock); 02190 02191 llvm::PHINode *phi = Builder.CreatePHI(lhs.getAddress()->getType(), 2, 02192 "cond-lvalue"); 02193 phi->addIncoming(lhs.getAddress(), lhsBlock); 02194 phi->addIncoming(rhs.getAddress(), rhsBlock); 02195 return MakeAddrLValue(phi, expr->getType()); 02196 } 02197 02198 /// EmitCastLValue - Casts are never lvalues unless that cast is to a reference 02199 /// type. If the cast is to a reference, we can have the usual lvalue result, 02200 /// otherwise if a cast is needed by the code generator in an lvalue context, 02201 /// then it must mean that we need the address of an aggregate in order to 02202 /// access one of its members. This can happen for all the reasons that casts 02203 /// are permitted with aggregate result, including noop aggregate casts, and 02204 /// cast from scalar to union. 02205 LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { 02206 switch (E->getCastKind()) { 02207 case CK_ToVoid: 02208 return EmitUnsupportedLValue(E, "unexpected cast lvalue"); 02209 02210 case CK_Dependent: 02211 llvm_unreachable("dependent cast kind in IR gen!"); 02212 02213 // These two casts are currently treated as no-ops, although they could 02214 // potentially be real operations depending on the target's ABI. 02215 case CK_NonAtomicToAtomic: 02216 case CK_AtomicToNonAtomic: 02217 02218 case CK_NoOp: 02219 case CK_LValueToRValue: 02220 if (!E->getSubExpr()->Classify(getContext()).isPRValue() 02221 || E->getType()->isRecordType()) 02222 return EmitLValue(E->getSubExpr()); 02223 // Fall through to synthesize a temporary. 02224 02225 case CK_BitCast: 02226 case CK_ArrayToPointerDecay: 02227 case CK_FunctionToPointerDecay: 02228 case CK_NullToMemberPointer: 02229 case CK_NullToPointer: 02230 case CK_IntegralToPointer: 02231 case CK_PointerToIntegral: 02232 case CK_PointerToBoolean: 02233 case CK_VectorSplat: 02234 case CK_IntegralCast: 02235 case CK_IntegralToBoolean: 02236 case CK_IntegralToFloating: 02237 case CK_FloatingToIntegral: 02238 case CK_FloatingToBoolean: 02239 case CK_FloatingCast: 02240 case CK_FloatingRealToComplex: 02241 case CK_FloatingComplexToReal: 02242 case CK_FloatingComplexToBoolean: 02243 case CK_FloatingComplexCast: 02244 case CK_FloatingComplexToIntegralComplex: 02245 case CK_IntegralRealToComplex: 02246 case CK_IntegralComplexToReal: 02247 case CK_IntegralComplexToBoolean: 02248 case CK_IntegralComplexCast: 02249 case CK_IntegralComplexToFloatingComplex: 02250 case CK_DerivedToBaseMemberPointer: 02251 case CK_BaseToDerivedMemberPointer: 02252 case CK_MemberPointerToBoolean: 02253 case CK_ReinterpretMemberPointer: 02254 case CK_AnyPointerToBlockPointerCast: 02255 case CK_ARCProduceObject: 02256 case CK_ARCConsumeObject: 02257 case CK_ARCReclaimReturnedObject: 02258 case CK_ARCExtendBlockObject: 02259 case CK_CopyAndAutoreleaseBlockObject: { 02260 // These casts only produce lvalues when we're binding a reference to a 02261 // temporary realized from a (converted) pure rvalue. Emit the expression 02262 // as a value, copy it into a temporary, and return an lvalue referring to 02263 // that temporary. 02264 llvm::Value *V = CreateMemTemp(E->getType(), "ref.temp"); 02265 EmitAnyExprToMem(E, V, E->getType().getQualifiers(), false); 02266 return MakeAddrLValue(V, E->getType()); 02267 } 02268 02269 case CK_Dynamic: { 02270 LValue LV = EmitLValue(E->getSubExpr()); 02271 llvm::Value *V = LV.getAddress(); 02272 const CXXDynamicCastExpr *DCE = cast<CXXDynamicCastExpr>(E); 02273 return MakeAddrLValue(EmitDynamicCast(V, DCE), E->getType()); 02274 } 02275 02276 case CK_ConstructorConversion: 02277 case CK_UserDefinedConversion: 02278 case CK_CPointerToObjCPointerCast: 02279 case CK_BlockPointerToObjCPointerCast: 02280 return EmitLValue(E->getSubExpr()); 02281 02282 case CK_UncheckedDerivedToBase: 02283 case CK_DerivedToBase: { 02284 const RecordType *DerivedClassTy = 02285 E->getSubExpr()->getType()->getAs<RecordType>(); 02286 CXXRecordDecl *DerivedClassDecl = 02287 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 02288 02289 LValue LV = EmitLValue(E->getSubExpr()); 02290 llvm::Value *This = LV.getAddress(); 02291 02292 // Perform the derived-to-base conversion 02293 llvm::Value *Base = 02294 GetAddressOfBaseClass(This, DerivedClassDecl, 02295 E->path_begin(), E->path_end(), 02296 /*NullCheckValue=*/false); 02297 02298 return MakeAddrLValue(Base, E->getType()); 02299 } 02300 case CK_ToUnion: 02301 return EmitAggExprToLValue(E); 02302 case CK_BaseToDerived: { 02303 const RecordType *DerivedClassTy = E->getType()->getAs<RecordType>(); 02304 CXXRecordDecl *DerivedClassDecl = 02305 cast<CXXRecordDecl>(DerivedClassTy->getDecl()); 02306 02307 LValue LV = EmitLValue(E->getSubExpr()); 02308 02309 // Perform the base-to-derived conversion 02310 llvm::Value *Derived = 02311 GetAddressOfDerivedClass(LV.getAddress(), DerivedClassDecl, 02312 E->path_begin(), E->path_end(), 02313 /*NullCheckValue=*/false); 02314 02315 return MakeAddrLValue(Derived, E->getType()); 02316 } 02317 case CK_LValueBitCast: { 02318 // This must be a reinterpret_cast (or c-style equivalent). 02319 const ExplicitCastExpr *CE = cast<ExplicitCastExpr>(E); 02320 02321 LValue LV = EmitLValue(E->getSubExpr()); 02322 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 02323 ConvertType(CE->getTypeAsWritten())); 02324 return MakeAddrLValue(V, E->getType()); 02325 } 02326 case CK_ObjCObjectLValueCast: { 02327 LValue LV = EmitLValue(E->getSubExpr()); 02328 QualType ToType = getContext().getLValueReferenceType(E->getType()); 02329 llvm::Value *V = Builder.CreateBitCast(LV.getAddress(), 02330 ConvertType(ToType)); 02331 return MakeAddrLValue(V, E->getType()); 02332 } 02333 } 02334 02335 llvm_unreachable("Unhandled lvalue cast kind?"); 02336 } 02337 02338 LValue CodeGenFunction::EmitNullInitializationLValue( 02339 const CXXScalarValueInitExpr *E) { 02340 QualType Ty = E->getType(); 02341 LValue LV = MakeAddrLValue(CreateMemTemp(Ty), Ty); 02342 EmitNullInitialization(LV.getAddress(), Ty); 02343 return LV; 02344 } 02345 02346 LValue CodeGenFunction::EmitOpaqueValueLValue(const OpaqueValueExpr *e) { 02347 assert(OpaqueValueMappingData::shouldBindAsLValue(e)); 02348 return getOpaqueLValueMapping(e); 02349 } 02350 02351 LValue CodeGenFunction::EmitMaterializeTemporaryExpr( 02352 const MaterializeTemporaryExpr *E) { 02353 RValue RV = EmitReferenceBindingToExpr(E, /*InitializedDecl=*/0); 02354 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 02355 } 02356 02357 RValue CodeGenFunction::EmitRValueForField(LValue LV, 02358 const FieldDecl *FD) { 02359 QualType FT = FD->getType(); 02360 LValue FieldLV = EmitLValueForField(LV, FD); 02361 if (FT->isAnyComplexType()) 02362 return RValue::getComplex( 02363 LoadComplexFromAddr(FieldLV.getAddress(), 02364 FieldLV.isVolatileQualified())); 02365 else if (CodeGenFunction::hasAggregateLLVMType(FT)) 02366 return FieldLV.asAggregateRValue(); 02367 02368 return EmitLoadOfLValue(FieldLV); 02369 } 02370 02371 //===--------------------------------------------------------------------===// 02372 // Expression Emission 02373 //===--------------------------------------------------------------------===// 02374 02375 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E, 02376 ReturnValueSlot ReturnValue) { 02377 if (CGDebugInfo *DI = getDebugInfo()) 02378 DI->EmitLocation(Builder, E->getLocStart()); 02379 02380 // Builtins never have block type. 02381 if (E->getCallee()->getType()->isBlockPointerType()) 02382 return EmitBlockCallExpr(E, ReturnValue); 02383 02384 if (const CXXMemberCallExpr *CE = dyn_cast<CXXMemberCallExpr>(E)) 02385 return EmitCXXMemberCallExpr(CE, ReturnValue); 02386 02387 if (const CUDAKernelCallExpr *CE = dyn_cast<CUDAKernelCallExpr>(E)) 02388 return EmitCUDAKernelCallExpr(CE, ReturnValue); 02389 02390 const Decl *TargetDecl = E->getCalleeDecl(); 02391 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(TargetDecl)) { 02392 if (unsigned builtinID = FD->getBuiltinID()) 02393 return EmitBuiltinExpr(FD, builtinID, E); 02394 } 02395 02396 if (const CXXOperatorCallExpr *CE = dyn_cast<CXXOperatorCallExpr>(E)) 02397 if (const CXXMethodDecl *MD = dyn_cast_or_null<CXXMethodDecl>(TargetDecl)) 02398 return EmitCXXOperatorMemberCallExpr(CE, MD, ReturnValue); 02399 02400 if (const CXXPseudoDestructorExpr *PseudoDtor 02401 = dyn_cast<CXXPseudoDestructorExpr>(E->getCallee()->IgnoreParens())) { 02402 QualType DestroyedType = PseudoDtor->getDestroyedType(); 02403 if (getContext().getLangOpts().ObjCAutoRefCount && 02404 DestroyedType->isObjCLifetimeType() && 02405 (DestroyedType.getObjCLifetime() == Qualifiers::OCL_Strong || 02406 DestroyedType.getObjCLifetime() == Qualifiers::OCL_Weak)) { 02407 // Automatic Reference Counting: 02408 // If the pseudo-expression names a retainable object with weak or 02409 // strong lifetime, the object shall be released. 02410 Expr *BaseExpr = PseudoDtor->getBase(); 02411 llvm::Value *BaseValue = NULL; 02412 Qualifiers BaseQuals; 02413 02414 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 02415 if (PseudoDtor->isArrow()) { 02416 BaseValue = EmitScalarExpr(BaseExpr); 02417 const PointerType *PTy = BaseExpr->getType()->getAs<PointerType>(); 02418 BaseQuals = PTy->getPointeeType().getQualifiers(); 02419 } else { 02420 LValue BaseLV = EmitLValue(BaseExpr); 02421 BaseValue = BaseLV.getAddress(); 02422 QualType BaseTy = BaseExpr->getType(); 02423 BaseQuals = BaseTy.getQualifiers(); 02424 } 02425 02426 switch (PseudoDtor->getDestroyedType().getObjCLifetime()) { 02427 case Qualifiers::OCL_None: 02428 case Qualifiers::OCL_ExplicitNone: 02429 case Qualifiers::OCL_Autoreleasing: 02430 break; 02431 02432 case Qualifiers::OCL_Strong: 02433 EmitARCRelease(Builder.CreateLoad(BaseValue, 02434 PseudoDtor->getDestroyedType().isVolatileQualified()), 02435 /*precise*/ true); 02436 break; 02437 02438 case Qualifiers::OCL_Weak: 02439 EmitARCDestroyWeak(BaseValue); 02440 break; 02441 } 02442 } else { 02443 // C++ [expr.pseudo]p1: 02444 // The result shall only be used as the operand for the function call 02445 // operator (), and the result of such a call has type void. The only 02446 // effect is the evaluation of the postfix-expression before the dot or 02447 // arrow. 02448 EmitScalarExpr(E->getCallee()); 02449 } 02450 02451 return RValue::get(0); 02452 } 02453 02454 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 02455 return EmitCall(E->getCallee()->getType(), Callee, ReturnValue, 02456 E->arg_begin(), E->arg_end(), TargetDecl); 02457 } 02458 02459 LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { 02460 // Comma expressions just emit their LHS then their RHS as an l-value. 02461 if (E->getOpcode() == BO_Comma) { 02462 EmitIgnoredExpr(E->getLHS()); 02463 EnsureInsertPoint(); 02464 return EmitLValue(E->getRHS()); 02465 } 02466 02467 if (E->getOpcode() == BO_PtrMemD || 02468 E->getOpcode() == BO_PtrMemI) 02469 return EmitPointerToDataMemberBinaryExpr(E); 02470 02471 assert(E->getOpcode() == BO_Assign && "unexpected binary l-value"); 02472 02473 // Note that in all of these cases, __block variables need the RHS 02474 // evaluated first just in case the variable gets moved by the RHS. 02475 02476 if (!hasAggregateLLVMType(E->getType())) { 02477 switch (E->getLHS()->getType().getObjCLifetime()) { 02478 case Qualifiers::OCL_Strong: 02479 return EmitARCStoreStrong(E, /*ignored*/ false).first; 02480 02481 case Qualifiers::OCL_Autoreleasing: 02482 return EmitARCStoreAutoreleasing(E).first; 02483 02484 // No reason to do any of these differently. 02485 case Qualifiers::OCL_None: 02486 case Qualifiers::OCL_ExplicitNone: 02487 case Qualifiers::OCL_Weak: 02488 break; 02489 } 02490 02491 RValue RV = EmitAnyExpr(E->getRHS()); 02492 LValue LV = EmitLValue(E->getLHS()); 02493 EmitStoreThroughLValue(RV, LV); 02494 return LV; 02495 } 02496 02497 if (E->getType()->isAnyComplexType()) 02498 return EmitComplexAssignmentLValue(E); 02499 02500 return EmitAggExprToLValue(E); 02501 } 02502 02503 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 02504 RValue RV = EmitCallExpr(E); 02505 02506 if (!RV.isScalar()) 02507 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 02508 02509 assert(E->getCallReturnType()->isReferenceType() && 02510 "Can't have a scalar return unless the return type is a " 02511 "reference type!"); 02512 02513 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 02514 } 02515 02516 LValue CodeGenFunction::EmitVAArgExprLValue(const VAArgExpr *E) { 02517 // FIXME: This shouldn't require another copy. 02518 return EmitAggExprToLValue(E); 02519 } 02520 02521 LValue CodeGenFunction::EmitCXXConstructLValue(const CXXConstructExpr *E) { 02522 assert(E->getType()->getAsCXXRecordDecl()->hasTrivialDestructor() 02523 && "binding l-value to type which needs a temporary"); 02524 AggValueSlot Slot = CreateAggTemp(E->getType()); 02525 EmitCXXConstructExpr(E, Slot); 02526 return MakeAddrLValue(Slot.getAddr(), E->getType()); 02527 } 02528 02529 LValue 02530 CodeGenFunction::EmitCXXTypeidLValue(const CXXTypeidExpr *E) { 02531 return MakeAddrLValue(EmitCXXTypeidExpr(E), E->getType()); 02532 } 02533 02534 LValue 02535 CodeGenFunction::EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E) { 02536 AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue"); 02537 Slot.setExternallyDestructed(); 02538 EmitAggExpr(E->getSubExpr(), Slot); 02539 EmitCXXTemporary(E->getTemporary(), E->getType(), Slot.getAddr()); 02540 return MakeAddrLValue(Slot.getAddr(), E->getType()); 02541 } 02542 02543 LValue 02544 CodeGenFunction::EmitLambdaLValue(const LambdaExpr *E) { 02545 AggValueSlot Slot = CreateAggTemp(E->getType(), "temp.lvalue"); 02546 EmitLambdaExpr(E, Slot); 02547 return MakeAddrLValue(Slot.getAddr(), E->getType()); 02548 } 02549 02550 LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { 02551 RValue RV = EmitObjCMessageExpr(E); 02552 02553 if (!RV.isScalar()) 02554 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 02555 02556 assert(E->getMethodDecl()->getResultType()->isReferenceType() && 02557 "Can't have a scalar return unless the return type is a " 02558 "reference type!"); 02559 02560 return MakeAddrLValue(RV.getScalarVal(), E->getType()); 02561 } 02562 02563 LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) { 02564 llvm::Value *V = 02565 CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true); 02566 return MakeAddrLValue(V, E->getType()); 02567 } 02568 02569 llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, 02570 const ObjCIvarDecl *Ivar) { 02571 return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); 02572 } 02573 02574 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy, 02575 llvm::Value *BaseValue, 02576 const ObjCIvarDecl *Ivar, 02577 unsigned CVRQualifiers) { 02578 return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue, 02579 Ivar, CVRQualifiers); 02580 } 02581 02582 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 02583 // FIXME: A lot of the code below could be shared with EmitMemberExpr. 02584 llvm::Value *BaseValue = 0; 02585 const Expr *BaseExpr = E->getBase(); 02586 Qualifiers BaseQuals; 02587 QualType ObjectTy; 02588 if (E->isArrow()) { 02589 BaseValue = EmitScalarExpr(BaseExpr); 02590 ObjectTy = BaseExpr->getType()->getPointeeType(); 02591 BaseQuals = ObjectTy.getQualifiers(); 02592 } else { 02593 LValue BaseLV = EmitLValue(BaseExpr); 02594 // FIXME: this isn't right for bitfields. 02595 BaseValue = BaseLV.getAddress(); 02596 ObjectTy = BaseExpr->getType(); 02597 BaseQuals = ObjectTy.getQualifiers(); 02598 } 02599 02600 LValue LV = 02601 EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 02602 BaseQuals.getCVRQualifiers()); 02603 setObjCGCLValueClass(getContext(), E, LV); 02604 return LV; 02605 } 02606 02607 LValue CodeGenFunction::EmitStmtExprLValue(const StmtExpr *E) { 02608 // Can only get l-value for message expression returning aggregate type 02609 RValue RV = EmitAnyExprToTemp(E); 02610 return MakeAddrLValue(RV.getAggregateAddr(), E->getType()); 02611 } 02612 02613 RValue CodeGenFunction::EmitCall(QualType CalleeType, llvm::Value *Callee, 02614 ReturnValueSlot ReturnValue, 02615 CallExpr::const_arg_iterator ArgBeg, 02616 CallExpr::const_arg_iterator ArgEnd, 02617 const Decl *TargetDecl) { 02618 // Get the actual function type. The callee type will always be a pointer to 02619 // function type or a block pointer type. 02620 assert(CalleeType->isFunctionPointerType() && 02621 "Call must have function pointer type!"); 02622 02623 CalleeType = getContext().getCanonicalType(CalleeType); 02624 02625 const FunctionType *FnType 02626 = cast<FunctionType>(cast<PointerType>(CalleeType)->getPointeeType()); 02627 02628 CallArgList Args; 02629 EmitCallArgs(Args, dyn_cast<FunctionProtoType>(FnType), ArgBeg, ArgEnd); 02630 02631 const CGFunctionInfo &FnInfo = 02632 CGM.getTypes().arrangeFunctionCall(Args, FnType); 02633 02634 // C99 6.5.2.2p6: 02635 // If the expression that denotes the called function has a type 02636 // that does not include a prototype, [the default argument 02637 // promotions are performed]. If the number of arguments does not 02638 // equal the number of parameters, the behavior is undefined. If 02639 // the function is defined with a type that includes a prototype, 02640 // and either the prototype ends with an ellipsis (, ...) or the 02641 // types of the arguments after promotion are not compatible with 02642 // the types of the parameters, the behavior is undefined. If the 02643 // function is defined with a type that does not include a 02644 // prototype, and the types of the arguments after promotion are 02645 // not compatible with those of the parameters after promotion, 02646 // the behavior is undefined [except in some trivial cases]. 02647 // That is, in the general case, we should assume that a call 02648 // through an unprototyped function type works like a *non-variadic* 02649 // call. The way we make this work is to cast to the exact type 02650 // of the promoted arguments. 02651 if (isa<FunctionNoProtoType>(FnType) && !FnInfo.isVariadic()) { 02652 llvm::Type *CalleeTy = getTypes().GetFunctionType(FnInfo); 02653 CalleeTy = CalleeTy->getPointerTo(); 02654 Callee = Builder.CreateBitCast(Callee, CalleeTy, "callee.knr.cast"); 02655 } 02656 02657 return EmitCall(FnInfo, Callee, ReturnValue, Args, TargetDecl); 02658 } 02659 02660 LValue CodeGenFunction:: 02661 EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E) { 02662 llvm::Value *BaseV; 02663 if (E->getOpcode() == BO_PtrMemI) 02664 BaseV = EmitScalarExpr(E->getLHS()); 02665 else 02666 BaseV = EmitLValue(E->getLHS()).getAddress(); 02667 02668 llvm::Value *OffsetV = EmitScalarExpr(E->getRHS()); 02669 02670 const MemberPointerType *MPT 02671 = E->getRHS()->getType()->getAs<MemberPointerType>(); 02672 02673 llvm::Value *AddV = 02674 CGM.getCXXABI().EmitMemberDataPointerAddress(*this, BaseV, OffsetV, MPT); 02675 02676 return MakeAddrLValue(AddV, MPT->getPointeeType()); 02677 } 02678 02679 static void 02680 EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, llvm::Value *Dest, 02681 llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2, 02682 uint64_t Size, unsigned Align, llvm::AtomicOrdering Order) { 02683 llvm::AtomicRMWInst::BinOp Op = llvm::AtomicRMWInst::Add; 02684 llvm::Instruction::BinaryOps PostOp = (llvm::Instruction::BinaryOps)0; 02685 02686 switch (E->getOp()) { 02687 case AtomicExpr::AO__c11_atomic_init: 02688 llvm_unreachable("Already handled!"); 02689 02690 case AtomicExpr::AO__c11_atomic_compare_exchange_strong: 02691 case AtomicExpr::AO__c11_atomic_compare_exchange_weak: 02692 case AtomicExpr::AO__atomic_compare_exchange: 02693 case AtomicExpr::AO__atomic_compare_exchange_n: { 02694 // Note that cmpxchg only supports specifying one ordering and 02695 // doesn't support weak cmpxchg, at least at the moment. 02696 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 02697 LoadVal1->setAlignment(Align); 02698 llvm::LoadInst *LoadVal2 = CGF.Builder.CreateLoad(Val2); 02699 LoadVal2->setAlignment(Align); 02700 llvm::AtomicCmpXchgInst *CXI = 02701 CGF.Builder.CreateAtomicCmpXchg(Ptr, LoadVal1, LoadVal2, Order); 02702 CXI->setVolatile(E->isVolatile()); 02703 llvm::StoreInst *StoreVal1 = CGF.Builder.CreateStore(CXI, Val1); 02704 StoreVal1->setAlignment(Align); 02705 llvm::Value *Cmp = CGF.Builder.CreateICmpEQ(CXI, LoadVal1); 02706 CGF.EmitStoreOfScalar(Cmp, CGF.MakeAddrLValue(Dest, E->getType())); 02707 return; 02708 } 02709 02710 case AtomicExpr::AO__c11_atomic_load: 02711 case AtomicExpr::AO__atomic_load_n: 02712 case AtomicExpr::AO__atomic_load: { 02713 llvm::LoadInst *Load = CGF.Builder.CreateLoad(Ptr); 02714 Load->setAtomic(Order); 02715 Load->setAlignment(Size); 02716 Load->setVolatile(E->isVolatile()); 02717 llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(Load, Dest); 02718 StoreDest->setAlignment(Align); 02719 return; 02720 } 02721 02722 case AtomicExpr::AO__c11_atomic_store: 02723 case AtomicExpr::AO__atomic_store: 02724 case AtomicExpr::AO__atomic_store_n: { 02725 assert(!Dest && "Store does not return a value"); 02726 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 02727 LoadVal1->setAlignment(Align); 02728 llvm::StoreInst *Store = CGF.Builder.CreateStore(LoadVal1, Ptr); 02729 Store->setAtomic(Order); 02730 Store->setAlignment(Size); 02731 Store->setVolatile(E->isVolatile()); 02732 return; 02733 } 02734 02735 case AtomicExpr::AO__c11_atomic_exchange: 02736 case AtomicExpr::AO__atomic_exchange_n: 02737 case AtomicExpr::AO__atomic_exchange: 02738 Op = llvm::AtomicRMWInst::Xchg; 02739 break; 02740 02741 case AtomicExpr::AO__atomic_add_fetch: 02742 PostOp = llvm::Instruction::Add; 02743 // Fall through. 02744 case AtomicExpr::AO__c11_atomic_fetch_add: 02745 case AtomicExpr::AO__atomic_fetch_add: 02746 Op = llvm::AtomicRMWInst::Add; 02747 break; 02748 02749 case AtomicExpr::AO__atomic_sub_fetch: 02750 PostOp = llvm::Instruction::Sub; 02751 // Fall through. 02752 case AtomicExpr::AO__c11_atomic_fetch_sub: 02753 case AtomicExpr::AO__atomic_fetch_sub: 02754 Op = llvm::AtomicRMWInst::Sub; 02755 break; 02756 02757 case AtomicExpr::AO__atomic_and_fetch: 02758 PostOp = llvm::Instruction::And; 02759 // Fall through. 02760 case AtomicExpr::AO__c11_atomic_fetch_and: 02761 case AtomicExpr::AO__atomic_fetch_and: 02762 Op = llvm::AtomicRMWInst::And; 02763 break; 02764 02765 case AtomicExpr::AO__atomic_or_fetch: 02766 PostOp = llvm::Instruction::Or; 02767 // Fall through. 02768 case AtomicExpr::AO__c11_atomic_fetch_or: 02769 case AtomicExpr::AO__atomic_fetch_or: 02770 Op = llvm::AtomicRMWInst::Or; 02771 break; 02772 02773 case AtomicExpr::AO__atomic_xor_fetch: 02774 PostOp = llvm::Instruction::Xor; 02775 // Fall through. 02776 case AtomicExpr::AO__c11_atomic_fetch_xor: 02777 case AtomicExpr::AO__atomic_fetch_xor: 02778 Op = llvm::AtomicRMWInst::Xor; 02779 break; 02780 02781 case AtomicExpr::AO__atomic_nand_fetch: 02782 PostOp = llvm::Instruction::And; 02783 // Fall through. 02784 case AtomicExpr::AO__atomic_fetch_nand: 02785 Op = llvm::AtomicRMWInst::Nand; 02786 break; 02787 } 02788 02789 llvm::LoadInst *LoadVal1 = CGF.Builder.CreateLoad(Val1); 02790 LoadVal1->setAlignment(Align); 02791 llvm::AtomicRMWInst *RMWI = 02792 CGF.Builder.CreateAtomicRMW(Op, Ptr, LoadVal1, Order); 02793 RMWI->setVolatile(E->isVolatile()); 02794 02795 // For __atomic_*_fetch operations, perform the operation again to 02796 // determine the value which was written. 02797 llvm::Value *Result = RMWI; 02798 if (PostOp) 02799 Result = CGF.Builder.CreateBinOp(PostOp, RMWI, LoadVal1); 02800 if (E->getOp() == AtomicExpr::AO__atomic_nand_fetch) 02801 Result = CGF.Builder.CreateNot(Result); 02802 llvm::StoreInst *StoreDest = CGF.Builder.CreateStore(Result, Dest); 02803 StoreDest->setAlignment(Align); 02804 } 02805 02806 // This function emits any expression (scalar, complex, or aggregate) 02807 // into a temporary alloca. 02808 static llvm::Value * 02809 EmitValToTemp(CodeGenFunction &CGF, Expr *E) { 02810 llvm::Value *DeclPtr = CGF.CreateMemTemp(E->getType(), ".atomictmp"); 02811 CGF.EmitAnyExprToMem(E, DeclPtr, E->getType().getQualifiers(), 02812 /*Init*/ true); 02813 return DeclPtr; 02814 } 02815 02816 static RValue ConvertTempToRValue(CodeGenFunction &CGF, QualType Ty, 02817 llvm::Value *Dest) { 02818 if (Ty->isAnyComplexType()) 02819 return RValue::getComplex(CGF.LoadComplexFromAddr(Dest, false)); 02820 if (CGF.hasAggregateLLVMType(Ty)) 02821 return RValue::getAggregate(Dest); 02822 return RValue::get(CGF.EmitLoadOfScalar(CGF.MakeAddrLValue(Dest, Ty))); 02823 } 02824 02825 RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E, llvm::Value *Dest) { 02826 QualType AtomicTy = E->getPtr()->getType()->getPointeeType(); 02827 QualType MemTy = AtomicTy; 02828 if (const AtomicType *AT = AtomicTy->getAs<AtomicType>()) 02829 MemTy = AT->getValueType(); 02830 CharUnits sizeChars = getContext().getTypeSizeInChars(AtomicTy); 02831 uint64_t Size = sizeChars.getQuantity(); 02832 CharUnits alignChars = getContext().getTypeAlignInChars(AtomicTy); 02833 unsigned Align = alignChars.getQuantity(); 02834 unsigned MaxInlineWidth = 02835 getContext().getTargetInfo().getMaxAtomicInlineWidth(); 02836 bool UseLibcall = (Size != Align || Size > MaxInlineWidth); 02837 02838 02839 02840 llvm::Value *Ptr, *Order, *OrderFail = 0, *Val1 = 0, *Val2 = 0; 02841 Ptr = EmitScalarExpr(E->getPtr()); 02842 02843 if (E->getOp() == AtomicExpr::AO__c11_atomic_init) { 02844 assert(!Dest && "Init does not return a value"); 02845 if (!hasAggregateLLVMType(E->getVal1()->getType())) { 02846 QualType PointeeType 02847 = E->getPtr()->getType()->getAs<PointerType>()->getPointeeType(); 02848 EmitScalarInit(EmitScalarExpr(E->getVal1()), 02849 LValue::MakeAddr(Ptr, PointeeType, alignChars, 02850 getContext())); 02851 } else if (E->getType()->isAnyComplexType()) { 02852 EmitComplexExprIntoAddr(E->getVal1(), Ptr, E->isVolatile()); 02853 } else { 02854 AggValueSlot Slot = AggValueSlot::forAddr(Ptr, alignChars, 02855 AtomicTy.getQualifiers(), 02856 AggValueSlot::IsNotDestructed, 02857 AggValueSlot::DoesNotNeedGCBarriers, 02858 AggValueSlot::IsNotAliased); 02859 EmitAggExpr(E->getVal1(), Slot); 02860 } 02861 return RValue::get(0); 02862 } 02863 02864 Order = EmitScalarExpr(E->getOrder()); 02865 02866 switch (E->getOp()) { 02867 case AtomicExpr::AO__c11_atomic_init: 02868 llvm_unreachable("Already handled!"); 02869 02870 case AtomicExpr::AO__c11_atomic_load: 02871 case AtomicExpr::AO__atomic_load_n: 02872 break; 02873 02874 case AtomicExpr::AO__atomic_load: 02875 Dest = EmitScalarExpr(E->getVal1()); 02876 break; 02877 02878 case AtomicExpr::AO__atomic_store: 02879 Val1 = EmitScalarExpr(E->getVal1()); 02880 break; 02881 02882 case AtomicExpr::AO__atomic_exchange: 02883 Val1 = EmitScalarExpr(E->getVal1()); 02884 Dest = EmitScalarExpr(E->getVal2()); 02885 break; 02886 02887 case AtomicExpr::AO__c11_atomic_compare_exchange_strong: 02888 case AtomicExpr::AO__c11_atomic_compare_exchange_weak: 02889 case AtomicExpr::AO__atomic_compare_exchange_n: 02890 case AtomicExpr::AO__atomic_compare_exchange: 02891 Val1 = EmitScalarExpr(E->getVal1()); 02892 if (E->getOp() == AtomicExpr::AO__atomic_compare_exchange) 02893 Val2 = EmitScalarExpr(E->getVal2()); 02894 else 02895 Val2 = EmitValToTemp(*this, E->getVal2()); 02896 OrderFail = EmitScalarExpr(E->getOrderFail()); 02897 // Evaluate and discard the 'weak' argument. 02898 if (E->getNumSubExprs() == 6) 02899 EmitScalarExpr(E->getWeak()); 02900 break; 02901 02902 case AtomicExpr::AO__c11_atomic_fetch_add: 02903 case AtomicExpr::AO__c11_atomic_fetch_sub: 02904 if (MemTy->isPointerType()) { 02905 // For pointer arithmetic, we're required to do a bit of math: 02906 // adding 1 to an int* is not the same as adding 1 to a uintptr_t. 02907 // ... but only for the C11 builtins. The GNU builtins expect the 02908 // user to multiply by sizeof(T). 02909 QualType Val1Ty = E->getVal1()->getType(); 02910 llvm::Value *Val1Scalar = EmitScalarExpr(E->getVal1()); 02911 CharUnits PointeeIncAmt = 02912 getContext().getTypeSizeInChars(MemTy->getPointeeType()); 02913 Val1Scalar = Builder.CreateMul(Val1Scalar, CGM.getSize(PointeeIncAmt)); 02914 Val1 = CreateMemTemp(Val1Ty, ".atomictmp"); 02915 EmitStoreOfScalar(Val1Scalar, MakeAddrLValue(Val1, Val1Ty)); 02916 break; 02917 } 02918 // Fall through. 02919 case AtomicExpr::AO__atomic_fetch_add: 02920 case AtomicExpr::AO__atomic_fetch_sub: 02921 case AtomicExpr::AO__atomic_add_fetch: 02922 case AtomicExpr::AO__atomic_sub_fetch: 02923 case AtomicExpr::AO__c11_atomic_store: 02924 case AtomicExpr::AO__c11_atomic_exchange: 02925 case AtomicExpr::AO__atomic_store_n: 02926 case AtomicExpr::AO__atomic_exchange_n: 02927 case AtomicExpr::AO__c11_atomic_fetch_and: 02928 case AtomicExpr::AO__c11_atomic_fetch_or: 02929 case AtomicExpr::AO__c11_atomic_fetch_xor: 02930 case AtomicExpr::AO__atomic_fetch_and: 02931 case AtomicExpr::AO__atomic_fetch_or: 02932 case AtomicExpr::AO__atomic_fetch_xor: 02933 case AtomicExpr::AO__atomic_fetch_nand: 02934 case AtomicExpr::AO__atomic_and_fetch: 02935 case AtomicExpr::AO__atomic_or_fetch: 02936 case AtomicExpr::AO__atomic_xor_fetch: 02937 case AtomicExpr::AO__atomic_nand_fetch: 02938 Val1 = EmitValToTemp(*this, E->getVal1()); 02939 break; 02940 } 02941 02942 if (!E->getType()->isVoidType() && !Dest) 02943 Dest = CreateMemTemp(E->getType(), ".atomicdst"); 02944 02945 // Use a library call. See: http://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary . 02946 if (UseLibcall) { 02947 02948 llvm::SmallVector<QualType, 5> Params; 02949 CallArgList Args; 02950 // Size is always the first parameter 02951 Args.add(RValue::get(llvm::ConstantInt::get(SizeTy, Size)), 02952 getContext().getSizeType()); 02953 // Atomic address is always the second parameter 02954 Args.add(RValue::get(EmitCastToVoidPtr(Ptr)), 02955 getContext().VoidPtrTy); 02956 02957 const char* LibCallName; 02958 QualType RetTy = getContext().VoidTy; 02959 switch (E->getOp()) { 02960 // There is only one libcall for compare an exchange, because there is no 02961 // optimisation benefit possible from a libcall version of a weak compare 02962 // and exchange. 02963 // bool __atomic_compare_exchange(size_t size, void *obj, void *expected, 02964 // void *desired, int success, int failure) 02965 case AtomicExpr::AO__c11_atomic_compare_exchange_weak: 02966 case AtomicExpr::AO__c11_atomic_compare_exchange_strong: 02967 case AtomicExpr::AO__atomic_compare_exchange: 02968 case AtomicExpr::AO__atomic_compare_exchange_n: 02969 LibCallName = "__atomic_compare_exchange"; 02970 RetTy = getContext().BoolTy; 02971 Args.add(RValue::get(EmitCastToVoidPtr(Val1)), 02972 getContext().VoidPtrTy); 02973 Args.add(RValue::get(EmitCastToVoidPtr(Val2)), 02974 getContext().VoidPtrTy); 02975 Args.add(RValue::get(Order), 02976 getContext().IntTy); 02977 Order = OrderFail; 02978 break; 02979 // void __atomic_exchange(size_t size, void *mem, void *val, void *return, 02980 // int order) 02981 case AtomicExpr::AO__c11_atomic_exchange: 02982 case AtomicExpr::AO__atomic_exchange_n: 02983 case AtomicExpr::AO__atomic_exchange: 02984 LibCallName = "__atomic_exchange"; 02985 Args.add(RValue::get(EmitCastToVoidPtr(Val1)), 02986 getContext().VoidPtrTy); 02987 Args.add(RValue::get(EmitCastToVoidPtr(Dest)), 02988 getContext().VoidPtrTy); 02989 break; 02990 // void __atomic_store(size_t size, void *mem, void *val, int order) 02991 case AtomicExpr::AO__c11_atomic_store: 02992 case AtomicExpr::AO__atomic_store: 02993 case AtomicExpr::AO__atomic_store_n: 02994 LibCallName = "__atomic_store"; 02995 Args.add(RValue::get(EmitCastToVoidPtr(Val1)), 02996 getContext().VoidPtrTy); 02997 break; 02998 // void __atomic_load(size_t size, void *mem, void *return, int order) 02999 case AtomicExpr::AO__c11_atomic_load: 03000 case AtomicExpr::AO__atomic_load: 03001 case AtomicExpr::AO__atomic_load_n: 03002 LibCallName = "__atomic_load"; 03003 Args.add(RValue::get(EmitCastToVoidPtr(Dest)), 03004 getContext().VoidPtrTy); 03005 break; 03006 #if 0 03007 // These are only defined for 1-16 byte integers. It is not clear what 03008 // their semantics would be on anything else... 03009 case AtomicExpr::Add: LibCallName = "__atomic_fetch_add_generic"; break; 03010 case AtomicExpr::Sub: LibCallName = "__atomic_fetch_sub_generic"; break; 03011 case AtomicExpr::And: LibCallName = "__atomic_fetch_and_generic"; break; 03012 case AtomicExpr::Or: LibCallName = "__atomic_fetch_or_generic"; break; 03013 case AtomicExpr::Xor: LibCallName = "__atomic_fetch_xor_generic"; break; 03014 #endif 03015 default: return EmitUnsupportedRValue(E, "atomic library call"); 03016 } 03017 // order is always the last parameter 03018 Args.add(RValue::get(Order), 03019 getContext().IntTy); 03020 03021 const CGFunctionInfo &FuncInfo = 03022 CGM.getTypes().arrangeFunctionCall(RetTy, Args, 03023 FunctionType::ExtInfo(), RequiredArgs::All); 03024 llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType(FuncInfo); 03025 llvm::Constant *Func = CGM.CreateRuntimeFunction(FTy, LibCallName); 03026 RValue Res = EmitCall(FuncInfo, Func, ReturnValueSlot(), Args); 03027 if (E->isCmpXChg()) 03028 return Res; 03029 if (E->getType()->isVoidType()) 03030 return RValue::get(0); 03031 return ConvertTempToRValue(*this, E->getType(), Dest); 03032 } 03033 03034 llvm::Type *IPtrTy = 03035 llvm::IntegerType::get(getLLVMContext(), Size * 8)->getPointerTo(); 03036 llvm::Value *OrigDest = Dest; 03037 Ptr = Builder.CreateBitCast(Ptr, IPtrTy); 03038 if (Val1) Val1 = Builder.CreateBitCast(Val1, IPtrTy); 03039 if (Val2) Val2 = Builder.CreateBitCast(Val2, IPtrTy); 03040 if (Dest && !E->isCmpXChg()) Dest = Builder.CreateBitCast(Dest, IPtrTy); 03041 03042 if (isa<llvm::ConstantInt>(Order)) { 03043 int ord = cast<llvm::ConstantInt>(Order)->getZExtValue(); 03044 switch (ord) { 03045 case 0: // memory_order_relaxed 03046 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03047 llvm::Monotonic); 03048 break; 03049 case 1: // memory_order_consume 03050 case 2: // memory_order_acquire 03051 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03052 llvm::Acquire); 03053 break; 03054 case 3: // memory_order_release 03055 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03056 llvm::Release); 03057 break; 03058 case 4: // memory_order_acq_rel 03059 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03060 llvm::AcquireRelease); 03061 break; 03062 case 5: // memory_order_seq_cst 03063 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03064 llvm::SequentiallyConsistent); 03065 break; 03066 default: // invalid order 03067 // We should not ever get here normally, but it's hard to 03068 // enforce that in general. 03069 break; 03070 } 03071 if (E->getType()->isVoidType()) 03072 return RValue::get(0); 03073 return ConvertTempToRValue(*this, E->getType(), OrigDest); 03074 } 03075 03076 // Long case, when Order isn't obviously constant. 03077 03078 bool IsStore = E->getOp() == AtomicExpr::AO__c11_atomic_store || 03079 E->getOp() == AtomicExpr::AO__atomic_store || 03080 E->getOp() == AtomicExpr::AO__atomic_store_n; 03081 bool IsLoad = E->getOp() == AtomicExpr::AO__c11_atomic_load || 03082 E->getOp() == AtomicExpr::AO__atomic_load || 03083 E->getOp() == AtomicExpr::AO__atomic_load_n; 03084 03085 // Create all the relevant BB's 03086 llvm::BasicBlock *MonotonicBB = 0, *AcquireBB = 0, *ReleaseBB = 0, 03087 *AcqRelBB = 0, *SeqCstBB = 0; 03088 MonotonicBB = createBasicBlock("monotonic", CurFn); 03089 if (!IsStore) 03090 AcquireBB = createBasicBlock("acquire", CurFn); 03091 if (!IsLoad) 03092 ReleaseBB = createBasicBlock("release", CurFn); 03093 if (!IsLoad && !IsStore) 03094 AcqRelBB = createBasicBlock("acqrel", CurFn); 03095 SeqCstBB = createBasicBlock("seqcst", CurFn); 03096 llvm::BasicBlock *ContBB = createBasicBlock("atomic.continue", CurFn); 03097 03098 // Create the switch for the split 03099 // MonotonicBB is arbitrarily chosen as the default case; in practice, this 03100 // doesn't matter unless someone is crazy enough to use something that 03101 // doesn't fold to a constant for the ordering. 03102 Order = Builder.CreateIntCast(Order, Builder.getInt32Ty(), false); 03103 llvm::SwitchInst *SI = Builder.CreateSwitch(Order, MonotonicBB); 03104 03105 // Emit all the different atomics 03106 Builder.SetInsertPoint(MonotonicBB); 03107 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03108 llvm::Monotonic); 03109 Builder.CreateBr(ContBB); 03110 if (!IsStore) { 03111 Builder.SetInsertPoint(AcquireBB); 03112 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03113 llvm::Acquire); 03114 Builder.CreateBr(ContBB); 03115 SI->addCase(Builder.getInt32(1), AcquireBB); 03116 SI->addCase(Builder.getInt32(2), AcquireBB); 03117 } 03118 if (!IsLoad) { 03119 Builder.SetInsertPoint(ReleaseBB); 03120 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03121 llvm::Release); 03122 Builder.CreateBr(ContBB); 03123 SI->addCase(Builder.getInt32(3), ReleaseBB); 03124 } 03125 if (!IsLoad && !IsStore) { 03126 Builder.SetInsertPoint(AcqRelBB); 03127 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03128 llvm::AcquireRelease); 03129 Builder.CreateBr(ContBB); 03130 SI->addCase(Builder.getInt32(4), AcqRelBB); 03131 } 03132 Builder.SetInsertPoint(SeqCstBB); 03133 EmitAtomicOp(*this, E, Dest, Ptr, Val1, Val2, Size, Align, 03134 llvm::SequentiallyConsistent); 03135 Builder.CreateBr(ContBB); 03136 SI->addCase(Builder.getInt32(5), SeqCstBB); 03137 03138 // Cleanup and return 03139 Builder.SetInsertPoint(ContBB); 03140 if (E->getType()->isVoidType()) 03141 return RValue::get(0); 03142 return ConvertTempToRValue(*this, E->getType(), OrigDest); 03143 } 03144 03145 void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, float Accuracy) { 03146 assert(Val->getType()->isFPOrFPVectorTy()); 03147 if (Accuracy == 0.0 || !isa<llvm::Instruction>(Val)) 03148 return; 03149 03150 llvm::MDBuilder MDHelper(getLLVMContext()); 03151 llvm::MDNode *Node = MDHelper.createFPMath(Accuracy); 03152 03153 cast<llvm::Instruction>(Val)->setMetadata(llvm::LLVMContext::MD_fpmath, Node); 03154 } 03155 03156 namespace { 03157 struct LValueOrRValue { 03158 LValue LV; 03159 RValue RV; 03160 }; 03161 } 03162 03163 static LValueOrRValue emitPseudoObjectExpr(CodeGenFunction &CGF, 03164 const PseudoObjectExpr *E, 03165 bool forLValue, 03166 AggValueSlot slot) { 03167 llvm::SmallVector<CodeGenFunction::OpaqueValueMappingData, 4> opaques; 03168 03169 // Find the result expression, if any. 03170 const Expr *resultExpr = E->getResultExpr(); 03171 LValueOrRValue result; 03172 03173 for (PseudoObjectExpr::const_semantics_iterator 03174 i = E->semantics_begin(), e = E->semantics_end(); i != e; ++i) { 03175 const Expr *semantic = *i; 03176 03177 // If this semantic expression is an opaque value, bind it 03178 // to the result of its source expression. 03179 if (const OpaqueValueExpr *ov = dyn_cast<OpaqueValueExpr>(semantic)) { 03180 03181 // If this is the result expression, we may need to evaluate 03182 // directly into the slot. 03183 typedef CodeGenFunction::OpaqueValueMappingData OVMA; 03184 OVMA opaqueData; 03185 if (ov == resultExpr && ov->isRValue() && !forLValue && 03186 CodeGenFunction::hasAggregateLLVMType(ov->getType()) && 03187 !ov->getType()->isAnyComplexType()) { 03188 CGF.EmitAggExpr(ov->getSourceExpr(), slot); 03189 03190 LValue LV = CGF.MakeAddrLValue(slot.getAddr(), ov->getType()); 03191 opaqueData = OVMA::bind(CGF, ov, LV); 03192 result.RV = slot.asRValue(); 03193 03194 // Otherwise, emit as normal. 03195 } else { 03196 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr()); 03197 03198 // If this is the result, also evaluate the result now. 03199 if (ov == resultExpr) { 03200 if (forLValue) 03201 result.LV = CGF.EmitLValue(ov); 03202 else 03203 result.RV = CGF.EmitAnyExpr(ov, slot); 03204 } 03205 } 03206 03207 opaques.push_back(opaqueData); 03208 03209 // Otherwise, if the expression is the result, evaluate it 03210 // and remember the result. 03211 } else if (semantic == resultExpr) { 03212 if (forLValue) 03213 result.LV = CGF.EmitLValue(semantic); 03214 else 03215 result.RV = CGF.EmitAnyExpr(semantic, slot); 03216 03217 // Otherwise, evaluate the expression in an ignored context. 03218 } else { 03219 CGF.EmitIgnoredExpr(semantic); 03220 } 03221 } 03222 03223 // Unbind all the opaques now. 03224 for (unsigned i = 0, e = opaques.size(); i != e; ++i) 03225 opaques[i].unbind(CGF); 03226 03227 return result; 03228 } 03229 03230 RValue CodeGenFunction::EmitPseudoObjectRValue(const PseudoObjectExpr *E, 03231 AggValueSlot slot) { 03232 return emitPseudoObjectExpr(*this, E, false, slot).RV; 03233 } 03234 03235 LValue CodeGenFunction::EmitPseudoObjectLValue(const PseudoObjectExpr *E) { 03236 return emitPseudoObjectExpr(*this, E, true, AggValueSlot::ignored()).LV; 03237 }