summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/StringTableBuilder.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-10-14 17:01:39 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-10-14 17:01:39 +0000
commit4a2ef91143f10eabeefb3c160954c4bc52b6962d (patch)
tree631bd40ea1180f4b0c05b05c7e66b5e9a7766b39 /llvm/lib/MC/StringTableBuilder.cpp
parentb6d652adb5b12b7d1fc7e973a5afc019875cb547 (diff)
downloadbcm5719-llvm-4a2ef91143f10eabeefb3c160954c4bc52b6962d.tar.gz
bcm5719-llvm-4a2ef91143f10eabeefb3c160954c4bc52b6962d.zip
Move alignTo computation inside the if.
This is an improvement when compiling with llvm. llvm doesn't inline the call to insert, so the align is always executed and shows up in the profile. With gcc the call to insert is inlined and the align computation moved and done only if needed. With this patch we explicitly only compute it if it is needed. In the two tests with debug info, the speedup was scylla master 3.008959365 patch 2.932080942 1.02621974786x faster firefox master 6.709823604 patch 6.592387227 1.01781393795x faster In all others the difference was in the noise. llvm-svn: 284249
Diffstat (limited to 'llvm/lib/MC/StringTableBuilder.cpp')
-rw-r--r--llvm/lib/MC/StringTableBuilder.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/MC/StringTableBuilder.cpp b/llvm/lib/MC/StringTableBuilder.cpp
index 42292d42fb7..e5d2a4ae58a 100644
--- a/llvm/lib/MC/StringTableBuilder.cpp
+++ b/llvm/lib/MC/StringTableBuilder.cpp
@@ -195,9 +195,11 @@ size_t StringTableBuilder::add(CachedHashString S) {
assert(S.size() > COFF::NameSize && "Short string in COFF string table!");
assert(!isFinalized());
- size_t Start = alignTo(Size, Alignment);
- auto P = StringIndexMap.insert(std::make_pair(S, Start));
- if (P.second)
+ auto P = StringIndexMap.insert(std::make_pair(S, 0));
+ if (P.second) {
+ size_t Start = alignTo(Size, Alignment);
+ P.first->second = Start;
Size = Start + S.size() + (K != RAW);
+ }
return P.first->second;
}
OpenPOWER on IntegriCloud