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 inline.c -o memprof-inline.exe
34
35env MEMPROF_OPTIONS=log_path=stdout ./memprof-inline.exe > inline.memprofraw
36```
37
38RUN: llvm-profdata show --memory %p/Inputs/inline.memprofraw --profiled-binary %p/Inputs/inline.memprofexe | FileCheck %s
39
40CHECK:  MemprofProfile:
41CHECK-NEXT:  -
42CHECK-NEXT:  Header:
43CHECK-NEXT:    Version: 1
44CHECK-NEXT:    TotalSizeBytes: 880
45CHECK-NEXT:    NumSegments: 9
46CHECK-NEXT:    NumMibInfo: 2
47CHECK-NEXT:    NumStackOffsets: 2
48CHECK-NEXT:  Records:
49CHECK-NEXT:  -
50CHECK-NEXT:    FunctionGUID: 15505678318020221912
51CHECK-NEXT:    AllocSites:
52CHECK-NEXT:    -
53CHECK-NEXT:      Callstack:
54CHECK-NEXT:      -
55CHECK-NEXT:        Function: 15505678318020221912
56CHECK-NEXT:        SymbolName: qux
57CHECK-NEXT:        LineOffset: 1
58CHECK-NEXT:        Column: 15
59CHECK-NEXT:        Inline: 1
60CHECK-NEXT:      -
61CHECK-NEXT:        Function: 6699318081062747564
62CHECK-NEXT:        SymbolName: foo
63CHECK-NEXT:        LineOffset: 0
64CHECK-NEXT:        Column: 18
65CHECK-NEXT:        Inline: 0
66CHECK-NEXT:      -
67CHECK-NEXT:        Function: 16434608426314478903
68CHECK-NEXT:        SymbolName: bar
69CHECK-NEXT:        LineOffset: 0
70CHECK-NEXT:        Column: 19
71CHECK-NEXT:        Inline: 0
72CHECK-NEXT:      -
73CHECK-NEXT:        Function: 15822663052811949562
74CHECK-NEXT:        SymbolName: main
75CHECK-NEXT:        LineOffset: 1
76CHECK-NEXT:        Column: 3
77CHECK-NEXT:        Inline: 0
78CHECK-NEXT:      MemInfoBlock:
79CHECK-NEXT:        AllocCount: 1
80CHECK-NEXT:        TotalAccessCount: 1
81CHECK-NEXT:        MinAccessCount: 1
82CHECK-NEXT:        MaxAccessCount: 1
83CHECK-NEXT:        TotalSize: 1
84CHECK-NEXT:        MinSize: 1
85CHECK-NEXT:        MaxSize: 1
86CHECK-NEXT:        AllocTimestamp: 894
87CHECK-NEXT:        DeallocTimestamp: 894
88CHECK-NEXT:        TotalLifetime: 0
89CHECK-NEXT:        MinLifetime: 0
90CHECK-NEXT:        MaxLifetime: 0
91CHECK-NEXT:        AllocCpuId: 23
92CHECK-NEXT:        DeallocCpuId: 23
93CHECK-NEXT:        NumMigratedCpu: 0
94CHECK-NEXT:        NumLifetimeOverlaps: 0
95CHECK-NEXT:        NumSameAllocCpu: 0
96CHECK-NEXT:        NumSameDeallocCpu: 0
97CHECK-NEXT:        DataTypeId: {{[0-9]+}}
98CHECK-NEXT:  -
99CHECK-NEXT:    FunctionGUID: 6699318081062747564
100CHECK-NEXT:    AllocSites:
101CHECK-NEXT:    -
102CHECK-NEXT:      Callstack:
103CHECK-NEXT:      -
104CHECK-NEXT:        Function: 15505678318020221912
105CHECK-NEXT:        SymbolName: qux
106CHECK-NEXT:        LineOffset: 1
107CHECK-NEXT:        Column: 15
108CHECK-NEXT:        Inline: 1
109CHECK-NEXT:      -
110CHECK-NEXT:        Function: 6699318081062747564
111CHECK-NEXT:        SymbolName: foo
112CHECK-NEXT:        LineOffset: 0
113CHECK-NEXT:        Column: 18
114CHECK-NEXT:        Inline: 0
115CHECK-NEXT:      -
116CHECK-NEXT:        Function: 16434608426314478903
117CHECK-NEXT:        SymbolName: bar
118CHECK-NEXT:        LineOffset: 0
119CHECK-NEXT:        Column: 19
120CHECK-NEXT:        Inline: 0
121CHECK-NEXT:      -
122CHECK-NEXT:        Function: 15822663052811949562
123CHECK-NEXT:        SymbolName: main
124CHECK-NEXT:        LineOffset: 1
125CHECK-NEXT:        Column: 3
126CHECK-NEXT:        Inline: 0
127CHECK-NEXT:      MemInfoBlock:
128CHECK-NEXT:        AllocCount: 1
129CHECK-NEXT:        TotalAccessCount: 1
130CHECK-NEXT:        MinAccessCount: 1
131CHECK-NEXT:        MaxAccessCount: 1
132CHECK-NEXT:        TotalSize: 1
133CHECK-NEXT:        MinSize: 1
134CHECK-NEXT:        MaxSize: 1
135CHECK-NEXT:        AllocTimestamp: 894
136CHECK-NEXT:        DeallocTimestamp: 894
137CHECK-NEXT:        TotalLifetime: 0
138CHECK-NEXT:        MinLifetime: 0
139CHECK-NEXT:        MaxLifetime: 0
140CHECK-NEXT:        AllocCpuId: 23
141CHECK-NEXT:        DeallocCpuId: 23
142CHECK-NEXT:        NumMigratedCpu: 0
143CHECK-NEXT:        NumLifetimeOverlaps: 0
144CHECK-NEXT:        NumSameAllocCpu: 0
145CHECK-NEXT:        NumSameDeallocCpu: 0
146CHECK-NEXT:        DataTypeId: {{[0-9]+}}
147CHECK-NEXT:    CallSites:
148CHECK-NEXT:    -
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:      -
157CHECK-NEXT:        Function: 6699318081062747564
158CHECK-NEXT:        SymbolName: foo
159CHECK-NEXT:        LineOffset: 0
160CHECK-NEXT:        Column: 18
161CHECK-NEXT:        Inline: 0
162CHECK-NEXT:  -
163CHECK-NEXT:    FunctionGUID: 15822663052811949562
164CHECK-NEXT:    CallSites:
165CHECK-NEXT:    -
166CHECK-NEXT:      -
167CHECK-NEXT:        Function: 15822663052811949562
168CHECK-NEXT:        SymbolName: main
169CHECK-NEXT:        LineOffset: 1
170CHECK-NEXT:        Column: 3
171CHECK-NEXT:        Inline: 0
172CHECK-NEXT:  -
173CHECK-NEXT:    FunctionGUID: 16434608426314478903
174CHECK-NEXT:    CallSites:
175CHECK-NEXT:    -
176CHECK-NEXT:      -
177CHECK-NEXT:        Function: 16434608426314478903
178CHECK-NEXT:        SymbolName: bar
179CHECK-NEXT:        LineOffset: 0
180CHECK-NEXT:        Column: 19
181CHECK-NEXT:        Inline: 0
182