CGExpr.cpp revision 1e04976fc2611d8cc06986a81deed4c42183b870
1//===--- CGExpr.cpp - Emit LLVM Code from Expressions ---------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This contains code to emit Expr nodes as LLVM code. 11// 12//===----------------------------------------------------------------------===// 13 14#include "CodeGenFunction.h" 15#include "CodeGenModule.h" 16#include "clang/AST/AST.h" 17#include "clang/Basic/TargetInfo.h" 18#include "llvm/Constants.h" 19#include "llvm/DerivedTypes.h" 20#include "llvm/Function.h" 21#include "llvm/GlobalVariable.h" 22#include "llvm/Support/MathExtras.h" 23#include "llvm/Target/TargetData.h" 24using namespace clang; 25using namespace CodeGen; 26 27//===--------------------------------------------------------------------===// 28// Miscellaneous Helper Methods 29//===--------------------------------------------------------------------===// 30 31/// CreateTempAlloca - This creates a alloca and inserts it into the entry 32/// block. 33llvm::AllocaInst *CodeGenFunction::CreateTempAlloca(const llvm::Type *Ty, 34 const char *Name) { 35 return new llvm::AllocaInst(Ty, 0, Name, AllocaInsertPt); 36} 37 38/// EvaluateExprAsBool - Perform the usual unary conversions on the specified 39/// expression and compare the result against zero, returning an Int1Ty value. 40llvm::Value *CodeGenFunction::EvaluateExprAsBool(const Expr *E) { 41 QualType BoolTy = getContext().BoolTy; 42 if (!E->getType()->isAnyComplexType()) 43 return EmitScalarConversion(EmitScalarExpr(E), E->getType(), BoolTy); 44 45 return EmitComplexToScalarConversion(EmitComplexExpr(E), E->getType(),BoolTy); 46} 47 48/// EmitAnyExpr - Emit code to compute the specified expression which can have 49/// any type. The result is returned as an RValue struct. If this is an 50/// aggregate expression, the aggloc/agglocvolatile arguments indicate where 51/// the result should be returned. 52RValue CodeGenFunction::EmitAnyExpr(const Expr *E, llvm::Value *AggLoc, 53 bool isAggLocVolatile) { 54 if (!hasAggregateLLVMType(E->getType())) 55 return RValue::get(EmitScalarExpr(E)); 56 else if (E->getType()->isAnyComplexType()) 57 return RValue::getComplex(EmitComplexExpr(E)); 58 59 EmitAggExpr(E, AggLoc, isAggLocVolatile); 60 return RValue::getAggregate(AggLoc); 61} 62 63/// getAccessedFieldNo - Given an encoded value and a result number, return 64/// the input field number being accessed. 65unsigned CodeGenFunction::getAccessedFieldNo(unsigned Idx, 66 const llvm::Constant *Elts) { 67 if (isa<llvm::ConstantAggregateZero>(Elts)) 68 return 0; 69 70 return cast<llvm::ConstantInt>(Elts->getOperand(Idx))->getZExtValue(); 71} 72 73 74//===----------------------------------------------------------------------===// 75// LValue Expression Emission 76//===----------------------------------------------------------------------===// 77 78/// EmitLValue - Emit code to compute a designator that specifies the location 79/// of the expression. 80/// 81/// This can return one of two things: a simple address or a bitfield 82/// reference. In either case, the LLVM Value* in the LValue structure is 83/// guaranteed to be an LLVM pointer type. 84/// 85/// If this returns a bitfield reference, nothing about the pointee type of 86/// the LLVM value is known: For example, it may not be a pointer to an 87/// integer. 88/// 89/// If this returns a normal address, and if the lvalue's C type is fixed 90/// size, this method guarantees that the returned pointer type will point to 91/// an LLVM type of the same size of the lvalue's type. If the lvalue has a 92/// variable length type, this is not possible. 93/// 94LValue CodeGenFunction::EmitLValue(const Expr *E) { 95 switch (E->getStmtClass()) { 96 default: { 97 printf("Statement class: %d\n", E->getStmtClass()); 98 WarnUnsupported(E, "l-value expression"); 99 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 100 return LValue::MakeAddr(llvm::UndefValue::get(Ty), 101 E->getType().getCVRQualifiers()); 102 } 103 104 case Expr::CallExprClass: return EmitCallExprLValue(cast<CallExpr>(E)); 105 case Expr::DeclRefExprClass: return EmitDeclRefLValue(cast<DeclRefExpr>(E)); 106 case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 107 case Expr::PredefinedExprClass: 108 return EmitPredefinedLValue(cast<PredefinedExpr>(E)); 109 case Expr::StringLiteralClass: 110 return EmitStringLiteralLValue(cast<StringLiteral>(E)); 111 112 case Expr::ObjCIvarRefExprClass: 113 return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E)); 114 115 case Expr::UnaryOperatorClass: 116 return EmitUnaryOpLValue(cast<UnaryOperator>(E)); 117 case Expr::ArraySubscriptExprClass: 118 return EmitArraySubscriptExpr(cast<ArraySubscriptExpr>(E)); 119 case Expr::ExtVectorElementExprClass: 120 return EmitExtVectorElementExpr(cast<ExtVectorElementExpr>(E)); 121 case Expr::MemberExprClass: return EmitMemberExpr(cast<MemberExpr>(E)); 122 case Expr::CompoundLiteralExprClass: 123 return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E)); 124 } 125} 126 127/// EmitLoadOfLValue - Given an expression that represents a value lvalue, 128/// this method emits the address of the lvalue, then loads the result as an 129/// rvalue, returning the rvalue. 130RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) { 131 if (LV.isSimple()) { 132 llvm::Value *Ptr = LV.getAddress(); 133 const llvm::Type *EltTy = 134 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 135 136 // Simple scalar l-value. 137 if (EltTy->isSingleValueType()) { 138 llvm::Value *V = Builder.CreateLoad(Ptr, LV.isVolatileQualified(),"tmp"); 139 140 // Bool can have different representation in memory than in registers. 141 if (ExprType->isBooleanType()) { 142 if (V->getType() != llvm::Type::Int1Ty) 143 V = Builder.CreateTrunc(V, llvm::Type::Int1Ty, "tobool"); 144 } 145 146 return RValue::get(V); 147 } 148 149 assert(ExprType->isFunctionType() && "Unknown scalar value"); 150 return RValue::get(Ptr); 151 } 152 153 if (LV.isVectorElt()) { 154 llvm::Value *Vec = Builder.CreateLoad(LV.getVectorAddr(), 155 LV.isVolatileQualified(), "tmp"); 156 return RValue::get(Builder.CreateExtractElement(Vec, LV.getVectorIdx(), 157 "vecext")); 158 } 159 160 // If this is a reference to a subset of the elements of a vector, either 161 // shuffle the input or extract/insert them as appropriate. 162 if (LV.isExtVectorElt()) 163 return EmitLoadOfExtVectorElementLValue(LV, ExprType); 164 165 if (LV.isBitfield()) 166 return EmitLoadOfBitfieldLValue(LV, ExprType); 167 168 assert(0 && "Unknown LValue type!"); 169 //an invalid RValue, but the assert will 170 //ensure that this point is never reached 171 return RValue(); 172} 173 174RValue CodeGenFunction::EmitLoadOfBitfieldLValue(LValue LV, 175 QualType ExprType) { 176 unsigned StartBit = LV.getBitfieldStartBit(); 177 unsigned BitfieldSize = LV.getBitfieldSize(); 178 llvm::Value *Ptr = LV.getBitfieldAddr(); 179 180 const llvm::Type *EltTy = 181 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 182 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 183 184 // In some cases the bitfield may straddle two memory locations. 185 // Currently we load the entire bitfield, then do the magic to 186 // sign-extend it if necessary. This results in somewhat more code 187 // than necessary for the common case (one load), since two shifts 188 // accomplish both the masking and sign extension. 189 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 190 llvm::Value *Val = Builder.CreateLoad(Ptr, LV.isVolatileQualified(), "tmp"); 191 192 // Shift to proper location. 193 Val = Builder.CreateLShr(Val, llvm::ConstantInt::get(EltTy, StartBit), 194 "bf.lo"); 195 196 // Mask off unused bits. 197 llvm::Constant *LowMask = 198 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, LowBits)); 199 Val = Builder.CreateAnd(Val, LowMask, "bf.lo.cleared"); 200 201 // Fetch the high bits if necessary. 202 if (LowBits < BitfieldSize) { 203 unsigned HighBits = BitfieldSize - LowBits; 204 llvm::Value *HighPtr = 205 Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1), 206 "bf.ptr.hi"); 207 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 208 LV.isVolatileQualified(), 209 "tmp"); 210 211 // Mask off unused bits. 212 llvm::Constant *HighMask = 213 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 214 HighVal = Builder.CreateAnd(HighVal, HighMask, "bf.lo.cleared"); 215 216 // Shift to proper location and or in to bitfield value. 217 HighVal = Builder.CreateShl(HighVal, 218 llvm::ConstantInt::get(EltTy, LowBits)); 219 Val = Builder.CreateOr(Val, HighVal, "bf.val"); 220 } 221 222 // Sign extend if necessary. 223 if (LV.isBitfieldSigned()) { 224 llvm::Value *ExtraBits = llvm::ConstantInt::get(EltTy, 225 EltTySize - BitfieldSize); 226 Val = Builder.CreateAShr(Builder.CreateShl(Val, ExtraBits), 227 ExtraBits, "bf.val.sext"); 228 } 229 230 // The bitfield type and the normal type differ when the storage sizes 231 // differ (currently just _Bool). 232 Val = Builder.CreateIntCast(Val, ConvertType(ExprType), false, "tmp"); 233 234 return RValue::get(Val); 235} 236 237// If this is a reference to a subset of the elements of a vector, either 238// shuffle the input or extract/insert them as appropriate. 239RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV, 240 QualType ExprType) { 241 llvm::Value *Vec = Builder.CreateLoad(LV.getExtVectorAddr(), 242 LV.isVolatileQualified(), "tmp"); 243 244 const llvm::Constant *Elts = LV.getExtVectorElts(); 245 246 // If the result of the expression is a non-vector type, we must be 247 // extracting a single element. Just codegen as an extractelement. 248 const VectorType *ExprVT = ExprType->getAsVectorType(); 249 if (!ExprVT) { 250 unsigned InIdx = getAccessedFieldNo(0, Elts); 251 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 252 return RValue::get(Builder.CreateExtractElement(Vec, Elt, "tmp")); 253 } 254 255 // If the source and destination have the same number of elements, use a 256 // vector shuffle instead of insert/extracts. 257 unsigned NumResultElts = ExprVT->getNumElements(); 258 unsigned NumSourceElts = 259 cast<llvm::VectorType>(Vec->getType())->getNumElements(); 260 261 if (NumResultElts == NumSourceElts) { 262 llvm::SmallVector<llvm::Constant*, 4> Mask; 263 for (unsigned i = 0; i != NumResultElts; ++i) { 264 unsigned InIdx = getAccessedFieldNo(i, Elts); 265 Mask.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx)); 266 } 267 268 llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size()); 269 Vec = Builder.CreateShuffleVector(Vec, 270 llvm::UndefValue::get(Vec->getType()), 271 MaskV, "tmp"); 272 return RValue::get(Vec); 273 } 274 275 // Start out with an undef of the result type. 276 llvm::Value *Result = llvm::UndefValue::get(ConvertType(ExprType)); 277 278 // Extract/Insert each element of the result. 279 for (unsigned i = 0; i != NumResultElts; ++i) { 280 unsigned InIdx = getAccessedFieldNo(i, Elts); 281 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 282 Elt = Builder.CreateExtractElement(Vec, Elt, "tmp"); 283 284 llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); 285 Result = Builder.CreateInsertElement(Result, Elt, OutIdx, "tmp"); 286 } 287 288 return RValue::get(Result); 289} 290 291 292 293/// EmitStoreThroughLValue - Store the specified rvalue into the specified 294/// lvalue, where both are guaranteed to the have the same type, and that type 295/// is 'Ty'. 296void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst, 297 QualType Ty) { 298 if (!Dst.isSimple()) { 299 if (Dst.isVectorElt()) { 300 // Read/modify/write the vector, inserting the new element. 301 llvm::Value *Vec = Builder.CreateLoad(Dst.getVectorAddr(), 302 Dst.isVolatileQualified(), "tmp"); 303 Vec = Builder.CreateInsertElement(Vec, Src.getScalarVal(), 304 Dst.getVectorIdx(), "vecins"); 305 Builder.CreateStore(Vec, Dst.getVectorAddr(),Dst.isVolatileQualified()); 306 return; 307 } 308 309 // If this is an update of extended vector elements, insert them as 310 // appropriate. 311 if (Dst.isExtVectorElt()) 312 return EmitStoreThroughExtVectorComponentLValue(Src, Dst, Ty); 313 314 if (Dst.isBitfield()) 315 return EmitStoreThroughBitfieldLValue(Src, Dst, Ty); 316 317 assert(0 && "Unknown LValue type"); 318 } 319 320 llvm::Value *DstAddr = Dst.getAddress(); 321 assert(Src.isScalar() && "Can't emit an agg store with this method"); 322 // FIXME: Handle volatility etc. 323 const llvm::Type *SrcTy = Src.getScalarVal()->getType(); 324 const llvm::PointerType *DstPtr = cast<llvm::PointerType>(DstAddr->getType()); 325 const llvm::Type *AddrTy = DstPtr->getElementType(); 326 unsigned AS = DstPtr->getAddressSpace(); 327 328 if (AddrTy != SrcTy) 329 DstAddr = Builder.CreateBitCast(DstAddr, 330 llvm::PointerType::get(SrcTy, AS), 331 "storetmp"); 332 Builder.CreateStore(Src.getScalarVal(), DstAddr, Dst.isVolatileQualified()); 333} 334 335void CodeGenFunction::EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 336 QualType Ty) { 337 unsigned StartBit = Dst.getBitfieldStartBit(); 338 unsigned BitfieldSize = Dst.getBitfieldSize(); 339 llvm::Value *Ptr = Dst.getBitfieldAddr(); 340 341 const llvm::Type *EltTy = 342 cast<llvm::PointerType>(Ptr->getType())->getElementType(); 343 unsigned EltTySize = CGM.getTargetData().getTypeSizeInBits(EltTy); 344 345 // Get the new value, cast to the appropriate type and masked to 346 // exactly the size of the bit-field. 347 llvm::Value *NewVal = Src.getScalarVal(); 348 NewVal = Builder.CreateIntCast(NewVal, EltTy, false, "tmp"); 349 llvm::Constant *Mask = 350 llvm::ConstantInt::get(llvm::APInt::getLowBitsSet(EltTySize, BitfieldSize)); 351 NewVal = Builder.CreateAnd(NewVal, Mask, "bf.value"); 352 353 // In some cases the bitfield may straddle two memory locations. 354 // Emit the low part first and check to see if the high needs to be 355 // done. 356 unsigned LowBits = std::min(BitfieldSize, EltTySize - StartBit); 357 llvm::Value *LowVal = Builder.CreateLoad(Ptr, Dst.isVolatileQualified(), 358 "bf.prev.low"); 359 360 // Compute the mask for zero-ing the low part of this bitfield. 361 llvm::Constant *InvMask = 362 llvm::ConstantInt::get(~llvm::APInt::getBitsSet(EltTySize, StartBit, 363 StartBit + LowBits)); 364 365 // Compute the new low part as 366 // LowVal = (LowVal & InvMask) | (NewVal << StartBit), 367 // with the shift of NewVal implicitly stripping the high bits. 368 llvm::Value *NewLowVal = 369 Builder.CreateShl(NewVal, llvm::ConstantInt::get(EltTy, StartBit), 370 "bf.value.lo"); 371 LowVal = Builder.CreateAnd(LowVal, InvMask, "bf.prev.lo.cleared"); 372 LowVal = Builder.CreateOr(LowVal, NewLowVal, "bf.new.lo"); 373 374 // Write back. 375 Builder.CreateStore(LowVal, Ptr, Dst.isVolatileQualified()); 376 377 // If the low part doesn't cover the bitfield emit a high part. 378 if (LowBits < BitfieldSize) { 379 unsigned HighBits = BitfieldSize - LowBits; 380 llvm::Value *HighPtr = 381 Builder.CreateGEP(Ptr, llvm::ConstantInt::get(llvm::Type::Int32Ty, 1), 382 "bf.ptr.hi"); 383 llvm::Value *HighVal = Builder.CreateLoad(HighPtr, 384 Dst.isVolatileQualified(), 385 "bf.prev.hi"); 386 387 // Compute the mask for zero-ing the high part of this bitfield. 388 llvm::Constant *InvMask = 389 llvm::ConstantInt::get(~llvm::APInt::getLowBitsSet(EltTySize, HighBits)); 390 391 // Compute the new high part as 392 // HighVal = (HighVal & InvMask) | (NewVal lshr LowBits), 393 // where the high bits of NewVal have already been cleared and the 394 // shift stripping the low bits. 395 llvm::Value *NewHighVal = 396 Builder.CreateLShr(NewVal, llvm::ConstantInt::get(EltTy, LowBits), 397 "bf.value.high"); 398 HighVal = Builder.CreateAnd(HighVal, InvMask, "bf.prev.hi.cleared"); 399 HighVal = Builder.CreateOr(HighVal, NewHighVal, "bf.new.hi"); 400 401 // Write back. 402 Builder.CreateStore(HighVal, HighPtr, Dst.isVolatileQualified()); 403 } 404} 405 406void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, 407 LValue Dst, 408 QualType Ty) { 409 // This access turns into a read/modify/write of the vector. Load the input 410 // value now. 411 llvm::Value *Vec = Builder.CreateLoad(Dst.getExtVectorAddr(), 412 Dst.isVolatileQualified(), "tmp"); 413 const llvm::Constant *Elts = Dst.getExtVectorElts(); 414 415 llvm::Value *SrcVal = Src.getScalarVal(); 416 417 if (const VectorType *VTy = Ty->getAsVectorType()) { 418 unsigned NumSrcElts = VTy->getNumElements(); 419 420 // Extract/Insert each element. 421 for (unsigned i = 0; i != NumSrcElts; ++i) { 422 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); 423 Elt = Builder.CreateExtractElement(SrcVal, Elt, "tmp"); 424 425 unsigned Idx = getAccessedFieldNo(i, Elts); 426 llvm::Value *OutIdx = llvm::ConstantInt::get(llvm::Type::Int32Ty, Idx); 427 Vec = Builder.CreateInsertElement(Vec, Elt, OutIdx, "tmp"); 428 } 429 } else { 430 // If the Src is a scalar (not a vector) it must be updating one element. 431 unsigned InIdx = getAccessedFieldNo(0, Elts); 432 llvm::Value *Elt = llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx); 433 Vec = Builder.CreateInsertElement(Vec, SrcVal, Elt, "tmp"); 434 } 435 436 Builder.CreateStore(Vec, Dst.getExtVectorAddr(), Dst.isVolatileQualified()); 437} 438 439 440LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) { 441 const VarDecl *VD = dyn_cast<VarDecl>(E->getDecl()); 442 443 if (VD && (VD->isBlockVarDecl() || isa<ParmVarDecl>(VD) || 444 isa<ImplicitParamDecl>(VD))) { 445 if (VD->getStorageClass() == VarDecl::Extern) 446 return LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD), 447 E->getType().getCVRQualifiers()); 448 else { 449 llvm::Value *V = LocalDeclMap[VD]; 450 assert(V && "BlockVarDecl not entered in LocalDeclMap?"); 451 return LValue::MakeAddr(V, E->getType().getCVRQualifiers()); 452 } 453 } else if (VD && VD->isFileVarDecl()) { 454 return LValue::MakeAddr(CGM.GetAddrOfGlobalVar(VD), 455 E->getType().getCVRQualifiers()); 456 } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(E->getDecl())) { 457 return LValue::MakeAddr(CGM.GetAddrOfFunction(FD), 458 E->getType().getCVRQualifiers()); 459 } 460 else if (const ImplicitParamDecl *IPD = 461 dyn_cast<ImplicitParamDecl>(E->getDecl())) { 462 llvm::Value *V = LocalDeclMap[IPD]; 463 assert(V && "BlockVarDecl not entered in LocalDeclMap?"); 464 return LValue::MakeAddr(V, E->getType().getCVRQualifiers()); 465 } 466 assert(0 && "Unimp declref"); 467 //an invalid LValue, but the assert will 468 //ensure that this point is never reached. 469 return LValue(); 470} 471 472LValue CodeGenFunction::EmitUnaryOpLValue(const UnaryOperator *E) { 473 // __extension__ doesn't affect lvalue-ness. 474 if (E->getOpcode() == UnaryOperator::Extension) 475 return EmitLValue(E->getSubExpr()); 476 477 QualType ExprTy = getContext().getCanonicalType(E->getSubExpr()->getType()); 478 switch (E->getOpcode()) { 479 default: assert(0 && "Unknown unary operator lvalue!"); 480 case UnaryOperator::Deref: 481 return LValue::MakeAddr(EmitScalarExpr(E->getSubExpr()), 482 ExprTy->getAsPointerType()->getPointeeType() 483 .getCVRQualifiers()); 484 case UnaryOperator::Real: 485 case UnaryOperator::Imag: 486 LValue LV = EmitLValue(E->getSubExpr()); 487 unsigned Idx = E->getOpcode() == UnaryOperator::Imag; 488 return LValue::MakeAddr(Builder.CreateStructGEP(LV.getAddress(), 489 Idx, "idx"), 490 ExprTy.getCVRQualifiers()); 491 } 492} 493 494LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 495 llvm::Constant *C = 496 CGM.GetAddrOfConstantString(CGM.getStringForStringLiteral(E)); 497 498 return LValue::MakeAddr(C,0); 499} 500 501LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) { 502 std::string FunctionName; 503 if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) { 504 FunctionName = FD->getName(); 505 } 506 else { 507 assert(0 && "Attempting to load predefined constant for invalid decl type"); 508 } 509 std::string GlobalVarName; 510 511 switch (E->getIdentType()) { 512 default: 513 assert(0 && "unknown pre-defined ident type"); 514 case PredefinedExpr::Func: 515 GlobalVarName = "__func__."; 516 break; 517 case PredefinedExpr::Function: 518 GlobalVarName = "__FUNCTION__."; 519 break; 520 case PredefinedExpr::PrettyFunction: 521 // FIXME:: Demangle C++ method names 522 GlobalVarName = "__PRETTY_FUNCTION__."; 523 break; 524 } 525 526 GlobalVarName += FunctionName; 527 528 // FIXME: Can cache/reuse these within the module. 529 llvm::Constant *C=llvm::ConstantArray::get(FunctionName); 530 531 // Create a global variable for this. 532 C = new llvm::GlobalVariable(C->getType(), true, 533 llvm::GlobalValue::InternalLinkage, 534 C, GlobalVarName, CurFn->getParent()); 535 return LValue::MakeAddr(C,0); 536} 537 538LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 539 // The index must always be an integer, which is not an aggregate. Emit it. 540 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 541 542 // If the base is a vector type, then we are forming a vector element lvalue 543 // with this subscript. 544 if (E->getBase()->getType()->isVectorType()) { 545 // Emit the vector as an lvalue to get its address. 546 LValue LHS = EmitLValue(E->getBase()); 547 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 548 // FIXME: This should properly sign/zero/extend or truncate Idx to i32. 549 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 550 E->getBase()->getType().getCVRQualifiers()); 551 } 552 553 // The base must be a pointer, which is not an aggregate. Emit it. 554 llvm::Value *Base = EmitScalarExpr(E->getBase()); 555 556 // Extend or truncate the index type to 32 or 64-bits. 557 QualType IdxTy = E->getIdx()->getType(); 558 bool IdxSigned = IdxTy->isSignedIntegerType(); 559 unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth(); 560 if (IdxBitwidth != LLVMPointerWidth) 561 Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth), 562 IdxSigned, "idxprom"); 563 564 // We know that the pointer points to a type of the correct size, unless the 565 // size is a VLA. 566 if (!E->getType()->isConstantSizeType()) 567 assert(0 && "VLA idx not implemented"); 568 QualType ExprTy = getContext().getCanonicalType(E->getBase()->getType()); 569 570 return LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"), 571 ExprTy->getAsPointerType()->getPointeeType() 572 .getCVRQualifiers()); 573} 574 575static 576llvm::Constant *GenerateConstantVector(llvm::SmallVector<unsigned, 4> &Elts) { 577 llvm::SmallVector<llvm::Constant *, 4> CElts; 578 579 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 580 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, Elts[i])); 581 582 return llvm::ConstantVector::get(&CElts[0], CElts.size()); 583} 584 585LValue CodeGenFunction:: 586EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 587 // Emit the base vector as an l-value. 588 LValue Base = EmitLValue(E->getBase()); 589 590 // Encode the element access list into a vector of unsigned indices. 591 llvm::SmallVector<unsigned, 4> Indices; 592 E->getEncodedElementAccess(Indices); 593 594 if (Base.isSimple()) { 595 llvm::Constant *CV = GenerateConstantVector(Indices); 596 return LValue::MakeExtVectorElt(Base.getAddress(), CV, 597 E->getBase()->getType().getCVRQualifiers()); 598 } 599 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 600 601 llvm::Constant *BaseElts = Base.getExtVectorElts(); 602 llvm::SmallVector<llvm::Constant *, 4> CElts; 603 604 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 605 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 606 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, 0)); 607 else 608 CElts.push_back(BaseElts->getOperand(Indices[i])); 609 } 610 llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); 611 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, 612 E->getBase()->getType().getCVRQualifiers()); 613} 614 615LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 616 bool isUnion = false; 617 Expr *BaseExpr = E->getBase(); 618 llvm::Value *BaseValue = NULL; 619 unsigned CVRQualifiers=0; 620 621 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 622 if (E->isArrow()) { 623 BaseValue = EmitScalarExpr(BaseExpr); 624 const PointerType *PTy = 625 cast<PointerType>(getContext().getCanonicalType(BaseExpr->getType())); 626 if (PTy->getPointeeType()->isUnionType()) 627 isUnion = true; 628 CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); 629 } 630 else { 631 LValue BaseLV = EmitLValue(BaseExpr); 632 // FIXME: this isn't right for bitfields. 633 BaseValue = BaseLV.getAddress(); 634 if (BaseExpr->getType()->isUnionType()) 635 isUnion = true; 636 CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); 637 } 638 639 FieldDecl *Field = E->getMemberDecl(); 640 return EmitLValueForField(BaseValue, Field, isUnion, CVRQualifiers); 641} 642 643LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue, 644 FieldDecl* Field, 645 bool isUnion, 646 unsigned CVRQualifiers) 647{ 648 llvm::Value *V; 649 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 650 651 if (Field->isBitField()) { 652 // FIXME: CodeGenTypes should expose a method to get the appropriate 653 // type for FieldTy (the appropriate type is ABI-dependent). 654 const llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(Field->getType()); 655 const llvm::PointerType *BaseTy = 656 cast<llvm::PointerType>(BaseValue->getType()); 657 unsigned AS = BaseTy->getAddressSpace(); 658 BaseValue = Builder.CreateBitCast(BaseValue, 659 llvm::PointerType::get(FieldTy, AS), 660 "tmp"); 661 V = Builder.CreateGEP(BaseValue, 662 llvm::ConstantInt::get(llvm::Type::Int32Ty, idx), 663 "tmp"); 664 665 CodeGenTypes::BitFieldInfo bitFieldInfo = 666 CGM.getTypes().getBitFieldInfo(Field); 667 return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size, 668 Field->getType()->isSignedIntegerType(), 669 Field->getType().getCVRQualifiers()|CVRQualifiers); 670 } 671 672 V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 673 674 // Match union field type. 675 if (isUnion) { 676 const llvm::Type *FieldTy = 677 CGM.getTypes().ConvertTypeForMem(Field->getType()); 678 const llvm::PointerType * BaseTy = 679 cast<llvm::PointerType>(BaseValue->getType()); 680 unsigned AS = BaseTy->getAddressSpace(); 681 V = Builder.CreateBitCast(V, 682 llvm::PointerType::get(FieldTy, AS), 683 "tmp"); 684 } 685 686 return LValue::MakeAddr(V, 687 Field->getType().getCVRQualifiers()|CVRQualifiers); 688} 689 690LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E) 691{ 692 const llvm::Type *LTy = ConvertType(E->getType()); 693 llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral"); 694 695 const Expr* InitExpr = E->getInitializer(); 696 LValue Result = LValue::MakeAddr(DeclPtr, E->getType().getCVRQualifiers()); 697 698 if (E->getType()->isComplexType()) { 699 EmitComplexExprIntoAddr(InitExpr, DeclPtr, false); 700 } else if (hasAggregateLLVMType(E->getType())) { 701 EmitAnyExpr(InitExpr, DeclPtr, false); 702 } else { 703 EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType()); 704 } 705 706 return Result; 707} 708 709//===--------------------------------------------------------------------===// 710// Expression Emission 711//===--------------------------------------------------------------------===// 712 713 714RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) { 715 if (const ImplicitCastExpr *IcExpr = 716 dyn_cast<const ImplicitCastExpr>(E->getCallee())) 717 if (const DeclRefExpr *DRExpr = 718 dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr())) 719 if (const FunctionDecl *FDecl = 720 dyn_cast<const FunctionDecl>(DRExpr->getDecl())) 721 if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID()) 722 return EmitBuiltinExpr(builtinID, E); 723 724 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 725 return EmitCallExpr(Callee, E->getCallee()->getType(), 726 E->arg_begin(), E->arg_end()); 727} 728 729RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr, 730 CallExpr::const_arg_iterator ArgBeg, 731 CallExpr::const_arg_iterator ArgEnd) { 732 733 llvm::Value *Callee = EmitScalarExpr(FnExpr); 734 return EmitCallExpr(Callee, FnExpr->getType(), ArgBeg, ArgEnd); 735} 736 737LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 738 // Can only get l-value for call expression returning aggregate type 739 RValue RV = EmitCallExpr(E); 740 // FIXME: can this be volatile? 741 return LValue::MakeAddr(RV.getAggregateAddr(), 742 E->getType().getCVRQualifiers()); 743} 744 745LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 746 // Objective-C objects are traditionally C structures with their layout 747 // defined at compile-time. In some implementations, their layout is not 748 // defined until run time in order to allow instance variables to be added to 749 // a class without recompiling all of the subclasses. If this is the case 750 // then the CGObjCRuntime subclass must return true to LateBoundIvars and 751 // implement the lookup itself. 752 if (CGM.getObjCRuntime()->LateBoundIVars()) { 753 assert(0 && "FIXME: Implement support for late-bound instance variables"); 754 return LValue(); // Not reached. 755 } 756 757 // Get a structure type for the object 758 QualType ExprTy = E->getBase()->getType(); 759 const llvm::Type *ObjectType = ConvertType(ExprTy); 760 // TODO: Add a special case for isa (index 0) 761 // Work out which index the ivar is 762 const ObjCIvarDecl *Decl = E->getDecl(); 763 unsigned Index = CGM.getTypes().getLLVMFieldNo(Decl); 764 765 // Get object pointer and coerce object pointer to correct type. 766 llvm::Value *Object = EmitLValue(E->getBase()).getAddress(); 767 // FIXME: Volatility 768 Object = Builder.CreateLoad(Object, E->getDecl()->getName()); 769 if (Object->getType() != ObjectType) 770 Object = Builder.CreateBitCast(Object, ObjectType); 771 772 773 // Return a pointer to the right element. 774 // FIXME: volatile 775 return LValue::MakeAddr(Builder.CreateStructGEP(Object, Index, 776 Decl->getName()),0); 777} 778 779RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, 780 CallExpr::const_arg_iterator ArgBeg, 781 CallExpr::const_arg_iterator ArgEnd) { 782 783 // The callee type will always be a pointer to function type, get the function 784 // type. 785 FnType = FnType->getAsPointerType()->getPointeeType(); 786 QualType ResultType = FnType->getAsFunctionType()->getResultType(); 787 788 llvm::SmallVector<llvm::Value*, 16> Args; 789 790 // Handle struct-return functions by passing a pointer to the location that 791 // we would like to return into. 792 if (hasAggregateLLVMType(ResultType)) { 793 // Create a temporary alloca to hold the result of the call. :( 794 Args.push_back(CreateTempAlloca(ConvertType(ResultType))); 795 // FIXME: set the stret attribute on the argument. 796 } 797 798 for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I) { 799 QualType ArgTy = I->getType(); 800 801 if (!hasAggregateLLVMType(ArgTy)) { 802 // Scalar argument is passed by-value. 803 Args.push_back(EmitScalarExpr(*I)); 804 } else if (ArgTy->isAnyComplexType()) { 805 // Make a temporary alloca to pass the argument. 806 llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy)); 807 EmitComplexExprIntoAddr(*I, DestMem, false); 808 Args.push_back(DestMem); 809 } else { 810 llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy)); 811 EmitAggExpr(*I, DestMem, false); 812 Args.push_back(DestMem); 813 } 814 } 815 816 llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size()); 817 818 // Note that there is parallel code in SetFunctionAttributes in CodeGenModule 819 llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrList; 820 if (hasAggregateLLVMType(ResultType)) 821 ParamAttrList.push_back( 822 llvm::ParamAttrsWithIndex::get(1, llvm::ParamAttr::StructRet)); 823 unsigned increment = hasAggregateLLVMType(ResultType) ? 2 : 1; 824 825 unsigned i = 0; 826 for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I, ++i) { 827 QualType ParamType = I->getType(); 828 unsigned ParamAttrs = 0; 829 if (ParamType->isRecordType()) 830 ParamAttrs |= llvm::ParamAttr::ByVal; 831 if (ParamType->isSignedIntegerType() && ParamType->isPromotableIntegerType()) 832 ParamAttrs |= llvm::ParamAttr::SExt; 833 if (ParamType->isUnsignedIntegerType() && ParamType->isPromotableIntegerType()) 834 ParamAttrs |= llvm::ParamAttr::ZExt; 835 if (ParamAttrs) 836 ParamAttrList.push_back(llvm::ParamAttrsWithIndex::get(i + increment, 837 ParamAttrs)); 838 } 839 CI->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(), 840 ParamAttrList.size())); 841 842 if (const llvm::Function *F = dyn_cast<llvm::Function>(Callee)) 843 CI->setCallingConv(F->getCallingConv()); 844 if (CI->getType() != llvm::Type::VoidTy) 845 CI->setName("call"); 846 else if (ResultType->isAnyComplexType()) 847 return RValue::getComplex(LoadComplexFromAddr(Args[0], false)); 848 else if (hasAggregateLLVMType(ResultType)) 849 // Struct return. 850 return RValue::getAggregate(Args[0]); 851 else { 852 // void return. 853 assert(ResultType->isVoidType() && "Should only have a void expr here"); 854 CI = 0; 855 } 856 857 return RValue::get(CI); 858} 859