Misc improvements to StringTableBuilder.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 4 Oct 2016 22:43:25 +0000 (22:43 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 4 Oct 2016 22:43:25 +0000 (22:43 +0000)
commit39751afc4edf884643d659489a7f52a15c4cff21
tree89058b64e3a5bdaebca6c4c3c0e180394af5be16
parent9a78ebd6d8aa24d0352d5a3640711aa5155dec80
Misc improvements to StringTableBuilder.

This patch adds write methods to StringTableBuilder so that it is
easier to change the underlying implementation.

Using the write methods, avoid creating a temporary buffer when using
mmaped output.

It also uses a more compact key in the DenseMap. Overall this produces
a slightly faster lld:

firefox
  master 6.853419709
  patch  6.841968912 1.00167361138x faster
chromium
  master 4.297280174
  patch  4.298712163 1.00033323147x slower
chromium fast
  master 1.802335952
  patch  1.806872459 1.00251701521x slower
the gold plugin
  master 0.3247149
  patch  0.321971644 1.00852017888x faster
clang
  master 0.551279945
  patch  0.543733194 1.01387951128x faster
llvm-as
  master 0.032743458
  patch  0.032143478 1.01866568391x faster
the gold plugin fsds
  master 0.350814247
  patch  0.348571741 1.00643341309x faster
clang fsds
  master 0.6281672
  patch  0.621130222 1.01132931187x faster
llvm-as fsds
  master 0.030168899
  patch  0.029797155 1.01247582194x faster
scylla
  master 3.104222518
  patch  3.059590248 1.01458766252x faster

llvm-svn: 283266
llvm/include/llvm/MC/StringTableBuilder.h
llvm/lib/MC/ELFObjectWriter.cpp
llvm/lib/MC/MachObjectWriter.cpp
llvm/lib/MC/StringTableBuilder.cpp
llvm/lib/MC/WinCOFFObjectWriter.cpp
llvm/tools/yaml2obj/yaml2elf.cpp
llvm/unittests/MC/StringTableBuilderTest.cpp