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