aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/ValueSymbolTable.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-11-22 00:16:24 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-11-22 00:16:24 +0000
commitd1beb07d390b73d9bae45286737eaf2f58bddfa3 (patch)
treec4e24e0cbe55a01956accffc856070fb13332b33 /llvm/lib/IR/ValueSymbolTable.cpp
parent1eac9a159caeabdce415479ffec0934aa4a9bdbc (diff)
downloadllvm-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.cpp50
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);
}