1 //===--- CGExprConstant.cpp - Emit LLVM Code from Constant 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 Constant Expr nodes as LLVM code. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CodeGenFunction.h" 15 #include "CodeGenModule.h" 16 #include "CGObjCRuntime.h" 17 #include "clang/AST/APValue.h" 18 #include "clang/AST/ASTContext.h" 19 #include "clang/AST/StmtVisitor.h" 20 #include "llvm/Constants.h" 21 #include "llvm/Function.h" 22 #include "llvm/GlobalVariable.h" 23 #include "llvm/Support/Compiler.h" 24 #include "llvm/Target/TargetData.h" 25 using namespace clang; 26 using namespace CodeGen; 27 28 namespace { 29 class VISIBILITY_HIDDEN ConstExprEmitter : 30 public StmtVisitor<ConstExprEmitter, llvm::Constant*> { 31 CodeGenModule &CGM; 32 CodeGenFunction *CGF; 33 public: 34 ConstExprEmitter(CodeGenModule &cgm, CodeGenFunction *cgf) 35 : CGM(cgm), CGF(cgf) { 36 } 37 38 //===--------------------------------------------------------------------===// 39 // Visitor Methods 40 //===--------------------------------------------------------------------===// 41 42 llvm::Constant *VisitStmt(Stmt *S) { 43 CGM.ErrorUnsupported(S, "constant expression"); 44 QualType T = cast<Expr>(S)->getType(); 45 return llvm::UndefValue::get(CGM.getTypes().ConvertType(T)); 46 } 47 48 llvm::Constant *VisitParenExpr(ParenExpr *PE) { 49 return Visit(PE->getSubExpr()); 50 } 51 52 llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { 53 return Visit(E->getInitializer()); 54 } 55 56 llvm::Constant *VisitCastExpr(CastExpr* E) { 57 // GCC cast to union extension 58 if (E->getType()->isUnionType()) { 59 const llvm::Type *Ty = ConvertType(E->getType()); 60 return EmitUnion(CGM.EmitConstantExpr(E->getSubExpr(), CGF), Ty); 61 } 62 63 llvm::Constant *C = Visit(E->getSubExpr()); 64 65 return EmitConversion(C, E->getSubExpr()->getType(), E->getType()); 66 } 67 68 llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) { 69 return Visit(DAE->getExpr()); 70 } 71 72 llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) { 73 std::vector<llvm::Constant*> Elts; 74 const llvm::ArrayType *AType = 75 cast<llvm::ArrayType>(ConvertType(ILE->getType())); 76 unsigned NumInitElements = ILE->getNumInits(); 77 // FIXME: Check for wide strings 78 if (NumInitElements > 0 && isa<StringLiteral>(ILE->getInit(0)) && 79 ILE->getType()->getArrayElementTypeNoTypeQual()->isCharType()) 80 return Visit(ILE->getInit(0)); 81 const llvm::Type *ElemTy = AType->getElementType(); 82 unsigned NumElements = AType->getNumElements(); 83 84 // Initialising an array requires us to automatically 85 // initialise any elements that have not been initialised explicitly 86 unsigned NumInitableElts = std::min(NumInitElements, NumElements); 87 88 // Copy initializer elements. 89 unsigned i = 0; 90 bool RewriteType = false; 91 for (; i < NumInitableElts; ++i) { 92 llvm::Constant *C = CGM.EmitConstantExpr(ILE->getInit(i), CGF); 93 RewriteType |= (C->getType() != ElemTy); 94 Elts.push_back(C); 95 } 96 97 // Initialize remaining array elements. 98 for (; i < NumElements; ++i) 99 Elts.push_back(llvm::Constant::getNullValue(ElemTy)); 100 101 if (RewriteType) { 102 // FIXME: Try to avoid packing the array 103 std::vector<const llvm::Type*> Types; 104 for (unsigned i = 0; i < Elts.size(); ++i) 105 Types.push_back(Elts[i]->getType()); 106 const llvm::StructType *SType = llvm::StructType::get(Types, true); 107 return llvm::ConstantStruct::get(SType, Elts); 108 } 109 110 return llvm::ConstantArray::get(AType, Elts); 111 } 112 113 void InsertBitfieldIntoStruct(std::vector<llvm::Constant*>& Elts, 114 FieldDecl* Field, Expr* E) { 115 // Calculate the value to insert 116 llvm::Constant *C = CGM.EmitConstantExpr(E, CGF); 117 llvm::ConstantInt *CI = dyn_cast<llvm::ConstantInt>(C); 118 if (!CI) { 119 CGM.ErrorUnsupported(E, "bitfield initialization"); 120 return; 121 } 122 llvm::APInt V = CI->getValue(); 123 124 // Calculate information about the relevant field 125 const llvm::Type* Ty = CI->getType(); 126 const llvm::TargetData &TD = CGM.getTypes().getTargetData(); 127 unsigned size = TD.getTypeStoreSizeInBits(Ty); 128 unsigned fieldOffset = CGM.getTypes().getLLVMFieldNo(Field) * size; 129 CodeGenTypes::BitFieldInfo bitFieldInfo = 130 CGM.getTypes().getBitFieldInfo(Field); 131 fieldOffset += bitFieldInfo.Begin; 132 133 // Find where to start the insertion 134 // FIXME: This is O(n^2) in the number of bit-fields! 135 // FIXME: This won't work if the struct isn't completely packed! 136 unsigned offset = 0, i = 0; 137 while (offset < (fieldOffset & -8)) 138 offset += TD.getTypeStoreSizeInBits(Elts[i++]->getType()); 139 140 // Advance over 0 sized elements (must terminate in bounds since 141 // the bitfield must have a size). 142 while (TD.getTypeStoreSizeInBits(Elts[i]->getType()) == 0) 143 ++i; 144 145 // Promote the size of V if necessary 146 // FIXME: This should never occur, but currently it can because 147 // initializer constants are cast to bool, and because clang is 148 // not enforcing bitfield width limits. 149 if (bitFieldInfo.Size > V.getBitWidth()) 150 V.zext(bitFieldInfo.Size); 151 152 // Insert the bits into the struct 153 // FIXME: This algorthm is only correct on X86! 154 // FIXME: THis algorthm assumes bit-fields only have byte-size elements! 155 unsigned bitsToInsert = bitFieldInfo.Size; 156 unsigned curBits = std::min(8 - (fieldOffset & 7), bitsToInsert); 157 unsigned byte = V.getLoBits(curBits).getZExtValue() << (fieldOffset & 7); 158 do { 159 llvm::Constant* byteC = llvm::ConstantInt::get(llvm::Type::Int8Ty, byte); 160 Elts[i] = llvm::ConstantExpr::getOr(Elts[i], byteC); 161 ++i; 162 V = V.lshr(curBits); 163 bitsToInsert -= curBits; 164 165 if (!bitsToInsert) 166 break; 167 168 curBits = bitsToInsert > 8 ? 8 : bitsToInsert; 169 byte = V.getLoBits(curBits).getZExtValue(); 170 } while (true); 171 } 172 173 llvm::Constant *EmitStructInitialization(InitListExpr *ILE) { 174 const llvm::StructType *SType = 175 cast<llvm::StructType>(ConvertType(ILE->getType())); 176 RecordDecl *RD = ILE->getType()->getAsRecordType()->getDecl(); 177 std::vector<llvm::Constant*> Elts; 178 179 // Initialize the whole structure to zero. 180 for (unsigned i = 0; i < SType->getNumElements(); ++i) { 181 const llvm::Type *FieldTy = SType->getElementType(i); 182 Elts.push_back(llvm::Constant::getNullValue(FieldTy)); 183 } 184 185 // Copy initializer elements. Skip padding fields. 186 unsigned EltNo = 0; // Element no in ILE 187 int FieldNo = 0; // Field no in RecordDecl 188 bool RewriteType = false; 189 for (RecordDecl::field_iterator Field = RD->field_begin(), 190 FieldEnd = RD->field_end(); 191 EltNo < ILE->getNumInits() && Field != FieldEnd; ++Field) { 192 FieldNo++; 193 if (!Field->getIdentifier()) 194 continue; 195 196 if (Field->isBitField()) { 197 InsertBitfieldIntoStruct(Elts, *Field, ILE->getInit(EltNo)); 198 } else { 199 unsigned FieldNo = CGM.getTypes().getLLVMFieldNo(*Field); 200 llvm::Constant *C = CGM.EmitConstantExpr(ILE->getInit(EltNo), CGF); 201 RewriteType |= (C->getType() != Elts[FieldNo]->getType()); 202 Elts[FieldNo] = C; 203 } 204 EltNo++; 205 } 206 207 if (RewriteType) { 208 // FIXME: Make this work for non-packed structs 209 assert(SType->isPacked() && "Cannot recreate unpacked structs"); 210 std::vector<const llvm::Type*> Types; 211 for (unsigned i = 0; i < Elts.size(); ++i) 212 Types.push_back(Elts[i]->getType()); 213 SType = llvm::StructType::get(Types, true); 214 } 215 216 return llvm::ConstantStruct::get(SType, Elts); 217 } 218 219 llvm::Constant *EmitUnion(llvm::Constant *C, const llvm::Type *Ty) { 220 // Build a struct with the union sub-element as the first member, 221 // and padded to the appropriate size 222 std::vector<llvm::Constant*> Elts; 223 std::vector<const llvm::Type*> Types; 224 Elts.push_back(C); 225 Types.push_back(C->getType()); 226 unsigned CurSize = CGM.getTargetData().getTypeStoreSize(C->getType()); 227 unsigned TotalSize = CGM.getTargetData().getTypeStoreSize(Ty); 228 while (CurSize < TotalSize) { 229 Elts.push_back(llvm::Constant::getNullValue(llvm::Type::Int8Ty)); 230 Types.push_back(llvm::Type::Int8Ty); 231 CurSize++; 232 } 233 234 // This always generates a packed struct 235 // FIXME: Try to generate an unpacked struct when we can 236 llvm::StructType* STy = llvm::StructType::get(Types, true); 237 return llvm::ConstantStruct::get(STy, Elts); 238 } 239 240 llvm::Constant *EmitUnionInitialization(InitListExpr *ILE) { 241 RecordDecl *RD = ILE->getType()->getAsRecordType()->getDecl(); 242 const llvm::Type *Ty = ConvertType(ILE->getType()); 243 244 // Find the field decl we're initializing, if any 245 // FIXME: C99 designated initializers won't always initialize the 246 // first field 247 int FieldNo = 0; // Field no in RecordDecl 248 FieldDecl* curField = 0; 249 for (RecordDecl::field_iterator Field = RD->field_begin(), 250 FieldEnd = RD->field_end(); 251 Field != FieldEnd; ++Field) { 252 curField = *Field; 253 FieldNo++; 254 if (curField->getIdentifier()) 255 break; 256 } 257 258 if (!curField || !curField->getIdentifier() || ILE->getNumInits() == 0) 259 return llvm::Constant::getNullValue(Ty); 260 261 if (curField->isBitField()) { 262 // Create a dummy struct for bit-field insertion 263 unsigned NumElts = CGM.getTargetData().getTypePaddedSize(Ty) / 8; 264 llvm::Constant* NV = llvm::Constant::getNullValue(llvm::Type::Int8Ty); 265 std::vector<llvm::Constant*> Elts(NumElts, NV); 266 267 InsertBitfieldIntoStruct(Elts, curField, ILE->getInit(0)); 268 const llvm::ArrayType *RetTy = 269 llvm::ArrayType::get(NV->getType(), NumElts); 270 return llvm::ConstantArray::get(RetTy, Elts); 271 } 272 273 return EmitUnion(CGM.EmitConstantExpr(ILE->getInit(0), CGF), Ty); 274 } 275 276 llvm::Constant *EmitVectorInitialization(InitListExpr *ILE) { 277 const llvm::VectorType *VType = 278 cast<llvm::VectorType>(ConvertType(ILE->getType())); 279 const llvm::Type *ElemTy = VType->getElementType(); 280 std::vector<llvm::Constant*> Elts; 281 unsigned NumElements = VType->getNumElements(); 282 unsigned NumInitElements = ILE->getNumInits(); 283 284 unsigned NumInitableElts = std::min(NumInitElements, NumElements); 285 286 // Copy initializer elements. 287 unsigned i = 0; 288 for (; i < NumInitableElts; ++i) { 289 llvm::Constant *C = CGM.EmitConstantExpr(ILE->getInit(i), CGF); 290 Elts.push_back(C); 291 } 292 293 for (; i < NumElements; ++i) 294 Elts.push_back(llvm::Constant::getNullValue(ElemTy)); 295 296 return llvm::ConstantVector::get(VType, Elts); 297 } 298 299 llvm::Constant *VisitInitListExpr(InitListExpr *ILE) { 300 if (ILE->getType()->isScalarType()) { 301 // We have a scalar in braces. Just use the first element. 302 if (ILE->getNumInits() > 0) 303 return CGM.EmitConstantExpr(ILE->getInit(0), CGF); 304 305 const llvm::Type* RetTy = CGM.getTypes().ConvertType(ILE->getType()); 306 return llvm::Constant::getNullValue(RetTy); 307 } 308 309 if (ILE->getType()->isArrayType()) 310 return EmitArrayInitialization(ILE); 311 312 if (ILE->getType()->isStructureType()) 313 return EmitStructInitialization(ILE); 314 315 if (ILE->getType()->isUnionType()) 316 return EmitUnionInitialization(ILE); 317 318 if (ILE->getType()->isVectorType()) 319 return EmitVectorInitialization(ILE); 320 321 assert(0 && "Unable to handle InitListExpr"); 322 // Get rid of control reaches end of void function warning. 323 // Not reached. 324 return 0; 325 } 326 327 llvm::Constant *VisitImplicitCastExpr(ImplicitCastExpr *ICExpr) { 328 Expr* SExpr = ICExpr->getSubExpr(); 329 QualType SType = SExpr->getType(); 330 llvm::Constant *C; // the intermediate expression 331 QualType T; // the type of the intermediate expression 332 if (SType->isArrayType()) { 333 // Arrays decay to a pointer to the first element 334 // VLAs would require special handling, but they can't occur here 335 C = EmitLValue(SExpr); 336 llvm::Constant *Idx0 = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0); 337 llvm::Constant *Ops[] = {Idx0, Idx0}; 338 C = llvm::ConstantExpr::getGetElementPtr(C, Ops, 2); 339 T = CGM.getContext().getArrayDecayedType(SType); 340 } else if (SType->isFunctionType()) { 341 // Function types decay to a pointer to the function 342 C = EmitLValue(SExpr); 343 T = CGM.getContext().getPointerType(SType); 344 } else { 345 C = Visit(SExpr); 346 T = SType; 347 } 348 349 // Perform the conversion; note that an implicit cast can both promote 350 // and convert an array/function 351 return EmitConversion(C, T, ICExpr->getType()); 352 } 353 354 llvm::Constant *VisitStringLiteral(StringLiteral *E) { 355 assert(!E->getType()->isPointerType() && "Strings are always arrays"); 356 357 // Otherwise this must be a string initializing an array in a static 358 // initializer. Don't emit it as the address of the string, emit the string 359 // data itself as an inline array. 360 return llvm::ConstantArray::get(CGM.GetStringForStringLiteral(E), false); 361 } 362 363 llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) { 364 return Visit(E->getSubExpr()); 365 } 366 367 // Utility methods 368 const llvm::Type *ConvertType(QualType T) { 369 return CGM.getTypes().ConvertType(T); 370 } 371 372 llvm::Constant *EmitConversionToBool(llvm::Constant *Src, QualType SrcType) { 373 assert(SrcType->isCanonical() && "EmitConversion strips typedefs"); 374 375 if (SrcType->isRealFloatingType()) { 376 // Compare against 0.0 for fp scalars. 377 llvm::Constant *Zero = llvm::Constant::getNullValue(Src->getType()); 378 return llvm::ConstantExpr::getFCmp(llvm::FCmpInst::FCMP_UNE, Src, Zero); 379 } 380 381 assert((SrcType->isIntegerType() || SrcType->isPointerType()) && 382 "Unknown scalar type to convert"); 383 384 // Compare against an integer or pointer null. 385 llvm::Constant *Zero = llvm::Constant::getNullValue(Src->getType()); 386 return llvm::ConstantExpr::getICmp(llvm::ICmpInst::ICMP_NE, Src, Zero); 387 } 388 389 llvm::Constant *EmitConversion(llvm::Constant *Src, QualType SrcType, 390 QualType DstType) { 391 SrcType = CGM.getContext().getCanonicalType(SrcType); 392 DstType = CGM.getContext().getCanonicalType(DstType); 393 if (SrcType == DstType) return Src; 394 395 // Handle conversions to bool first, they are special: comparisons against 0. 396 if (DstType->isBooleanType()) 397 return EmitConversionToBool(Src, SrcType); 398 399 const llvm::Type *DstTy = ConvertType(DstType); 400 401 // Ignore conversions like int -> uint. 402 if (Src->getType() == DstTy) 403 return Src; 404 405 // Handle pointer conversions next: pointers can only be converted to/from 406 // other pointers and integers. 407 if (isa<llvm::PointerType>(DstTy)) { 408 // The source value may be an integer, or a pointer. 409 if (isa<llvm::PointerType>(Src->getType())) 410 return llvm::ConstantExpr::getBitCast(Src, DstTy); 411 assert(SrcType->isIntegerType() &&"Not ptr->ptr or int->ptr conversion?"); 412 return llvm::ConstantExpr::getIntToPtr(Src, DstTy); 413 } 414 415 if (isa<llvm::PointerType>(Src->getType())) { 416 // Must be an ptr to int cast. 417 assert(isa<llvm::IntegerType>(DstTy) && "not ptr->int?"); 418 return llvm::ConstantExpr::getPtrToInt(Src, DstTy); 419 } 420 421 // A scalar source can be splatted to a vector of the same element type 422 if (isa<llvm::VectorType>(DstTy) && !isa<VectorType>(SrcType)) { 423 assert((cast<llvm::VectorType>(DstTy)->getElementType() 424 == Src->getType()) && 425 "Vector element type must match scalar type to splat."); 426 unsigned NumElements = DstType->getAsVectorType()->getNumElements(); 427 llvm::SmallVector<llvm::Constant*, 16> Elements; 428 for (unsigned i = 0; i < NumElements; i++) 429 Elements.push_back(Src); 430 431 return llvm::ConstantVector::get(&Elements[0], NumElements); 432 } 433 434 if (isa<llvm::VectorType>(Src->getType()) || 435 isa<llvm::VectorType>(DstTy)) { 436 return llvm::ConstantExpr::getBitCast(Src, DstTy); 437 } 438 439 // Finally, we have the arithmetic types: real int/float. 440 if (isa<llvm::IntegerType>(Src->getType())) { 441 bool InputSigned = SrcType->isSignedIntegerType(); 442 if (isa<llvm::IntegerType>(DstTy)) 443 return llvm::ConstantExpr::getIntegerCast(Src, DstTy, InputSigned); 444 else if (InputSigned) 445 return llvm::ConstantExpr::getSIToFP(Src, DstTy); 446 else 447 return llvm::ConstantExpr::getUIToFP(Src, DstTy); 448 } 449 450 assert(Src->getType()->isFloatingPoint() && "Unknown real conversion"); 451 if (isa<llvm::IntegerType>(DstTy)) { 452 if (DstType->isSignedIntegerType()) 453 return llvm::ConstantExpr::getFPToSI(Src, DstTy); 454 else 455 return llvm::ConstantExpr::getFPToUI(Src, DstTy); 456 } 457 458 assert(DstTy->isFloatingPoint() && "Unknown real conversion"); 459 if (DstTy->getTypeID() < Src->getType()->getTypeID()) 460 return llvm::ConstantExpr::getFPTrunc(Src, DstTy); 461 else 462 return llvm::ConstantExpr::getFPExtend(Src, DstTy); 463 } 464 465 public: 466 llvm::Constant *EmitLValue(Expr *E) { 467 switch (E->getStmtClass()) { 468 default: break; 469 case Expr::ParenExprClass: 470 // Elide parenthesis 471 return EmitLValue(cast<ParenExpr>(E)->getSubExpr()); 472 case Expr::CompoundLiteralExprClass: { 473 // Note that due to the nature of compound literals, this is guaranteed 474 // to be the only use of the variable, so we just generate it here. 475 CompoundLiteralExpr *CLE = cast<CompoundLiteralExpr>(E); 476 llvm::Constant* C = Visit(CLE->getInitializer()); 477 C = new llvm::GlobalVariable(C->getType(),E->getType().isConstQualified(), 478 llvm::GlobalValue::InternalLinkage, 479 C, ".compoundliteral", &CGM.getModule()); 480 return C; 481 } 482 case Expr::DeclRefExprClass: 483 case Expr::QualifiedDeclRefExprClass: { 484 NamedDecl *Decl = cast<DeclRefExpr>(E)->getDecl(); 485 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl)) 486 return CGM.GetAddrOfFunction(FD); 487 if (const VarDecl* VD = dyn_cast<VarDecl>(Decl)) { 488 if (VD->isFileVarDecl()) 489 return CGM.GetAddrOfGlobalVar(VD); 490 else if (VD->isBlockVarDecl()) { 491 assert(CGF && "Can't access static local vars without CGF"); 492 return CGF->GetAddrOfStaticLocalVar(VD); 493 } 494 } 495 break; 496 } 497 case Expr::MemberExprClass: { 498 MemberExpr* ME = cast<MemberExpr>(E); 499 llvm::Constant *Base; 500 if (ME->isArrow()) 501 Base = Visit(ME->getBase()); 502 else 503 Base = EmitLValue(ME->getBase()); 504 505 FieldDecl *Field = dyn_cast<FieldDecl>(ME->getMemberDecl()); 506 // FIXME: Handle other kinds of member expressions. 507 assert(Field && "No code generation for non-field member expressions"); 508 unsigned FieldNumber = CGM.getTypes().getLLVMFieldNo(Field); 509 llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0); 510 llvm::Constant *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, 511 FieldNumber); 512 llvm::Value *Ops[] = {Zero, Idx}; 513 return llvm::ConstantExpr::getGetElementPtr(Base, Ops, 2); 514 } 515 case Expr::ArraySubscriptExprClass: { 516 ArraySubscriptExpr* ASExpr = cast<ArraySubscriptExpr>(E); 517 llvm::Constant *Base = Visit(ASExpr->getBase()); 518 llvm::Constant *Index = Visit(ASExpr->getIdx()); 519 assert(!ASExpr->getBase()->getType()->isVectorType() && 520 "Taking the address of a vector component is illegal!"); 521 return llvm::ConstantExpr::getGetElementPtr(Base, &Index, 1); 522 } 523 case Expr::StringLiteralClass: 524 return CGM.GetAddrOfConstantStringFromLiteral(cast<StringLiteral>(E)); 525 case Expr::ObjCStringLiteralClass: { 526 ObjCStringLiteral* SL = cast<ObjCStringLiteral>(E); 527 std::string S(SL->getString()->getStrData(), 528 SL->getString()->getByteLength()); 529 llvm::Constant *C = CGM.getObjCRuntime().GenerateConstantString(S); 530 return llvm::ConstantExpr::getBitCast(C, ConvertType(E->getType())); 531 } 532 case Expr::UnaryOperatorClass: { 533 UnaryOperator *Exp = cast<UnaryOperator>(E); 534 switch (Exp->getOpcode()) { 535 default: break; 536 case UnaryOperator::Extension: 537 // Extension is just a wrapper for expressions 538 return EmitLValue(Exp->getSubExpr()); 539 case UnaryOperator::Real: 540 case UnaryOperator::Imag: { 541 // The address of __real or __imag is just a GEP off the address 542 // of the internal expression 543 llvm::Constant* C = EmitLValue(Exp->getSubExpr()); 544 llvm::Constant *Zero = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0); 545 llvm::Constant *Idx = llvm::ConstantInt::get(llvm::Type::Int32Ty, 546 Exp->getOpcode() == UnaryOperator::Imag); 547 llvm::Value *Ops[] = {Zero, Idx}; 548 return llvm::ConstantExpr::getGetElementPtr(C, Ops, 2); 549 } 550 case UnaryOperator::Deref: 551 // The address of a deref is just the value of the expression 552 return Visit(Exp->getSubExpr()); 553 } 554 break; 555 } 556 557 case Expr::PredefinedExprClass: { 558 // __func__/__FUNCTION__ -> "". __PRETTY_FUNCTION__ -> "top level". 559 std::string Str; 560 if (cast<PredefinedExpr>(E)->getIdentType() == 561 PredefinedExpr::PrettyFunction) 562 Str = "top level"; 563 564 return CGM.GetAddrOfConstantCString(Str, ".tmp"); 565 } 566 case Expr::AddrLabelExprClass: { 567 assert(CGF && "Invalid address of label expression outside function."); 568 unsigned id = CGF->GetIDForAddrOfLabel(cast<AddrLabelExpr>(E)->getLabel()); 569 llvm::Constant *C = llvm::ConstantInt::get(llvm::Type::Int32Ty, id); 570 return llvm::ConstantExpr::getIntToPtr(C, ConvertType(E->getType())); 571 } 572 case Expr::CallExprClass: { 573 CallExpr* CE = cast<CallExpr>(E); 574 if (CE->isBuiltinCall() != Builtin::BI__builtin___CFStringMakeConstantString) 575 break; 576 const Expr *Arg = CE->getArg(0)->IgnoreParenCasts(); 577 const StringLiteral *Literal = cast<StringLiteral>(Arg); 578 std::string S(Literal->getStrData(), Literal->getByteLength()); 579 return CGM.GetAddrOfConstantCFString(S); 580 } 581 } 582 CGM.ErrorUnsupported(E, "constant l-value expression"); 583 llvm::Type *Ty = llvm::PointerType::getUnqual(ConvertType(E->getType())); 584 return llvm::UndefValue::get(Ty); 585 } 586 }; 587 588 } // end anonymous namespace. 589 590 llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, 591 CodeGenFunction *CGF) { 592 QualType type = Context.getCanonicalType(E->getType()); 593 594 Expr::EvalResult Result; 595 596 if (E->Evaluate(Result, Context)) { 597 assert(!Result.HasSideEffects && 598 "Constant expr should not have any side effects!"); 599 switch (Result.Val.getKind()) { 600 case APValue::Uninitialized: 601 assert(0 && "Constant expressions should be uninitialized."); 602 return llvm::UndefValue::get(getTypes().ConvertType(type)); 603 case APValue::LValue: { 604 llvm::Constant *Offset = 605 llvm::ConstantInt::get(llvm::Type::Int64Ty, 606 Result.Val.getLValueOffset()); 607 608 if (const Expr *LVBase = Result.Val.getLValueBase()) { 609 llvm::Constant *C = 610 ConstExprEmitter(*this, CGF).EmitLValue(const_cast<Expr*>(LVBase)); 611 612 const llvm::Type *Type = 613 llvm::PointerType::getUnqual(llvm::Type::Int8Ty); 614 const llvm::Type *DestType = getTypes().ConvertTypeForMem(E->getType()); 615 616 // FIXME: It's a little ugly that we need to cast to a pointer, 617 // apply the GEP and then cast back. 618 C = llvm::ConstantExpr::getBitCast(C, Type); 619 C = llvm::ConstantExpr::getGetElementPtr(C, &Offset, 1); 620 621 return llvm::ConstantExpr::getBitCast(C, DestType); 622 } 623 624 return llvm::ConstantExpr::getIntToPtr(Offset, 625 getTypes().ConvertType(type)); 626 } 627 case APValue::Int: { 628 llvm::Constant *C = llvm::ConstantInt::get(Result.Val.getInt()); 629 630 if (C->getType() == llvm::Type::Int1Ty) { 631 const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType()); 632 C = llvm::ConstantExpr::getZExt(C, BoolTy); 633 } 634 return C; 635 } 636 case APValue::ComplexInt: { 637 llvm::Constant *Complex[2]; 638 639 Complex[0] = llvm::ConstantInt::get(Result.Val.getComplexIntReal()); 640 Complex[1] = llvm::ConstantInt::get(Result.Val.getComplexIntImag()); 641 642 return llvm::ConstantStruct::get(Complex, 2); 643 } 644 case APValue::Float: 645 return llvm::ConstantFP::get(Result.Val.getFloat()); 646 case APValue::ComplexFloat: { 647 llvm::Constant *Complex[2]; 648 649 Complex[0] = llvm::ConstantFP::get(Result.Val.getComplexFloatReal()); 650 Complex[1] = llvm::ConstantFP::get(Result.Val.getComplexFloatImag()); 651 652 return llvm::ConstantStruct::get(Complex, 2); 653 } 654 case APValue::Vector: { 655 llvm::SmallVector<llvm::Constant *, 4> Inits; 656 unsigned NumElts = Result.Val.getVectorLength(); 657 658 for (unsigned i = 0; i != NumElts; ++i) { 659 APValue &Elt = Result.Val.getVectorElt(i); 660 if (Elt.isInt()) 661 Inits.push_back(llvm::ConstantInt::get(Elt.getInt())); 662 else 663 Inits.push_back(llvm::ConstantFP::get(Elt.getFloat())); 664 } 665 return llvm::ConstantVector::get(&Inits[0], Inits.size()); 666 } 667 } 668 } 669 670 llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E)); 671 if (C->getType() == llvm::Type::Int1Ty) { 672 const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType()); 673 C = llvm::ConstantExpr::getZExt(C, BoolTy); 674 } 675 return C; 676 } 677