44; accordingly.
55
66; RUN: split-file %s %t
7- ; RUN: llvm-profdata merge %t/memprof_annotate_yaml .yaml -o %t/memprof_annotate_yaml .memprofdata
8- ; RUN: opt < %t/memprof_annotate_yaml .ll -passes='memprof-use<profile-filename=%t/memprof_annotate_yaml .memprofdata>' -memprof-salvage-stale-profile -S 2>&1 | FileCheck %s
7+ ; RUN: llvm-profdata merge %t/memprof_undrift .yaml -o %t/memprof_undrift .memprofdata
8+ ; RUN: opt < %t/memprof_undrift .ll -passes='memprof-use<profile-filename=%t/memprof_undrift .memprofdata>' -memprof-salvage-stale-profile -memprof-ave-lifetime-cold-threshold=5 -S 2>&1 | FileCheck %s
99
10- ;--- memprof_annotate_yaml .yaml
10+ ;--- memprof_undrift .yaml
1111---
1212HeapProfileRecords:
13+ - GUID: _Z3aaav
14+ AllocSites: []
15+ CallSites:
16+ - - { Function: _Z3aaav, LineOffset: 5, Column: 33, IsInlineFrame: false }
17+ - GUID: _Z6middlev
18+ AllocSites: []
19+ CallSites:
20+ - - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
1321 - GUID: _Z3foov
1422 AllocSites:
1523 - Callstack:
16- - { Function: _Z3foov, LineOffset: 10, Column: 50, IsInlineFrame: true }
17- - { Function: _Z3barv, LineOffset: 20, Column: 30, IsInlineFrame: false }
18- - { Function: main, LineOffset: 2, Column: 5, IsInlineFrame: false }
24+ - { Function: _Z3foov, LineOffset: 5, Column: 33, IsInlineFrame: false }
25+ - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
1926 MemInfoBlock:
20- AllocCount: 1
21- TotalSize: 400
22- TotalLifetime: 1000000
23- TotalLifetimeAccessDensity: 1
27+ AllocCount: 1
28+ TotalSize: 4
29+ TotalLifetime: 10000
30+ TotalLifetimeAccessDensity: 0
2431 CallSites: []
25- - GUID: _Z3barv
32+ - GUID: _Z4leafv
2633 AllocSites:
2734 - Callstack:
28- - { Function: _Z3foov, LineOffset: 10, Column: 50, IsInlineFrame: true }
29- - { Function: _Z3barv, LineOffset: 20, Column: 30, IsInlineFrame: false }
30- - { Function: main, LineOffset: 2, Column: 5, IsInlineFrame: false }
35+ - { Function: _Z4leafv, LineOffset: 5, Column: 33, IsInlineFrame: false }
36+ - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
37+ - { Function: _Z3aaav, LineOffset: 5, Column: 33, IsInlineFrame: false }
38+ - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
3139 MemInfoBlock:
32- AllocCount: 1
33- TotalSize: 400
34- TotalLifetime: 1000000
35- TotalLifetimeAccessDensity: 1
40+ AllocCount: 1
41+ TotalSize: 4
42+ TotalLifetime: 0
43+ TotalLifetimeAccessDensity: 25000
44+ - Callstack:
45+ - { Function: _Z4leafv, LineOffset: 5, Column: 33, IsInlineFrame: false }
46+ - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
47+ - { Function: _Z3bbbv, LineOffset: 5, Column: 33, IsInlineFrame: false }
48+ - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
49+ MemInfoBlock:
50+ AllocCount: 1
51+ TotalSize: 4
52+ TotalLifetime: 10000
53+ TotalLifetimeAccessDensity: 2
54+ CallSites: []
55+ - GUID: _Z3bbbv
56+ AllocSites: []
3657 CallSites:
37- - - { Function: _Z3foov, LineOffset: 10, Column: 50, IsInlineFrame: true }
38- - { Function: _Z3barv, LineOffset: 20, Column: 30, IsInlineFrame: false }
58+ - - { Function: _Z3bbbv, LineOffset: 5, Column: 33, IsInlineFrame: false }
3959...
40- ;--- memprof_annotate_yaml .ll
41- define dso_local ptr @_Z3foov() !dbg !4 {
42- ; CHECK-LABEL: @_Z3foov
60+ ;--- memprof_undrift .ll
61+ define dso_local ptr @_Z3foov() !dbg !5 {
62+ ; CHECK-LABEL: @_Z3foov()
4363entry:
44- %call = call ptr @_Znam(i64 4) #0 , !dbg !5
45- ; CHECK: = call {{.*}} #[[ATTR :[0-9]+]]
46- ret ptr %call
64+ %call = call ptr @_Znam(i64 4) #1 , !dbg !8
65+ ; CHECK: call ptr @_Znam(i64 4) #[[ATTR_COLD :[0-9]+]]
66+ ret ptr %call, !dbg !9
4767}
4868
49- declare ptr @_Znam(i64 noundef)
69+ ; Function Attrs: nobuiltin allocsize(0)
70+ declare ptr @_Znam(i64 noundef) #0
5071
51- define dso_local ptr @_Z3barv() !dbg !6 {
52- ; CHECK-LABEL: @_Z3barv
72+ ; Call hierarchy: leaf -> ::new
73+ define dso_local ptr @_Z4leafv() !dbg !10 {
74+ ; CHECK-LABEL: @_Z4leafv()
5375entry:
54- %call.i = call ptr @_Znam(i64 4) #0 , !dbg !7
55- ; CHECK: = call {{.*}} #[[ATTR ]]
56- ret ptr %call.i
76+ %call = call ptr @_Znam(i64 4) #1 , !dbg !11
77+ ; CHECK: call ptr @_Znam(i64 4) {{.*}}, !memprof ![[M1:[0-9]+]], !callsite ![[C1:[0-9]+ ]]
78+ ret ptr %call, !dbg !12
5779}
5880
59- attributes #0 = { builtin allocsize(0) }
60- ; CHECK: attributes #[[ATTR]] = { builtin allocsize(0) "memprof"="cold" }
81+ ; Call hierarchy: middle -> leaf -> ::new
82+ define dso_local ptr @_Z6middlev() !dbg !13 {
83+ ; CHECK-LABEL: @_Z6middlev()
84+ entry:
85+ %call.i = call ptr @_Znam(i64 4) #1, !dbg !14
86+ ; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C2:[0-9]+]]
87+ ret ptr %call.i, !dbg !16
88+ }
89+
90+ ; Call hierarchy: aaa -> middle -> leaf -> ::new
91+ define dso_local ptr @_Z3aaav() !dbg !17 {
92+ ; CHECK-LABEL: @_Z3aaav()
93+ entry:
94+ %call.i.i = call ptr @_Znam(i64 4) #1, !dbg !18
95+ ; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C3:[0-9]+]]
96+ ret ptr %call.i.i, !dbg !21
97+ }
98+
99+ ; Call hierarchy: bbb -> middle -> leaf -> ::new
100+ define dso_local ptr @_Z3bbbv() !dbg !22 {
101+ ; CHECK-LABEL: @_Z3bbbv()
102+ entry:
103+ %call.i.i = call ptr @_Znam(i64 4) #1, !dbg !23
104+ ; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C4:[0-9]+]]
105+ ret ptr %call.i.i, !dbg !26
106+ }
107+
108+ attributes #0 = { nobuiltin allocsize(0) }
109+ attributes #1 = { builtin allocsize(0) }
61110
62111!llvm.dbg.cu = !{!0}
63112!llvm.module.flags = !{!2, !3}
@@ -66,8 +115,40 @@ attributes #0 = { builtin allocsize(0) }
66115!1 = !DIFile(filename: "undrift.cc", directory: "/")
67116!2 = !{i32 7, !"Dwarf Version", i32 5}
68117!3 = !{i32 2, !"Debug Info Version", i32 3}
69- !4 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 55, unit: !0)
70- !5 = !DILocation(line: 55, column: 53, scope: !4)
71- !6 = distinct !DISubprogram(name: "bar", linkageName: "_Z3barv", scope: !1, file: !1, line: 56, unit: !0)
72- !7 = !DILocation(line: 55, column: 53, scope: !4, inlinedAt: !8)
73- !8 = distinct !DILocation(line: 56, column: 22, scope: !6)
118+ !4 = !{}
119+ !5 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 56, type: !6, unit: !0)
120+ !6 = !DISubroutineType(types: !7)
121+ !7 = !{}
122+ !8 = !DILocation(line: 56, column: 22, scope: !5)
123+ !9 = !DILocation(line: 56, column: 15, scope: !5)
124+ !10 = distinct !DISubprogram(name: "leaf", linkageName: "_Z4leafv", scope: !1, file: !1, line: 58, type: !6, unit: !0)
125+ !11 = !DILocation(line: 58, column: 23, scope: !10)
126+ !12 = !DILocation(line: 58, column: 16, scope: !10)
127+ !13 = distinct !DISubprogram(name: "middle", linkageName: "_Z6middlev", scope: !1, file: !1, line: 59, type: !6, unit: !0)
128+ !14 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !15)
129+ !15 = distinct !DILocation(line: 59, column: 25, scope: !13)
130+ !16 = !DILocation(line: 59, column: 18, scope: !13)
131+ !17 = distinct !DISubprogram(name: "aaa", linkageName: "_Z3aaav", scope: !1, file: !1, line: 61, type: !6, unit: !0)
132+ !18 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !19)
133+ !19 = distinct !DILocation(line: 59, column: 25, scope: !13, inlinedAt: !20)
134+ !20 = distinct !DILocation(line: 61, column: 22, scope: !17)
135+ !21 = !DILocation(line: 61, column: 15, scope: !17)
136+ !22 = distinct !DISubprogram(name: "bbb", linkageName: "_Z3bbbv", scope: !1, file: !1, line: 62, type: !6, unit: !0)
137+ !23 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !24)
138+ !24 = distinct !DILocation(line: 59, column: 25, scope: !13, inlinedAt: !25)
139+ !25 = distinct !DILocation(line: 62, column: 22, scope: !22)
140+ !26 = !DILocation(line: 62, column: 15, scope: !22)
141+
142+ ; CHECK: ![[M1]] = !{![[M1L:[0-9]+]], ![[M1R:[0-9]+]]}
143+ ; CHECK: ![[M1L]] = !{![[M1LL:[0-9]+]], !"cold"}
144+ ; CHECK: ![[M1LL]] = !{i64 -7165227774426488445, i64 6179674587295384169, i64 7749555980993309703}
145+ ; CHECK: ![[M1R]] = !{![[M1RL:[0-9]+]], !"notcold"}
146+ ; CHECK: ![[M1RL]] = !{i64 -7165227774426488445, i64 6179674587295384169, i64 -4748707735015301746}
147+
148+ ; CHECK: ![[C1]] = !{i64 -7165227774426488445}
149+
150+ ; CHECK: ![[C2]] = !{i64 6179674587295384169}
151+
152+ ; CHECK: ![[C3]] = !{i64 -4748707735015301746}
153+
154+ ; CHECK: ![[C4]] = !{i64 7749555980993309703}
0 commit comments