[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