From 117b20c4922c35704ffd139eec978328e0b32ad2 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 5 Dec 2013 05:53:12 +0000 Subject: [PATCH] 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). llvm-svn: 196472 --- llvm/include/llvm/Target/Mangler.h | 3 +-- llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 2 +- llvm/lib/LTO/LTOCodeGenerator.cpp | 2 +- llvm/lib/LTO/LTOModule.cpp | 4 ++-- llvm/lib/Target/Mangler.cpp | 5 ++--- llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 2 +- llvm/lib/Target/TargetLoweringObjectFile.cpp | 12 ++++++++++-- llvm/lib/Target/X86/X86MCInstLower.cpp | 2 +- 8 files changed, 19 insertions(+), 13 deletions(-) diff --git a/llvm/include/llvm/Target/Mangler.h b/llvm/include/llvm/Target/Mangler.h index fab41d2439cc..3a8f32646f43 100644 --- a/llvm/include/llvm/Target/Mangler.h +++ b/llvm/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/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp index 5841d918de4a..8d9c33f49a3d 100644 --- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp +++ b/llvm/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/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index 2b3648e1f3bf..779b4a26174c 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/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/llvm/lib/LTO/LTOModule.cpp b/llvm/lib/LTO/LTOModule.cpp index 65416bed9277..77eb3cae78bf 100644 --- a/llvm/lib/LTO/LTOModule.cpp +++ b/llvm/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/llvm/lib/Target/Mangler.cpp b/llvm/lib/Target/Mangler.cpp index c41a0f3591bd..f90cd7849a46 100644 --- a/llvm/lib/Target/Mangler.cpp +++ b/llvm/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/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp index 1cbd268791d5..56fa773433af 100644 --- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp +++ b/llvm/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/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp index 836edeb5a2ad..66a52d6aa3c1 100644 --- a/llvm/lib/Target/TargetLoweringObjectFile.cpp +++ b/llvm/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/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 305dc953928f..78d45e882903 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/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()) {