1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

finally give Mangler a getSymbol method, which returns an MCSymbol

for a global instead of messing around with string buffers.

llvm-svn: 98366
This commit is contained in:
Chris Lattner 2010-03-12 18:55:20 +00:00
parent 04cd48f865
commit 01e70df9b2
4 changed files with 24 additions and 19 deletions

View File

@ -1,4 +1,4 @@
//===-- llvm/Target/Mangler.h - Self-contained name mangler ----*- C++ -*-===//
//===-- llvm/Target/Mangler.h - Self-contained name mangler -----*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@ -24,6 +24,7 @@ class Value;
class GlobalValue;
template <typename T> class SmallVectorImpl;
class MCContext;
class MCSymbol;
class Mangler {
public:
@ -34,7 +35,7 @@ public:
};
private:
const MCContext &Context;
MCContext &Context;
/// AnonGlobalIDs - We need to give global values the same name every time
/// they are mangled. This keeps track of the number we give to anonymous
@ -47,8 +48,13 @@ private:
unsigned NextAnonGlobalID;
public:
Mangler(const MCContext &context) : Context(context), NextAnonGlobalID(1) {}
Mangler(MCContext &context) : Context(context), NextAnonGlobalID(1) {}
/// getSymbol - Return the MCSymbol for the specified global value. This
/// symbol is the main label that is the address of the global.
MCSymbol *getSymbol(const GlobalValue *GV);
/// 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.

View File

@ -1632,12 +1632,7 @@ MCSymbol *AsmPrinter::GetJTSetSymbol(unsigned UID, unsigned MBBID) const {
/// GetGlobalValueSymbol - Return the MCSymbol for the specified global
/// value.
MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const {
SmallString<60> NameStr;
Mang->getNameWithPrefix(NameStr, GV, false);
if (!GV->hasPrivateLinkage())
return OutContext.GetOrCreateSymbol(NameStr.str());
return OutContext.GetOrCreateTemporarySymbol(NameStr.str());
return Mang->getSymbol(GV);
}
/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with

View File

@ -179,3 +179,16 @@ std::string Mangler::getNameWithPrefix(const GlobalValue *GV,
getNameWithPrefix(Buf, GV, isImplicitlyPrivate);
return std::string(Buf.begin(), Buf.end());
}
/// getSymbol - Return the MCSymbol for the specified global value. This
/// symbol is the main label that is the address of the global.
MCSymbol *Mangler::getSymbol(const GlobalValue *GV) {
SmallString<60> NameStr;
getNameWithPrefix(NameStr, GV, false);
if (!GV->hasPrivateLinkage())
return Context.GetOrCreateSymbol(NameStr.str());
return Context.GetOrCreateTemporarySymbol(NameStr.str());
}

View File

@ -298,16 +298,7 @@ const MCExpr *TargetLoweringObjectFile::
getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
MachineModuleInfo *MMI, unsigned Encoding,
MCStreamer &Streamer) const {
// FIXME: Use GetGlobalValueSymbol.
SmallString<128> Name;
Mang->getNameWithPrefix(Name, GV, false);
const MCSymbol *Sym;
if (GV->hasPrivateLinkage())
Sym = getContext().GetOrCreateTemporarySymbol(Name.str());
else
Sym = getContext().GetOrCreateSymbol(Name.str());
const MCSymbol *Sym = Mang->getSymbol(GV);
return getExprForDwarfReference(Sym, Mang, MMI, Encoding, Streamer);
}