1 //===--- CodeGenModule.cpp - Emit LLVM Code from ASTs for a Module --------===// 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 coordinates the per-module state used while generating code. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CGDebugInfo.h" 15 #include "CodeGenModule.h" 16 #include "CodeGenFunction.h" 17 #include "clang/AST/ASTContext.h" 18 #include "clang/AST/Decl.h" 19 #include "clang/Basic/Diagnostic.h" 20 #include "clang/Basic/LangOptions.h" 21 #include "clang/Basic/SourceManager.h" 22 #include "clang/Basic/TargetInfo.h" 23 #include "llvm/CallingConv.h" 24 #include "llvm/Constants.h" 25 #include "llvm/DerivedTypes.h" 26 #include "llvm/Module.h" 27 #include "llvm/Intrinsics.h" 28 #include "llvm/Target/TargetData.h" 29 #include "llvm/Analysis/Verifier.h" 30 #include <algorithm> 31 using namespace clang; 32 using namespace CodeGen; 33 34 35 CodeGenModule::CodeGenModule(ASTContext &C, const LangOptions &LO, 36 llvm::Module &M, const llvm::TargetData &TD, 37 Diagnostic &diags, bool GenerateDebugInfo) 38 : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags), 39 Types(C, M, TD), MemCpyFn(0), MemMoveFn(0), MemSetFn(0), 40 CFConstantStringClassRef(0) { 41 //TODO: Make this selectable at runtime 42 Runtime = CreateObjCRuntime(M, 43 getTypes().ConvertType(getContext().IntTy), 44 getTypes().ConvertType(getContext().LongTy)); 45 46 // If debug info generation is enabled, create the CGDebugInfo object. 47 if (GenerateDebugInfo) 48 DebugInfo = new CGDebugInfo(this); 49 else 50 DebugInfo = NULL; 51 } 52 53 CodeGenModule::~CodeGenModule() { 54 EmitStatics(); 55 llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction(); 56 if (ObjCInitFunction) 57 AddGlobalCtor(ObjCInitFunction); 58 EmitGlobalCtors(); 59 EmitAnnotations(); 60 delete Runtime; 61 delete DebugInfo; 62 // Run the verifier to check that the generated code is consistent. 63 assert(!verifyModule(TheModule)); 64 } 65 66 /// WarnUnsupported - Print out a warning that codegen doesn't support the 67 /// specified stmt yet. 68 void CodeGenModule::WarnUnsupported(const Stmt *S, const char *Type) { 69 unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Warning, 70 "cannot codegen this %0 yet"); 71 SourceRange Range = S->getSourceRange(); 72 std::string Msg = Type; 73 getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID, 74 &Msg, 1, &Range, 1); 75 } 76 77 /// WarnUnsupported - Print out a warning that codegen doesn't support the 78 /// specified decl yet. 79 void CodeGenModule::WarnUnsupported(const Decl *D, const char *Type) { 80 unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Warning, 81 "cannot codegen this %0 yet"); 82 std::string Msg = Type; 83 getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID, 84 &Msg, 1); 85 } 86 87 /// setVisibility - Set the visibility for the given LLVM GlobalValue 88 /// according to the given clang AST visibility value. 89 void CodeGenModule::setVisibility(llvm::GlobalValue *GV, 90 VisibilityAttr::VisibilityTypes Vis) { 91 switch (Vis) { 92 default: assert(0 && "Unknown visibility!"); 93 case VisibilityAttr::DefaultVisibility: 94 GV->setVisibility(llvm::GlobalValue::DefaultVisibility); 95 break; 96 case VisibilityAttr::HiddenVisibility: 97 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); 98 break; 99 case VisibilityAttr::ProtectedVisibility: 100 GV->setVisibility(llvm::GlobalValue::ProtectedVisibility); 101 break; 102 } 103 } 104 105 /// AddGlobalCtor - Add a function to the list that will be called before 106 /// main() runs. 107 void CodeGenModule::AddGlobalCtor(llvm::Function * Ctor) { 108 // TODO: Type coercion of void()* types. 109 GlobalCtors.push_back(Ctor); 110 } 111 112 /// EmitGlobalCtors - Generates the array of contsturctor functions to be 113 /// called on module load, if any have been registered with AddGlobalCtor. 114 void CodeGenModule::EmitGlobalCtors() { 115 if (GlobalCtors.empty()) return; 116 117 // Get the type of @llvm.global_ctors 118 std::vector<const llvm::Type*> CtorFields; 119 CtorFields.push_back(llvm::IntegerType::get(32)); 120 // Constructor function type 121 std::vector<const llvm::Type*> VoidArgs; 122 llvm::FunctionType* CtorFuncTy = 123 llvm::FunctionType::get(llvm::Type::VoidTy, VoidArgs, false); 124 125 // i32, function type pair 126 const llvm::Type *FPType = llvm::PointerType::getUnqual(CtorFuncTy); 127 llvm::StructType* CtorStructTy = 128 llvm::StructType::get(llvm::Type::Int32Ty, FPType, NULL); 129 // Array of fields 130 llvm::ArrayType* GlobalCtorsTy = 131 llvm::ArrayType::get(CtorStructTy, GlobalCtors.size()); 132 133 // Define the global variable 134 llvm::GlobalVariable *GlobalCtorsVal = 135 new llvm::GlobalVariable(GlobalCtorsTy, false, 136 llvm::GlobalValue::AppendingLinkage, 137 (llvm::Constant*)0, "llvm.global_ctors", 138 &TheModule); 139 140 // Populate the array 141 std::vector<llvm::Constant*> CtorValues; 142 llvm::Constant *MagicNumber = 143 llvm::ConstantInt::get(llvm::Type::Int32Ty, 65535, false); 144 std::vector<llvm::Constant*> StructValues; 145 for (std::vector<llvm::Constant*>::iterator I = GlobalCtors.begin(), 146 E = GlobalCtors.end(); I != E; ++I) { 147 StructValues.clear(); 148 StructValues.push_back(MagicNumber); 149 StructValues.push_back(*I); 150 151 CtorValues.push_back(llvm::ConstantStruct::get(CtorStructTy, StructValues)); 152 } 153 154 GlobalCtorsVal->setInitializer(llvm::ConstantArray::get(GlobalCtorsTy, 155 CtorValues)); 156 } 157 158 159 160 void CodeGenModule::EmitAnnotations() { 161 if (Annotations.empty()) 162 return; 163 164 // Create a new global variable for the ConstantStruct in the Module. 165 llvm::Constant *Array = 166 llvm::ConstantArray::get(llvm::ArrayType::get(Annotations[0]->getType(), 167 Annotations.size()), 168 Annotations); 169 llvm::GlobalValue *gv = 170 new llvm::GlobalVariable(Array->getType(), false, 171 llvm::GlobalValue::AppendingLinkage, Array, 172 "llvm.global.annotations", &TheModule); 173 gv->setSection("llvm.metadata"); 174 } 175 176 /// ReplaceMapValuesWith - This is a really slow and bad function that 177 /// searches for any entries in GlobalDeclMap that point to OldVal, changing 178 /// them to point to NewVal. This is badbadbad, FIXME! 179 void CodeGenModule::ReplaceMapValuesWith(llvm::Constant *OldVal, 180 llvm::Constant *NewVal) { 181 for (llvm::DenseMap<const Decl*, llvm::Constant*>::iterator 182 I = GlobalDeclMap.begin(), E = GlobalDeclMap.end(); I != E; ++I) 183 if (I->second == OldVal) I->second = NewVal; 184 } 185 186 187 llvm::Constant *CodeGenModule::GetAddrOfFunctionDecl(const FunctionDecl *D, 188 bool isDefinition) { 189 // See if it is already in the map. If so, just return it. 190 llvm::Constant *&Entry = GlobalDeclMap[D]; 191 if (!isDefinition && Entry) return Entry; 192 193 const llvm::Type *Ty = getTypes().ConvertType(D->getType()); 194 195 // Check to see if the function already exists. 196 llvm::Function *F = getModule().getFunction(D->getName()); 197 const llvm::FunctionType *FTy = cast<llvm::FunctionType>(Ty); 198 199 // If it doesn't already exist, just create and return an entry. 200 if (F == 0) { 201 // FIXME: param attributes for sext/zext etc. 202 F = llvm::Function::Create(FTy, llvm::Function::ExternalLinkage, 203 D->getName(), &getModule()); 204 205 // Set the appropriate calling convention for the Function. 206 if (D->getAttr<FastCallAttr>()) 207 F->setCallingConv(llvm::CallingConv::Fast); 208 return Entry = F; 209 } 210 211 // If the pointer type matches, just return it. 212 llvm::Type *PFTy = llvm::PointerType::getUnqual(Ty); 213 if (PFTy == F->getType()) return Entry = F; 214 215 // If this isn't a definition, just return it casted to the right type. 216 if (!isDefinition) 217 return Entry = llvm::ConstantExpr::getBitCast(F, PFTy); 218 219 // Otherwise, we have a definition after a prototype with the wrong type. 220 // F is the Function* for the one with the wrong type, we must make a new 221 // Function* and update everything that used F (a declaration) with the new 222 // Function* (which will be a definition). 223 // 224 // This happens if there is a prototype for a function (e.g. "int f()") and 225 // then a definition of a different type (e.g. "int f(int x)"). Start by 226 // making a new function of the correct type, RAUW, then steal the name. 227 llvm::Function *NewFn = llvm::Function::Create(FTy, 228 llvm::Function::ExternalLinkage, 229 "", &getModule()); 230 NewFn->takeName(F); 231 232 // Replace uses of F with the Function we will endow with a body. 233 llvm::Constant *NewPtrForOldDecl = 234 llvm::ConstantExpr::getBitCast(NewFn, F->getType()); 235 F->replaceAllUsesWith(NewPtrForOldDecl); 236 237 // FIXME: Update the globaldeclmap for the previous decl of this name. We 238 // really want a way to walk all of these, but we don't have it yet. This 239 // is incredibly slow! 240 ReplaceMapValuesWith(F, NewPtrForOldDecl); 241 242 // Ok, delete the old function now, which is dead. 243 assert(F->isDeclaration() && "Shouldn't replace non-declaration"); 244 F->eraseFromParent(); 245 246 // Return the new function which has the right type. 247 return Entry = NewFn; 248 } 249 250 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D, 251 bool isDefinition) { 252 assert(D->hasGlobalStorage() && "Not a global variable"); 253 assert(!isDefinition && "This shouldn't be called for definitions!"); 254 255 // See if it is already in the map. 256 llvm::Constant *&Entry = GlobalDeclMap[D]; 257 if (Entry) return Entry; 258 259 QualType ASTTy = D->getType(); 260 const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy); 261 262 // Check to see if the global already exists. 263 llvm::GlobalVariable *GV = getModule().getGlobalVariable(D->getName(), true); 264 265 // If it doesn't already exist, just create and return an entry. 266 if (GV == 0) { 267 return Entry = new llvm::GlobalVariable(Ty, false, 268 llvm::GlobalValue::ExternalLinkage, 269 0, D->getName(), &getModule(), 0, 270 ASTTy.getAddressSpace()); 271 } 272 273 // Otherwise, it already exists; return the existing version 274 llvm::PointerType *PTy = llvm::PointerType::get(Ty, ASTTy.getAddressSpace()); 275 return Entry = llvm::ConstantExpr::getBitCast(GV, PTy); 276 } 277 278 void CodeGenModule::EmitObjCMethod(const ObjCMethodDecl *OMD) { 279 // If this is not a prototype, emit the body. 280 if (OMD->getBody()) 281 CodeGenFunction(*this).GenerateObjCMethod(OMD); 282 } 283 void CodeGenModule::EmitObjCProtocolImplementation(const ObjCProtocolDecl *PD){ 284 llvm::SmallVector<std::string, 16> Protocols; 285 for (unsigned i = 0, e = PD->getNumReferencedProtocols() ; i < e ; i++) 286 Protocols.push_back(PD->getReferencedProtocols()[i]->getName()); 287 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodNames; 288 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodTypes; 289 for (ObjCProtocolDecl::instmeth_iterator iter = PD->instmeth_begin(), 290 endIter = PD->instmeth_end() ; iter != endIter ; iter++) { 291 std::string TypeStr; 292 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 293 InstanceMethodNames.push_back( 294 GetAddrOfConstantString((*iter)->getSelector().getName())); 295 InstanceMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 296 } 297 // Collect information about class methods: 298 llvm::SmallVector<llvm::Constant*, 16> ClassMethodNames; 299 llvm::SmallVector<llvm::Constant*, 16> ClassMethodTypes; 300 for (ObjCProtocolDecl::classmeth_iterator iter = PD->classmeth_begin(), 301 endIter = PD->classmeth_end() ; iter != endIter ; iter++) { 302 std::string TypeStr; 303 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 304 ClassMethodNames.push_back( 305 GetAddrOfConstantString((*iter)->getSelector().getName())); 306 ClassMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 307 } 308 Runtime->GenerateProtocol(PD->getName(), Protocols, InstanceMethodNames, 309 InstanceMethodTypes, ClassMethodNames, ClassMethodTypes); 310 } 311 312 void CodeGenModule::EmitObjCCategoryImpl(const ObjCCategoryImplDecl *OCD) { 313 314 // Collect information about instance methods 315 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodNames; 316 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodTypes; 317 for (ObjCCategoryDecl::instmeth_iterator iter = OCD->instmeth_begin(), 318 endIter = OCD->instmeth_end() ; iter != endIter ; iter++) { 319 std::string TypeStr; 320 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 321 InstanceMethodNames.push_back( 322 GetAddrOfConstantString((*iter)->getSelector().getName())); 323 InstanceMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 324 } 325 326 // Collect information about class methods 327 llvm::SmallVector<llvm::Constant*, 16> ClassMethodNames; 328 llvm::SmallVector<llvm::Constant*, 16> ClassMethodTypes; 329 for (ObjCCategoryDecl::classmeth_iterator iter = OCD->classmeth_begin(), 330 endIter = OCD->classmeth_end() ; iter != endIter ; iter++) { 331 std::string TypeStr; 332 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 333 ClassMethodNames.push_back( 334 GetAddrOfConstantString((*iter)->getSelector().getName())); 335 ClassMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 336 } 337 338 // Collect the names of referenced protocols 339 llvm::SmallVector<std::string, 16> Protocols; 340 ObjCInterfaceDecl * ClassDecl = (ObjCInterfaceDecl*)OCD->getClassInterface(); 341 for (unsigned i=0 ; i<ClassDecl->getNumIntfRefProtocols() ; i++) 342 Protocols.push_back(ClassDecl->getReferencedProtocols()[i]->getName()); 343 344 // Generate the category 345 Runtime->GenerateCategory(OCD->getClassInterface()->getName(), 346 OCD->getName(), InstanceMethodNames, InstanceMethodTypes, 347 ClassMethodNames, ClassMethodTypes, Protocols); 348 } 349 350 void CodeGenModule::EmitObjCClassImplementation( 351 const ObjCImplementationDecl *OID) { 352 // Get the superclass name. 353 const ObjCInterfaceDecl * SCDecl = OID->getClassInterface()->getSuperClass(); 354 const char * SCName = NULL; 355 if (SCDecl) { 356 SCName = SCDecl->getName(); 357 } 358 359 // Get the class name 360 ObjCInterfaceDecl * ClassDecl = (ObjCInterfaceDecl*)OID->getClassInterface(); 361 const char * ClassName = ClassDecl->getName(); 362 363 // Get the size of instances. For runtimes that support late-bound instances 364 // this should probably be something different (size just of instance 365 // varaibles in this class, not superclasses?). 366 int instanceSize = 0; 367 const llvm::Type *ObjTy; 368 if (!Runtime->LateBoundIVars()) { 369 ObjTy = getTypes().ConvertType(Context.getObjCInterfaceType(ClassDecl)); 370 instanceSize = TheTargetData.getABITypeSize(ObjTy); 371 } 372 373 // Collect information about instance variables. 374 llvm::SmallVector<llvm::Constant*, 16> IvarNames; 375 llvm::SmallVector<llvm::Constant*, 16> IvarTypes; 376 llvm::SmallVector<llvm::Constant*, 16> IvarOffsets; 377 const llvm::StructLayout *Layout = 378 TheTargetData.getStructLayout(cast<llvm::StructType>(ObjTy)); 379 ObjTy = llvm::PointerType::getUnqual(ObjTy); 380 for (ObjCInterfaceDecl::ivar_iterator iter = ClassDecl->ivar_begin(), 381 endIter = ClassDecl->ivar_end() ; iter != endIter ; iter++) { 382 // Store the name 383 IvarNames.push_back(GetAddrOfConstantString((*iter)->getName())); 384 // Get the type encoding for this ivar 385 std::string TypeStr; 386 llvm::SmallVector<const RecordType *, 8> EncodingRecordTypes; 387 Context.getObjCEncodingForType((*iter)->getType(), TypeStr, 388 EncodingRecordTypes); 389 IvarTypes.push_back(GetAddrOfConstantString(TypeStr)); 390 // Get the offset 391 int offset = 392 (int)Layout->getElementOffset(getTypes().getLLVMFieldNo(*iter)); 393 IvarOffsets.push_back( 394 llvm::ConstantInt::get(llvm::Type::Int32Ty, offset)); 395 } 396 397 // Collect information about instance methods 398 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodNames; 399 llvm::SmallVector<llvm::Constant*, 16> InstanceMethodTypes; 400 for (ObjCImplementationDecl::instmeth_iterator iter = OID->instmeth_begin(), 401 endIter = OID->instmeth_end() ; iter != endIter ; iter++) { 402 std::string TypeStr; 403 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 404 InstanceMethodNames.push_back( 405 GetAddrOfConstantString((*iter)->getSelector().getName())); 406 InstanceMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 407 } 408 409 // Collect information about class methods 410 llvm::SmallVector<llvm::Constant*, 16> ClassMethodNames; 411 llvm::SmallVector<llvm::Constant*, 16> ClassMethodTypes; 412 for (ObjCImplementationDecl::classmeth_iterator iter = OID->classmeth_begin(), 413 endIter = OID->classmeth_end() ; iter != endIter ; iter++) { 414 std::string TypeStr; 415 Context.getObjCEncodingForMethodDecl((*iter),TypeStr); 416 ClassMethodNames.push_back( 417 GetAddrOfConstantString((*iter)->getSelector().getName())); 418 ClassMethodTypes.push_back(GetAddrOfConstantString(TypeStr)); 419 } 420 // Collect the names of referenced protocols 421 llvm::SmallVector<std::string, 16> Protocols; 422 for (unsigned i = 0, e = ClassDecl->getNumIntfRefProtocols() ; i < e ; i++) 423 Protocols.push_back(ClassDecl->getReferencedProtocols()[i]->getName()); 424 425 // Generate the category 426 Runtime->GenerateClass(ClassName, SCName, instanceSize, IvarNames, IvarTypes, 427 IvarOffsets, InstanceMethodNames, InstanceMethodTypes, ClassMethodNames, 428 ClassMethodTypes, Protocols); 429 } 430 431 432 void CodeGenModule::EmitFunction(const FunctionDecl *FD) { 433 // If this is not a prototype, emit the body. 434 if (!FD->isThisDeclarationADefinition()) 435 return; 436 437 // If the function is a static, defer code generation until later so we can 438 // easily omit unused statics. 439 if (FD->getStorageClass() != FunctionDecl::Static) { 440 CodeGenFunction(*this).GenerateCode(FD); 441 return; 442 } 443 444 StaticDecls.push_back(FD); 445 } 446 447 void CodeGenModule::EmitStatics() { 448 // Emit code for each used static decl encountered. Since a previously unused 449 // static decl may become used during the generation of code for a static 450 // function, iterate until no changes are made. 451 bool Changed; 452 do { 453 Changed = false; 454 for (unsigned i = 0, e = StaticDecls.size(); i != e; ++i) { 455 const Decl *D = StaticDecls[i]; 456 457 // Check if we have used a decl with the same name 458 // FIXME: The AST should have some sort of aggregate decls or 459 // global symbol map. 460 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 461 if (!getModule().getFunction(FD->getName())) 462 continue; 463 } else { 464 if (!getModule().getNamedGlobal(cast<VarDecl>(D)->getName())) 465 continue; 466 } 467 468 // If this is a function decl, generate code for the static function if it 469 // has a body. Otherwise, we must have a var decl for a static global 470 // variable. 471 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 472 if (FD->getBody()) 473 CodeGenFunction(*this).GenerateCode(FD); 474 } else { 475 EmitGlobalVarInit(cast<VarDecl>(D)); 476 } 477 // Erase the used decl from the list. 478 StaticDecls[i] = StaticDecls.back(); 479 StaticDecls.pop_back(); 480 --i; 481 --e; 482 483 // Remember that we made a change. 484 Changed = true; 485 } 486 } while (Changed); 487 } 488 489 llvm::Constant *CodeGenModule::EmitGlobalInit(const Expr *Expr) { 490 return EmitConstantExpr(Expr); 491 } 492 493 /// EmitAnnotateAttr - Generate the llvm::ConstantStruct which contains the 494 /// annotation information for a given GlobalValue. The annotation struct is 495 /// {i8 *, i8 *, i8 *, i32}. The first field is a constant expression, the 496 /// GlobalValue being annotated. The second filed is thee constant string 497 /// created from the AnnotateAttr's annotation. The third field is a constant 498 /// string containing the name of the translation unit. The fourth field is 499 /// the line number in the file of the annotated value declaration. 500 /// 501 /// FIXME: this does not unique the annotation string constants, as llvm-gcc 502 /// appears to. 503 /// 504 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV, 505 const AnnotateAttr *AA, 506 unsigned LineNo) { 507 llvm::Module *M = &getModule(); 508 509 // get [N x i8] constants for the annotation string, and the filename string 510 // which are the 2nd and 3rd elements of the global annotation structure. 511 const llvm::Type *SBP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty); 512 llvm::Constant *anno = llvm::ConstantArray::get(AA->getAnnotation(), true); 513 llvm::Constant *unit = llvm::ConstantArray::get(M->getModuleIdentifier(), 514 true); 515 516 // Get the two global values corresponding to the ConstantArrays we just 517 // created to hold the bytes of the strings. 518 llvm::GlobalValue *annoGV = 519 new llvm::GlobalVariable(anno->getType(), false, 520 llvm::GlobalValue::InternalLinkage, anno, 521 GV->getName() + ".str", M); 522 // translation unit name string, emitted into the llvm.metadata section. 523 llvm::GlobalValue *unitGV = 524 new llvm::GlobalVariable(unit->getType(), false, 525 llvm::GlobalValue::InternalLinkage, unit, ".str", M); 526 527 // Create the ConstantStruct that is the global annotion. 528 llvm::Constant *Fields[4] = { 529 llvm::ConstantExpr::getBitCast(GV, SBP), 530 llvm::ConstantExpr::getBitCast(annoGV, SBP), 531 llvm::ConstantExpr::getBitCast(unitGV, SBP), 532 llvm::ConstantInt::get(llvm::Type::Int32Ty, LineNo) 533 }; 534 return llvm::ConstantStruct::get(Fields, 4, false); 535 } 536 537 void CodeGenModule::EmitGlobalVar(const VarDecl *D) { 538 // If the VarDecl is a static, defer code generation until later so we can 539 // easily omit unused statics. 540 if (D->getStorageClass() == VarDecl::Static) { 541 StaticDecls.push_back(D); 542 return; 543 } 544 545 // If this is just a forward declaration of the variable, don't emit it now, 546 // allow it to be emitted lazily on its first use. 547 if (D->getStorageClass() == VarDecl::Extern && D->getInit() == 0) 548 return; 549 550 EmitGlobalVarInit(D); 551 } 552 553 void CodeGenModule::EmitGlobalVarInit(const VarDecl *D) { 554 assert(D->hasGlobalStorage() && "Not a global variable"); 555 556 llvm::Constant *Init = 0; 557 QualType ASTTy = D->getType(); 558 const llvm::Type *VarTy = getTypes().ConvertTypeForMem(ASTTy); 559 const llvm::Type *VarPtrTy = 560 llvm::PointerType::get(VarTy, ASTTy.getAddressSpace()); 561 562 if (D->getInit() == 0) { 563 // This is a tentative definition; tentative definitions are 564 // implicitly initialized with { 0 } 565 const llvm::Type* InitTy; 566 if (ASTTy->isIncompleteArrayType()) { 567 // An incomplete array is normally [ TYPE x 0 ], but we need 568 // to fix it to [ TYPE x 1 ]. 569 const llvm::ArrayType* ATy = cast<llvm::ArrayType>(VarTy); 570 InitTy = llvm::ArrayType::get(ATy->getElementType(), 1); 571 } else { 572 InitTy = VarTy; 573 } 574 Init = llvm::Constant::getNullValue(InitTy); 575 } else { 576 Init = EmitGlobalInit(D->getInit()); 577 } 578 const llvm::Type* InitType = Init->getType(); 579 580 llvm::GlobalVariable *GV = getModule().getGlobalVariable(D->getName(), true); 581 582 if (!GV) { 583 GV = new llvm::GlobalVariable(InitType, false, 584 llvm::GlobalValue::ExternalLinkage, 585 0, D->getName(), &getModule(), 0, 586 ASTTy.getAddressSpace()); 587 } else if (GV->getType()->getElementType() != InitType || 588 GV->getType()->getAddressSpace() != ASTTy.getAddressSpace()) { 589 // We have a definition after a prototype with the wrong type. 590 // We must make a new GlobalVariable* and update everything that used OldGV 591 // (a declaration or tentative definition) with the new GlobalVariable* 592 // (which will be a definition). 593 // 594 // This happens if there is a prototype for a global (e.g. "extern int x[];") 595 // and then a definition of a different type (e.g. "int x[10];"). This also 596 // happens when an initializer has a different type from the type of the 597 // global (this happens with unions). 598 // 599 // FIXME: This also ends up happening if there's a definition followed by 600 // a tentative definition! (Although Sema rejects that construct 601 // at the moment.) 602 603 // Save the old global 604 llvm::GlobalVariable *OldGV = GV; 605 606 // Make a new global with the correct type 607 GV = new llvm::GlobalVariable(InitType, false, 608 llvm::GlobalValue::ExternalLinkage, 609 0, D->getName(), &getModule(), 0, 610 ASTTy.getAddressSpace()); 611 // Steal the name of the old global 612 GV->takeName(OldGV); 613 614 // Replace all uses of the old global with the new global 615 llvm::Constant *NewPtrForOldDecl = 616 llvm::ConstantExpr::getBitCast(GV, OldGV->getType()); 617 OldGV->replaceAllUsesWith(NewPtrForOldDecl); 618 // Make sure we don't keep around any stale references to globals 619 // FIXME: This is really slow; we need a better way to walk all 620 // the decls with the same name 621 ReplaceMapValuesWith(OldGV, NewPtrForOldDecl); 622 623 // Erase the old global, since it is no longer used. 624 OldGV->eraseFromParent(); 625 } 626 627 GlobalDeclMap[D] = llvm::ConstantExpr::getBitCast(GV, VarPtrTy); 628 629 if (const AnnotateAttr *AA = D->getAttr<AnnotateAttr>()) { 630 SourceManager &SM = Context.getSourceManager(); 631 AddAnnotation(EmitAnnotateAttr(GV, AA, 632 SM.getLogicalLineNumber(D->getLocation()))); 633 } 634 635 GV->setInitializer(Init); 636 637 // FIXME: This is silly; getTypeAlign should just work for incomplete arrays 638 unsigned Align; 639 if (const IncompleteArrayType* IAT = D->getType()->getAsIncompleteArrayType()) 640 Align = Context.getTypeAlign(IAT->getElementType()); 641 else 642 Align = Context.getTypeAlign(D->getType()); 643 if (const AlignedAttr* AA = D->getAttr<AlignedAttr>()) { 644 Align = std::max(Align, AA->getAlignment()); 645 } 646 GV->setAlignment(Align / 8); 647 648 if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>()) 649 setVisibility(GV, attr->getVisibility()); 650 // FIXME: else handle -fvisibility 651 652 // Set the llvm linkage type as appropriate. 653 if (D->getStorageClass() == VarDecl::Static) 654 GV->setLinkage(llvm::Function::InternalLinkage); 655 else if (D->getAttr<DLLImportAttr>()) 656 GV->setLinkage(llvm::Function::DLLImportLinkage); 657 else if (D->getAttr<DLLExportAttr>()) 658 GV->setLinkage(llvm::Function::DLLExportLinkage); 659 else if (D->getAttr<WeakAttr>()) 660 GV->setLinkage(llvm::GlobalVariable::WeakLinkage); 661 else { 662 // FIXME: This isn't right. This should handle common linkage and other 663 // stuff. 664 switch (D->getStorageClass()) { 665 case VarDecl::Static: assert(0 && "This case handled above"); 666 case VarDecl::Auto: 667 case VarDecl::Register: 668 assert(0 && "Can't have auto or register globals"); 669 case VarDecl::None: 670 if (!D->getInit()) 671 GV->setLinkage(llvm::GlobalVariable::CommonLinkage); 672 break; 673 case VarDecl::Extern: 674 case VarDecl::PrivateExtern: 675 // todo: common 676 break; 677 } 678 } 679 } 680 681 /// EmitGlobalVarDeclarator - Emit all the global vars attached to the specified 682 /// declarator chain. 683 void CodeGenModule::EmitGlobalVarDeclarator(const VarDecl *D) { 684 for (; D; D = cast_or_null<VarDecl>(D->getNextDeclarator())) 685 if (D->isFileVarDecl()) 686 EmitGlobalVar(D); 687 } 688 689 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) { 690 // Make sure that this type is translated. 691 Types.UpdateCompletedType(TD); 692 } 693 694 695 /// getBuiltinLibFunction 696 llvm::Function *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) { 697 if (BuiltinID > BuiltinFunctions.size()) 698 BuiltinFunctions.resize(BuiltinID); 699 700 // Cache looked up functions. Since builtin id #0 is invalid we don't reserve 701 // a slot for it. 702 assert(BuiltinID && "Invalid Builtin ID"); 703 llvm::Function *&FunctionSlot = BuiltinFunctions[BuiltinID-1]; 704 if (FunctionSlot) 705 return FunctionSlot; 706 707 assert(Context.BuiltinInfo.isLibFunction(BuiltinID) && "isn't a lib fn"); 708 709 // Get the name, skip over the __builtin_ prefix. 710 const char *Name = Context.BuiltinInfo.GetName(BuiltinID)+10; 711 712 // Get the type for the builtin. 713 QualType Type = Context.BuiltinInfo.GetBuiltinType(BuiltinID, Context); 714 const llvm::FunctionType *Ty = 715 cast<llvm::FunctionType>(getTypes().ConvertType(Type)); 716 717 // FIXME: This has a serious problem with code like this: 718 // void abs() {} 719 // ... __builtin_abs(x); 720 // The two versions of abs will collide. The fix is for the builtin to win, 721 // and for the existing one to be turned into a constantexpr cast of the 722 // builtin. In the case where the existing one is a static function, it 723 // should just be renamed. 724 if (llvm::Function *Existing = getModule().getFunction(Name)) { 725 if (Existing->getFunctionType() == Ty && Existing->hasExternalLinkage()) 726 return FunctionSlot = Existing; 727 assert(Existing == 0 && "FIXME: Name collision"); 728 } 729 730 // FIXME: param attributes for sext/zext etc. 731 return FunctionSlot = 732 llvm::Function::Create(Ty, llvm::Function::ExternalLinkage, Name, 733 &getModule()); 734 } 735 736 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys, 737 unsigned NumTys) { 738 return llvm::Intrinsic::getDeclaration(&getModule(), 739 (llvm::Intrinsic::ID)IID, Tys, NumTys); 740 } 741 742 llvm::Function *CodeGenModule::getMemCpyFn() { 743 if (MemCpyFn) return MemCpyFn; 744 llvm::Intrinsic::ID IID; 745 switch (Context.Target.getPointerWidth(0)) { 746 default: assert(0 && "Unknown ptr width"); 747 case 32: IID = llvm::Intrinsic::memcpy_i32; break; 748 case 64: IID = llvm::Intrinsic::memcpy_i64; break; 749 } 750 return MemCpyFn = getIntrinsic(IID); 751 } 752 753 llvm::Function *CodeGenModule::getMemMoveFn() { 754 if (MemMoveFn) return MemMoveFn; 755 llvm::Intrinsic::ID IID; 756 switch (Context.Target.getPointerWidth(0)) { 757 default: assert(0 && "Unknown ptr width"); 758 case 32: IID = llvm::Intrinsic::memmove_i32; break; 759 case 64: IID = llvm::Intrinsic::memmove_i64; break; 760 } 761 return MemMoveFn = getIntrinsic(IID); 762 } 763 764 llvm::Function *CodeGenModule::getMemSetFn() { 765 if (MemSetFn) return MemSetFn; 766 llvm::Intrinsic::ID IID; 767 switch (Context.Target.getPointerWidth(0)) { 768 default: assert(0 && "Unknown ptr width"); 769 case 32: IID = llvm::Intrinsic::memset_i32; break; 770 case 64: IID = llvm::Intrinsic::memset_i64; break; 771 } 772 return MemSetFn = getIntrinsic(IID); 773 } 774 775 // FIXME: This needs moving into an Apple Objective-C runtime class 776 llvm::Constant *CodeGenModule:: 777 GetAddrOfConstantCFString(const std::string &str) { 778 llvm::StringMapEntry<llvm::Constant *> &Entry = 779 CFConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]); 780 781 if (Entry.getValue()) 782 return Entry.getValue(); 783 784 std::vector<llvm::Constant*> Fields; 785 786 if (!CFConstantStringClassRef) { 787 const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy); 788 Ty = llvm::ArrayType::get(Ty, 0); 789 790 CFConstantStringClassRef = 791 new llvm::GlobalVariable(Ty, false, 792 llvm::GlobalVariable::ExternalLinkage, 0, 793 "__CFConstantStringClassReference", 794 &getModule()); 795 } 796 797 // Class pointer. 798 llvm::Constant *Zero = llvm::Constant::getNullValue(llvm::Type::Int32Ty); 799 llvm::Constant *Zeros[] = { Zero, Zero }; 800 llvm::Constant *C = 801 llvm::ConstantExpr::getGetElementPtr(CFConstantStringClassRef, Zeros, 2); 802 Fields.push_back(C); 803 804 // Flags. 805 const llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy); 806 Fields.push_back(llvm::ConstantInt::get(Ty, 1992)); 807 808 // String pointer. 809 C = llvm::ConstantArray::get(str); 810 C = new llvm::GlobalVariable(C->getType(), true, 811 llvm::GlobalValue::InternalLinkage, 812 C, ".str", &getModule()); 813 814 C = llvm::ConstantExpr::getGetElementPtr(C, Zeros, 2); 815 Fields.push_back(C); 816 817 // String length. 818 Ty = getTypes().ConvertType(getContext().LongTy); 819 Fields.push_back(llvm::ConstantInt::get(Ty, str.length())); 820 821 // The struct. 822 Ty = getTypes().ConvertType(getContext().getCFConstantStringType()); 823 C = llvm::ConstantStruct::get(cast<llvm::StructType>(Ty), Fields); 824 llvm::GlobalVariable *GV = 825 new llvm::GlobalVariable(C->getType(), true, 826 llvm::GlobalVariable::InternalLinkage, 827 C, "", &getModule()); 828 GV->setSection("__DATA,__cfstring"); 829 Entry.setValue(GV); 830 return GV; 831 } 832 833 /// GenerateWritableString -- Creates storage for a string literal. 834 static llvm::Constant *GenerateStringLiteral(const std::string &str, 835 bool constant, 836 CodeGenModule &CGM) { 837 // Create Constant for this string literal 838 llvm::Constant *C=llvm::ConstantArray::get(str); 839 840 // Create a global variable for this string 841 C = new llvm::GlobalVariable(C->getType(), constant, 842 llvm::GlobalValue::InternalLinkage, 843 C, ".str", &CGM.getModule()); 844 return C; 845 } 846 847 /// CodeGenModule::GetAddrOfConstantString -- returns a pointer to the character 848 /// array containing the literal. The result is pointer to array type. 849 llvm::Constant *CodeGenModule::GetAddrOfConstantString(const std::string &str) { 850 // Don't share any string literals if writable-strings is turned on. 851 if (Features.WritableStrings) 852 return GenerateStringLiteral(str, false, *this); 853 854 llvm::StringMapEntry<llvm::Constant *> &Entry = 855 ConstantStringMap.GetOrCreateValue(&str[0], &str[str.length()]); 856 857 if (Entry.getValue()) 858 return Entry.getValue(); 859 860 // Create a global variable for this. 861 llvm::Constant *C = GenerateStringLiteral(str, true, *this); 862 Entry.setValue(C); 863 return C; 864 } 865