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" 24 using namespace clang; 25 using namespace CodeGen; 26 27 //===--------------------------------------------------------------------===// 28 // Miscellaneous Helper Methods 29 //===--------------------------------------------------------------------===// 30 31 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 32 /// block. 33 llvm::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. 40 llvm::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. 52 RValue 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. 65 unsigned 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 /// 94 LValue 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. 130 RValue 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 174 RValue 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. 239 RValue 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'. 296 void 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 335 void 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 406 void 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 440 LValue 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 472 LValue 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 494 LValue CodeGenFunction::EmitStringLiteralLValue(const StringLiteral *E) { 495 assert(!E->isWide() && "FIXME: Wide strings not supported yet!"); 496 // Get the string data 497 const char *StrData = E->getStrData(); 498 unsigned Len = E->getByteLength(); 499 std::string StringLiteral(StrData, StrData+Len); 500 501 // Resize the string to the right size 502 const ConstantArrayType *CAT = 503 getContext().getAsConstantArrayType(E->getType()); 504 uint64_t RealLen = CAT->getSize().getZExtValue(); 505 StringLiteral.resize(RealLen, '\0'); 506 507 return LValue::MakeAddr(CGM.GetAddrOfConstantString(StringLiteral),0); 508 } 509 510 LValue CodeGenFunction::EmitPreDefinedLValue(const PreDefinedExpr *E) { 511 std::string FunctionName; 512 if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) { 513 FunctionName = FD->getName(); 514 } 515 else { 516 assert(0 && "Attempting to load predefined constant for invalid decl type"); 517 } 518 std::string GlobalVarName; 519 520 switch (E->getIdentType()) { 521 default: 522 assert(0 && "unknown pre-defined ident type"); 523 case PreDefinedExpr::Func: 524 GlobalVarName = "__func__."; 525 break; 526 case PreDefinedExpr::Function: 527 GlobalVarName = "__FUNCTION__."; 528 break; 529 case PreDefinedExpr::PrettyFunction: 530 // FIXME:: Demangle C++ method names 531 GlobalVarName = "__PRETTY_FUNCTION__."; 532 break; 533 } 534 535 GlobalVarName += FunctionName; 536 537 // FIXME: Can cache/reuse these within the module. 538 llvm::Constant *C=llvm::ConstantArray::get(FunctionName); 539 540 // Create a global variable for this. 541 C = new llvm::GlobalVariable(C->getType(), true, 542 llvm::GlobalValue::InternalLinkage, 543 C, GlobalVarName, CurFn->getParent()); 544 return LValue::MakeAddr(C,0); 545 } 546 547 LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { 548 // The index must always be an integer, which is not an aggregate. Emit it. 549 llvm::Value *Idx = EmitScalarExpr(E->getIdx()); 550 551 // If the base is a vector type, then we are forming a vector element lvalue 552 // with this subscript. 553 if (E->getBase()->getType()->isVectorType()) { 554 // Emit the vector as an lvalue to get its address. 555 LValue LHS = EmitLValue(E->getBase()); 556 assert(LHS.isSimple() && "Can only subscript lvalue vectors here!"); 557 // FIXME: This should properly sign/zero/extend or truncate Idx to i32. 558 return LValue::MakeVectorElt(LHS.getAddress(), Idx, 559 E->getBase()->getType().getCVRQualifiers()); 560 } 561 562 // The base must be a pointer, which is not an aggregate. Emit it. 563 llvm::Value *Base = EmitScalarExpr(E->getBase()); 564 565 // Extend or truncate the index type to 32 or 64-bits. 566 QualType IdxTy = E->getIdx()->getType(); 567 bool IdxSigned = IdxTy->isSignedIntegerType(); 568 unsigned IdxBitwidth = cast<llvm::IntegerType>(Idx->getType())->getBitWidth(); 569 if (IdxBitwidth != LLVMPointerWidth) 570 Idx = Builder.CreateIntCast(Idx, llvm::IntegerType::get(LLVMPointerWidth), 571 IdxSigned, "idxprom"); 572 573 // We know that the pointer points to a type of the correct size, unless the 574 // size is a VLA. 575 if (!E->getType()->isConstantSizeType()) 576 assert(0 && "VLA idx not implemented"); 577 QualType ExprTy = getContext().getCanonicalType(E->getBase()->getType()); 578 579 return LValue::MakeAddr(Builder.CreateGEP(Base, Idx, "arrayidx"), 580 ExprTy->getAsPointerType()->getPointeeType() 581 .getCVRQualifiers()); 582 } 583 584 static 585 llvm::Constant *GenerateConstantVector(llvm::SmallVector<unsigned, 4> &Elts) { 586 llvm::SmallVector<llvm::Constant *, 4> CElts; 587 588 for (unsigned i = 0, e = Elts.size(); i != e; ++i) 589 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, Elts[i])); 590 591 return llvm::ConstantVector::get(&CElts[0], CElts.size()); 592 } 593 594 LValue CodeGenFunction:: 595 EmitExtVectorElementExpr(const ExtVectorElementExpr *E) { 596 // Emit the base vector as an l-value. 597 LValue Base = EmitLValue(E->getBase()); 598 599 // Encode the element access list into a vector of unsigned indices. 600 llvm::SmallVector<unsigned, 4> Indices; 601 E->getEncodedElementAccess(Indices); 602 603 if (Base.isSimple()) { 604 llvm::Constant *CV = GenerateConstantVector(Indices); 605 return LValue::MakeExtVectorElt(Base.getAddress(), CV, 606 E->getBase()->getType().getCVRQualifiers()); 607 } 608 assert(Base.isExtVectorElt() && "Can only subscript lvalue vec elts here!"); 609 610 llvm::Constant *BaseElts = Base.getExtVectorElts(); 611 llvm::SmallVector<llvm::Constant *, 4> CElts; 612 613 for (unsigned i = 0, e = Indices.size(); i != e; ++i) { 614 if (isa<llvm::ConstantAggregateZero>(BaseElts)) 615 CElts.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, 0)); 616 else 617 CElts.push_back(BaseElts->getOperand(Indices[i])); 618 } 619 llvm::Constant *CV = llvm::ConstantVector::get(&CElts[0], CElts.size()); 620 return LValue::MakeExtVectorElt(Base.getExtVectorAddr(), CV, 621 E->getBase()->getType().getCVRQualifiers()); 622 } 623 624 LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { 625 bool isUnion = false; 626 Expr *BaseExpr = E->getBase(); 627 llvm::Value *BaseValue = NULL; 628 unsigned CVRQualifiers=0; 629 630 // If this is s.x, emit s as an lvalue. If it is s->x, emit s as a scalar. 631 if (E->isArrow()) { 632 BaseValue = EmitScalarExpr(BaseExpr); 633 const PointerType *PTy = 634 cast<PointerType>(getContext().getCanonicalType(BaseExpr->getType())); 635 if (PTy->getPointeeType()->isUnionType()) 636 isUnion = true; 637 CVRQualifiers = PTy->getPointeeType().getCVRQualifiers(); 638 } 639 else { 640 LValue BaseLV = EmitLValue(BaseExpr); 641 // FIXME: this isn't right for bitfields. 642 BaseValue = BaseLV.getAddress(); 643 if (BaseExpr->getType()->isUnionType()) 644 isUnion = true; 645 CVRQualifiers = BaseExpr->getType().getCVRQualifiers(); 646 } 647 648 FieldDecl *Field = E->getMemberDecl(); 649 return EmitLValueForField(BaseValue, Field, isUnion, CVRQualifiers); 650 } 651 652 LValue CodeGenFunction::EmitLValueForField(llvm::Value* BaseValue, 653 FieldDecl* Field, 654 bool isUnion, 655 unsigned CVRQualifiers) 656 { 657 llvm::Value *V; 658 unsigned idx = CGM.getTypes().getLLVMFieldNo(Field); 659 660 if (Field->isBitField()) { 661 // FIXME: CodeGenTypes should expose a method to get the appropriate 662 // type for FieldTy (the appropriate type is ABI-dependent). 663 const llvm::Type *FieldTy = CGM.getTypes().ConvertTypeForMem(Field->getType()); 664 const llvm::PointerType *BaseTy = 665 cast<llvm::PointerType>(BaseValue->getType()); 666 unsigned AS = BaseTy->getAddressSpace(); 667 BaseValue = Builder.CreateBitCast(BaseValue, 668 llvm::PointerType::get(FieldTy, AS), 669 "tmp"); 670 V = Builder.CreateGEP(BaseValue, 671 llvm::ConstantInt::get(llvm::Type::Int32Ty, idx), 672 "tmp"); 673 674 CodeGenTypes::BitFieldInfo bitFieldInfo = 675 CGM.getTypes().getBitFieldInfo(Field); 676 return LValue::MakeBitfield(V, bitFieldInfo.Begin, bitFieldInfo.Size, 677 Field->getType()->isSignedIntegerType(), 678 Field->getType().getCVRQualifiers()|CVRQualifiers); 679 } 680 681 V = Builder.CreateStructGEP(BaseValue, idx, "tmp"); 682 683 // Match union field type. 684 if (isUnion) { 685 const llvm::Type *FieldTy = 686 CGM.getTypes().ConvertTypeForMem(Field->getType()); 687 const llvm::PointerType * BaseTy = 688 cast<llvm::PointerType>(BaseValue->getType()); 689 unsigned AS = BaseTy->getAddressSpace(); 690 V = Builder.CreateBitCast(V, 691 llvm::PointerType::get(FieldTy, AS), 692 "tmp"); 693 } 694 695 return LValue::MakeAddr(V, 696 Field->getType().getCVRQualifiers()|CVRQualifiers); 697 } 698 699 LValue CodeGenFunction::EmitCompoundLiteralLValue(const CompoundLiteralExpr* E) 700 { 701 const llvm::Type *LTy = ConvertType(E->getType()); 702 llvm::Value *DeclPtr = CreateTempAlloca(LTy, ".compoundliteral"); 703 704 const Expr* InitExpr = E->getInitializer(); 705 LValue Result = LValue::MakeAddr(DeclPtr, E->getType().getCVRQualifiers()); 706 707 if (E->getType()->isComplexType()) { 708 EmitComplexExprIntoAddr(InitExpr, DeclPtr, false); 709 } else if (hasAggregateLLVMType(E->getType())) { 710 EmitAnyExpr(InitExpr, DeclPtr, false); 711 } else { 712 EmitStoreThroughLValue(EmitAnyExpr(InitExpr), Result, E->getType()); 713 } 714 715 return Result; 716 } 717 718 //===--------------------------------------------------------------------===// 719 // Expression Emission 720 //===--------------------------------------------------------------------===// 721 722 723 RValue CodeGenFunction::EmitCallExpr(const CallExpr *E) { 724 if (const ImplicitCastExpr *IcExpr = 725 dyn_cast<const ImplicitCastExpr>(E->getCallee())) 726 if (const DeclRefExpr *DRExpr = 727 dyn_cast<const DeclRefExpr>(IcExpr->getSubExpr())) 728 if (const FunctionDecl *FDecl = 729 dyn_cast<const FunctionDecl>(DRExpr->getDecl())) 730 if (unsigned builtinID = FDecl->getIdentifier()->getBuiltinID()) 731 return EmitBuiltinExpr(builtinID, E); 732 733 llvm::Value *Callee = EmitScalarExpr(E->getCallee()); 734 return EmitCallExpr(Callee, E->getCallee()->getType(), 735 E->arg_begin(), E->arg_end()); 736 } 737 738 RValue CodeGenFunction::EmitCallExpr(Expr *FnExpr, 739 CallExpr::const_arg_iterator ArgBeg, 740 CallExpr::const_arg_iterator ArgEnd) { 741 742 llvm::Value *Callee = EmitScalarExpr(FnExpr); 743 return EmitCallExpr(Callee, FnExpr->getType(), ArgBeg, ArgEnd); 744 } 745 746 LValue CodeGenFunction::EmitCallExprLValue(const CallExpr *E) { 747 // Can only get l-value for call expression returning aggregate type 748 RValue RV = EmitCallExpr(E); 749 // FIXME: can this be volatile? 750 return LValue::MakeAddr(RV.getAggregateAddr(), 751 E->getType().getCVRQualifiers()); 752 } 753 754 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) { 755 // Objective-C objects are traditionally C structures with their layout 756 // defined at compile-time. In some implementations, their layout is not 757 // defined until run time in order to allow instance variables to be added to 758 // a class without recompiling all of the subclasses. If this is the case 759 // then the CGObjCRuntime subclass must return true to LateBoundIvars and 760 // implement the lookup itself. 761 if (CGM.getObjCRuntime()->LateBoundIVars()) { 762 assert(0 && "FIXME: Implement support for late-bound instance variables"); 763 return LValue(); // Not reached. 764 } 765 766 // Get a structure type for the object 767 QualType ExprTy = E->getBase()->getType(); 768 const llvm::Type *ObjectType = ConvertType(ExprTy); 769 // TODO: Add a special case for isa (index 0) 770 // Work out which index the ivar is 771 const ObjCIvarDecl *Decl = E->getDecl(); 772 unsigned Index = CGM.getTypes().getLLVMFieldNo(Decl); 773 774 // Get object pointer and coerce object pointer to correct type. 775 llvm::Value *Object = EmitLValue(E->getBase()).getAddress(); 776 // FIXME: Volatility 777 Object = Builder.CreateLoad(Object, E->getDecl()->getName()); 778 if (Object->getType() != ObjectType) 779 Object = Builder.CreateBitCast(Object, ObjectType); 780 781 782 // Return a pointer to the right element. 783 // FIXME: volatile 784 return LValue::MakeAddr(Builder.CreateStructGEP(Object, Index, 785 Decl->getName()),0); 786 } 787 788 RValue CodeGenFunction::EmitCallExpr(llvm::Value *Callee, QualType FnType, 789 CallExpr::const_arg_iterator ArgBeg, 790 CallExpr::const_arg_iterator ArgEnd) { 791 792 // The callee type will always be a pointer to function type, get the function 793 // type. 794 FnType = FnType->getAsPointerType()->getPointeeType(); 795 QualType ResultType = FnType->getAsFunctionType()->getResultType(); 796 797 llvm::SmallVector<llvm::Value*, 16> Args; 798 799 // Handle struct-return functions by passing a pointer to the location that 800 // we would like to return into. 801 if (hasAggregateLLVMType(ResultType)) { 802 // Create a temporary alloca to hold the result of the call. :( 803 Args.push_back(CreateTempAlloca(ConvertType(ResultType))); 804 // FIXME: set the stret attribute on the argument. 805 } 806 807 for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I) { 808 QualType ArgTy = I->getType(); 809 810 if (!hasAggregateLLVMType(ArgTy)) { 811 // Scalar argument is passed by-value. 812 Args.push_back(EmitScalarExpr(*I)); 813 } else if (ArgTy->isAnyComplexType()) { 814 // Make a temporary alloca to pass the argument. 815 llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy)); 816 EmitComplexExprIntoAddr(*I, DestMem, false); 817 Args.push_back(DestMem); 818 } else { 819 llvm::Value *DestMem = CreateTempAlloca(ConvertType(ArgTy)); 820 EmitAggExpr(*I, DestMem, false); 821 Args.push_back(DestMem); 822 } 823 } 824 825 llvm::CallInst *CI = Builder.CreateCall(Callee,&Args[0],&Args[0]+Args.size()); 826 827 // Note that there is parallel code in SetFunctionAttributes in CodeGenModule 828 llvm::SmallVector<llvm::ParamAttrsWithIndex, 8> ParamAttrList; 829 if (hasAggregateLLVMType(ResultType)) 830 ParamAttrList.push_back( 831 llvm::ParamAttrsWithIndex::get(1, llvm::ParamAttr::StructRet)); 832 unsigned increment = hasAggregateLLVMType(ResultType) ? 2 : 1; 833 834 unsigned i = 0; 835 for (CallExpr::const_arg_iterator I = ArgBeg; I != ArgEnd; ++I, ++i) { 836 QualType ParamType = I->getType(); 837 unsigned ParamAttrs = 0; 838 if (ParamType->isRecordType()) 839 ParamAttrs |= llvm::ParamAttr::ByVal; 840 if (ParamType->isSignedIntegerType() && ParamType->isPromotableIntegerType()) 841 ParamAttrs |= llvm::ParamAttr::SExt; 842 if (ParamType->isUnsignedIntegerType() && ParamType->isPromotableIntegerType()) 843 ParamAttrs |= llvm::ParamAttr::ZExt; 844 if (ParamAttrs) 845 ParamAttrList.push_back(llvm::ParamAttrsWithIndex::get(i + increment, 846 ParamAttrs)); 847 } 848 CI->setParamAttrs(llvm::PAListPtr::get(ParamAttrList.begin(), 849 ParamAttrList.size())); 850 851 if (const llvm::Function *F = dyn_cast<llvm::Function>(Callee)) 852 CI->setCallingConv(F->getCallingConv()); 853 if (CI->getType() != llvm::Type::VoidTy) 854 CI->setName("call"); 855 else if (ResultType->isAnyComplexType()) 856 return RValue::getComplex(LoadComplexFromAddr(Args[0], false)); 857 else if (hasAggregateLLVMType(ResultType)) 858 // Struct return. 859 return RValue::getAggregate(Args[0]); 860 else { 861 // void return. 862 assert(ResultType->isVoidType() && "Should only have a void expr here"); 863 CI = 0; 864 } 865 866 return RValue::get(CI); 867 } 868