Lines Matching refs:llvm
43 #include "llvm/ADT/APSInt.h"
44 #include "llvm/ADT/Triple.h"
45 #include "llvm/IR/CallSite.h"
46 #include "llvm/IR/CallingConv.h"
47 #include "llvm/IR/DataLayout.h"
48 #include "llvm/IR/Intrinsics.h"
49 #include "llvm/IR/LLVMContext.h"
50 #include "llvm/IR/Module.h"
51 #include "llvm/ProfileData/InstrProfReader.h"
52 #include "llvm/Support/ConvertUTF.h"
53 #include "llvm/Support/ErrorHandling.h"
58 static const char AnnotationSection[] = "llvm.metadata";
76 llvm::Module &M, const llvm::DataLayout &TD,
90 LifetimeEndFn(nullptr), SanitizerBL(llvm::SpecialCaseList::createOrDie(
94 llvm::LLVMContext &LLVMContext = M.getContext();
95 VoidTy = llvm::Type::getVoidTy(LLVMContext);
96 Int8Ty = llvm::Type::getInt8Ty(LLVMContext);
97 Int16Ty = llvm::Type::getInt16Ty(LLVMContext);
98 Int32Ty = llvm::Type::getInt32Ty(LLVMContext);
99 Int64Ty = llvm::Type::getInt64Ty(LLVMContext);
100 FloatTy = llvm::Type::getFloatTy(LLVMContext);
101 DoubleTy = llvm::Type::getDoubleTy(LLVMContext);
105 IntTy = llvm::IntegerType::get(LLVMContext, C.getTargetInfo().getIntWidth());
106 IntPtrTy = llvm::IntegerType::get(LLVMContext, PointerWidthInBits);
141 if (std::error_code EC = llvm::IndexedInstrProfReader::create(
198 llvm::Constant *Replacement = I->second;
199 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
202 auto *OldF = cast<llvm::Function>(Entry);
203 auto *NewF = dyn_cast<llvm::Function>(Replacement);
205 if (auto *Alias = dyn_cast<llvm::GlobalAlias>(Replacement)) {
206 NewF = dyn_cast<llvm::Function>(Alias->getAliasee());
208 auto *CE = cast<llvm::ConstantExpr>(Replacement);
209 assert(CE->getOpcode() == llvm::Instruction::BitCast ||
210 CE->getOpcode() == llvm::Instruction::GetElementPtr);
211 NewF = dyn_cast<llvm::Function>(CE->getOperand(0));
227 static const llvm::GlobalObject *getAliasedGlobal(const llvm::GlobalAlias &GA) {
228 llvm::SmallPtrSet<const llvm::GlobalAlias*, 4> Visited;
229 const llvm::Constant *C = &GA;
232 if (auto *GO = dyn_cast<llvm::GlobalObject>(C))
235 auto *GA2 = dyn_cast<llvm::GlobalAlias>(C);
256 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
257 auto *Alias = cast<llvm::GlobalAlias>(Entry);
258 const llvm::GlobalValue *GV = getAliasedGlobal(*Alias);
267 llvm::Constant *Aliasee = Alias->getAliasee();
268 llvm::GlobalValue *AliaseeGV;
269 if (auto CE = dyn_cast<llvm::ConstantExpr>(Aliasee))
270 AliaseeGV = cast<llvm::GlobalValue>(CE->getOperand(0));
272 AliaseeGV = cast<llvm::GlobalValue>(Aliasee);
286 if (auto GA = dyn_cast<llvm::GlobalAlias>(AliaseeGV)) {
290 Aliasee = llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast(
303 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
304 auto *Alias = cast<llvm::GlobalAlias>(Entry);
305 Alias->replaceAllUsesWith(llvm::UndefValue::get(Alias->getType()));
335 if (llvm::Function *ObjCInitFunction = ObjCRuntime->ModuleInitFunction())
338 if (llvm::Function *PGOInit = CodeGenPGO::emitInitialization(*this))
342 EmitCtorList(GlobalCtors, "llvm.global_ctors");
343 EmitCtorList(GlobalDtors, "llvm.global_dtors");
355 getModule().addModuleFlag(llvm::Module::Warning, "Dwarf Version",
361 getModule().addModuleFlag(llvm::Module::Warning, "Debug Info Version",
362 llvm::DEBUG_METADATA_VERSION);
366 llvm::Triple::ArchType Arch = Context.getTargetInfo().getTriple().getArch();
367 if ( Arch == llvm::Triple::arm
368 || Arch == llvm::Triple::armeb
369 || Arch == llvm::Triple::thumb
370 || Arch == llvm::Triple::thumbeb) {
374 getModule().addModuleFlag(llvm::Module::Error, "wchar_size", WCharWidth);
378 getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth);
402 llvm::MDNode *CodeGenModule::getTBAAInfo(QualType QTy) {
408 llvm::MDNode *CodeGenModule::getTBAAInfoForVTablePtr() {
414 llvm::MDNode *CodeGenModule::getTBAAStructInfo(QualType QTy) {
420 llvm::MDNode *CodeGenModule::getTBAAStructTypeInfo(QualType QTy) {
426 llvm::MDNode *CodeGenModule::getTBAAStructTagInfo(QualType BaseTy,
427 llvm::MDNode *AccessN,
438 void CodeGenModule::DecorateInstruction(llvm::Instruction *Inst,
439 llvm::MDNode *TBAAInfo,
442 Inst->setMetadata(llvm::LLVMContext::MD_tbaa,
445 Inst->setMetadata(llvm::LLVMContext::MD_tbaa, TBAAInfo);
472 llvm::ConstantInt *CodeGenModule::getSize(CharUnits size) {
473 return llvm::ConstantInt::get(SizeTy, size.getQuantity());
476 void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
480 GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
490 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(StringRef S) {
491 return llvm::StringSwitch<llvm::GlobalVariable::ThreadLocalMode>(S)
492 .Case("global-dynamic", llvm::GlobalVariable::GeneralDynamicTLSModel)
493 .Case("local-dynamic", llvm::GlobalVariable::LocalDynamicTLSModel)
494 .Case("initial-exec", llvm::GlobalVariable::InitialExecTLSModel)
495 .Case("local-exec", llvm::GlobalVariable::LocalExecTLSModel);
498 static llvm::GlobalVariable::ThreadLocalMode GetLLVMTLSModel(
502 return llvm::GlobalVariable::GeneralDynamicTLSModel;
504 return llvm::GlobalVariable::LocalDynamicTLSModel;
506 return llvm::GlobalVariable::InitialExecTLSModel;
508 return llvm::GlobalVariable::LocalExecTLSModel;
513 void CodeGenModule::setTLSMode(llvm::GlobalVariable *GV,
517 llvm::GlobalVariable::ThreadLocalMode TLM;
537 llvm::raw_svector_ostream Out(Buffer);
562 llvm::raw_svector_ostream Out(Buffer);
578 llvm::GlobalValue *CodeGenModule::GetGlobalValue(StringRef Name) {
584 void CodeGenModule::AddGlobalCtor(llvm::Function *Ctor, int Priority,
585 llvm::Constant *AssociatedData) {
592 void CodeGenModule::AddGlobalDtor(llvm::Function *Dtor, int Priority) {
599 llvm::FunctionType* CtorFTy = llvm::FunctionType::get(VoidTy, false);
600 llvm::Type *CtorPFTy = llvm::PointerType::getUnqual(CtorFTy);
603 llvm::StructType *CtorStructTy = llvm::StructType::get(
604 Int32Ty, llvm::PointerType::getUnqual(CtorFTy), VoidPtrTy, NULL);
607 SmallVector<llvm::Constant*, 8> Ctors;
609 llvm::Constant *S[] = {
610 llvm::ConstantInt::get(Int32Ty, I->Priority, false),
611 llvm::ConstantExpr::getBitCast(I->Initializer, CtorPFTy),
613 ? llvm::ConstantExpr::getBitCast(I->AssociatedData, VoidPtrTy)
614 : llvm::Constant::getNullValue(VoidPtrTy))
616 Ctors.push_back(llvm::ConstantStruct::get(CtorStructTy, S));
620 llvm::ArrayType *AT = llvm::ArrayType::get(CtorStructTy, Ctors.size());
621 new llvm::GlobalVariable(TheModule, AT, false,
622 llvm::GlobalValue::AppendingLinkage,
623 llvm::ConstantArray::get(AT, Ctors),
628 llvm::GlobalValue::LinkageTypes
639 return Linkage == GVA_Internal ? llvm::GlobalValue::InternalLinkage
640 : llvm::GlobalValue::LinkOnceODRLinkage;
647 llvm::Function *F) {
653 llvm::Function *F) {
657 F->setAttributes(llvm::AttributeSet::get(getLLVMContext(), AttributeList));
658 F->setCallingConv(static_cast<llvm::CallingConv::ID>(CallingConv));
682 llvm::Function *F) {
683 llvm::AttrBuilder B;
686 B.addAttribute(llvm::Attribute::UWTable);
689 B.addAttribute(llvm::Attribute::NoUnwind);
693 B.addAttribute(llvm::Attribute::Naked);
694 B.addAttribute(llvm::Attribute::NoInline);
697 B.addAttribute(llvm::Attribute::OptimizeNone);
698 B.addAttribute(llvm::Attribute::NoInline);
700 B.addAttribute(llvm::Attribute::NoDuplicate);
702 B.addAttribute(llvm::Attribute::NoInline);
704 !F->getAttributes().hasAttribute(llvm::AttributeSet::FunctionIndex,
705 llvm::Attribute::NoInline)) {
707 B.addAttribute(llvm::Attribute::AlwaysInline);
711 B.addAttribute(llvm::Attribute::OptimizeForSize);
712 B.addAttribute(llvm::Attribute::Cold);
716 B.addAttribute(llvm::Attribute::MinSize);
720 B.removeAttribute(llvm::Attribute::OptimizeForSize);
721 B.removeAttribute(llvm::Attribute::MinSize);
725 B.addAttribute(llvm::Attribute::StackProtect);
727 B.addAttribute(llvm::Attribute::StackProtectStrong);
729 B.addAttribute(llvm::Attribute::StackProtectReq);
736 B.addAttribute(llvm::Attribute::SanitizeAddress);
739 B.addAttribute(llvm::Attribute::SanitizeThread);
742 B.addAttribute(llvm::Attribute::SanitizeMemory);
745 F->addAttributes(llvm::AttributeSet::FunctionIndex,
746 llvm::AttributeSet::get(
747 F->getContext(), llvm::AttributeSet::FunctionIndex, B));
765 llvm::GlobalValue *GV) {
769 GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
776 llvm::GlobalObject *GO) {
786 llvm::Function *F,
791 F->setLinkage(llvm::Function::InternalLinkage);
796 static void setLinkageAndVisibilityForGV(llvm::GlobalValue *GV,
804 GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
805 GV->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
807 GV->setLinkage(llvm::GlobalValue::ExternalLinkage);
808 GV->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
812 GV->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
822 llvm::Function *F,
827 F->setAttributes(llvm::Intrinsic::getAttributes(getLLVMContext(),
828 (llvm::Intrinsic::ID)IID));
847 F->addAttribute(1, llvm::Attribute::Returned);
858 F->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);
868 F->addAttribute(llvm::AttributeSet::FunctionIndex,
869 llvm::Attribute::NoBuiltin);
872 void CodeGenModule::addUsedGlobal(llvm::GlobalValue *GV) {
878 void CodeGenModule::addCompilerUsedGlobal(llvm::GlobalValue *GV) {
885 std::vector<llvm::WeakVH> &List) {
886 // Don't create llvm.used if there is no need.
891 SmallVector<llvm::Constant*, 8> UsedArray;
895 llvm::ConstantExpr::getBitCast(cast<llvm::Constant>(&*List[i]),
901 llvm::ArrayType *ATy = llvm::ArrayType::get(CGM.Int8PtrTy, UsedArray.size());
903 auto *GV = new llvm::GlobalVariable(
904 CGM.getModule(), ATy, false, llvm::GlobalValue::AppendingLinkage,
905 llvm::ConstantArray::get(ATy, UsedArray), Name);
907 GV->setSection("llvm.metadata");
911 emitUsed(*this, "llvm.used", LLVMUsed);
912 emitUsed(*this, "llvm.compiler.used", LLVMCompilerUsed);
916 llvm::Value *MDOpts = llvm::MDString::get(getLLVMContext(), Opts);
917 LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
921 llvm::SmallString<32> Opt;
923 llvm::Value *MDOpts = llvm::MDString::get(getLLVMContext(), Opt);
924 LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
928 llvm::SmallString<24> Opt;
930 llvm::Value *MDOpts = llvm::MDString::get(getLLVMContext(), Opt);
931 LinkerOptionsMetadata.push_back(llvm::MDNode::get(getLLVMContext(), MDOpts));
938 SmallVectorImpl<llvm::Value *> &Metadata,
939 llvm::SmallPtrSet<Module *, 16> &Visited) {
953 llvm::LLVMContext &Context = CGM.getLLVMContext();
958 llvm::Value *Args[2] = {
959 llvm::MDString::get(Context, "-framework"),
960 llvm::MDString::get(Context, Mod->LinkLibraries[I-1].Library)
963 Metadata.push_back(llvm::MDNode::get(Context, Args));
968 llvm::SmallString<24> Opt;
971 llvm::Value *OptString = llvm::MDString::get(Context, Opt);
972 Metadata.push_back(llvm::MDNode::get(Context, OptString));
980 llvm::SetVector<clang::Module *> LinkModules;
981 llvm::SmallPtrSet<clang::Module *, 16> Visited;
985 for (llvm::SetVector<clang::Module *>::iterator M = ImportedModules.begin(),
1024 SmallVector<llvm::Value *, 16> MetadataArgs;
1026 for (llvm::SetVector<clang::Module *>::iterator M = LinkModules.begin(),
1036 getModule().addModuleFlag(llvm::Module::AppendUnique, "Linker Options",
1037 llvm::MDNode::get(getLLVMContext(),
1061 llvm::GlobalValue *GV = G.GV;
1084 llvm::Constant *Array = llvm::ConstantArray::get(llvm::ArrayType::get(
1086 auto *gv = new llvm::GlobalVariable(getModule(), Array->getType(), false,
1087 llvm::GlobalValue::AppendingLinkage,
1088 Array, "llvm.global.annotations");
1092 llvm::Constant *CodeGenModule::EmitAnnotationString(StringRef Str) {
1093 llvm::Constant *&AStr = AnnotationStrings[Str];
1098 llvm::Constant *s = llvm::ConstantDataArray::getString(getLLVMContext(), Str);
1100 new llvm::GlobalVariable(getModule(), s->getType(), true,
1101 llvm::GlobalValue::PrivateLinkage, s, ".str");
1108 llvm::Constant *CodeGenModule::EmitAnnotationUnit(SourceLocation Loc) {
1116 llvm::Constant *CodeGenModule::EmitAnnotationLineNo(SourceLocation L) {
1121 return llvm::ConstantInt::get(Int32Ty, LineNo);
1124 llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
1128 llvm::Constant *AnnoGV = EmitAnnotationString(AA->getAnnotation()),
1133 llvm::Constant *Fields[4] = {
1134 llvm::ConstantExpr::getBitCast(GV, Int8PtrTy),
1135 llvm::ConstantExpr::getBitCast(AnnoGV, Int8PtrTy),
1136 llvm::ConstantExpr::getBitCast(UnitGV, Int8PtrTy),
1139 return llvm::ConstantStruct::getAnon(Fields);
1143 llvm::GlobalValue *GV) {
1158 llvm::Constant *CodeGenModule::GetAddrOfUuidDescriptor(
1167 if (llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name))
1170 llvm::Constant *Init = EmitUuidofInitializer(Uuid, E->getType());
1173 auto *GV = new llvm::GlobalVariable(
1175 /*isConstant=*/true, llvm::GlobalValue::LinkOnceODRLinkage, Init, Name);
1179 llvm::Constant *CodeGenModule::GetWeakRefReference(const ValueDecl *VD) {
1183 llvm::Type *DeclTy = getTypes().ConvertTypeForMem(VD->getType());
1186 llvm::GlobalValue *Entry = GetGlobalValue(AA->getAliasee());
1189 return llvm::ConstantExpr::getBitCast(Entry, DeclTy->getPointerTo(AS));
1192 llvm::Constant *Aliasee;
1193 if (isa<llvm::FunctionType>(DeclTy))
1199 llvm::PointerType::getUnqual(DeclTy),
1202 auto *F = cast<llvm::GlobalValue>(Aliasee);
1203 F->setLinkage(llvm::Function::ExternalWeakLinkage);
1249 llvm::Type *Ty = getTypes().GetFunctionType(FI);
1282 if (llvm::GlobalValue *GV = GetGlobalValue(MangledName))
1349 if (getFunctionLinkage(GD) != llvm::Function::AvailableExternallyLinkage)
1378 void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD, llvm::GlobalValue *GV) {
1418 /// module, create and return an llvm Function with the specified type. If there
1424 llvm::Constant *
1426 llvm::Type *Ty,
1429 llvm::AttributeSet ExtraAttrs) {
1433 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1438 Entry->setLinkage(llvm::Function::ExternalLinkage);
1445 return llvm::ConstantExpr::getBitCast(Entry, Ty->getPointerTo());
1453 llvm::FunctionType *FTy;
1454 if (isa<llvm::FunctionType>(Ty)) {
1455 FTy = cast<llvm::FunctionType>(Ty);
1457 FTy = llvm::FunctionType::get(VoidTy, false);
1461 llvm::Function *F = llvm::Function::Create(FTy,
1462 llvm::Function::ExternalLinkage,
1467 if (ExtraAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex)) {
1468 llvm::AttrBuilder B(ExtraAttrs, llvm::AttributeSet::FunctionIndex);
1469 F->addAttributes(llvm::AttributeSet::FunctionIndex,
1470 llvm::AttributeSet::get(VMContext,
1471 llvm::AttributeSet::FunctionIndex,
1541 llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
1542 return llvm::ConstantExpr::getBitCast(F, PTy);
1548 llvm::Constant *CodeGenModule::GetAddrOfFunction(GlobalDecl GD,
1549 llvm::Type *Ty,
1562 llvm::Constant *
1563 CodeGenModule::CreateRuntimeFunction(llvm::FunctionType *FTy,
1565 llvm::AttributeSet ExtraAttrs) {
1566 llvm::Constant *C =
1569 if (auto *F = dyn_cast<llvm::Function>(C))
1608 /// create and return an llvm GlobalVariable with the specified type. If there
1614 llvm::Constant *
1616 llvm::PointerType *Ty,
1619 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
1623 Entry->setLinkage(llvm::Function::ExternalLinkage);
1631 return llvm::ConstantExpr::getAddrSpaceCast(Entry, Ty);
1633 return llvm::ConstantExpr::getBitCast(Entry, Ty);
1637 auto *GV = new llvm::GlobalVariable(
1639 llvm::GlobalValue::ExternalLinkage, nullptr, MangledName, nullptr,
1640 llvm::GlobalVariable::NotThreadLocal, AddrSpace);
1674 if (getTarget().getTriple().getArch() == llvm::Triple::xcore &&
1682 return llvm::ConstantExpr::getAddrSpaceCast(GV, Ty);
1688 llvm::GlobalVariable *
1690 llvm::Type *Ty,
1691 llvm::GlobalValue::LinkageTypes Linkage) {
1692 llvm::GlobalVariable *GV = getModule().getNamedGlobal(Name);
1693 llvm::GlobalVariable *OldGV = nullptr;
1707 GV = new llvm::GlobalVariable(getModule(), Ty, /*isConstant=*/true,
1715 llvm::Constant *NewPtrForOldDecl =
1716 llvm::ConstantExpr::getBitCast(GV, OldGV->getType());
1726 /// GetAddrOfGlobalVar - Return the llvm::Constant for the address of the
1730 llvm::Constant *CodeGenModule::GetAddrOfGlobalVar(const VarDecl *D,
1731 llvm::Type *Ty) {
1737 llvm::PointerType *PTy =
1738 llvm::PointerType::get(Ty, getContext().getTargetAddressSpace(ASTTy));
1746 llvm::Constant *
1747 CodeGenModule::CreateRuntimeVariable(llvm::Type *Ty,
1749 return GetOrCreateLLVMGlobal(Name, llvm::PointerType::getUnqual(Ty), nullptr);
1770 CharUnits CodeGenModule::GetTargetTypeStoreSize(llvm::Type *Ty) const {
1791 llvm::GlobalValue *GV) {
1823 llvm::Constant *Init = nullptr;
1858 Init = llvm::UndefValue::get(getTypes().ConvertType(T));
1869 llvm::Type* InitType = Init->getType();
1870 llvm::Constant *Entry = GetAddrOfGlobalVar(D, InitType);
1873 if (auto *CE = dyn_cast<llvm::ConstantExpr>(Entry)) {
1874 assert(CE->getOpcode() == llvm::Instruction::BitCast ||
1875 CE->getOpcode() == llvm::Instruction::AddrSpaceCast ||
1877 CE->getOpcode() == llvm::Instruction::GetElementPtr);
1882 auto *GV = dyn_cast<llvm::GlobalVariable>(Entry);
1902 GV = cast<llvm::GlobalVariable>(GetAddrOfGlobalVar(D, InitType));
1905 llvm::Constant *NewPtrForOldDecl =
1906 llvm::ConstantExpr::getBitCast(GV, Entry->getType());
1910 cast<llvm::GlobalValue>(Entry)->eraseFromParent();
1926 // Set the llvm linkage type as appropriate.
1927 llvm::GlobalValue::LinkageTypes Linkage =
1937 Linkage = llvm::GlobalValue::InternalLinkage;
1941 GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
1943 GV->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
1945 if (Linkage == llvm::GlobalVariable::CommonLinkage)
1963 void CodeGenModule::reportGlobalToASan(llvm::GlobalVariable *GV,
1970 llvm::LLVMContext &LLVMCtx = TheModule.getContext();
1972 llvm::GlobalVariable *LocDescr = nullptr;
1978 llvm::Constant *LocData[] = {
1980 llvm::ConstantInt::get(llvm::Type::getInt32Ty(LLVMCtx), PLoc.getLine()),
1981 llvm::ConstantInt::get(llvm::Type::getInt32Ty(LLVMCtx),
1984 auto LocStruct = llvm::ConstantStruct::getAnon(LocData);
1985 LocDescr = new llvm::GlobalVariable(TheModule, LocStruct->getType(), true,
1986 llvm::GlobalValue::PrivateLinkage,
1989 // Add LocDescr to llvm.compiler.used, so that it won't be removed by
1995 llvm::Value *GlobalMetadata[] = {
1998 llvm::ConstantInt::get(llvm::Type::getInt1Ty(LLVMCtx), IsDynInit),
1999 llvm::ConstantInt::get(llvm::Type::getInt1Ty(LLVMCtx), IsBlacklisted)
2002 llvm::MDNode *ThisGlobal = llvm::MDNode::get(VMContext, GlobalMetadata);
2003 llvm::NamedMDNode *AsanGlobals =
2004 TheModule.getOrInsertNamedMetadata("llvm.asan.globals");
2036 llvm::GlobalValue::LinkageTypes CodeGenModule::getLLVMLinkageForDeclarator(
2039 return llvm::Function::InternalLinkage;
2043 return llvm::GlobalVariable::WeakODRLinkage;
2045 return llvm::GlobalVariable::WeakAnyLinkage;
2051 return llvm::Function::AvailableExternallyLinkage;
2065 return !Context.getLangOpts().AppleKext ? llvm::Function::LinkOnceODRLinkage
2066 : llvm::Function::InternalLinkage;
2073 return !Context.getLangOpts().AppleKext ? llvm::Function::WeakODRLinkage
2074 : llvm::Function::ExternalLinkage;
2082 return llvm::GlobalValue::AvailableExternallyLinkage;
2084 return llvm::GlobalValue::WeakODRLinkage;
2085 return llvm::GlobalValue::LinkOnceODRLinkage;
2092 return llvm::GlobalVariable::CommonLinkage;
2099 return llvm::GlobalVariable::WeakODRLinkage;
2103 return llvm::GlobalVariable::ExternalLinkage;
2106 llvm::GlobalValue::LinkageTypes CodeGenModule::getLLVMLinkageVarDefinition(
2114 static void replaceUsesOfNonProtoConstant(llvm::Constant *old,
2115 llvm::Function *newFn) {
2119 llvm::Type *newRetTy = newFn->getReturnType();
2120 SmallVector<llvm::Value*, 4> newArgs;
2122 for (llvm::Value::use_iterator ui = old->use_begin(), ue = old->use_end();
2124 llvm::Value::use_iterator use = ui++; // Increment before the use is erased.
2125 llvm::User *user = use->getUser();
2129 if (auto *bitcast = dyn_cast<llvm::ConstantExpr>(user)) {
2130 if (bitcast->getOpcode() == llvm::Instruction::BitCast)
2136 llvm::CallSite callSite(user);
2146 SmallVector<llvm::AttributeSet, 8> newAttrs;
2147 llvm::AttributeSet oldAttrs = callSite.getAttributes();
2150 if (oldAttrs.hasAttributes(llvm::AttributeSet::ReturnIndex))
2152 llvm::AttributeSet::get(newFn->getContext(),
2163 for (llvm::Function::arg_iterator ai = newFn->arg_begin(),
2173 push_back(llvm::
2180 if (oldAttrs.hasAttributes(llvm::AttributeSet::FunctionIndex))
2181 newAttrs.push_back(llvm::AttributeSet::get(newFn->getContext(),
2188 llvm::CallSite newCall;
2190 newCall = llvm::CallInst::Create(newFn, newArgs, "",
2193 auto *oldInvoke = cast<llvm::InvokeInst>(callSite.getInstruction());
2194 newCall = llvm::InvokeInst::Create(newFn,
2205 llvm::AttributeSet::get(newFn->getContext(), newAttrs));
2228 static void ReplaceUsesOfNonProtoTypeWithRealFunction(llvm::GlobalValue *Old,
2229 llvm::Function *NewFn) {
2231 if (!isa<llvm::Function>(Old)) return;
2247 llvm::GlobalValue *GV) {
2252 llvm::FunctionType *Ty = getTypes().GetFunctionType(FI);
2256 llvm::Constant *C =
2260 if (auto *CE = dyn_cast<llvm::ConstantExpr>(C)) {
2261 assert(CE->getOpcode() == llvm::Instruction::BitCast);
2262 GV = cast<llvm::GlobalValue>(CE->getOperand(0));
2264 GV = cast<llvm::GlobalValue>(C);
2286 auto *NewFn = cast<llvm::Function>(GetAddrOfFunction(GD, Ty));
2302 llvm::Constant *NewPtrForOldDecl =
2303 llvm::ConstantExpr::getBitCast(NewFn, GV->getType());
2317 auto *Fn = cast<llvm::Function>(GV);
2347 llvm::GlobalValue *Entry = GetGlobalValue(MangledName);
2353 llvm::Type *DeclTy = getTypes().ConvertTypeForMem(D->getType());
2357 llvm::Constant *Aliasee;
2358 if (isa<llvm::FunctionType>(DeclTy))
2363 llvm::PointerType::getUnqual(DeclTy),
2367 auto *GA = llvm::GlobalAlias::create(
2368 cast<llvm::PointerType>(Aliasee->getType())->getElementType(), 0,
2369 llvm::Function::ExternalLinkage, "", Aliasee, &getModule());
2388 Entry->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GA,
2402 GA->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
2404 GA->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
2409 GA->setLinkage(llvm::Function::WeakAnyLinkage);
2415 llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,
2416 ArrayRef<llvm::Type*> Tys) {
2417 return llvm::Intrinsic::getDeclaration(&getModule(), (llvm::Intrinsic::ID)IID,
2421 static llvm::StringMapEntry<llvm::Constant*> &
2422 GetConstantCFStringEntry(llvm::StringMap<llvm::Constant*> &Map,
2457 static llvm::StringMapEntry<llvm::Constant*> &
2458 GetConstantStringEntry(llvm::StringMap<llvm::Constant*> &Map,
2466 llvm::Constant *
2470 llvm::StringMapEntry<llvm::Constant*> &Entry =
2475 if (llvm::Constant *C = Entry.getValue())
2478 llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
2479 llvm::Constant *Zeros[] = { Zero, Zero };
2480 llvm::Value *V;
2484 llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
2485 Ty = llvm::ArrayType::get(Ty, 0);
2486 llvm::Constant *GV = CreateRuntimeVariable(Ty,
2489 V = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2497 auto *STy = cast<llvm::StructType>(getTypes().ConvertType(CFTy));
2499 llvm::Constant *Fields[4];
2502 Fields[0] = cast<llvm::ConstantExpr>(V);
2505 llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
2506 Fields[1] = isUTF16 ? llvm::ConstantInt::get(Ty, 0x07d0) :
2507 llvm::ConstantInt::get(Ty, 0x07C8);
2510 llvm::Constant *C = nullptr;
2513 llvm::makeArrayRef<uint16_t>(reinterpret_cast<uint16_t*>(
2516 C = llvm::ConstantDataArray::get(VMContext, Arr);
2518 C = llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
2524 new llvm::GlobalVariable(getModule(), C->getType(), /*isConstant=*/true,
2525 llvm::GlobalValue::PrivateLinkage, C, ".str");
2543 Fields[2] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2547 Fields[2] = llvm::ConstantExpr::getBitCast(Fields[2], Int8PtrTy);
2551 Fields[3] = llvm::ConstantInt::get(Ty, StringLength);
2554 C = llvm::ConstantStruct::get(STy, Fields);
2555 GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
2556 llvm::GlobalVariable::PrivateLinkage, C,
2564 llvm::Constant *
2567 llvm::StringMapEntry<llvm::Constant*> &Entry =
2570 if (llvm::Constant *C = Entry.getValue())
2573 llvm::Constant *Zero = llvm::Constant::getNullValue(Int32Ty);
2574 llvm::Constant *Zeros[] = { Zero, Zero };
2575 llvm::Value *V;
2579 llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
2580 llvm::Constant *GV;
2587 llvm::Type *PTy = llvm::PointerType::getUnqual(Ty);
2588 V = llvm::ConstantExpr::getBitCast(GV, PTy);
2594 llvm::Type *PTy = llvm::ArrayType::get(Ty, 0);
2597 V = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2633 NSConstantStringType = cast<llvm::StructType>(getTypes().ConvertType(NSTy));
2636 llvm::Constant *Fields[3];
2639 Fields[0] = cast<llvm::ConstantExpr>(V);
2642 llvm::Constant *C =
2643 llvm::ConstantDataArray::getString(VMContext, Entry.getKey());
2645 llvm::GlobalValue::LinkageTypes Linkage;
2647 Linkage = llvm::GlobalValue::PrivateLinkage;
2650 auto *GV = new llvm::GlobalVariable(getModule(), C->getType(), isConstant,
2657 Fields[1] = llvm::ConstantExpr::getGetElementPtr(GV, Zeros);
2660 llvm::Type *Ty = getTypes().ConvertType(getContext().UnsignedIntTy);
2661 Fields[2] = llvm::ConstantInt::get(Ty, StringLength);
2664 C = llvm::ConstantStruct::get(NSConstantStringType, Fields);
2665 GV = new llvm::GlobalVariable(getModule(), C->getType(), true,
2666 llvm::GlobalVariable::PrivateLinkage, C,
2690 llvm::APInt(32, 5), ArrayType::Normal, 0)
2713 llvm::Constant *
2725 return llvm::ConstantDataArray::getString(VMContext, Str, false);
2728 auto *AType = cast<llvm::ArrayType>(getTypes().ConvertType(E->getType()));
2729 llvm::Type *ElemTy = AType->getElementType();
2740 return llvm::ConstantDataArray::get(VMContext, Elements);
2750 return llvm::ConstantDataArray::get(VMContext, Elements);
2753 static llvm::GlobalVariable *
2754 GenerateStringLiteral(llvm::Constant *C, llvm::GlobalValue::LinkageTypes LT,
2763 auto *GV = new llvm::GlobalVariable(
2765 GlobalName, nullptr, llvm::GlobalVariable::NotThreadLocal, AddrSpace);
2773 llvm::Constant *
2778 llvm::StringMapEntry<llvm::GlobalVariable *> *Entry = nullptr;
2790 llvm::GlobalValue::LinkageTypes LT;
2797 llvm::raw_svector_ostream Out(MangledNameBuffer);
2801 LT = llvm::GlobalValue::LinkOnceODRLinkage;
2804 LT = llvm::GlobalValue::PrivateLinkage;
2808 llvm::Constant *C = GetConstantArrayFromStringLiteral(S);
2819 llvm::Constant *
2828 llvm::StringMapEntry<llvm::GlobalVariable *> *CodeGenModule::getConstantStringMapEntry(
2830 llvm::StringMap<llvm::GlobalVariable *> *ConstantStringMap = nullptr;
2850 llvm::Constant *CodeGenModule::GetAddrOfConstantCString(const std::string &Str,
2861 llvm::StringMapEntry<llvm::GlobalVariable *> *Entry = nullptr;
2871 llvm::Constant *C =
2872 llvm::ConstantDataArray::getString(getLLVMContext(), StrWithNull, false);
2877 auto GV = GenerateStringLiteral(C, llvm::GlobalValue::PrivateLinkage, *this,
2884 llvm::Constant *CodeGenModule::GetAddrOfGlobalTemporary(
2896 llvm::Constant *&Slot = MaterializedGlobalTemporaryMap[E];
2904 llvm::raw_svector_ostream Out(Name);
2926 llvm::Constant *InitialValue = nullptr;
2928 llvm::Type *Type;
2941 llvm::GlobalValue::LinkageTypes Linkage =
2945 if (Linkage == llvm::GlobalVariable::ExternalLinkage)
2946 Linkage = llvm::GlobalVariable::PrivateLinkage;
2949 auto *GV = new llvm::GlobalVariable(
2951 /*InsertBefore=*/nullptr, llvm::GlobalVariable::NotThreadLocal,
3235 static llvm::Constant *GetPointerConstant(llvm::LLVMContext &Context,
3238 llvm::Type *i64 = llvm::Type::getInt64Ty(Context);
3239 return llvm::ConstantInt::get(i64, PtrInt);
3243 llvm::NamedMDNode *&GlobalMetadata,
3245 llvm::GlobalValue *Addr) {
3251 llvm::Value *Ops[] = {
3255 GlobalMetadata->addOperand(llvm::MDNode::get(CGM.getLLVMContext(), Ops));
3268 llvm::GlobalValue *Val = I->second;
3270 addUsedGlobal(llvm::GlobalAlias::create(Name->getName(), Val));
3288 /// with an llvm::GlobalValue, we create a global named metadata
3291 llvm::NamedMDNode *GlobalMetadata = nullptr;
3295 llvm::GlobalValue *Addr = getModule().getNamedValue(I.second);
3305 llvm::LLVMContext &Context = getLLVMContext();
3310 llvm::NamedMDNode *GlobalMetadata = nullptr;
3314 llvm::Value *Addr = I.second;
3315 if (auto *Alloca = dyn_cast<llvm::AllocaInst>(Addr)) {
3316 llvm::Value *DAddr = GetPointerConstant(getLLVMContext(), D);
3317 Alloca->setMetadata(DeclPtrKind, llvm::MDNode::get(Context, DAddr));
3318 } else if (auto *GV = dyn_cast<llvm::GlobalValue>(Addr)) {
3326 llvm::NamedMDNode *IdentMetadata =
3327 TheModule.getOrInsertNamedMetadata("llvm.ident");
3329 llvm::LLVMContext &Ctx = TheModule.getContext();
3331 llvm::Value *IdentNode[] = {
3332 llvm::MDString::get(Ctx, Version)
3334 IdentMetadata->addOperand(llvm::MDNode::get(Ctx, IdentNode));
3340 llvm::GlobalValue *GV = GetGlobalValue(I.second);
3347 if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
3348 llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
3349 llvm::LLVMContext &Ctx = TheModule.getContext();
3350 llvm::MDString *CoverageFile =
3351 llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
3353 llvm::MDNode *CU = CUNode->getOperand(i);
3354 llvm::Value *node[] = { CoverageFile, CU };
3355 llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
3362 llvm::Constant *CodeGenModule::EmitUuidofInitializer(StringRef Uuid,
3374 llvm::Constant *Field3[8];
3376 Field3[Idx] = llvm::ConstantInt::get(
3379 llvm::Constant *Fields[4] = {
3380 llvm::ConstantInt::get(Int32Ty, Uuid.substr(0, 8), 16),
3381 llvm::ConstantInt::get(Int16Ty, Uuid.substr(9, 4), 16),
3382 llvm::ConstantInt::get(Int16Ty, Uuid.substr(14, 4), 16),
3383 llvm::ConstantArray::get(llvm::ArrayType::get(Int8Ty, 8), Field3)
3386 return llvm::ConstantStruct::getAnon(Fields);
3389 llvm::Constant *CodeGenModule::GetAddrOfRTTIDescriptor(QualType Ty,
3395 return llvm::Constant::getNullValue(Int8PtrTy);