[CSSPGO][llvm-profgen] Instruction symbolization

Authored by wlei on Oct 19 2020, 10:19 AM.


[CSSPGO][llvm-profgen] Instruction symbolization

This stack of changes introduces llvm-profgen utility which generates a profile data file from given perf script data files for sample-based PGO. It’s part of(not only) the CSSPGO work. Specifically to support context-sensitive with/without pseudo probe profile, it implements a series of functionalities including perf trace parsing, instruction symbolization, LBR stack/call frame stack unwinding, pseudo probe decoding, etc. Also high throughput is achieved by multiple levels of sample aggregation and compatible format with one stop is generated at the end. Please refer to: https://groups.google.com/g/llvm-dev/c/1p1rdYbL93s for the CSSPGO RFC.

This change adds the support of instruction symbolization. Given the RVA on an instruction pointer, a full calling context can be printed side-by-side with the disassembly code.

Disassembly of section .text [0x0, 0x4a]:

    0:	mov	eax, edi                           funcA:0
    2:	mov	ecx, dword ptr [rip]               funcLeaf:2 @ funcA:1
    8:	lea	edx, [rcx + 3]                     fib:2 @ funcLeaf:2 @ funcA:1
    b:	cmp	ecx, 3                             fib:2 @ funcLeaf:2 @ funcA:1
    e:	cmovl	edx, ecx                           fib:2 @ funcLeaf:2 @ funcA:1
   11:	sub	eax, edx                           funcLeaf:2 @ funcA:1
   13:	ret                                        funcA:2
   14:	nop	word ptr cs:[rax + rax]
   1e:	nop

   20:	mov	eax, edi                           funcLeaf:1
   22:	mov	ecx, dword ptr [rip]               funcLeaf:2
   28:	lea	edx, [rcx + 3]                     fib:2 @ funcLeaf:2
   2b:	cmp	ecx, 3                             fib:2 @ funcLeaf:2
   2e:	cmovl	edx, ecx                           fib:2 @ funcLeaf:2
   31:	sub	eax, edx                           funcLeaf:2
   33:	ret                                        funcLeaf:3
   34:	nop	word ptr cs:[rax + rax]
   3e:	nop

   40:	lea	eax, [rdi + 3]                     fib:2
   43:	cmp	edi, 3                             fib:2
   46:	cmovl	eax, edi                           fib:2
   49:	ret                                        fib:8

Test Plan:
ninja check-llvm

Reviewed By: wenlei, wmi

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


wleiNov 20 2020, 2:26 PM
Differential Revision
D89715: [CSSPGO][llvm-profgen] Instruction symbolization
rG32221694cb92: [CSSPGO][llvm-profgen] Disassemble text sections