[RFC] BOLT: A Framework for Binary Analysis, Transformation, and Optimization

Since the last update, we’ve finished switching our GitHub repo to the rebased branch (https://github.com/facebookincubator/BOLT/tree/rebased). BOLT repository is now closely tracking the main branch of LLVM, lagging by a couple of months at most. We’ve also brought up an open-source testing environment based on GitHub Actions and Docker.
We’ve addressed the concrete issues pointed out by Fangrui Song and are welcome to new questions and suggestions.
Overall, we’re seeing an increased interest in BOLT from the community on GitHub and social media, specifically highlighting the collaboration with the Huawei Moscow team working on adding Golang support.

Currently we’re working on two major areas in preparation for the actual integration.

  1. Testing is an important part of the migration as we plan on converting internal tests to public ones. We’ve made a lot of progress in improving debug info testing coverage and qualifying BOLT to be ready for release, which currently stays internal. The strategy is to focus on growing our open-source testing when adding new changes.

  2. Aligning the changes made to LLVM libraries with the upstream repository, either by publishing our patches or refactoring BOLT to avoid them. (The rest of our changes are contained in bolt top-level directory).
    To give you a sense of our progress, at the beginning of the upstreaming process, we identified 23 such changes, of which 16 are resolved and 7 are currently WIP or TBD:

  3. [MC] Alignment for Macro-op Fusion (https://reviews.llvm.org/D97982): review in progress

  4. [MC] TrapFillValue (https://reviews.llvm.org/D102287): TBD, plan is to reimplement in BOLT, easy

  5. [MC] TAILJMP encoding (https://reviews.llvm.org/D102297?vs=on&id=344627#toc): WIP by Amir, reimplement in BOLT, medium

  6. [DWARF] Support DWARF expressions in CFI instructions (https://reviews.llvm.org/D98301): WIP by Rafael, upstream, hard

  7. [DWARF] Extend DWARFAbbreviationDeclaration::AttributeSpec with AttrOffset and FormOffset (https://reviews.llvm.org/D102291): TBD, perhaps reimplement, medium

  8. [DWARF] Support emitting AdvanceLineAddrAbs (https://reviews.llvm.org/D105747): TBD, perhaps upstream, hard

  9. [DWARF] Introduce RefHandler to parse external refs in frame data (https://reviews.llvm.org/D105746): TBD, perhaps reimplement, medium