[all-commits] [llvm/llvm-project] 7841e2: Let -basic-block-sections=labels emit basicblock m...

Rahman Lavaee via All-commits all-commits at lists.llvm.org
Mon Sep 14 10:17:11 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 7841e21c98495ba5e33e0d2507d985bd5b938445
      https://github.com/llvm/llvm-project/commit/7841e21c98495ba5e33e0d2507d985bd5b938445
  Author: Rahman Lavaee <rahmanl at google.com>
  Date:   2020-09-14 (Mon, 14 Sep 2020)

  Changed paths:
    M clang/docs/UsersManual.rst
    M clang/test/CodeGen/basic-block-sections.c
    M llvm/include/llvm/CodeGen/AsmPrinter.h
    M llvm/include/llvm/CodeGen/MachineFunction.h
    M llvm/include/llvm/MC/MCObjectFileInfo.h
    M llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    M llvm/lib/CodeGen/BasicBlockSections.cpp
    M llvm/lib/CodeGen/MIRParser/MIRParser.cpp
    M llvm/lib/CodeGen/MachineBasicBlock.cpp
    M llvm/lib/CodeGen/MachineFunction.cpp
    M llvm/lib/MC/MCObjectFileInfo.cpp
    A llvm/test/CodeGen/X86/basic-block-sections-labels-functions-sections.ll
    M llvm/test/CodeGen/X86/basic-block-sections-labels.ll

  Log Message:
  -----------
  Let -basic-block-sections=labels emit basicblock metadata in a new .bb_addr_map section, instead of emitting special unary-encoded symbols.

This patch introduces the new .bb_addr_map section feature which allows us to emit the bits needed for mapping binary profiles to basic blocks into a separate section.
The format of the emitted data is represented as follows. It includes a header for every function:

|  Address of the function                      |  -> 8 bytes (pointer size)
|  Number of basic blocks in this function (>0) |  -> ULEB128

The header is followed by a BB record for every basic block. These records are ordered in the same order as MachineBasicBlocks are placed in the function. Each BB Info is structured as follows:

|  Offset of the basic block relative to function begin |  -> ULEB128
|  Binary size of the basic block                       |  -> ULEB128
|  BB metadata                                          |  -> ULEB128  [ MBB.isReturn() OR MBB.hasTailCall() << 1  OR  MBB.isEHPad() << 2 ]

The new feature will replace the existing "BB labels" functionality with -basic-block-sections=labels.
The .bb_addr_map section scrubs the specially-encoded BB symbols from the binary and makes it friendly to profilers and debuggers.
Furthermore, the new feature reduces the binary size overhead from 70% bloat to only 12%.

For more information and results please refer to the RFC: https://lists.llvm.org/pipermail/llvm-dev/2020-July/143512.html

Reviewed By: MaskRay, snehasish

Differential Revision: https://reviews.llvm.org/D85408




More information about the All-commits mailing list