summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR
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
parent1eac9a159caeabdce415479ffec0934aa4a9bdbc (diff)
downloadbcm5719-llvm-d1beb07d390b73d9bae45286737eaf2f58bddfa3.tar.gz
bcm5719-llvm-d1beb07d390b73d9bae45286737eaf2f58bddfa3.zip
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')
-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 e10142de823..deb6e7573e7 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);
}
OpenPOWER on IntegriCloud