[llvm-commits] [llvm] r75561 - in /llvm/trunk: include/llvm/Support/Mangler.h lib/VMCore/Mangler.cpp
Chris Lattner
sabre at nondot.org
Mon Jul 13 17:01:19 PDT 2009
Author: lattner
Date: Mon Jul 13 19:01:06 2009
New Revision: 75561
URL: http://llvm.org/viewvc/llvm-project?rev=75561&view=rev
Log:
rename Memo/Count to AnonGlobalIDs/NextAnonGlobalID to be more
descriptive. Thange them to keep track of the ID of a global that is
assigned, not the first mangled name returned for it. Without doing this,
we are required to always use the same suffix for a global that gets
mangled. This means that we can mangle the same global once with $stub
and another time with $non_lazy_ptr or whatever.
Modified:
llvm/trunk/include/llvm/Support/Mangler.h
llvm/trunk/lib/VMCore/Mangler.cpp
Modified: llvm/trunk/include/llvm/Support/Mangler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Mangler.h?rev=75561&r1=75560&r2=75561&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Mangler.h (original)
+++ llvm/trunk/include/llvm/Support/Mangler.h Mon Jul 13 19:01:06 2009
@@ -42,13 +42,15 @@
/// from names with 'asm' specifiers.
bool PreserveAsmNames;
- /// Memo - This is used to remember the name that we assign a value.
+ /// 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
+ /// ones.
///
- DenseMap<const Value*, std::string> Memo;
+ DenseMap<const GlobalValue*, unsigned> AnonGlobalIDs;
- /// Count - This simple counter is used to unique value names.
+ /// NextAnonGlobalID - This simple counter is used to unique value names.
///
- unsigned Count;
+ unsigned NextAnonGlobalID;
/// AcceptableChars - This bitfield contains a one for each character that is
/// allowed to be part of an unmangled name.
Modified: llvm/trunk/lib/VMCore/Mangler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Mangler.cpp?rev=75561&r1=75560&r2=75561&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Mangler.cpp (original)
+++ llvm/trunk/lib/VMCore/Mangler.cpp Mon Jul 13 19:01:06 2009
@@ -129,32 +129,29 @@
}
std::string Mangler::getValueName(const GlobalValue *GV, const char *Suffix) {
- // Check to see whether we've already named V.
- std::string &Name = Memo[GV];
- if (!Name.empty())
- return Name; // Return the already-computed name for V.
-
- // Name mangling occurs as follows:
- // - If V is an intrinsic function, do not change name at all
- // - Otherwise, mangling occurs if global collides with existing name.
- if (isa<Function>(GV) && cast<Function>(GV)->isIntrinsic()) {
- Name = GV->getNameStart(); // Is an intrinsic function
- } else if (!GV->hasName()) {
- // Must mangle the global into a unique ID.
- Name = "__unnamed_" + utostr(Count++) + Suffix;
- } else {
+ // Never mangle intrinsic functions.
+ // FIXME: These should never come into the mangler.
+ if (isa<Function>(GV) && cast<Function>(GV)->isIntrinsic())
+ return GV->getNameStart();
+
+ if (GV->hasName()) {
if (GV->hasPrivateLinkage())
- Name = makeNameProper(GV->getName() + Suffix, Prefix, PrivatePrefix);
- else
- Name = makeNameProper(GV->getName() + Suffix, Prefix);
+ return makeNameProper(GV->getName() + Suffix, Prefix, PrivatePrefix);
+ return makeNameProper(GV->getName() + Suffix, Prefix);
}
-
- return Name;
+
+ // Get the ID for the global, assigning a new one if we haven't got one
+ // already.
+ unsigned &ID = AnonGlobalIDs[GV];
+ if (ID == 0) ID = NextAnonGlobalID++;
+
+ // Must mangle the global into a unique ID.
+ return "__unnamed_" + utostr(ID) + Suffix;
}
Mangler::Mangler(Module &M, const char *prefix, const char *privatePrefix)
: Prefix(prefix), PrivatePrefix (privatePrefix), UseQuotes(false),
- PreserveAsmNames(false), Count(0) {
+ PreserveAsmNames(false), NextAnonGlobalID(1) {
std::fill(AcceptableChars, array_endof(AcceptableChars), 0);
// Letters and numbers are acceptable.
More information about the llvm-commits
mailing list