xref: /llvm-project/llvm/test/ThinLTO/X86/memprof-duplicate-context-ids2.ll (revision 176889868024d98db032842bc47b416997d9e349)
1fe27495bSTeresa Johnson;; Test callsite context graph generation for call graph with with MIBs
2fe27495bSTeresa Johnson;; that have pruned contexts that partially match multiple inlined
3fe27495bSTeresa Johnson;; callsite contexts, requiring duplication of context ids and nodes
4fe27495bSTeresa Johnson;; while matching callsite nodes onto the graph. This test requires more
5fe27495bSTeresa Johnson;; complex duplication due to multiple contexts for different allocations
6fe27495bSTeresa Johnson;; that share some of the same callsite nodes.
7fe27495bSTeresa Johnson;;
8fe27495bSTeresa Johnson;; Original code looks like:
9fe27495bSTeresa Johnson;;
10fe27495bSTeresa Johnson;; char *D(bool Call1) {
11fe27495bSTeresa Johnson;;   if (Call1)
12fe27495bSTeresa Johnson;;     return new char[10];
13fe27495bSTeresa Johnson;;   else
14fe27495bSTeresa Johnson;;     return new char[10];
15fe27495bSTeresa Johnson;; }
16fe27495bSTeresa Johnson;;
17fe27495bSTeresa Johnson;; char *C(bool Call1) {
18fe27495bSTeresa Johnson;;   return D(Call1);
19fe27495bSTeresa Johnson;; }
20fe27495bSTeresa Johnson;;
21fe27495bSTeresa Johnson;; char *B(bool Call1) {
22fe27495bSTeresa Johnson;;   if (Call1)
23fe27495bSTeresa Johnson;;     return C(true);
24fe27495bSTeresa Johnson;;   else
25fe27495bSTeresa Johnson;;     return C(false);
26fe27495bSTeresa Johnson;; }
27fe27495bSTeresa Johnson;;
28fe27495bSTeresa Johnson;; char *A(bool Call1) {
29fe27495bSTeresa Johnson;;   return B(Call1);
30fe27495bSTeresa Johnson;; }
31fe27495bSTeresa Johnson;;
32fe27495bSTeresa Johnson;; char *A1() {
33fe27495bSTeresa Johnson;;   return A(true);
34fe27495bSTeresa Johnson;; }
35fe27495bSTeresa Johnson;;
36fe27495bSTeresa Johnson;; char *A2() {
37fe27495bSTeresa Johnson;;   return A(true);
38fe27495bSTeresa Johnson;; }
39fe27495bSTeresa Johnson;;
40fe27495bSTeresa Johnson;; char *A3() {
41fe27495bSTeresa Johnson;;   return A(false);
42fe27495bSTeresa Johnson;; }
43fe27495bSTeresa Johnson;;
44fe27495bSTeresa Johnson;; char *A4() {
45fe27495bSTeresa Johnson;;   return A(false);
46fe27495bSTeresa Johnson;; }
47fe27495bSTeresa Johnson;;
48fe27495bSTeresa Johnson;; char *E() {
49fe27495bSTeresa Johnson;;   return B(true);
50fe27495bSTeresa Johnson;; }
51fe27495bSTeresa Johnson;;
52fe27495bSTeresa Johnson;; char *F() {
53fe27495bSTeresa Johnson;;   return B(false);
54fe27495bSTeresa Johnson;; }
55fe27495bSTeresa Johnson;;
56fe27495bSTeresa Johnson;; int main(int argc, char **argv) {
57fe27495bSTeresa Johnson;;   char *a1 = A1(); // cold
58fe27495bSTeresa Johnson;;   char *a2 = A2(); // cold
59fe27495bSTeresa Johnson;;   char *e = E(); // default
60fe27495bSTeresa Johnson;;   char *a3 = A3(); // default
61fe27495bSTeresa Johnson;;   char *a4 = A4(); // default
62fe27495bSTeresa Johnson;;   char *f = F(); // cold
63fe27495bSTeresa Johnson;;   memset(a1, 0, 10);
64fe27495bSTeresa Johnson;;   memset(a2, 0, 10);
65fe27495bSTeresa Johnson;;   memset(e, 0, 10);
66fe27495bSTeresa Johnson;;   memset(a3, 0, 10);
67fe27495bSTeresa Johnson;;   memset(a4, 0, 10);
68fe27495bSTeresa Johnson;;   memset(f, 0, 10);
69fe27495bSTeresa Johnson;;   delete[] a3;
70fe27495bSTeresa Johnson;;   delete[] a4;
71fe27495bSTeresa Johnson;;   delete[] e;
72fe27495bSTeresa Johnson;;   sleep(10);
73fe27495bSTeresa Johnson;;   delete[] a1;
74fe27495bSTeresa Johnson;;   delete[] a2;
75fe27495bSTeresa Johnson;;   delete[] f;
76fe27495bSTeresa Johnson;;   return 0;
77fe27495bSTeresa Johnson;; }
78fe27495bSTeresa Johnson;;
79a4bdb275STeresa Johnson;; Code compiled with -mllvm -memprof-ave-lifetime-cold-threshold=5 so that the
80fe27495bSTeresa Johnson;; memory freed after sleep(10) results in cold lifetimes.
81fe27495bSTeresa Johnson;;
82fe27495bSTeresa Johnson;; The code below was created by forcing inlining of A into its callers,
83fe27495bSTeresa Johnson;; without any other inlining or optimizations. Since both allocation contexts
84fe27495bSTeresa Johnson;; via A for each allocation in D have the same allocation type (cold via
85fe27495bSTeresa Johnson;; A1 and A2 for the first new in D, and non-cold via A3 and A4 for the second
86fe27495bSTeresa Johnson;; new in D, the contexts for those respective allocations are pruned above A.
87fe27495bSTeresa Johnson;; The allocations via E and F are to ensure we don't prune above B.
88fe27495bSTeresa Johnson;;
89fe27495bSTeresa Johnson;; The matching onto the inlined A[1234]->A sequences will require duplication
90fe27495bSTeresa Johnson;; of the context id assigned to the context from A for each allocation in D.
91fe27495bSTeresa Johnson;; This test ensures that we do this correctly in the presence of callsites
92fe27495bSTeresa Johnson;; shared by the different duplicated context ids (i.e. callsite in C).
93fe27495bSTeresa Johnson;;
94fe27495bSTeresa Johnson;; The IR was then reduced using llvm-reduce with the expected FileCheck input.
95fe27495bSTeresa Johnson
96fe27495bSTeresa Johnson; RUN: opt -thinlto-bc %s >%t.o
97fe27495bSTeresa Johnson; RUN: llvm-lto2 run %t.o -enable-memprof-context-disambiguation \
98*17688986STeresa Johnson; RUN:	-supports-hot-cold-new \
99fe27495bSTeresa Johnson; RUN:  -r=%t.o,main,plx \
100fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Db,plx \
101fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Cb,plx \
102fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Bb,plx \
103fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Ab,plx \
104fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z2A1v,plx \
105fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z2A2v,plx \
106fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z2A3v,plx \
107fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z2A4v,plx \
108fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Ev,plx \
109fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Z1Fv,plx \
110fe27495bSTeresa Johnson; RUN:  -r=%t.o,_ZdaPv, \
111fe27495bSTeresa Johnson; RUN:  -r=%t.o,sleep, \
112fe27495bSTeresa Johnson; RUN:  -r=%t.o,_Znam, \
113fe27495bSTeresa Johnson; RUN:  -memprof-verify-ccg -memprof-verify-nodes -memprof-dump-ccg \
114fe27495bSTeresa Johnson; RUN:  -memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
115fe27495bSTeresa Johnson; RUN:  -o %t.out 2>&1 | FileCheck %s --check-prefix=DUMP
116fe27495bSTeresa Johnson
117fe27495bSTeresa Johnson
118fe27495bSTeresa Johnsontarget datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
119fe27495bSTeresa Johnsontarget triple = "x86_64-unknown-linux-gnu"
120fe27495bSTeresa Johnson
121fe27495bSTeresa Johnsondefine ptr @_Z1Db(i1 %Call1) {
122fe27495bSTeresa Johnsonentry:
123fe27495bSTeresa Johnson  %call = call ptr @_Znam(i64 0), !memprof !0, !callsite !5
124fe27495bSTeresa Johnson  br label %return
125fe27495bSTeresa Johnson
126fe27495bSTeresa Johnsonif.else:                                          ; No predecessors!
127fe27495bSTeresa Johnson  %call1 = call ptr @_Znam(i64 0), !memprof !6, !callsite !11
128fe27495bSTeresa Johnson  br label %return
129fe27495bSTeresa Johnson
130fe27495bSTeresa Johnsonreturn:                                           ; preds = %if.else, %entry
131fe27495bSTeresa Johnson  ret ptr null
132fe27495bSTeresa Johnson}
133fe27495bSTeresa Johnson
134fe27495bSTeresa Johnsondeclare ptr @_Znam(i64)
135fe27495bSTeresa Johnson
136fe27495bSTeresa Johnsondefine ptr @_Z1Cb(i1 %Call1) {
137fe27495bSTeresa Johnsonentry:
138fe27495bSTeresa Johnson  %call = call ptr @_Z1Db(i1 false), !callsite !12
139fe27495bSTeresa Johnson  ret ptr null
140fe27495bSTeresa Johnson}
141fe27495bSTeresa Johnson
142fe27495bSTeresa Johnsondefine ptr @_Z1Bb(i1 %Call1) {
143fe27495bSTeresa Johnsonentry:
144fe27495bSTeresa Johnson  %call = call ptr @_Z1Cb(i1 false), !callsite !13
145fe27495bSTeresa Johnson  br label %return
146fe27495bSTeresa Johnson
147fe27495bSTeresa Johnsonif.else:                                          ; No predecessors!
148fe27495bSTeresa Johnson  %call1 = call ptr @_Z1Cb(i1 false), !callsite !14
149fe27495bSTeresa Johnson  br label %return
150fe27495bSTeresa Johnson
151fe27495bSTeresa Johnsonreturn:                                           ; preds = %if.else, %entry
152fe27495bSTeresa Johnson  ret ptr null
153fe27495bSTeresa Johnson}
154fe27495bSTeresa Johnson
155fe27495bSTeresa Johnsondefine ptr @_Z1Ab() {
156fe27495bSTeresa Johnsonentry:
157fe27495bSTeresa Johnson  %call = call ptr @_Z1Bb(i1 false), !callsite !15
158fe27495bSTeresa Johnson  ret ptr null
159fe27495bSTeresa Johnson}
160fe27495bSTeresa Johnson
161fe27495bSTeresa Johnsondefine ptr @_Z2A1v() {
162fe27495bSTeresa Johnsonentry:
163fe27495bSTeresa Johnson  %call.i = call ptr @_Z1Bb(i1 false), !callsite !16
164fe27495bSTeresa Johnson  ret ptr null
165fe27495bSTeresa Johnson}
166fe27495bSTeresa Johnson
167fe27495bSTeresa Johnsondefine ptr @_Z2A2v() {
168fe27495bSTeresa Johnsonentry:
169fe27495bSTeresa Johnson  %call.i = call ptr @_Z1Bb(i1 false), !callsite !17
170fe27495bSTeresa Johnson  ret ptr null
171fe27495bSTeresa Johnson}
172fe27495bSTeresa Johnson
173fe27495bSTeresa Johnsondefine ptr @_Z2A3v() {
174fe27495bSTeresa Johnsonentry:
175fe27495bSTeresa Johnson  %call.i = call ptr @_Z1Bb(i1 false), !callsite !18
176fe27495bSTeresa Johnson  ret ptr null
177fe27495bSTeresa Johnson}
178fe27495bSTeresa Johnson
179fe27495bSTeresa Johnsondefine ptr @_Z2A4v() {
180fe27495bSTeresa Johnsonentry:
181fe27495bSTeresa Johnson  %call.i = call ptr @_Z1Bb(i1 false), !callsite !19
182fe27495bSTeresa Johnson  ret ptr null
183fe27495bSTeresa Johnson}
184fe27495bSTeresa Johnson
185fe27495bSTeresa Johnsondefine ptr @_Z1Ev() {
186fe27495bSTeresa Johnsonentry:
187fe27495bSTeresa Johnson  %call = call ptr @_Z1Bb(i1 false), !callsite !20
188fe27495bSTeresa Johnson  ret ptr null
189fe27495bSTeresa Johnson}
190fe27495bSTeresa Johnson
191fe27495bSTeresa Johnsondefine ptr @_Z1Fv() {
192fe27495bSTeresa Johnsonentry:
193fe27495bSTeresa Johnson  %call = call ptr @_Z1Bb(i1 false), !callsite !21
194fe27495bSTeresa Johnson  ret ptr null
195fe27495bSTeresa Johnson}
196fe27495bSTeresa Johnson
197fe27495bSTeresa Johnsondeclare i32 @main()
198fe27495bSTeresa Johnson
199fe27495bSTeresa Johnsondeclare void @_ZdaPv()
200fe27495bSTeresa Johnson
201fe27495bSTeresa Johnsondeclare i32 @sleep()
202fe27495bSTeresa Johnson
203fe27495bSTeresa Johnson; uselistorder directives
204fe27495bSTeresa Johnsonuselistorder ptr @_Znam, { 1, 0 }
205fe27495bSTeresa Johnson
206fe27495bSTeresa Johnson!0 = !{!1, !3}
207fe27495bSTeresa Johnson!1 = !{!2, !"notcold"}
208fe27495bSTeresa Johnson!2 = !{i64 4854880825882961848, i64 -904694911315397047, i64 6532298921261778285, i64 1905834578520680781}
209fe27495bSTeresa Johnson!3 = !{!4, !"cold"}
210fe27495bSTeresa Johnson!4 = !{i64 4854880825882961848, i64 -904694911315397047, i64 6532298921261778285, i64 -6528110295079665978}
211fe27495bSTeresa Johnson!5 = !{i64 4854880825882961848}
212fe27495bSTeresa Johnson!6 = !{!7, !9}
213fe27495bSTeresa Johnson!7 = !{!8, !"notcold"}
214fe27495bSTeresa Johnson!8 = !{i64 -8775068539491628272, i64 -904694911315397047, i64 7859682663773658275, i64 -6528110295079665978}
215fe27495bSTeresa Johnson!9 = !{!10, !"cold"}
216fe27495bSTeresa Johnson!10 = !{i64 -8775068539491628272, i64 -904694911315397047, i64 7859682663773658275, i64 -4903163940066524832}
217fe27495bSTeresa Johnson!11 = !{i64 -8775068539491628272}
218fe27495bSTeresa Johnson!12 = !{i64 -904694911315397047}
219fe27495bSTeresa Johnson!13 = !{i64 6532298921261778285}
220fe27495bSTeresa Johnson!14 = !{i64 7859682663773658275}
221fe27495bSTeresa Johnson!15 = !{i64 -6528110295079665978}
222fe27495bSTeresa Johnson!16 = !{i64 -6528110295079665978, i64 5747919905719679568}
223fe27495bSTeresa Johnson!17 = !{i64 -6528110295079665978, i64 -5753238080028016843}
224fe27495bSTeresa Johnson!18 = !{i64 -6528110295079665978, i64 1794685869326395337}
225fe27495bSTeresa Johnson!19 = !{i64 -6528110295079665978, i64 5462047985461644151}
226fe27495bSTeresa Johnson!20 = !{i64 1905834578520680781}
227fe27495bSTeresa Johnson!21 = !{i64 -4903163940066524832}
228fe27495bSTeresa Johnson
229fe27495bSTeresa Johnson
230fe27495bSTeresa Johnson;; After adding only the alloc node memprof metadata, we only have 4 contexts (we only
231fe27495bSTeresa Johnson;; match the interesting parts of the pre-update graph here).
232fe27495bSTeresa Johnson
233fe27495bSTeresa Johnson; DUMP: CCG before updating call stack chains:
234fe27495bSTeresa Johnson; DUMP: Callsite Context Graph:
235fe27495bSTeresa Johnson
236fe27495bSTeresa Johnson; DUMP: Node [[D1:0x[a-z0-9]+]]
237fe27495bSTeresa Johnson; DUMP: Versions: 1 MIB:
238fe27495bSTeresa Johnson; DUMP:                 AllocType 1 StackIds: 0, 1, 2
239fe27495bSTeresa Johnson; DUMP:                 AllocType 2 StackIds: 0, 1, 3
240fe27495bSTeresa Johnson; DUMP:         (clone 0)
241fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
242fe27495bSTeresa Johnson; DUMP: 	ContextIds: 1 2
243fe27495bSTeresa Johnson
244fe27495bSTeresa Johnson; DUMP: Node [[C:0x[a-z0-9]+]]
245fe27495bSTeresa Johnson; DUMP:         null Call
246fe27495bSTeresa Johnson; DUMP:         AllocTypes: NotColdCold
247fe27495bSTeresa Johnson; DUMP:         ContextIds: 1 2 3 4
248fe27495bSTeresa Johnson; DUMP:         CalleeEdges:
249fe27495bSTeresa Johnson; DUMP:                 Edge from Callee [[D1]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 1 2
250fe27495bSTeresa Johnson; DUMP:                 Edge from Callee [[D2:0x[a-z0-9]+]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 3 4
251fe27495bSTeresa Johnson
252fe27495bSTeresa Johnson; DUMP: Node [[D2]]
253fe27495bSTeresa Johnson; DUMP: Versions: 1 MIB:
254fe27495bSTeresa Johnson; DUMP:                 AllocType 1 StackIds: 0, 4, 3
255fe27495bSTeresa Johnson; DUMP:                 AllocType 2 StackIds: 0, 4, 5
256fe27495bSTeresa Johnson; DUMP:         (clone 0)
257fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
258fe27495bSTeresa Johnson; DUMP: 	ContextIds: 3 4
259fe27495bSTeresa Johnson
260fe27495bSTeresa Johnson
261fe27495bSTeresa Johnson;; After updating for callsite metadata, we should have duplicated the context
262fe27495bSTeresa Johnson;; ids coming from node A (2 and 3) 4 times, for the 4 different callers of A,
263fe27495bSTeresa Johnson;; and used those on new nodes for those callers. Note that while in reality
264fe27495bSTeresa Johnson;; we only have cold edges coming from A1 and A2 and noncold from A3 and A4,
265fe27495bSTeresa Johnson;; due to the pruning we have lost this information and thus end up duplicating
266fe27495bSTeresa Johnson;; both of A's contexts to all of the new nodes (which could result in some
267fe27495bSTeresa Johnson;; unnecessary cloning.
268fe27495bSTeresa Johnson
269fe27495bSTeresa Johnson; DUMP: CCG before cloning:
270fe27495bSTeresa Johnson; DUMP: Callsite Context Graph:
271fe27495bSTeresa Johnson; DUMP: Node [[D1]]
272fe27495bSTeresa Johnson; DUMP: Versions: 1 MIB:
273fe27495bSTeresa Johnson; DUMP:                 AllocType 1 StackIds: 0, 1, 2
274fe27495bSTeresa Johnson; DUMP:                 AllocType 2 StackIds: 0, 1, 3
275fe27495bSTeresa Johnson; DUMP:         (clone 0)
276fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
277fe27495bSTeresa Johnson; DUMP: 	ContextIds: 1 2 5 7 9 11
278fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
279fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
280fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[D1]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 1 2 5 7 9 11
281fe27495bSTeresa Johnson
282fe27495bSTeresa Johnson; DUMP: Node [[C]]
283fe27495bSTeresa Johnson; DUMP: 	Callee: 11485875876353461977 (_Z1Db) Clones: 0 StackIds: 0      (clone 0)
284fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
285fe27495bSTeresa Johnson; DUMP: 	ContextIds: 1 2 3 4 5 6 7 8 9 10 11 12
286fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
287fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[D1]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 1 2 5 7 9 11
288fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[D2]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 3 4 6 8 10 12
289fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
290fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[C]] to Caller: [[B1:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2 5 7 9 11
291fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[C]] to Caller: [[B2:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 3 4 6 8 10 12
292fe27495bSTeresa Johnson
293fe27495bSTeresa Johnson; DUMP: Node [[B1]]
294fe27495bSTeresa Johnson; DUMP: 	Callee: 15062806102884567440 (_Z1Cb) Clones: 0 StackIds: 1      (clone 0)
295fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
296fe27495bSTeresa Johnson; DUMP: 	ContextIds: 1 2 5 7 9 11
297fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
298fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[C]] to Caller: [[B1]] AllocTypes: NotColdCold ContextIds: 1 2 5 7 9 11
299fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
300fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[E:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
301fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 5
302fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A3:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 7
303fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A1:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 9
304fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A4:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 11
305fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
306fe27495bSTeresa Johnson
307fe27495bSTeresa Johnson; DUMP: Node [[E]]
308fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 2       (clone 0)
309fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotCold
310fe27495bSTeresa Johnson; DUMP: 	ContextIds: 1
311fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
312fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[E]] AllocTypes: NotCold ContextIds: 1
313fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
314fe27495bSTeresa Johnson
315fe27495bSTeresa Johnson; DUMP: Node [[D2]]
316fe27495bSTeresa Johnson; DUMP: Versions: 1 MIB:
317fe27495bSTeresa Johnson; DUMP:                 AllocType 1 StackIds: 0, 4, 3
318fe27495bSTeresa Johnson; DUMP:                 AllocType 2 StackIds: 0, 4, 5
319fe27495bSTeresa Johnson; DUMP:         (clone 0)
320fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
321fe27495bSTeresa Johnson; DUMP: 	ContextIds: 3 4 6 8 10 12
322fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
323fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
324fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[D2]] to Caller: [[C]] AllocTypes: NotColdCold ContextIds: 3 4 6 8 10 12
325fe27495bSTeresa Johnson
326fe27495bSTeresa Johnson; DUMP: Node [[B2]]
327fe27495bSTeresa Johnson; DUMP: 	Callee: 15062806102884567440 (_Z1Cb) Clones: 0 StackIds: 4      (clone 0)
328fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
329fe27495bSTeresa Johnson; DUMP: 	ContextIds: 3 4 6 8 10 12
330fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
331fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[C]] to Caller: [[B2]] AllocTypes: NotColdCold ContextIds: 3 4 6 8 10 12
332fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
333fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[F:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 4
334fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A2]] AllocTypes: NotCold ContextIds: 6
335fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A3]] AllocTypes: NotCold ContextIds: 8
336fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A1]] AllocTypes: NotCold ContextIds: 10
337fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A4]] AllocTypes: NotCold ContextIds: 12
338fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A]] AllocTypes: NotCold ContextIds: 3
339fe27495bSTeresa Johnson
340fe27495bSTeresa Johnson; DUMP: Node [[F]]
341fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 5       (clone 0)
342fe27495bSTeresa Johnson; DUMP: 	AllocTypes: Cold
343fe27495bSTeresa Johnson; DUMP: 	ContextIds: 4
344fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
345fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[F]] AllocTypes: Cold ContextIds: 4
346fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
347fe27495bSTeresa Johnson
348fe27495bSTeresa Johnson; DUMP: Node [[A2]]
349fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 3, 7	(clone 0)
350fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
351fe27495bSTeresa Johnson; DUMP: 	ContextIds: 5 6
352fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
353fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A2]] AllocTypes: Cold ContextIds: 5
354fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A2]] AllocTypes: NotCold ContextIds: 6
355fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
356fe27495bSTeresa Johnson
357fe27495bSTeresa Johnson; DUMP: Node [[A3]]
358fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 3, 8    (clone 0)
359fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
360fe27495bSTeresa Johnson; DUMP: 	ContextIds: 7 8
361fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
362fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A3]] AllocTypes: Cold ContextIds: 7
363fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A3]] AllocTypes: NotCold ContextIds: 8
364fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
365fe27495bSTeresa Johnson
366fe27495bSTeresa Johnson; DUMP: Node [[A1]]
367fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 3	(clone 0)
368fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
369fe27495bSTeresa Johnson; DUMP: 	ContextIds: 9 10
370fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
371fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A1]] AllocTypes: Cold ContextIds: 9
372fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A1]] AllocTypes: NotCold ContextIds: 10
373fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
374fe27495bSTeresa Johnson
375fe27495bSTeresa Johnson; DUMP: Node [[A4]]
376fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 3, 9    (clone 0)
377fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
378fe27495bSTeresa Johnson; DUMP: 	ContextIds: 11 12
379fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
380fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A4]] AllocTypes: Cold ContextIds: 11
381fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A4]] AllocTypes: NotCold ContextIds: 12
382fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
383fe27495bSTeresa Johnson
384fe27495bSTeresa Johnson; DUMP: Node [[A]]
385fe27495bSTeresa Johnson; DUMP: 	Callee: 9116113196563097487 (_Z1Bb) Clones: 0 StackIds: 3, 6    (clone 0)
386fe27495bSTeresa Johnson; DUMP: 	AllocTypes: NotColdCold
387fe27495bSTeresa Johnson; DUMP: 	ContextIds: 2 3
388fe27495bSTeresa Johnson; DUMP: 	CalleeEdges:
389fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B1]] to Caller: [[A]] AllocTypes: Cold ContextIds: 2
390fe27495bSTeresa Johnson; DUMP: 		Edge from Callee [[B2]] to Caller: [[A]] AllocTypes: NotCold ContextIds: 3
391fe27495bSTeresa Johnson; DUMP: 	CallerEdges:
392