1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 4
2
- ; RUN: opt -passes=pgo -instr-gen -profile-context-root=an_entrypoint \
2
+ ; RUN: opt -passes=ctx -instr-gen -profile-context-root=an_entrypoint \
3
3
; RUN: -S < %s | FileCheck --check-prefix=INSTRUMENT %s
4
- ; RUN: opt -passes=pgo -instr-gen,assign-guid,ctx-instr-lower -profile-context-root=an_entrypoint \
4
+ ; RUN: opt -passes=ctx -instr-gen,assign-guid,ctx-instr-lower -profile-context-root=an_entrypoint \
5
5
; RUN: -profile-context-root=another_entrypoint_no_callees \
6
6
; RUN: -S < %s | FileCheck --check-prefix=LOWERING %s
7
7
8
8
9
9
declare void @bar ()
10
10
11
11
;.
12
- ; INSTRUMENT: @__llvm_profile_raw_version = hidden constant i64 72057594037927946, comdat
13
- ; INSTRUMENT: @__profn_foo = private constant [3 x i8] c"foo"
14
- ; INSTRUMENT: @__profn_an_entrypoint = private constant [13 x i8] c"an_entrypoint"
15
- ; INSTRUMENT: @__profn_another_entrypoint_no_callees = private constant [29 x i8] c"another_entrypoint_no_callees"
16
- ; INSTRUMENT: @__profn_simple = private constant [6 x i8] c"simple"
17
- ; INSTRUMENT: @__profn_no_callsites = private constant [12 x i8] c"no_callsites"
18
- ; INSTRUMENT: @__profn_no_counters = private constant [11 x i8] c"no_counters"
19
- ;.
20
- ; LOWERING: @__llvm_profile_raw_version = hidden constant i64 72057594037927946, comdat
21
- ; LOWERING: @__profn_foo = private constant [3 x i8] c"foo"
22
- ; LOWERING: @__profn_an_entrypoint = private constant [13 x i8] c"an_entrypoint"
23
- ; LOWERING: @__profn_another_entrypoint_no_callees = private constant [29 x i8] c"another_entrypoint_no_callees"
24
- ; LOWERING: @__profn_simple = private constant [6 x i8] c"simple"
25
- ; LOWERING: @__profn_no_callsites = private constant [12 x i8] c"no_callsites"
26
- ; LOWERING: @__profn_no_counters = private constant [11 x i8] c"no_counters"
27
12
; LOWERING: @an_entrypoint_ctx_root = global { ptr, ptr, ptr, i8 } zeroinitializer
28
13
; LOWERING: @another_entrypoint_no_callees_ctx_root = global { ptr, ptr, ptr, i8 } zeroinitializer
29
14
; LOWERING: @__llvm_ctx_profile_callsite = external hidden thread_local global ptr
@@ -32,33 +17,48 @@ declare void @bar()
32
17
define void @foo (i32 %a , ptr %fct ) {
33
18
; INSTRUMENT-LABEL: define void @foo(
34
19
; INSTRUMENT-SAME: i32 [[A:%.*]], ptr [[FCT:%.*]]) {
20
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @foo, i64 728453322856651412, i32 2, i32 0)
35
21
; INSTRUMENT-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
36
22
; INSTRUMENT-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
37
23
; INSTRUMENT: yes:
38
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 728453322856651412, i32 2, i32 1)
39
- ; INSTRUMENT-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[FCT]] to i64
40
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.value.profile(ptr @__profn_foo, i64 728453322856651412, i64 [[TMP1]], i32 0, i32 0)
24
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @foo, i64 728453322856651412, i32 2, i32 1)
25
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.callsite(ptr @foo, i64 728453322856651412, i32 2, i32 0, ptr [[FCT]])
41
26
; INSTRUMENT-NEXT: call void [[FCT]](i32 [[A]])
42
27
; INSTRUMENT-NEXT: br label [[EXIT:%.*]]
43
28
; INSTRUMENT: no:
44
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment (ptr @__profn_foo , i64 728453322856651412, i32 2, i32 0 )
29
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.callsite (ptr @foo , i64 728453322856651412, i32 2, i32 1, ptr @bar )
45
30
; INSTRUMENT-NEXT: call void @bar()
46
31
; INSTRUMENT-NEXT: br label [[EXIT]]
47
32
; INSTRUMENT: exit:
48
33
; INSTRUMENT-NEXT: ret void
49
34
;
50
35
; LOWERING-LABEL: define void @foo(
51
36
; LOWERING-SAME: i32 [[A:%.*]], ptr [[FCT:%.*]]) !guid [[META0:![0-9]+]] {
37
+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @foo, i64 6699318081062747564, i32 2, i32 2)
38
+ ; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
39
+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 1
40
+ ; LOWERING-NEXT: [[TMP4:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_expected_callee)
41
+ ; LOWERING-NEXT: [[TMP5:%.*]] = getelementptr ptr, ptr [[TMP4]], i64 [[TMP3]]
42
+ ; LOWERING-NEXT: [[TMP6:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_callsite)
43
+ ; LOWERING-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP6]], i64 [[TMP3]]
44
+ ; LOWERING-NEXT: [[TMP8:%.*]] = and i64 [[TMP2]], -2
45
+ ; LOWERING-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr
52
46
; LOWERING-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
53
47
; LOWERING-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
54
48
; LOWERING: yes:
55
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 728453322856651412, i32 2, i32 1)
56
- ; LOWERING-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[FCT]] to i64
57
- ; LOWERING-NEXT: call void @llvm.instrprof.value.profile(ptr @__profn_foo, i64 728453322856651412, i64 [[TMP1]], i32 0, i32 0)
49
+ ; LOWERING-NEXT: [[TMP10:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [2 x ptr] }, ptr [[TMP9]], i32 0, i32 1, i32 1
50
+ ; LOWERING-NEXT: [[TMP11:%.*]] = load i64, ptr [[TMP10]], align 4
51
+ ; LOWERING-NEXT: [[TMP12:%.*]] = add i64 [[TMP11]], 1
52
+ ; LOWERING-NEXT: store i64 [[TMP12]], ptr [[TMP10]], align 4
53
+ ; LOWERING-NEXT: store volatile ptr [[FCT]], ptr [[TMP5]], align 8
54
+ ; LOWERING-NEXT: [[TMP13:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [2 x ptr] }, ptr [[TMP1]], i32 0, i32 2, i32 0
55
+ ; LOWERING-NEXT: store volatile ptr [[TMP13]], ptr [[TMP7]], align 8
58
56
; LOWERING-NEXT: call void [[FCT]](i32 [[A]])
59
57
; LOWERING-NEXT: br label [[EXIT:%.*]]
60
58
; LOWERING: no:
61
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_foo, i64 728453322856651412, i32 2, i32 0)
59
+ ; LOWERING-NEXT: store volatile ptr @bar, ptr [[TMP5]], align 8
60
+ ; LOWERING-NEXT: [[TMP14:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [2 x ptr] }, ptr [[TMP1]], i32 0, i32 2, i32 1
61
+ ; LOWERING-NEXT: store volatile ptr [[TMP14]], ptr [[TMP7]], align 8
62
62
; LOWERING-NEXT: call void @bar()
63
63
; LOWERING-NEXT: br label [[EXIT]]
64
64
; LOWERING: exit:
@@ -79,26 +79,43 @@ exit:
79
79
define void @an_entrypoint (i32 %a ) {
80
80
; INSTRUMENT-LABEL: define void @an_entrypoint(
81
81
; INSTRUMENT-SAME: i32 [[A:%.*]]) {
82
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @an_entrypoint, i64 784007058953177093, i32 2, i32 0)
82
83
; INSTRUMENT-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
83
84
; INSTRUMENT-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
84
85
; INSTRUMENT: yes:
85
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_an_entrypoint, i64 784007058953177093, i32 2, i32 1)
86
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @an_entrypoint, i64 784007058953177093, i32 2, i32 1)
87
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.callsite(ptr @an_entrypoint, i64 784007058953177093, i32 1, i32 0, ptr @foo)
86
88
; INSTRUMENT-NEXT: call void @foo(i32 1, ptr null)
87
89
; INSTRUMENT-NEXT: ret void
88
90
; INSTRUMENT: no:
89
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_an_entrypoint, i64 784007058953177093, i32 2, i32 0)
90
91
; INSTRUMENT-NEXT: ret void
91
92
;
92
93
; LOWERING-LABEL: define void @an_entrypoint(
93
94
; LOWERING-SAME: i32 [[A:%.*]]) !guid [[META1:![0-9]+]] {
95
+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_start_context(ptr @an_entrypoint_ctx_root, i64 4909520559318251808, i32 2, i32 1)
96
+ ; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
97
+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 1
98
+ ; LOWERING-NEXT: [[TMP4:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_expected_callee)
99
+ ; LOWERING-NEXT: [[TMP5:%.*]] = getelementptr ptr, ptr [[TMP4]], i64 [[TMP3]]
100
+ ; LOWERING-NEXT: [[TMP6:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_callsite)
101
+ ; LOWERING-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP6]], i64 [[TMP3]]
102
+ ; LOWERING-NEXT: [[TMP8:%.*]] = and i64 [[TMP2]], -2
103
+ ; LOWERING-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr
94
104
; LOWERING-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
95
105
; LOWERING-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
96
106
; LOWERING: yes:
97
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_an_entrypoint, i64 784007058953177093, i32 2, i32 1)
107
+ ; LOWERING-NEXT: [[TMP10:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [1 x ptr] }, ptr [[TMP9]], i32 0, i32 1, i32 1
108
+ ; LOWERING-NEXT: [[TMP11:%.*]] = load i64, ptr [[TMP10]], align 4
109
+ ; LOWERING-NEXT: [[TMP12:%.*]] = add i64 [[TMP11]], 1
110
+ ; LOWERING-NEXT: store i64 [[TMP12]], ptr [[TMP10]], align 4
111
+ ; LOWERING-NEXT: store volatile ptr @foo, ptr [[TMP5]], align 8
112
+ ; LOWERING-NEXT: [[TMP13:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [1 x ptr] }, ptr [[TMP1]], i32 0, i32 2, i32 0
113
+ ; LOWERING-NEXT: store volatile ptr [[TMP13]], ptr [[TMP7]], align 8
98
114
; LOWERING-NEXT: call void @foo(i32 1, ptr null)
115
+ ; LOWERING-NEXT: call void @__llvm_ctx_profile_release_context(ptr @an_entrypoint_ctx_root)
99
116
; LOWERING-NEXT: ret void
100
117
; LOWERING: no:
101
- ; LOWERING-NEXT: call void @llvm.instrprof.increment (ptr @__profn_an_entrypoint, i64 784007058953177093, i32 2, i32 0 )
118
+ ; LOWERING-NEXT: call void @__llvm_ctx_profile_release_context (ptr @an_entrypoint_ctx_root )
102
119
; LOWERING-NEXT: ret void
103
120
;
104
121
%t = icmp eq i32 %a , 0
@@ -114,24 +131,32 @@ no:
114
131
define void @another_entrypoint_no_callees (i32 %a ) {
115
132
; INSTRUMENT-LABEL: define void @another_entrypoint_no_callees(
116
133
; INSTRUMENT-SAME: i32 [[A:%.*]]) {
134
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @another_entrypoint_no_callees, i64 784007058953177093, i32 2, i32 0)
117
135
; INSTRUMENT-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
118
136
; INSTRUMENT-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
119
137
; INSTRUMENT: yes:
120
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_another_entrypoint_no_callees , i64 784007058953177093, i32 2, i32 1)
138
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @another_entrypoint_no_callees , i64 784007058953177093, i32 2, i32 1)
121
139
; INSTRUMENT-NEXT: ret void
122
140
; INSTRUMENT: no:
123
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_another_entrypoint_no_callees, i64 784007058953177093, i32 2, i32 0)
124
141
; INSTRUMENT-NEXT: ret void
125
142
;
126
143
; LOWERING-LABEL: define void @another_entrypoint_no_callees(
127
144
; LOWERING-SAME: i32 [[A:%.*]]) !guid [[META2:![0-9]+]] {
145
+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_start_context(ptr @another_entrypoint_no_callees_ctx_root, i64 -6371873725078000974, i32 2, i32 0)
146
+ ; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
147
+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], -2
148
+ ; LOWERING-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
128
149
; LOWERING-NEXT: [[T:%.*]] = icmp eq i32 [[A]], 0
129
150
; LOWERING-NEXT: br i1 [[T]], label [[YES:%.*]], label [[NO:%.*]]
130
151
; LOWERING: yes:
131
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_another_entrypoint_no_callees, i64 784007058953177093, i32 2, i32 1)
152
+ ; LOWERING-NEXT: [[TMP5:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [0 x ptr] }, ptr [[TMP4]], i32 0, i32 1, i32 1
153
+ ; LOWERING-NEXT: [[TMP6:%.*]] = load i64, ptr [[TMP5]], align 4
154
+ ; LOWERING-NEXT: [[TMP7:%.*]] = add i64 [[TMP6]], 1
155
+ ; LOWERING-NEXT: store i64 [[TMP7]], ptr [[TMP5]], align 4
156
+ ; LOWERING-NEXT: call void @__llvm_ctx_profile_release_context(ptr @another_entrypoint_no_callees_ctx_root)
132
157
; LOWERING-NEXT: ret void
133
158
; LOWERING: no:
134
- ; LOWERING-NEXT: call void @llvm.instrprof.increment (ptr @__profn_another_entrypoint_no_callees, i64 784007058953177093, i32 2, i32 0 )
159
+ ; LOWERING-NEXT: call void @__llvm_ctx_profile_release_context (ptr @another_entrypoint_no_callees_ctx_root )
135
160
; LOWERING-NEXT: ret void
136
161
;
137
162
%t = icmp eq i32 %a , 0
146
171
define void @simple (i32 %a ) {
147
172
; INSTRUMENT-LABEL: define void @simple(
148
173
; INSTRUMENT-SAME: i32 [[A:%.*]]) {
149
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_simple , i64 742261418966908927, i32 1, i32 0)
174
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @simple , i64 742261418966908927, i32 1, i32 0)
150
175
; INSTRUMENT-NEXT: ret void
151
176
;
152
177
; LOWERING-LABEL: define void @simple(
@@ -164,24 +189,30 @@ define void @simple(i32 %a) {
164
189
define i32 @no_callsites (i32 %a ) {
165
190
; INSTRUMENT-LABEL: define i32 @no_callsites(
166
191
; INSTRUMENT-SAME: i32 [[A:%.*]]) {
192
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @no_callsites, i64 784007058953177093, i32 2, i32 0)
167
193
; INSTRUMENT-NEXT: [[C:%.*]] = icmp eq i32 [[A]], 0
168
194
; INSTRUMENT-NEXT: br i1 [[C]], label [[YES:%.*]], label [[NO:%.*]]
169
195
; INSTRUMENT: yes:
170
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_no_callsites , i64 784007058953177093, i32 2, i32 1)
196
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @no_callsites , i64 784007058953177093, i32 2, i32 1)
171
197
; INSTRUMENT-NEXT: ret i32 1
172
198
; INSTRUMENT: no:
173
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_no_callsites, i64 784007058953177093, i32 2, i32 0)
174
199
; INSTRUMENT-NEXT: ret i32 0
175
200
;
176
201
; LOWERING-LABEL: define i32 @no_callsites(
177
202
; LOWERING-SAME: i32 [[A:%.*]]) !guid [[META4:![0-9]+]] {
203
+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @no_callsites, i64 5679753335911435902, i32 2, i32 0)
204
+ ; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
205
+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], -2
206
+ ; LOWERING-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
178
207
; LOWERING-NEXT: [[C:%.*]] = icmp eq i32 [[A]], 0
179
208
; LOWERING-NEXT: br i1 [[C]], label [[YES:%.*]], label [[NO:%.*]]
180
209
; LOWERING: yes:
181
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_no_callsites, i64 784007058953177093, i32 2, i32 1)
210
+ ; LOWERING-NEXT: [[TMP5:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [2 x i64], [0 x ptr] }, ptr [[TMP4]], i32 0, i32 1, i32 1
211
+ ; LOWERING-NEXT: [[TMP6:%.*]] = load i64, ptr [[TMP5]], align 4
212
+ ; LOWERING-NEXT: [[TMP7:%.*]] = add i64 [[TMP6]], 1
213
+ ; LOWERING-NEXT: store i64 [[TMP7]], ptr [[TMP5]], align 4
182
214
; LOWERING-NEXT: ret i32 1
183
215
; LOWERING: no:
184
- ; LOWERING-NEXT: call void @llvm.instrprof.increment(ptr @__profn_no_callsites, i64 784007058953177093, i32 2, i32 0)
185
216
; LOWERING-NEXT: ret i32 0
186
217
;
187
218
%c = icmp eq i32 %a , 0
@@ -194,16 +225,25 @@ no:
194
225
195
226
define void @no_counters () {
196
227
; INSTRUMENT-LABEL: define void @no_counters() {
197
- ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @__profn_no_counters, i64 742261418966908927, i32 1, i32 0)
228
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.increment(ptr @no_counters, i64 742261418966908927, i32 1, i32 0)
229
+ ; INSTRUMENT-NEXT: call void @llvm.instrprof.callsite(ptr @no_counters, i64 742261418966908927, i32 1, i32 0, ptr @bar)
198
230
; INSTRUMENT-NEXT: call void @bar()
199
231
; INSTRUMENT-NEXT: ret void
200
232
;
201
233
; LOWERING-LABEL: define void @no_counters(
202
234
; LOWERING-SAME: ) !guid [[META5:![0-9]+]] {
203
- ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @no_counters, i64 5458232184388660970, i32 1, i32 0 )
235
+ ; LOWERING-NEXT: [[TMP1:%.*]] = call ptr @__llvm_ctx_profile_get_context(ptr @no_counters, i64 5458232184388660970, i32 1, i32 1 )
204
236
; LOWERING-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[TMP1]] to i64
237
+ ; LOWERING-NEXT: [[TMP3:%.*]] = and i64 [[TMP2]], 1
238
+ ; LOWERING-NEXT: [[TMP4:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_expected_callee)
239
+ ; LOWERING-NEXT: [[TMP5:%.*]] = getelementptr ptr, ptr [[TMP4]], i64 [[TMP3]]
240
+ ; LOWERING-NEXT: [[TMP6:%.*]] = call ptr @llvm.threadlocal.address.p0(ptr @__llvm_ctx_profile_callsite)
241
+ ; LOWERING-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP6]], i64 [[TMP3]]
205
242
; LOWERING-NEXT: [[TMP8:%.*]] = and i64 [[TMP2]], -2
206
243
; LOWERING-NEXT: [[TMP9:%.*]] = inttoptr i64 [[TMP8]] to ptr
244
+ ; LOWERING-NEXT: store volatile ptr @bar, ptr [[TMP5]], align 8
245
+ ; LOWERING-NEXT: [[TMP10:%.*]] = getelementptr { { i64, ptr, i32, i32 }, [1 x i64], [1 x ptr] }, ptr [[TMP1]], i32 0, i32 2, i32 0
246
+ ; LOWERING-NEXT: store volatile ptr [[TMP10]], ptr [[TMP7]], align 8
207
247
; LOWERING-NEXT: call void @bar()
208
248
; LOWERING-NEXT: ret void
209
249
;
@@ -212,6 +252,7 @@ define void @no_counters() {
212
252
}
213
253
;.
214
254
; LOWERING: attributes #[[ATTR0:[0-9]+]] = { nounwind }
255
+ ; LOWERING: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
215
256
;.
216
257
; INSTRUMENT: attributes #[[ATTR0:[0-9]+]] = { nounwind }
217
258
;.
0 commit comments