1REQUIRES: x86_64-linux 2 3The input raw profile test has been generated from the following source code: 4 5``` 6#include <stdlib.h> 7#include <string.h> 8 9__attribute__((always_inline)) 10void qux(int x) { 11 char *ptr = malloc(x); 12 memset(ptr, 0, x); 13 free(ptr); 14} 15 16__attribute__((noinline)) 17void foo(int x){ qux(x); } 18 19__attribute__((noinline)) 20void bar(int x) { foo(x); } 21 22int main(int argc, char **argv) { 23 bar(argc); 24 return 0; 25} 26``` 27 28Compile and run with the following commands: 29 30``` 31bin/clang -fuse-ld=lld -Wl,--no-rosegment -gmlt -fdebug-info-for-profiling \ 32 -fmemory-profile -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer \ 33 -fno-optimize-sibling-calls -m64 -Wl,-build-id -no-pie \ 34 inline.c -o inline.memprofexe 35 36env MEMPROF_OPTIONS=log_path=stdout ./inline.memprofexe > inline.memprofraw 37``` 38 39RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/inline.memprofexe | FileCheck %s 40 41CHECK: MemprofProfile: 42CHECK-NEXT: Summary: 43CHECK-NEXT: Version: 1 44CHECK-NEXT: NumSegments: 9 45CHECK-NEXT: NumMibInfo: 2 46CHECK-NEXT: NumAllocFunctions: 2 47CHECK-NEXT: NumStackOffsets: 1 48CHECK-NEXT: Segments: 49CHECK-NEXT: - 50CHECK-NEXT: BuildId: <None> 51CHECK-NEXT: Start: 0x200000 52CHECK-NEXT: End: 0x29B000 53CHECK-NEXT: Offset: 0x0 54CHECK-NEXT: - 55CHECK-NEXT: BuildId: <None> 56CHECK-NEXT: Start: 0x7F5871485000 57CHECK-NEXT: End: 0x7F58715CD000 58CHECK-NEXT: Offset: 0x26000 59CHECK-NEXT: - 60CHECK-NEXT: BuildId: <None> 61CHECK-NEXT: Start: 0x7F587162D000 62CHECK-NEXT: End: 0x7F587163F000 63CHECK-NEXT: Offset: 0x3000 64CHECK-NEXT: - 65CHECK-NEXT: BuildId: <None> 66CHECK-NEXT: Start: 0x7F5871646000 67CHECK-NEXT: End: 0x7F5871648000 68CHECK-NEXT: Offset: 0x2000 69CHECK-NEXT: - 70CHECK-NEXT: BuildId: <None> 71CHECK-NEXT: Start: 0x7F587165A000 72CHECK-NEXT: End: 0x7F58716F4000 73CHECK-NEXT: Offset: 0xF000 74CHECK-NEXT: - 75CHECK-NEXT: BuildId: <None> 76CHECK-NEXT: Start: 0x7F5871791000 77CHECK-NEXT: End: 0x7F5871795000 78CHECK-NEXT: Offset: 0x3000 79CHECK-NEXT: - 80CHECK-NEXT: BuildId: <None> 81CHECK-NEXT: Start: 0x7F58717A0000 82CHECK-NEXT: End: 0x7F58717AF000 83CHECK-NEXT: Offset: 0x7000 84CHECK-NEXT: - 85CHECK-NEXT: BuildId: <None> 86CHECK-NEXT: Start: 0x7F58717D6000 87CHECK-NEXT: End: 0x7F58717FA000 88CHECK-NEXT: Offset: 0x1000 89CHECK-NEXT: - 90CHECK-NEXT: BuildId: <None> 91CHECK-NEXT: Start: 0x7FFFC77BD000 92CHECK-NEXT: End: 0x7FFFC77BF000 93CHECK-NEXT: Offset: 0x0 94CHECK-NEXT: Records: 95CHECK-NEXT: - 96CHECK-NEXT: FunctionGUID: 15505678318020221912 97CHECK-NEXT: AllocSites: 98CHECK-NEXT: - 99CHECK-NEXT: Callstack: 100CHECK-NEXT: - 101CHECK-NEXT: Function: 15505678318020221912 102CHECK-NEXT: SymbolName: qux 103CHECK-NEXT: LineOffset: 1 104CHECK-NEXT: Column: 15 105CHECK-NEXT: Inline: 1 106CHECK-NEXT: - 107CHECK-NEXT: Function: 6699318081062747564 108CHECK-NEXT: SymbolName: foo 109CHECK-NEXT: LineOffset: 0 110CHECK-NEXT: Column: 18 111CHECK-NEXT: Inline: 0 112CHECK-NEXT: - 113CHECK-NEXT: Function: 16434608426314478903 114CHECK-NEXT: SymbolName: bar 115CHECK-NEXT: LineOffset: 0 116CHECK-NEXT: Column: 19 117CHECK-NEXT: Inline: 0 118CHECK-NEXT: - 119CHECK-NEXT: Function: 15822663052811949562 120CHECK-NEXT: SymbolName: main 121CHECK-NEXT: LineOffset: 1 122CHECK-NEXT: Column: 3 123CHECK-NEXT: Inline: 0 124CHECK-NEXT: MemInfoBlock: 125CHECK-NEXT: AllocCount: 1 126CHECK-NEXT: TotalAccessCount: 1 127CHECK-NEXT: MinAccessCount: 1 128CHECK-NEXT: MaxAccessCount: 1 129CHECK-NEXT: TotalSize: 1 130CHECK-NEXT: MinSize: 1 131CHECK-NEXT: MaxSize: 1 132CHECK-NEXT: AllocTimestamp: 894 133CHECK-NEXT: DeallocTimestamp: 894 134CHECK-NEXT: TotalLifetime: 0 135CHECK-NEXT: MinLifetime: 0 136CHECK-NEXT: MaxLifetime: 0 137CHECK-NEXT: AllocCpuId: 23 138CHECK-NEXT: DeallocCpuId: 23 139CHECK-NEXT: NumMigratedCpu: 0 140CHECK-NEXT: NumLifetimeOverlaps: 0 141CHECK-NEXT: NumSameAllocCpu: 0 142CHECK-NEXT: NumSameDeallocCpu: 0 143CHECK-NEXT: DataTypeId: {{[0-9]+}} 144CHECK-NEXT: - 145CHECK-NEXT: FunctionGUID: 6699318081062747564 146CHECK-NEXT: AllocSites: 147CHECK-NEXT: - 148CHECK-NEXT: Callstack: 149CHECK-NEXT: - 150CHECK-NEXT: Function: 15505678318020221912 151CHECK-NEXT: SymbolName: qux 152CHECK-NEXT: LineOffset: 1 153CHECK-NEXT: Column: 15 154CHECK-NEXT: Inline: 1 155CHECK-NEXT: - 156CHECK-NEXT: Function: 6699318081062747564 157CHECK-NEXT: SymbolName: foo 158CHECK-NEXT: LineOffset: 0 159CHECK-NEXT: Column: 18 160CHECK-NEXT: Inline: 0 161CHECK-NEXT: - 162CHECK-NEXT: Function: 16434608426314478903 163CHECK-NEXT: SymbolName: bar 164CHECK-NEXT: LineOffset: 0 165CHECK-NEXT: Column: 19 166CHECK-NEXT: Inline: 0 167CHECK-NEXT: - 168CHECK-NEXT: Function: 15822663052811949562 169CHECK-NEXT: SymbolName: main 170CHECK-NEXT: LineOffset: 1 171CHECK-NEXT: Column: 3 172CHECK-NEXT: Inline: 0 173CHECK-NEXT: MemInfoBlock: 174CHECK-NEXT: AllocCount: 1 175CHECK-NEXT: TotalAccessCount: 1 176CHECK-NEXT: MinAccessCount: 1 177CHECK-NEXT: MaxAccessCount: 1 178CHECK-NEXT: TotalSize: 1 179CHECK-NEXT: MinSize: 1 180CHECK-NEXT: MaxSize: 1 181CHECK-NEXT: AllocTimestamp: 894 182CHECK-NEXT: DeallocTimestamp: 894 183CHECK-NEXT: TotalLifetime: 0 184CHECK-NEXT: MinLifetime: 0 185CHECK-NEXT: MaxLifetime: 0 186CHECK-NEXT: AllocCpuId: 23 187CHECK-NEXT: DeallocCpuId: 23 188CHECK-NEXT: NumMigratedCpu: 0 189CHECK-NEXT: NumLifetimeOverlaps: 0 190CHECK-NEXT: NumSameAllocCpu: 0 191CHECK-NEXT: NumSameDeallocCpu: 0 192CHECK-NEXT: DataTypeId: {{[0-9]+}} 193CHECK-NEXT: CallSites: 194CHECK-NEXT: - 195CHECK-NEXT: - 196CHECK-NEXT: Function: 15505678318020221912 197CHECK-NEXT: SymbolName: qux 198CHECK-NEXT: LineOffset: 1 199CHECK-NEXT: Column: 15 200CHECK-NEXT: Inline: 1 201CHECK-NEXT: - 202CHECK-NEXT: - 203CHECK-NEXT: Function: 6699318081062747564 204CHECK-NEXT: SymbolName: foo 205CHECK-NEXT: LineOffset: 0 206CHECK-NEXT: Column: 18 207CHECK-NEXT: Inline: 0 208CHECK-NEXT: - 209CHECK-NEXT: FunctionGUID: 15822663052811949562 210CHECK-NEXT: CallSites: 211CHECK-NEXT: - 212CHECK-NEXT: - 213CHECK-NEXT: Function: 15822663052811949562 214CHECK-NEXT: SymbolName: main 215CHECK-NEXT: LineOffset: 1 216CHECK-NEXT: Column: 3 217CHECK-NEXT: Inline: 0 218CHECK-NEXT: - 219CHECK-NEXT: FunctionGUID: 16434608426314478903 220CHECK-NEXT: CallSites: 221CHECK-NEXT: - 222CHECK-NEXT: - 223CHECK-NEXT: Function: 16434608426314478903 224CHECK-NEXT: SymbolName: bar 225CHECK-NEXT: LineOffset: 0 226CHECK-NEXT: Column: 19 227CHECK-NEXT: Inline: 0 228