xref: /llvm-project/llvm/test/Transforms/PGOProfile/memprof-undrift.test (revision ac8a9f8fffb605514056f53f12f1fba94ee933e9)
1*ac8a9f8fSKazu Hirata; REQUIRES: x86_64-linux
2*ac8a9f8fSKazu Hirata
3*ac8a9f8fSKazu Hirata; Make sure that we can undrift the MemProf profile and annotate the IR
4*ac8a9f8fSKazu Hirata; accordingly.
5*ac8a9f8fSKazu Hirata;
6*ac8a9f8fSKazu Hirata; The IR was generated from:
7*ac8a9f8fSKazu Hirata;
8*ac8a9f8fSKazu Hirata; char *foo() { return ::new char[4]; }
9*ac8a9f8fSKazu Hirata; char *leaf() { return ::new char[4]; }
10*ac8a9f8fSKazu Hirata; char *middle() { return leaf(); }
11*ac8a9f8fSKazu Hirata; char *aaa() { return middle(); }
12*ac8a9f8fSKazu Hirata; char *bbb() { return middle(); }
13*ac8a9f8fSKazu Hirata;
14*ac8a9f8fSKazu Hirata; int main() {
15*ac8a9f8fSKazu Hirata;   foo();
16*ac8a9f8fSKazu Hirata;
17*ac8a9f8fSKazu Hirata;   char *a = aaa();
18*ac8a9f8fSKazu Hirata;   char *b = bbb();
19*ac8a9f8fSKazu Hirata;   a[0] = 'a';
20*ac8a9f8fSKazu Hirata;   b[0] = 'b';
21*ac8a9f8fSKazu Hirata;   delete[] a;
22*ac8a9f8fSKazu Hirata;   sleep(10);
23*ac8a9f8fSKazu Hirata;   delete[] b;
24*ac8a9f8fSKazu Hirata;
25*ac8a9f8fSKazu Hirata;   return 0;
26*ac8a9f8fSKazu Hirata; }
27*ac8a9f8fSKazu Hirata
28*ac8a9f8fSKazu Hirata; RUN: split-file %s %t
29*ac8a9f8fSKazu Hirata; RUN: llvm-profdata merge %t/memprof_undrift.yaml -o %t/memprof_undrift.memprofdata
30*ac8a9f8fSKazu Hirata; 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
31*ac8a9f8fSKazu Hirata
32*ac8a9f8fSKazu Hirata;--- memprof_undrift.yaml
33*ac8a9f8fSKazu Hirata---
34*ac8a9f8fSKazu HirataHeapProfileRecords:
35*ac8a9f8fSKazu Hirata  - GUID:            _Z3aaav
36*ac8a9f8fSKazu Hirata    AllocSites:      []
37*ac8a9f8fSKazu Hirata    CallSites:
38*ac8a9f8fSKazu Hirata      - - { Function: _Z3aaav, LineOffset: 5, Column: 33, IsInlineFrame: false }
39*ac8a9f8fSKazu Hirata  - GUID:            _Z6middlev
40*ac8a9f8fSKazu Hirata    AllocSites:      []
41*ac8a9f8fSKazu Hirata    CallSites:
42*ac8a9f8fSKazu Hirata      - - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
43*ac8a9f8fSKazu Hirata  - GUID:            _Z3foov
44*ac8a9f8fSKazu Hirata    AllocSites:
45*ac8a9f8fSKazu Hirata      - Callstack:
46*ac8a9f8fSKazu Hirata          - { Function: _Z3foov, LineOffset: 5, Column: 33, IsInlineFrame: false }
47*ac8a9f8fSKazu Hirata          - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
48*ac8a9f8fSKazu Hirata        MemInfoBlock:
49*ac8a9f8fSKazu Hirata          AllocCount:      1
50*ac8a9f8fSKazu Hirata          TotalSize:       4
51*ac8a9f8fSKazu Hirata          TotalLifetime:   10000
52*ac8a9f8fSKazu Hirata          TotalLifetimeAccessDensity: 0
53*ac8a9f8fSKazu Hirata    CallSites:       []
54*ac8a9f8fSKazu Hirata  - GUID:            _Z4leafv
55*ac8a9f8fSKazu Hirata    AllocSites:
56*ac8a9f8fSKazu Hirata      - Callstack:
57*ac8a9f8fSKazu Hirata          - { Function: _Z4leafv, LineOffset: 5, Column: 33, IsInlineFrame: false }
58*ac8a9f8fSKazu Hirata          - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
59*ac8a9f8fSKazu Hirata          - { Function: _Z3aaav, LineOffset: 5, Column: 33, IsInlineFrame: false }
60*ac8a9f8fSKazu Hirata          - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
61*ac8a9f8fSKazu Hirata        MemInfoBlock:
62*ac8a9f8fSKazu Hirata          AllocCount:      1
63*ac8a9f8fSKazu Hirata          TotalSize:       4
64*ac8a9f8fSKazu Hirata          TotalLifetime:   0
65*ac8a9f8fSKazu Hirata          TotalLifetimeAccessDensity: 25000
66*ac8a9f8fSKazu Hirata      - Callstack:
67*ac8a9f8fSKazu Hirata          - { Function: _Z4leafv, LineOffset: 5, Column: 33, IsInlineFrame: false }
68*ac8a9f8fSKazu Hirata          - { Function: _Z6middlev, LineOffset: 5, Column: 33, IsInlineFrame: false }
69*ac8a9f8fSKazu Hirata          - { Function: _Z3bbbv, LineOffset: 5, Column: 33, IsInlineFrame: false }
70*ac8a9f8fSKazu Hirata          - { Function: main, LineOffset: 5, Column: 33, IsInlineFrame: false }
71*ac8a9f8fSKazu Hirata        MemInfoBlock:
72*ac8a9f8fSKazu Hirata          AllocCount:      1
73*ac8a9f8fSKazu Hirata          TotalSize:       4
74*ac8a9f8fSKazu Hirata          TotalLifetime:   10000
75*ac8a9f8fSKazu Hirata          TotalLifetimeAccessDensity: 2
76*ac8a9f8fSKazu Hirata    CallSites:       []
77*ac8a9f8fSKazu Hirata  - GUID:            _Z3bbbv
78*ac8a9f8fSKazu Hirata    AllocSites:      []
79*ac8a9f8fSKazu Hirata    CallSites:
80*ac8a9f8fSKazu Hirata      - - { Function: _Z3bbbv, LineOffset: 5, Column: 33, IsInlineFrame: false }
81*ac8a9f8fSKazu Hirata...
82*ac8a9f8fSKazu Hirata;--- memprof_undrift.ll
83*ac8a9f8fSKazu Hiratadefine dso_local ptr @_Z3foov() !dbg !5 {
84*ac8a9f8fSKazu Hirata; CHECK-LABEL: @_Z3foov()
85*ac8a9f8fSKazu Hirataentry:
86*ac8a9f8fSKazu Hirata  %call = call ptr @_Znam(i64 4) #1, !dbg !8
87*ac8a9f8fSKazu Hirata; CHECK: call ptr @_Znam(i64 4) #[[ATTR:[0-9]+]]
88*ac8a9f8fSKazu Hirata  ret ptr %call, !dbg !9
89*ac8a9f8fSKazu Hirata}
90*ac8a9f8fSKazu Hirata
91*ac8a9f8fSKazu Hirata; Function Attrs: nobuiltin allocsize(0)
92*ac8a9f8fSKazu Hiratadeclare ptr @_Znam(i64 noundef) #0
93*ac8a9f8fSKazu Hirata
94*ac8a9f8fSKazu Hiratadefine dso_local ptr @_Z4leafv() !dbg !10 {
95*ac8a9f8fSKazu Hirata; CHECK-LABEL: @_Z4leafv()
96*ac8a9f8fSKazu Hirataentry:
97*ac8a9f8fSKazu Hirata  %call = call ptr @_Znam(i64 4) #1, !dbg !11
98*ac8a9f8fSKazu Hirata; CHECK: call ptr @_Znam(i64 4) {{.*}}, !memprof ![[M1:[0-9]+]], !callsite ![[C1:[0-9]+]]
99*ac8a9f8fSKazu Hirata  ret ptr %call, !dbg !12
100*ac8a9f8fSKazu Hirata}
101*ac8a9f8fSKazu Hirata
102*ac8a9f8fSKazu Hiratadefine dso_local ptr @_Z6middlev() !dbg !13 {
103*ac8a9f8fSKazu Hirata; CHECK-LABEL: @_Z6middlev()
104*ac8a9f8fSKazu Hirataentry:
105*ac8a9f8fSKazu Hirata  %call.i = call ptr @_Znam(i64 4) #1, !dbg !14
106*ac8a9f8fSKazu Hirata; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C2:[0-9]+]]
107*ac8a9f8fSKazu Hirata  ret ptr %call.i, !dbg !16
108*ac8a9f8fSKazu Hirata}
109*ac8a9f8fSKazu Hirata
110*ac8a9f8fSKazu Hiratadefine dso_local ptr @_Z3aaav() !dbg !17 {
111*ac8a9f8fSKazu Hirata; CHECK-LABEL: @_Z3aaav()
112*ac8a9f8fSKazu Hirataentry:
113*ac8a9f8fSKazu Hirata  %call.i.i = call ptr @_Znam(i64 4) #1, !dbg !18
114*ac8a9f8fSKazu Hirata; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C3:[0-9]+]]
115*ac8a9f8fSKazu Hirata  ret ptr %call.i.i, !dbg !21
116*ac8a9f8fSKazu Hirata}
117*ac8a9f8fSKazu Hirata
118*ac8a9f8fSKazu Hiratadefine dso_local ptr @_Z3bbbv() !dbg !22 {
119*ac8a9f8fSKazu Hirata; CHECK-LABEL: @_Z3bbbv()
120*ac8a9f8fSKazu Hirataentry:
121*ac8a9f8fSKazu Hirata  %call.i.i = call ptr @_Znam(i64 4) #1, !dbg !23
122*ac8a9f8fSKazu Hirata; CHECK: call ptr @_Znam(i64 4) {{.*}}, !callsite ![[C4:[0-9]+]]
123*ac8a9f8fSKazu Hirata  ret ptr %call.i.i, !dbg !26
124*ac8a9f8fSKazu Hirata}
125*ac8a9f8fSKazu Hirata
126*ac8a9f8fSKazu Hirataattributes #0 = { nobuiltin allocsize(0) }
127*ac8a9f8fSKazu Hirataattributes #1 = { builtin allocsize(0) }
128*ac8a9f8fSKazu Hirata
129*ac8a9f8fSKazu Hirata!llvm.dbg.cu = !{!0}
130*ac8a9f8fSKazu Hirata!llvm.module.flags = !{!2, !3}
131*ac8a9f8fSKazu Hirata
132*ac8a9f8fSKazu Hirata!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1)
133*ac8a9f8fSKazu Hirata!1 = !DIFile(filename: "undrift.cc", directory: "/")
134*ac8a9f8fSKazu Hirata!2 = !{i32 7, !"Dwarf Version", i32 5}
135*ac8a9f8fSKazu Hirata!3 = !{i32 2, !"Debug Info Version", i32 3}
136*ac8a9f8fSKazu Hirata!4 = !{}
137*ac8a9f8fSKazu Hirata!5 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", scope: !1, file: !1, line: 56, type: !6, unit: !0)
138*ac8a9f8fSKazu Hirata!6 = !DISubroutineType(types: !7)
139*ac8a9f8fSKazu Hirata!7 = !{}
140*ac8a9f8fSKazu Hirata!8 = !DILocation(line: 56, column: 22, scope: !5)
141*ac8a9f8fSKazu Hirata!9 = !DILocation(line: 56, column: 15, scope: !5)
142*ac8a9f8fSKazu Hirata!10 = distinct !DISubprogram(name: "leaf", linkageName: "_Z4leafv", scope: !1, file: !1, line: 58, type: !6, unit: !0)
143*ac8a9f8fSKazu Hirata!11 = !DILocation(line: 58, column: 23, scope: !10)
144*ac8a9f8fSKazu Hirata!12 = !DILocation(line: 58, column: 16, scope: !10)
145*ac8a9f8fSKazu Hirata!13 = distinct !DISubprogram(name: "middle", linkageName: "_Z6middlev", scope: !1, file: !1, line: 59, type: !6, unit: !0)
146*ac8a9f8fSKazu Hirata!14 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !15)
147*ac8a9f8fSKazu Hirata!15 = distinct !DILocation(line: 59, column: 25, scope: !13)
148*ac8a9f8fSKazu Hirata!16 = !DILocation(line: 59, column: 18, scope: !13)
149*ac8a9f8fSKazu Hirata!17 = distinct !DISubprogram(name: "aaa", linkageName: "_Z3aaav", scope: !1, file: !1, line: 61, type: !6, unit: !0)
150*ac8a9f8fSKazu Hirata!18 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !19)
151*ac8a9f8fSKazu Hirata!19 = distinct !DILocation(line: 59, column: 25, scope: !13, inlinedAt: !20)
152*ac8a9f8fSKazu Hirata!20 = distinct !DILocation(line: 61, column: 22, scope: !17)
153*ac8a9f8fSKazu Hirata!21 = !DILocation(line: 61, column: 15, scope: !17)
154*ac8a9f8fSKazu Hirata!22 = distinct !DISubprogram(name: "bbb", linkageName: "_Z3bbbv", scope: !1, file: !1, line: 62, type: !6, unit: !0)
155*ac8a9f8fSKazu Hirata!23 = !DILocation(line: 58, column: 23, scope: !10, inlinedAt: !24)
156*ac8a9f8fSKazu Hirata!24 = distinct !DILocation(line: 59, column: 25, scope: !13, inlinedAt: !25)
157*ac8a9f8fSKazu Hirata!25 = distinct !DILocation(line: 62, column: 22, scope: !22)
158*ac8a9f8fSKazu Hirata!26 = !DILocation(line: 62, column: 15, scope: !22)
159*ac8a9f8fSKazu Hirata
160*ac8a9f8fSKazu Hirata; CHECK: attributes #[[ATTR]] = { builtin allocsize(0) "memprof"="cold" }
161*ac8a9f8fSKazu Hirata
162*ac8a9f8fSKazu Hirata; CHECK: ![[M1]] = !{![[M1L:[0-9]+]], ![[M1R:[0-9]+]]}
163*ac8a9f8fSKazu Hirata; CHECK: ![[M1L]] = !{![[M1LL:[0-9]+]], !"cold"}
164*ac8a9f8fSKazu Hirata; CHECK: ![[M1LL]] = !{i64 -7165227774426488445, i64 6179674587295384169, i64 7749555980993309703}
165*ac8a9f8fSKazu Hirata; CHECK: ![[M1R]] = !{![[M1RL:[0-9]+]], !"notcold"}
166*ac8a9f8fSKazu Hirata; CHECK: ![[M1RL]] = !{i64 -7165227774426488445, i64 6179674587295384169, i64 -4748707735015301746}
167*ac8a9f8fSKazu Hirata
168*ac8a9f8fSKazu Hirata; CHECK: ![[C1]] = !{i64 -7165227774426488445}
169*ac8a9f8fSKazu Hirata
170*ac8a9f8fSKazu Hirata; CHECK: ![[C2]] = !{i64 6179674587295384169}
171*ac8a9f8fSKazu Hirata
172*ac8a9f8fSKazu Hirata; CHECK: ![[C3]] = !{i64 -4748707735015301746}
173*ac8a9f8fSKazu Hirata
174*ac8a9f8fSKazu Hirata; CHECK: ![[C4]] = !{i64 7749555980993309703}
175