From: Rafael Espindola Date: Thu, 5 Dec 2013 05:53:12 +0000 (+0000) Subject: Remove the isImplicitlyPrivate argument of getNameWithPrefix. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=fac7a9e644f557e0cf75bab1faf7b762395ce1cb Remove the isImplicitlyPrivate argument of getNameWithPrefix. getSymbolWithGlobalValueBase use is to create a name of a new symbol based on the name of an existing GV. Assert that and then remove the last call to pass true to isImplicitlyPrivate. This gives the mangler API a 1:1 mapping from GV to names, which is what we need to drop the mangler dependency on the target (and use an extended datalayout instead). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196472 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/Mangler.h b/include/llvm/Target/Mangler.h index fab41d2439c..3a8f32646f4 100644 --- a/include/llvm/Target/Mangler.h +++ b/include/llvm/Target/Mangler.h @@ -51,8 +51,7 @@ public: /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix /// and the specified global variable's name. If the global variable doesn't /// have a name, this fills in a unique name for the global. - void getNameWithPrefix(SmallVectorImpl &OutName, const GlobalValue *GV, - bool isImplicitlyPrivate); + void getNameWithPrefix(SmallVectorImpl &OutName, const GlobalValue *GV); /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix /// and the specified name as the global variable name. GVName must not be diff --git a/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 5841d918de4..8d9c33f49a3 100644 --- a/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/lib/ExecutionEngine/MCJIT/MCJIT.cpp @@ -325,7 +325,7 @@ void *MCJIT::getPointerToFunction(Function *F) { // load address of the symbol, not the local address. Mangler Mang(TM); SmallString<128> Name; - Mang.getNameWithPrefix(Name, F, false); + Mang.getNameWithPrefix(Name, F); return (void*)Dyld.getSymbolLoadAddress(Name); } diff --git a/lib/LTO/LTOCodeGenerator.cpp b/lib/LTO/LTOCodeGenerator.cpp index 2b3648e1f3b..779b4a26174 100644 --- a/lib/LTO/LTOCodeGenerator.cpp +++ b/lib/LTO/LTOCodeGenerator.cpp @@ -320,7 +320,7 @@ applyRestriction(GlobalValue &GV, SmallPtrSet &AsmUsed, Mangler &Mangler) { SmallString<64> Buffer; - Mangler.getNameWithPrefix(Buffer, &GV, false); + Mangler.getNameWithPrefix(Buffer, &GV); if (GV.isDeclaration()) return; diff --git a/lib/LTO/LTOModule.cpp b/lib/LTO/LTOModule.cpp index 65416bed927..77eb3cae78b 100644 --- a/lib/LTO/LTOModule.cpp +++ b/lib/LTO/LTOModule.cpp @@ -360,7 +360,7 @@ void LTOModule::addDefinedSymbol(const GlobalValue *def, bool isFunction) { // string is owned by _defines SmallString<64> Buffer; - _mangler.getNameWithPrefix(Buffer, def, false); + _mangler.getNameWithPrefix(Buffer, def); // set alignment part log2() can have rounding errors uint32_t align = def->getAlignment(); @@ -496,7 +496,7 @@ LTOModule::addPotentialUndefinedSymbol(const GlobalValue *decl, bool isFunc) { return; SmallString<64> name; - _mangler.getNameWithPrefix(name, decl, false); + _mangler.getNameWithPrefix(name, decl); StringMap::value_type &entry = _undefines.GetOrCreateValue(name); diff --git a/lib/Target/Mangler.cpp b/lib/Target/Mangler.cpp index c41a0f3591b..f90cd7849a4 100644 --- a/lib/Target/Mangler.cpp +++ b/lib/Target/Mangler.cpp @@ -81,10 +81,9 @@ static void AddFastCallStdCallSuffix(SmallVectorImpl &OutName, /// and the specified global variable's name. If the global variable doesn't /// have a name, this fills in a unique name for the global. void Mangler::getNameWithPrefix(SmallVectorImpl &OutName, - const GlobalValue *GV, - bool isImplicitlyPrivate) { + const GlobalValue *GV) { ManglerPrefixTy PrefixTy = Mangler::Default; - if (GV->hasPrivateLinkage() || isImplicitlyPrivate) + if (GV->hasPrivateLinkage()) PrefixTy = Mangler::Private; else if (GV->hasLinkerPrivateLinkage() || GV->hasLinkerPrivateWeakLinkage()) PrefixTy = Mangler::LinkerPrivate; diff --git a/lib/Target/PowerPC/PPCMCInstLower.cpp b/lib/Target/PowerPC/PPCMCInstLower.cpp index 1cbd268791d..56fa773433a 100644 --- a/lib/Target/PowerPC/PPCMCInstLower.cpp +++ b/lib/Target/PowerPC/PPCMCInstLower.cpp @@ -51,7 +51,7 @@ static MCSymbol *GetSymbolFromOperand(const MachineOperand &MO, AsmPrinter &AP){ AP.Mang->getNameWithPrefix(Name, MO.getSymbolName()); } else { const GlobalValue *GV = MO.getGlobal(); - AP.Mang->getNameWithPrefix(Name, GV, false); + AP.Mang->getNameWithPrefix(Name, GV); } unsigned OrigLen = Name.size() - PrefixLen; diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index 836edeb5a2a..66a52d6aa3c 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -18,6 +18,7 @@ #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalVariable.h" +#include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCStreamer.h" @@ -102,14 +103,21 @@ static bool IsNullTerminatedString(const Constant *C) { MCSymbol *TargetLoweringObjectFile::getSymbol(Mangler &M, const GlobalValue *GV) const { SmallString<60> NameStr; - M.getNameWithPrefix(NameStr, GV, false); + M.getNameWithPrefix(NameStr, GV); return Ctx->GetOrCreateSymbol(NameStr.str()); } MCSymbol *TargetLoweringObjectFile::getSymbolWithGlobalValueBase( Mangler &M, const GlobalValue *GV, StringRef Suffix) const { + assert(!Suffix.empty()); + assert(!GV->hasPrivateLinkage()); + assert(!GV->hasLinkerPrivateLinkage()); + assert(!GV->hasLinkerPrivateWeakLinkage()); + + const MCAsmInfo *MAI = Ctx->getAsmInfo(); SmallString<60> NameStr; - M.getNameWithPrefix(NameStr, GV, true); + NameStr += MAI->getPrivateGlobalPrefix(); + M.getNameWithPrefix(NameStr, GV); NameStr.append(Suffix.begin(), Suffix.end()); return Ctx->GetOrCreateSymbol(NameStr.str()); } diff --git a/lib/Target/X86/X86MCInstLower.cpp b/lib/Target/X86/X86MCInstLower.cpp index 305dc953928..78d45e88290 100644 --- a/lib/Target/X86/X86MCInstLower.cpp +++ b/lib/Target/X86/X86MCInstLower.cpp @@ -97,7 +97,7 @@ GetSymbolFromOperand(const MachineOperand &MO) const { if (MO.isGlobal()) { const GlobalValue *GV = MO.getGlobal(); - getMang()->getNameWithPrefix(Name, GV, false); + getMang()->getNameWithPrefix(Name, GV); } else if (MO.isSymbol()) { getMang()->getNameWithPrefix(Name, MO.getSymbolName()); } else if (MO.isMBB()) {