diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-11-22 00:16:24 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-11-22 00:16:24 +0000 |
commit | d1beb07d390b73d9bae45286737eaf2f58bddfa3 (patch) | |
tree | c4e24e0cbe55a01956accffc856070fb13332b33 /llvm/lib/IR/ValueSymbolTable.cpp | |
parent | 1eac9a159caeabdce415479ffec0934aa4a9bdbc (diff) | |
download | llvm-d1beb07d390b73d9bae45286737eaf2f58bddfa3.zip llvm-d1beb07d390b73d9bae45286737eaf2f58bddfa3.tar.gz llvm-d1beb07d390b73d9bae45286737eaf2f58bddfa3.tar.bz2 |
Have a single way for creating unique value names.
We had two code paths. One would create names like "foo.1" and the other
names like "foo1".
For globals it is important to use "foo.1" to help C++ name demangling.
For locals there is no strong reason to go one way or the other so I
kept the most common mangling (foo1).
llvm-svn: 253804
Diffstat (limited to 'llvm/lib/IR/ValueSymbolTable.cpp')
-rw-r--r-- | llvm/lib/IR/ValueSymbolTable.cpp | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/llvm/lib/IR/ValueSymbolTable.cpp b/llvm/lib/IR/ValueSymbolTable.cpp index e10142d..deb6e75 100644 --- a/llvm/lib/IR/ValueSymbolTable.cpp +++ b/llvm/lib/IR/ValueSymbolTable.cpp @@ -32,6 +32,24 @@ ValueSymbolTable::~ValueSymbolTable() { #endif } +ValueName *ValueSymbolTable::makeUniqueName(Value *V, + SmallString<256> &UniqueName) { + unsigned BaseSize = UniqueName.size(); + while (1) { + // Trim any suffix off and append the next number. + UniqueName.resize(BaseSize); + raw_svector_ostream S(UniqueName); + if (isa<GlobalValue>(V)) + S << "."; + S << ++LastUnique; + + // Try insert the vmap entry with this suffix. + auto IterBool = vmap.insert(std::make_pair(UniqueName, V)); + if (IterBool.second) + return &*IterBool.first; + } +} + // Insert a value into the symbol table with the specified name... // void ValueSymbolTable::reinsertValue(Value* V) { @@ -49,21 +67,8 @@ void ValueSymbolTable::reinsertValue(Value* V) { // The name is too already used, just free it so we can allocate a new name. V->getValueName()->Destroy(); - unsigned BaseSize = UniqueName.size(); - while (1) { - // Trim any suffix off and append the next number. - UniqueName.resize(BaseSize); - raw_svector_ostream(UniqueName) << "." << ++LastUnique; - - // Try insert the vmap entry with this suffix. - auto IterBool = vmap.insert(std::make_pair(UniqueName, V)); - if (IterBool.second) { - // Newly inserted name. Success! - V->setValueName(&*IterBool.first); - //DEBUG(dbgs() << " Inserted value: " << UniqueName << ": " << *V << "\n"); - return; - } - } + ValueName *VN = makeUniqueName(V, UniqueName); + V->setValueName(VN); } void ValueSymbolTable::removeValueName(ValueName *V) { @@ -86,20 +91,7 @@ ValueName *ValueSymbolTable::createValueName(StringRef Name, Value *V) { // Otherwise, there is a naming conflict. Rename this value. SmallString<256> UniqueName(Name.begin(), Name.end()); - - while (1) { - // Trim any suffix off and append the next number. - UniqueName.resize(Name.size()); - raw_svector_ostream(UniqueName) << ++LastUnique; - - // Try insert the vmap entry with this suffix. - auto IterBool = vmap.insert(std::make_pair(UniqueName, V)); - if (IterBool.second) { - // DEBUG(dbgs() << " Inserted value: " << UniqueName << ": " << *V << - // "\n"); - return &*IterBool.first; - } - } + return makeUniqueName(V, UniqueName); } |