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