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