| REQUIRES: x86_64-linux |
| |
| The input raw profile test has been generated from the following source code: |
| |
| ``` |
| #include <stdlib.h> |
| #include <string.h> |
| |
| __attribute__((always_inline)) |
| void qux(int x) { |
| char *ptr = malloc(x); |
| memset(ptr, 0, x); |
| free(ptr); |
| } |
| |
| __attribute__((noinline)) |
| void foo(int x){ qux(x); } |
| |
| __attribute__((noinline)) |
| void bar(int x) { foo(x); } |
| |
| int main(int argc, char **argv) { |
| bar(argc); |
| return 0; |
| } |
| ``` |
| |
| Compile and run with the following commands: |
| |
| ``` |
| bin/clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \ |
| -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \ |
| -fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie \ |
| inline.c -o inline.memprofexe |
| |
| env MEMPROF_OPTIONS=log_path=stdout ./inline.memprofexe > inline.memprofraw |
| ``` |
| |
| RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/inline.memprofexe | FileCheck %s |
| |
| CHECK: MemprofProfile: |
| CHECK-NEXT: Summary: |
| CHECK-NEXT: Version: 2 |
| CHECK-NEXT: NumSegments: {{[0-9]+}} |
| CHECK-NEXT: NumMibInfo: 2 |
| CHECK-NEXT: NumAllocFunctions: 2 |
| CHECK-NEXT: NumStackOffsets: 1 |
| CHECK-NEXT: Segments: |
| CHECK-NEXT: - |
| CHECK-NEXT: BuildId: <None> |
| CHECK-NEXT: Start: 0x{{[0-9]+}} |
| CHECK-NEXT: End: 0x{{[0-9]+}} |
| CHECK-NEXT: Offset: 0x{{[0-9]+}} |
| CHECK-NEXT: - |
| |
| CHECK: Records: |
| CHECK-NEXT: - |
| CHECK-NEXT: FunctionGUID: 15505678318020221912 |
| CHECK-NEXT: AllocSites: |
| CHECK-NEXT: - |
| CHECK-NEXT: Callstack: |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15505678318020221912 |
| CHECK-NEXT: SymbolName: qux |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 15 |
| CHECK-NEXT: Inline: 1 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 6699318081062747564 |
| CHECK-NEXT: SymbolName: foo |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 18 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 16434608426314478903 |
| CHECK-NEXT: SymbolName: bar |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 19 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15822663052811949562 |
| CHECK-NEXT: SymbolName: main |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 3 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: MemInfoBlock: |
| CHECK-NEXT: AllocCount: 1 |
| CHECK-NEXT: TotalAccessCount: 1 |
| CHECK-NEXT: MinAccessCount: 1 |
| CHECK-NEXT: MaxAccessCount: 1 |
| CHECK-NEXT: TotalSize: 1 |
| CHECK-NEXT: MinSize: 1 |
| CHECK-NEXT: MaxSize: 1 |
| CHECK-NEXT: AllocTimestamp: {{[0-9]+}} |
| CHECK-NEXT: DeallocTimestamp: {{[0-9]+}} |
| CHECK-NEXT: TotalLifetime: 0 |
| CHECK-NEXT: MinLifetime: 0 |
| CHECK-NEXT: MaxLifetime: 0 |
| CHECK-NEXT: AllocCpuId: {{[0-9]+}} |
| CHECK-NEXT: DeallocCpuId: {{[0-9]+}} |
| CHECK-NEXT: NumMigratedCpu: 0 |
| CHECK-NEXT: NumLifetimeOverlaps: 0 |
| CHECK-NEXT: NumSameAllocCpu: 0 |
| CHECK-NEXT: NumSameDeallocCpu: 0 |
| CHECK-NEXT: DataTypeId: {{[0-9]+}} |
| CHECK-NEXT: TotalAccessDensity: 100 |
| CHECK-NEXT: MinAccessDensity: 100 |
| CHECK-NEXT: MaxAccessDensity: 100 |
| CHECK-NEXT: TotalLifetimeAccessDensity: 100000 |
| CHECK-NEXT: MinLifetimeAccessDensity: 100000 |
| CHECK-NEXT: MaxLifetimeAccessDensity: 100000 |
| CHECK-NEXT: - |
| CHECK-NEXT: FunctionGUID: 6699318081062747564 |
| CHECK-NEXT: AllocSites: |
| CHECK-NEXT: - |
| CHECK-NEXT: Callstack: |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15505678318020221912 |
| CHECK-NEXT: SymbolName: qux |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 15 |
| CHECK-NEXT: Inline: 1 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 6699318081062747564 |
| CHECK-NEXT: SymbolName: foo |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 18 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 16434608426314478903 |
| CHECK-NEXT: SymbolName: bar |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 19 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15822663052811949562 |
| CHECK-NEXT: SymbolName: main |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 3 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: MemInfoBlock: |
| CHECK-NEXT: AllocCount: 1 |
| CHECK-NEXT: TotalAccessCount: 1 |
| CHECK-NEXT: MinAccessCount: 1 |
| CHECK-NEXT: MaxAccessCount: 1 |
| CHECK-NEXT: TotalSize: 1 |
| CHECK-NEXT: MinSize: 1 |
| CHECK-NEXT: MaxSize: 1 |
| CHECK-NEXT: AllocTimestamp: {{[0-9]+}} |
| CHECK-NEXT: DeallocTimestamp: {{[0-9]+}} |
| CHECK-NEXT: TotalLifetime: 0 |
| CHECK-NEXT: MinLifetime: 0 |
| CHECK-NEXT: MaxLifetime: 0 |
| CHECK-NEXT: AllocCpuId: {{[0-9]+}} |
| CHECK-NEXT: DeallocCpuId: {{[0-9]+}} |
| CHECK-NEXT: NumMigratedCpu: 0 |
| CHECK-NEXT: NumLifetimeOverlaps: 0 |
| CHECK-NEXT: NumSameAllocCpu: 0 |
| CHECK-NEXT: NumSameDeallocCpu: 0 |
| CHECK-NEXT: DataTypeId: {{[0-9]+}} |
| CHECK-NEXT: TotalAccessDensity: 100 |
| CHECK-NEXT: MinAccessDensity: 100 |
| CHECK-NEXT: MaxAccessDensity: 100 |
| CHECK-NEXT: TotalLifetimeAccessDensity: 100000 |
| CHECK-NEXT: MinLifetimeAccessDensity: 100000 |
| CHECK-NEXT: MaxLifetimeAccessDensity: 100000 |
| CHECK-NEXT: CallSites: |
| CHECK-NEXT: - |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15505678318020221912 |
| CHECK-NEXT: SymbolName: qux |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 15 |
| CHECK-NEXT: Inline: 1 |
| CHECK-NEXT: - |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 6699318081062747564 |
| CHECK-NEXT: SymbolName: foo |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 18 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: FunctionGUID: 16434608426314478903 |
| CHECK-NEXT: CallSites: |
| CHECK-NEXT: - |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 16434608426314478903 |
| CHECK-NEXT: SymbolName: bar |
| CHECK-NEXT: LineOffset: 0 |
| CHECK-NEXT: Column: 19 |
| CHECK-NEXT: Inline: 0 |
| CHECK-NEXT: - |
| CHECK-NEXT: FunctionGUID: 15822663052811949562 |
| CHECK-NEXT: CallSites: |
| CHECK-NEXT: - |
| CHECK-NEXT: - |
| CHECK-NEXT: Function: 15822663052811949562 |
| CHECK-NEXT: SymbolName: main |
| CHECK-NEXT: LineOffset: 1 |
| CHECK-NEXT: Column: 3 |
| CHECK-NEXT: Inline: 0 |