xref: /llvm-project/llvm/test/Transforms/MemProfContextDisambiguation/basic.ll (revision 9513f2fdf2ad50f55726154a6b6a4aa463bc457f)
1700cd990STeresa Johnson;; Test callsite context graph generation for simple call graph with
204f3c5a7STeresa Johnson;; two memprof contexts and no inlining, as well as graph and IR cloning.
3700cd990STeresa Johnson;;
4700cd990STeresa Johnson;; Original code looks like:
5700cd990STeresa Johnson;;
6700cd990STeresa Johnson;; char *bar() {
7700cd990STeresa Johnson;;   return new char[10];
8700cd990STeresa Johnson;; }
9700cd990STeresa Johnson;;
10700cd990STeresa Johnson;; char *baz() {
11700cd990STeresa Johnson;;   return bar();
12700cd990STeresa Johnson;; }
13700cd990STeresa Johnson;;
14700cd990STeresa Johnson;; char *foo() {
15700cd990STeresa Johnson;;   return baz();
16700cd990STeresa Johnson;; }
17700cd990STeresa Johnson;;
18700cd990STeresa Johnson;; int main(int argc, char **argv) {
19700cd990STeresa Johnson;;   char *x = foo();
20700cd990STeresa Johnson;;   char *y = foo();
21700cd990STeresa Johnson;;   memset(x, 0, 10);
22700cd990STeresa Johnson;;   memset(y, 0, 10);
23700cd990STeresa Johnson;;   delete[] x;
24700cd990STeresa Johnson;;   sleep(10);
25700cd990STeresa Johnson;;   delete[] y;
26700cd990STeresa Johnson;;   return 0;
27700cd990STeresa Johnson;; }
28700cd990STeresa Johnson;;
29a4bdb275STeresa Johnson;; Code compiled with -mllvm -memprof-ave-lifetime-cold-threshold=5 so that the
30700cd990STeresa Johnson;; memory freed after sleep(10) results in cold lifetimes.
31700cd990STeresa Johnson;;
32700cd990STeresa Johnson;; The IR was then reduced using llvm-reduce with the expected FileCheck input.
33700cd990STeresa Johnson
34e3e6bc69STeresa Johnson;; -stats requires asserts
35e3e6bc69STeresa Johnson; REQUIRES: asserts
36e3e6bc69STeresa Johnson
3717688986STeresa Johnson; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \
38700cd990STeresa Johnson; RUN:	-memprof-verify-ccg -memprof-verify-nodes -memprof-dump-ccg \
39700cd990STeresa Johnson; RUN:	-memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
4004f3c5a7STeresa Johnson; RUN:	-stats -pass-remarks=memprof-context-disambiguation \
419f8205d9STeresa Johnson; RUN:  -memprof-report-hinted-sizes \
4204f3c5a7STeresa Johnson; RUN:	%s -S 2>&1 | FileCheck %s --check-prefix=DUMP --check-prefix=IR \
439f8205d9STeresa Johnson; RUN:	--check-prefix=STATS --check-prefix=REMARKS --check-prefix=SIZES
44700cd990STeresa Johnson
45700cd990STeresa Johnson; RUN:	cat %t.ccg.postbuild.dot | FileCheck %s --check-prefix=DOT
46a104e270STeresa Johnson;; We should have cloned bar, baz, and foo, for the cold memory allocation.
47a104e270STeresa Johnson; RUN:	cat %t.ccg.cloned.dot | FileCheck %s --check-prefix=DOTCLONED
48700cd990STeresa Johnson
4917688986STeresa Johnson;; Check again without -supports-hot-cold-new and ensure all MIB are cold and
5017688986STeresa Johnson;; that there is no cloning.
5117688986STeresa Johnson; RUN: opt -passes=memprof-context-disambiguation \
5217688986STeresa Johnson; RUN:	-memprof-verify-ccg -memprof-verify-nodes -memprof-dump-ccg \
5317688986STeresa Johnson; RUN:	-memprof-export-to-dot -memprof-dot-file-path-prefix=%t. \
5417688986STeresa Johnson; RUN:	-stats -pass-remarks=memprof-context-disambiguation \
5517688986STeresa Johnson; RUN:	%s -S 2>&1 | FileCheck %s --implicit-check-not="Callsite Context Graph" \
5617688986STeresa Johnson; RUN:	--implicit-check-not="created clone"
5717688986STeresa Johnson
58700cd990STeresa Johnsontarget datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
59700cd990STeresa Johnsontarget triple = "x86_64-unknown-linux-gnu"
60700cd990STeresa Johnson
61700cd990STeresa Johnsondefine i32 @main() #0 {
62700cd990STeresa Johnsonentry:
63700cd990STeresa Johnson  %call = call noundef ptr @_Z3foov(), !callsite !0
64700cd990STeresa Johnson  %call1 = call noundef ptr @_Z3foov(), !callsite !1
65700cd990STeresa Johnson  ret i32 0
66700cd990STeresa Johnson}
67700cd990STeresa Johnson
68700cd990STeresa Johnson; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
69700cd990STeresa Johnsondeclare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1
70700cd990STeresa Johnson
71700cd990STeresa Johnson; Function Attrs: nobuiltin
72700cd990STeresa Johnsondeclare void @_ZdaPv() #2
73700cd990STeresa Johnson
74700cd990STeresa Johnsondefine internal ptr @_Z3barv() #3 {
75700cd990STeresa Johnsonentry:
76700cd990STeresa Johnson  %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6, !memprof !2, !callsite !7
77700cd990STeresa Johnson  ret ptr null
78700cd990STeresa Johnson}
79700cd990STeresa Johnson
80700cd990STeresa Johnsondeclare ptr @_Znam(i64)
81700cd990STeresa Johnson
82700cd990STeresa Johnsondefine internal ptr @_Z3bazv() #4 {
83700cd990STeresa Johnsonentry:
84700cd990STeresa Johnson  %call = call noundef ptr @_Z3barv(), !callsite !8
85700cd990STeresa Johnson  ret ptr null
86700cd990STeresa Johnson}
87700cd990STeresa Johnson
88700cd990STeresa Johnson; Function Attrs: noinline
89700cd990STeresa Johnsondefine internal ptr @_Z3foov() #5 {
90700cd990STeresa Johnsonentry:
91700cd990STeresa Johnson  %call = call noundef ptr @_Z3bazv(), !callsite !9
92700cd990STeresa Johnson  ret ptr null
93700cd990STeresa Johnson}
94700cd990STeresa Johnson
95700cd990STeresa Johnson; uselistorder directives
96700cd990STeresa Johnsonuselistorder ptr @_Z3foov, { 1, 0 }
97700cd990STeresa Johnson
98700cd990STeresa Johnsonattributes #0 = { "tune-cpu"="generic" }
99700cd990STeresa Johnsonattributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
100700cd990STeresa Johnsonattributes #2 = { nobuiltin }
101700cd990STeresa Johnsonattributes #3 = { "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
102700cd990STeresa Johnsonattributes #4 = { "stack-protector-buffer-size"="8" }
103700cd990STeresa Johnsonattributes #5 = { noinline }
104700cd990STeresa Johnsonattributes #6 = { builtin }
105700cd990STeresa Johnson
106700cd990STeresa Johnson!0 = !{i64 8632435727821051414}
107700cd990STeresa Johnson!1 = !{i64 -3421689549917153178}
108700cd990STeresa Johnson!2 = !{!3, !5}
109*9513f2fdSTeresa Johnson!3 = !{!4, !"notcold", !10}
110700cd990STeresa Johnson!4 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 8632435727821051414}
111*9513f2fdSTeresa Johnson!5 = !{!6, !"cold", !11, !12}
112700cd990STeresa Johnson!6 = !{i64 9086428284934609951, i64 -5964873800580613432, i64 2732490490862098848, i64 -3421689549917153178}
113700cd990STeresa Johnson!7 = !{i64 9086428284934609951}
114700cd990STeresa Johnson!8 = !{i64 -5964873800580613432}
115700cd990STeresa Johnson!9 = !{i64 2732490490862098848}
116*9513f2fdSTeresa Johnson!10 = !{i64 123, i64 100}
117*9513f2fdSTeresa Johnson!11 = !{i64 456, i64 200}
118*9513f2fdSTeresa Johnson!12 = !{i64 789, i64 300}
119700cd990STeresa Johnson
120700cd990STeresa Johnson
121700cd990STeresa Johnson; DUMP: CCG before cloning:
122700cd990STeresa Johnson; DUMP: Callsite Context Graph:
123700cd990STeresa Johnson; DUMP: Node [[BAR:0x[a-z0-9]+]]
124700cd990STeresa Johnson; DUMP: 	  %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6	(clone 0)
125700cd990STeresa Johnson; DUMP: 	AllocTypes: NotColdCold
126700cd990STeresa Johnson; DUMP: 	ContextIds: 1 2
127700cd990STeresa Johnson; DUMP: 	CalleeEdges:
128700cd990STeresa Johnson; DUMP: 	CallerEdges:
129700cd990STeresa Johnson; DUMP: 		Edge from Callee [[BAR]] to Caller: [[BAZ:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
130700cd990STeresa Johnson
131700cd990STeresa Johnson; DUMP: Node [[BAZ]]
132700cd990STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3barv()	(clone 0)
133700cd990STeresa Johnson; DUMP: 	AllocTypes: NotColdCold
134700cd990STeresa Johnson; DUMP: 	ContextIds: 1 2
135700cd990STeresa Johnson; DUMP: 	CalleeEdges:
136700cd990STeresa Johnson; DUMP: 		Edge from Callee [[BAR]] to Caller: [[BAZ]] AllocTypes: NotColdCold ContextIds: 1 2
137700cd990STeresa Johnson; DUMP: 	CallerEdges:
138700cd990STeresa Johnson; DUMP: 		Edge from Callee [[BAZ]] to Caller: [[FOO:0x[a-z0-9]+]] AllocTypes: NotColdCold ContextIds: 1 2
139700cd990STeresa Johnson
140700cd990STeresa Johnson; DUMP: Node [[FOO]]
141700cd990STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3bazv()	(clone 0)
142700cd990STeresa Johnson; DUMP: 	AllocTypes: NotColdCold
143700cd990STeresa Johnson; DUMP: 	ContextIds: 1 2
144700cd990STeresa Johnson; DUMP: 	CalleeEdges:
145700cd990STeresa Johnson; DUMP: 		Edge from Callee [[BAZ]] to Caller: [[FOO]] AllocTypes: NotColdCold ContextIds: 1 2
146700cd990STeresa Johnson; DUMP: 	CallerEdges:
147700cd990STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN1:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
148700cd990STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
149700cd990STeresa Johnson
150700cd990STeresa Johnson; DUMP: Node [[MAIN1]]
151700cd990STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3foov()	(clone 0)
152700cd990STeresa Johnson; DUMP: 	AllocTypes: NotCold
153700cd990STeresa Johnson; DUMP: 	ContextIds: 1
154700cd990STeresa Johnson; DUMP: 	CalleeEdges:
155700cd990STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
156700cd990STeresa Johnson; DUMP: 	CallerEdges:
157700cd990STeresa Johnson
158700cd990STeresa Johnson; DUMP: Node [[MAIN2]]
159700cd990STeresa Johnson; DUMP: 	  %call1 = call noundef ptr @_Z3foov()	(clone 0)
160700cd990STeresa Johnson; DUMP: 	AllocTypes: Cold
161700cd990STeresa Johnson; DUMP: 	ContextIds: 2
162700cd990STeresa Johnson; DUMP: 	CalleeEdges:
163700cd990STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
164700cd990STeresa Johnson; DUMP: 	CallerEdges:
165700cd990STeresa Johnson
166a104e270STeresa Johnson; DUMP: CCG after cloning:
167a104e270STeresa Johnson; DUMP: Callsite Context Graph:
168a104e270STeresa Johnson; DUMP: Node [[BAR:0x[a-z0-9]+]]
169a104e270STeresa Johnson; DUMP: 	  %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6	(clone 0)
170a104e270STeresa Johnson; DUMP: 	AllocTypes: NotCold
171a104e270STeresa Johnson; DUMP: 	ContextIds: 1
172a104e270STeresa Johnson; DUMP: 	CalleeEdges:
173a104e270STeresa Johnson; DUMP: 	CallerEdges:
174a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAR]] to Caller: [[BAZ:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
175a104e270STeresa Johnson; DUMP:		Clones: [[BAR2:0x[a-z0-9]+]]
176a104e270STeresa Johnson
177a104e270STeresa Johnson; DUMP: Node [[BAZ]]
178a104e270STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3barv()	(clone 0)
179a104e270STeresa Johnson; DUMP: 	AllocTypes: NotCold
180a104e270STeresa Johnson; DUMP: 	ContextIds: 1
181a104e270STeresa Johnson; DUMP: 	CalleeEdges:
182a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAR]] to Caller: [[BAZ]] AllocTypes: NotCold ContextIds: 1
183a104e270STeresa Johnson; DUMP: 	CallerEdges:
184a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAZ]] to Caller: [[FOO:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
185a104e270STeresa Johnson; DUMP:		Clones: [[BAZ2:0x[a-z0-9]+]]
186a104e270STeresa Johnson
187a104e270STeresa Johnson; DUMP: Node [[FOO]]
188a104e270STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3bazv()	(clone 0)
189a104e270STeresa Johnson; DUMP: 	AllocTypes: NotCold
190a104e270STeresa Johnson; DUMP: 	ContextIds: 1
191a104e270STeresa Johnson; DUMP: 	CalleeEdges:
192a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAZ]] to Caller: [[FOO]] AllocTypes: NotCold ContextIds: 1
193a104e270STeresa Johnson; DUMP: 	CallerEdges:
194a104e270STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN1:0x[a-z0-9]+]] AllocTypes: NotCold ContextIds: 1
195a104e270STeresa Johnson; DUMP:		Clones: [[FOO2:0x[a-z0-9]+]]
196a104e270STeresa Johnson
197a104e270STeresa Johnson; DUMP: Node [[MAIN1]]
198a104e270STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3foov()	(clone 0)
199a104e270STeresa Johnson; DUMP: 	AllocTypes: NotCold
200a104e270STeresa Johnson; DUMP: 	ContextIds: 1
201a104e270STeresa Johnson; DUMP: 	CalleeEdges:
202a104e270STeresa Johnson; DUMP: 		Edge from Callee [[FOO]] to Caller: [[MAIN1]] AllocTypes: NotCold ContextIds: 1
203a104e270STeresa Johnson; DUMP: 	CallerEdges:
204a104e270STeresa Johnson
205a104e270STeresa Johnson; DUMP: Node [[MAIN2]]
206a104e270STeresa Johnson; DUMP: 	  %call1 = call noundef ptr @_Z3foov()	(clone 0)
207a104e270STeresa Johnson; DUMP: 	AllocTypes: Cold
208a104e270STeresa Johnson; DUMP: 	ContextIds: 2
209a104e270STeresa Johnson; DUMP: 	CalleeEdges:
210a104e270STeresa Johnson; DUMP: 		Edge from Callee [[FOO2]] to Caller: [[MAIN2]] AllocTypes: Cold ContextIds: 2
211a104e270STeresa Johnson; DUMP: 	CallerEdges:
212a104e270STeresa Johnson
213a104e270STeresa Johnson; DUMP: Node [[FOO2]]
214a104e270STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3bazv()	(clone 0)
215a104e270STeresa Johnson; DUMP: 	AllocTypes: Cold
216a104e270STeresa Johnson; DUMP: 	ContextIds: 2
217a104e270STeresa Johnson; DUMP: 	CalleeEdges:
218a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
219a104e270STeresa Johnson; DUMP: 	CallerEdges:
220a104e270STeresa Johnson; DUMP: 		Edge from Callee [[FOO2]] to Caller: [[MAIN2:0x[a-z0-9]+]] AllocTypes: Cold ContextIds: 2
221a104e270STeresa Johnson; DUMP:		Clone of [[FOO]]
222a104e270STeresa Johnson
223a104e270STeresa Johnson; DUMP: Node [[BAZ2]]
224a104e270STeresa Johnson; DUMP: 	  %call = call noundef ptr @_Z3barv()	(clone 0)
225a104e270STeresa Johnson; DUMP: 	AllocTypes: Cold
226a104e270STeresa Johnson; DUMP: 	ContextIds: 2
227a104e270STeresa Johnson; DUMP: 	CalleeEdges:
228a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
229a104e270STeresa Johnson; DUMP: 	CallerEdges:
230a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAZ2]] to Caller: [[FOO2]] AllocTypes: Cold ContextIds: 2
231a104e270STeresa Johnson; DUMP:		Clone of [[BAZ]]
232a104e270STeresa Johnson
233a104e270STeresa Johnson; DUMP: Node [[BAR2]]
234a104e270STeresa Johnson; DUMP: 	  %call = call noalias noundef nonnull ptr @_Znam(i64 noundef 10) #6	(clone 0)
235a104e270STeresa Johnson; DUMP: 	AllocTypes: Cold
236a104e270STeresa Johnson; DUMP: 	ContextIds: 2
237a104e270STeresa Johnson; DUMP: 	CalleeEdges:
238a104e270STeresa Johnson; DUMP: 	CallerEdges:
239a104e270STeresa Johnson; DUMP: 		Edge from Callee [[BAR2]] to Caller: [[BAZ2]] AllocTypes: Cold ContextIds: 2
240a104e270STeresa Johnson; DUMP:		Clone of [[BAR]]
241a104e270STeresa Johnson
242700cd990STeresa Johnson
24304f3c5a7STeresa Johnson; REMARKS: created clone _Z3barv.memprof.1
24404f3c5a7STeresa Johnson; REMARKS: created clone _Z3bazv.memprof.1
24504f3c5a7STeresa Johnson; REMARKS: created clone _Z3foov.memprof.1
24604f3c5a7STeresa Johnson; REMARKS: call in clone main assigned to call function clone _Z3foov.memprof.1
24704f3c5a7STeresa Johnson; REMARKS: call in clone _Z3foov.memprof.1 assigned to call function clone _Z3bazv.memprof.1
24804f3c5a7STeresa Johnson; REMARKS: call in clone _Z3bazv.memprof.1 assigned to call function clone _Z3barv.memprof.1
24904f3c5a7STeresa Johnson; REMARKS: call in clone _Z3barv.memprof.1 marked with memprof allocation attribute cold
25004f3c5a7STeresa Johnson; REMARKS: call in clone main assigned to call function clone _Z3foov
25104f3c5a7STeresa Johnson; REMARKS: call in clone _Z3foov assigned to call function clone _Z3bazv
25204f3c5a7STeresa Johnson; REMARKS: call in clone _Z3bazv assigned to call function clone _Z3barv
25304f3c5a7STeresa Johnson; REMARKS: call in clone _Z3barv marked with memprof allocation attribute notcold
25404f3c5a7STeresa Johnson
255*9513f2fdSTeresa Johnson; SIZES: NotCold full allocation context 123 with total size 100 is NotCold after cloning
256*9513f2fdSTeresa Johnson; SIZES: Cold full allocation context 456 with total size 200 is Cold after cloning
257*9513f2fdSTeresa Johnson; SIZES: Cold full allocation context 789 with total size 300 is Cold after cloning
25804f3c5a7STeresa Johnson
25904f3c5a7STeresa Johnson; IR: define {{.*}} @main
26004f3c5a7STeresa Johnson;; The first call to foo does not allocate cold memory. It should call the
26104f3c5a7STeresa Johnson;; original functions, which ultimately call the original allocation decorated
26204f3c5a7STeresa Johnson;; with a "notcold" attribute.
26304f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3foov()
26404f3c5a7STeresa Johnson;; The second call to foo allocates cold memory. It should call cloned functions
26504f3c5a7STeresa Johnson;; which ultimately call a cloned allocation decorated with a "cold" attribute.
26604f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3foov.memprof.1()
26704f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3barv()
26804f3c5a7STeresa Johnson; IR:   call {{.*}} @_Znam(i64 noundef 10) #[[NOTCOLD:[0-9]+]]
26904f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3bazv()
27004f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3barv()
27104f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3foov()
27204f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3bazv()
27304f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3barv.memprof.1()
27404f3c5a7STeresa Johnson; IR:   call {{.*}} @_Znam(i64 noundef 10) #[[COLD:[0-9]+]]
27504f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3bazv.memprof.1()
27604f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3barv.memprof.1()
27704f3c5a7STeresa Johnson; IR: define internal {{.*}} @_Z3foov.memprof.1()
27804f3c5a7STeresa Johnson; IR:   call {{.*}} @_Z3bazv.memprof.1()
27904f3c5a7STeresa Johnson; IR: attributes #[[NOTCOLD]] = { builtin "memprof"="notcold" }
28004f3c5a7STeresa Johnson; IR: attributes #[[COLD]] = { builtin "memprof"="cold" }
28104f3c5a7STeresa Johnson
28204f3c5a7STeresa Johnson
28304f3c5a7STeresa Johnson; STATS: 1 memprof-context-disambiguation - Number of cold static allocations (possibly cloned)
28404f3c5a7STeresa Johnson; STATS: 1 memprof-context-disambiguation - Number of not cold static allocations (possibly cloned)
28504f3c5a7STeresa Johnson; STATS: 3 memprof-context-disambiguation - Number of function clones created during whole program analysis
28604f3c5a7STeresa Johnson
28704f3c5a7STeresa Johnson
288700cd990STeresa Johnson; DOT: digraph "postbuild" {
289700cd990STeresa Johnson; DOT: 	label="postbuild";
290700cd990STeresa Johnson; DOT: 	Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
291700cd990STeresa Johnson; DOT: 	Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
292700cd990STeresa Johnson; DOT: 	Node[[BAZ]] -> Node[[BAR]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
293700cd990STeresa Johnson; DOT: 	Node[[FOO:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO]] ContextIds: 1 2",fillcolor="mediumorchid1",style="filled",style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
294700cd990STeresa Johnson; DOT: 	Node[[FOO]] -> Node[[BAZ]][tooltip="ContextIds: 1 2",fillcolor="mediumorchid1"];
295700cd990STeresa Johnson; DOT: 	Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
296700cd990STeresa Johnson; DOT: 	Node[[MAIN1]] -> Node[[FOO]][tooltip="ContextIds: 1",fillcolor="brown1"];
297700cd990STeresa Johnson; DOT: 	Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
298700cd990STeresa Johnson; DOT: 	Node[[MAIN2]] -> Node[[FOO]][tooltip="ContextIds: 2",fillcolor="cyan"];
299700cd990STeresa Johnson; DOT: }
300a104e270STeresa Johnson
301a104e270STeresa Johnson
302a104e270STeresa Johnson; DOTCLONED: digraph "cloned" {
303a104e270STeresa Johnson; DOTCLONED: 	label="cloned";
304a104e270STeresa Johnson; DOTCLONED: 	Node[[BAR:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAR]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
305a104e270STeresa Johnson; DOTCLONED: 	Node[[BAZ:0x[a-z0-9]+]] [shape=record,tooltip="N[[BAZ]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 12481870273128938184\n_Z3bazv -\> _Z3barv}"];
306a104e270STeresa Johnson; DOTCLONED: 	Node[[BAZ]] -> Node[[BAR]][tooltip="ContextIds: 1",fillcolor="brown1"];
307a104e270STeresa Johnson; DOTCLONED: 	Node[[FOO:0x[a-z0-9]+]] [shape=record,tooltip="N[[FOO]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 2732490490862098848\n_Z3foov -\> _Z3bazv}"];
308a104e270STeresa Johnson; DOTCLONED: 	Node[[FOO]] -> Node[[BAZ]][tooltip="ContextIds: 1",fillcolor="brown1"];
309a104e270STeresa Johnson; DOTCLONED: 	Node[[MAIN1:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN1]] ContextIds: 1",fillcolor="brown1",style="filled",style="filled",label="{OrigId: 8632435727821051414\nmain -\> _Z3foov}"];
310a104e270STeresa Johnson; DOTCLONED: 	Node[[MAIN1]] -> Node[[FOO]][tooltip="ContextIds: 1",fillcolor="brown1"];
311a104e270STeresa Johnson; DOTCLONED: 	Node[[MAIN2:0x[a-z0-9]+]] [shape=record,tooltip="N[[MAIN2]] ContextIds: 2",fillcolor="cyan",style="filled",style="filled",label="{OrigId: 15025054523792398438\nmain -\> _Z3foov}"];
312a104e270STeresa Johnson; DOTCLONED: 	Node[[MAIN2]] -> Node[[FOO2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
313a104e270STeresa Johnson; DOTCLONED: 	Node[[FOO2]] [shape=record,tooltip="N[[FOO2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3foov -\> _Z3bazv}"];
314a104e270STeresa Johnson; DOTCLONED: 	Node[[FOO2]] -> Node[[BAZ2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
315a104e270STeresa Johnson; DOTCLONED: 	Node[[BAZ2]] [shape=record,tooltip="N[[BAZ2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: 0\n_Z3bazv -\> _Z3barv}"];
316a104e270STeresa Johnson; DOTCLONED: 	Node[[BAZ2]] -> Node[[BAR2:0x[a-z0-9]+]][tooltip="ContextIds: 2",fillcolor="cyan"];
317a104e270STeresa Johnson; DOTCLONED: 	Node[[BAR2]] [shape=record,tooltip="N[[BAR2]] ContextIds: 2",fillcolor="cyan",style="filled",color="blue",style="filled,bold,dashed",label="{OrigId: Alloc0\n_Z3barv -\> _Znam}"];
318a104e270STeresa Johnson; DOTCLONED: }
319