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:  Summary:
42CHECK-NEXT:    Version: 1
43CHECK-NEXT:    NumSegments: 9
44CHECK-NEXT:    NumMibInfo: 2
45CHECK-NEXT:    NumAllocFunctions: 2
46CHECK-NEXT:    NumStackOffsets: 1
47CHECK-NEXT:  Segments:
48CHECK-NEXT:  -
49CHECK-NEXT:    BuildId: <None>
50CHECK-NEXT:    Start: 0x200000
51CHECK-NEXT:    End: 0x29B000
52CHECK-NEXT:    Offset: 0x0
53CHECK-NEXT:  -
54CHECK-NEXT:    BuildId: <None>
55CHECK-NEXT:    Start: 0x7F5871485000
56CHECK-NEXT:    End: 0x7F58715CD000
57CHECK-NEXT:    Offset: 0x26000
58CHECK-NEXT:  -
59CHECK-NEXT:    BuildId: <None>
60CHECK-NEXT:    Start: 0x7F587162D000
61CHECK-NEXT:    End: 0x7F587163F000
62CHECK-NEXT:    Offset: 0x3000
63CHECK-NEXT:  -
64CHECK-NEXT:    BuildId: <None>
65CHECK-NEXT:    Start: 0x7F5871646000
66CHECK-NEXT:    End: 0x7F5871648000
67CHECK-NEXT:    Offset: 0x2000
68CHECK-NEXT:  -
69CHECK-NEXT:    BuildId: <None>
70CHECK-NEXT:    Start: 0x7F587165A000
71CHECK-NEXT:    End: 0x7F58716F4000
72CHECK-NEXT:    Offset: 0xF000
73CHECK-NEXT:  -
74CHECK-NEXT:    BuildId: <None>
75CHECK-NEXT:    Start: 0x7F5871791000
76CHECK-NEXT:    End: 0x7F5871795000
77CHECK-NEXT:    Offset: 0x3000
78CHECK-NEXT:  -
79CHECK-NEXT:    BuildId: <None>
80CHECK-NEXT:    Start: 0x7F58717A0000
81CHECK-NEXT:    End: 0x7F58717AF000
82CHECK-NEXT:    Offset: 0x7000
83CHECK-NEXT:  -
84CHECK-NEXT:    BuildId: <None>
85CHECK-NEXT:    Start: 0x7F58717D6000
86CHECK-NEXT:    End: 0x7F58717FA000
87CHECK-NEXT:    Offset: 0x1000
88CHECK-NEXT:  -
89CHECK-NEXT:    BuildId: <None>
90CHECK-NEXT:    Start: 0x7FFFC77BD000
91CHECK-NEXT:    End: 0x7FFFC77BF000
92CHECK-NEXT:    Offset: 0x0
93CHECK-NEXT:  Records:
94CHECK-NEXT:  -
95CHECK-NEXT:    FunctionGUID: 15505678318020221912
96CHECK-NEXT:    AllocSites:
97CHECK-NEXT:    -
98CHECK-NEXT:      Callstack:
99CHECK-NEXT:      -
100CHECK-NEXT:        Function: 15505678318020221912
101CHECK-NEXT:        SymbolName: qux
102CHECK-NEXT:        LineOffset: 1
103CHECK-NEXT:        Column: 15
104CHECK-NEXT:        Inline: 1
105CHECK-NEXT:      -
106CHECK-NEXT:        Function: 6699318081062747564
107CHECK-NEXT:        SymbolName: foo
108CHECK-NEXT:        LineOffset: 0
109CHECK-NEXT:        Column: 18
110CHECK-NEXT:        Inline: 0
111CHECK-NEXT:      -
112CHECK-NEXT:        Function: 16434608426314478903
113CHECK-NEXT:        SymbolName: bar
114CHECK-NEXT:        LineOffset: 0
115CHECK-NEXT:        Column: 19
116CHECK-NEXT:        Inline: 0
117CHECK-NEXT:      -
118CHECK-NEXT:        Function: 15822663052811949562
119CHECK-NEXT:        SymbolName: main
120CHECK-NEXT:        LineOffset: 1
121CHECK-NEXT:        Column: 3
122CHECK-NEXT:        Inline: 0
123CHECK-NEXT:      MemInfoBlock:
124CHECK-NEXT:        AllocCount: 1
125CHECK-NEXT:        TotalAccessCount: 1
126CHECK-NEXT:        MinAccessCount: 1
127CHECK-NEXT:        MaxAccessCount: 1
128CHECK-NEXT:        TotalSize: 1
129CHECK-NEXT:        MinSize: 1
130CHECK-NEXT:        MaxSize: 1
131CHECK-NEXT:        AllocTimestamp: 894
132CHECK-NEXT:        DeallocTimestamp: 894
133CHECK-NEXT:        TotalLifetime: 0
134CHECK-NEXT:        MinLifetime: 0
135CHECK-NEXT:        MaxLifetime: 0
136CHECK-NEXT:        AllocCpuId: 23
137CHECK-NEXT:        DeallocCpuId: 23
138CHECK-NEXT:        NumMigratedCpu: 0
139CHECK-NEXT:        NumLifetimeOverlaps: 0
140CHECK-NEXT:        NumSameAllocCpu: 0
141CHECK-NEXT:        NumSameDeallocCpu: 0
142CHECK-NEXT:        DataTypeId: {{[0-9]+}}
143CHECK-NEXT:  -
144CHECK-NEXT:    FunctionGUID: 6699318081062747564
145CHECK-NEXT:    AllocSites:
146CHECK-NEXT:    -
147CHECK-NEXT:      Callstack:
148CHECK-NEXT:      -
149CHECK-NEXT:        Function: 15505678318020221912
150CHECK-NEXT:        SymbolName: qux
151CHECK-NEXT:        LineOffset: 1
152CHECK-NEXT:        Column: 15
153CHECK-NEXT:        Inline: 1
154CHECK-NEXT:      -
155CHECK-NEXT:        Function: 6699318081062747564
156CHECK-NEXT:        SymbolName: foo
157CHECK-NEXT:        LineOffset: 0
158CHECK-NEXT:        Column: 18
159CHECK-NEXT:        Inline: 0
160CHECK-NEXT:      -
161CHECK-NEXT:        Function: 16434608426314478903
162CHECK-NEXT:        SymbolName: bar
163CHECK-NEXT:        LineOffset: 0
164CHECK-NEXT:        Column: 19
165CHECK-NEXT:        Inline: 0
166CHECK-NEXT:      -
167CHECK-NEXT:        Function: 15822663052811949562
168CHECK-NEXT:        SymbolName: main
169CHECK-NEXT:        LineOffset: 1
170CHECK-NEXT:        Column: 3
171CHECK-NEXT:        Inline: 0
172CHECK-NEXT:      MemInfoBlock:
173CHECK-NEXT:        AllocCount: 1
174CHECK-NEXT:        TotalAccessCount: 1
175CHECK-NEXT:        MinAccessCount: 1
176CHECK-NEXT:        MaxAccessCount: 1
177CHECK-NEXT:        TotalSize: 1
178CHECK-NEXT:        MinSize: 1
179CHECK-NEXT:        MaxSize: 1
180CHECK-NEXT:        AllocTimestamp: 894
181CHECK-NEXT:        DeallocTimestamp: 894
182CHECK-NEXT:        TotalLifetime: 0
183CHECK-NEXT:        MinLifetime: 0
184CHECK-NEXT:        MaxLifetime: 0
185CHECK-NEXT:        AllocCpuId: 23
186CHECK-NEXT:        DeallocCpuId: 23
187CHECK-NEXT:        NumMigratedCpu: 0
188CHECK-NEXT:        NumLifetimeOverlaps: 0
189CHECK-NEXT:        NumSameAllocCpu: 0
190CHECK-NEXT:        NumSameDeallocCpu: 0
191CHECK-NEXT:        DataTypeId: {{[0-9]+}}
192CHECK-NEXT:    CallSites:
193CHECK-NEXT:    -
194CHECK-NEXT:      -
195CHECK-NEXT:        Function: 15505678318020221912
196CHECK-NEXT:        SymbolName: qux
197CHECK-NEXT:        LineOffset: 1
198CHECK-NEXT:        Column: 15
199CHECK-NEXT:        Inline: 1
200CHECK-NEXT:    -
201CHECK-NEXT:      -
202CHECK-NEXT:        Function: 6699318081062747564
203CHECK-NEXT:        SymbolName: foo
204CHECK-NEXT:        LineOffset: 0
205CHECK-NEXT:        Column: 18
206CHECK-NEXT:        Inline: 0
207CHECK-NEXT:  -
208CHECK-NEXT:    FunctionGUID: 15822663052811949562
209CHECK-NEXT:    CallSites:
210CHECK-NEXT:    -
211CHECK-NEXT:      -
212CHECK-NEXT:        Function: 15822663052811949562
213CHECK-NEXT:        SymbolName: main
214CHECK-NEXT:        LineOffset: 1
215CHECK-NEXT:        Column: 3
216CHECK-NEXT:        Inline: 0
217CHECK-NEXT:  -
218CHECK-NEXT:    FunctionGUID: 16434608426314478903
219CHECK-NEXT:    CallSites:
220CHECK-NEXT:    -
221CHECK-NEXT:      -
222CHECK-NEXT:        Function: 16434608426314478903
223CHECK-NEXT:        SymbolName: bar
224CHECK-NEXT:        LineOffset: 0
225CHECK-NEXT:        Column: 19
226CHECK-NEXT:        Inline: 0
227