  Performance optimization for large-scale applications has recently become
more important as computation continues to move towards data centers.
Data-center applications are generally very large and complex, which makes code
layout an important optimization to improve their performance. This has
motivated recent investigation of practical techniques to improve code layout
at both compile time and link time. Although post-link optimizers had some
success in the past, no recent work has explored their benefits in the context
of modern data-center applications.
  In this paper, we present BOLT, a post-link optimizer built on top of the
LLVM framework. Utilizing sample-based profiling, BOLT boosts the performance
of real-world applications even for highly optimized binaries built with both
feedback-driven optimizations (FDO) and link-time optimizations (LTO). We
demonstrate that post-link performance improvements are complementary to
conventional compiler optimizations, even when the latter are done at a
whole-program level and in the presence of profile information. We evaluated
BOLT on both Facebook data-center workloads and open-source compilers. For
data-center applications, BOLT achieves up to 8.0% performance speedups on top
of profile-guided function reordering and LTO. For the GCC and Clang compilers,
our evaluation shows that BOLT speeds up their binaries by up to 20.4% on top
of FDO and LTO, and up to 52.1% if the binaries are built without FDO and LTO.
