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