@@ -178,6 +178,27 @@ define void @test_atomicrmw(ptr %p) {
178
178
ret void
179
179
}
180
180
181
+ define void @test_ptrmask (ptr %p ) {
182
+ ; FNATTRS: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(argmem: write)
183
+ ; FNATTRS-LABEL: define {{[^@]+}}@test_ptrmask
184
+ ; FNATTRS-SAME: (ptr writeonly [[P:%.*]]) #[[ATTR8:[0-9]+]] {
185
+ ; FNATTRS-NEXT: [[MASK:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -5)
186
+ ; FNATTRS-NEXT: store i8 0, ptr [[MASK]], align 1
187
+ ; FNATTRS-NEXT: ret void
188
+ ;
189
+ ; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
190
+ ; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_ptrmask
191
+ ; ATTRIBUTOR-SAME: (ptr nofree writeonly [[P:%.*]]) #[[ATTR3]] {
192
+ ; ATTRIBUTOR-NEXT: [[MASK:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 -5) #[[ATTR9:[0-9]+]]
193
+ ; ATTRIBUTOR-NEXT: store i8 0, ptr [[MASK]], align 1
194
+ ; ATTRIBUTOR-NEXT: ret void
195
+ ;
196
+ %mask = call ptr @llvm.ptrmask.p0.i64 (ptr %p , i64 -5 )
197
+ store i8 0 , ptr %mask
198
+ ret void
199
+ }
200
+
201
+ declare ptr @llvm.ptrmask.p0.i64 (ptr , i64 )
181
202
182
203
declare void @direct1_callee (ptr %p )
183
204
@@ -197,14 +218,14 @@ declare void @direct2_callee(ptr %p) writeonly
197
218
define void @direct2 (ptr %p ) {
198
219
; FNATTRS: Function Attrs: memory(write)
199
220
; FNATTRS-LABEL: define {{[^@]+}}@direct2
200
- ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR8 :[0-9]+]] {
221
+ ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR10 :[0-9]+]] {
201
222
; FNATTRS-NEXT: call void @direct2_callee(ptr [[P]])
202
223
; FNATTRS-NEXT: ret void
203
224
;
204
225
; ATTRIBUTOR: Function Attrs: memory(write)
205
226
; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct2
206
- ; ATTRIBUTOR-SAME: (ptr writeonly [[P:%.*]]) #[[ATTR7 :[0-9]+]] {
207
- ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr [[P]]) #[[ATTR7 ]]
227
+ ; ATTRIBUTOR-SAME: (ptr writeonly [[P:%.*]]) #[[ATTR8 :[0-9]+]] {
228
+ ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr [[P]]) #[[ATTR8 ]]
208
229
; ATTRIBUTOR-NEXT: ret void
209
230
;
210
231
call void @direct2_callee (ptr %p )
@@ -215,14 +236,14 @@ define void @direct2(ptr %p) {
215
236
define void @direct2b (ptr %p ) {
216
237
; FNATTRS: Function Attrs: memory(write)
217
238
; FNATTRS-LABEL: define {{[^@]+}}@direct2b
218
- ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR8 ]] {
239
+ ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR10 ]] {
219
240
; FNATTRS-NEXT: call void @direct2_callee(ptr nocapture [[P]])
220
241
; FNATTRS-NEXT: ret void
221
242
;
222
243
; ATTRIBUTOR: Function Attrs: memory(write)
223
244
; ATTRIBUTOR-LABEL: define {{[^@]+}}@direct2b
224
- ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR7 ]] {
225
- ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr nocapture writeonly [[P]]) #[[ATTR7 ]]
245
+ ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR8 ]] {
246
+ ; ATTRIBUTOR-NEXT: call void @direct2_callee(ptr nocapture writeonly [[P]]) #[[ATTR8 ]]
226
247
; ATTRIBUTOR-NEXT: ret void
227
248
;
228
249
call void @direct2_callee (ptr nocapture %p )
@@ -304,14 +325,14 @@ define void @fptr_test2(ptr %p, ptr %f) {
304
325
define void @fptr_test3 (ptr %p , ptr %f ) {
305
326
; FNATTRS: Function Attrs: memory(write)
306
327
; FNATTRS-LABEL: define {{[^@]+}}@fptr_test3
307
- ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture readonly [[F:%.*]]) #[[ATTR8 ]] {
308
- ; FNATTRS-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR8 ]]
328
+ ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture readonly [[F:%.*]]) #[[ATTR10 ]] {
329
+ ; FNATTRS-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR10 ]]
309
330
; FNATTRS-NEXT: ret void
310
331
;
311
332
; ATTRIBUTOR: Function Attrs: memory(write)
312
333
; ATTRIBUTOR-LABEL: define {{[^@]+}}@fptr_test3
313
- ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture nofree nonnull writeonly [[F:%.*]]) #[[ATTR7 ]] {
314
- ; ATTRIBUTOR-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR7 ]]
334
+ ; ATTRIBUTOR-SAME: (ptr nocapture writeonly [[P:%.*]], ptr nocapture nofree nonnull writeonly [[F:%.*]]) #[[ATTR8 ]] {
335
+ ; ATTRIBUTOR-NEXT: call void [[F]](ptr nocapture [[P]]) #[[ATTR8 ]]
315
336
; ATTRIBUTOR-NEXT: ret void
316
337
;
317
338
call void %f (ptr nocapture %p ) writeonly
@@ -321,12 +342,12 @@ define void @fptr_test3(ptr %p, ptr %f) {
321
342
define void @test_argmem_none_callee (ptr %p ) {
322
343
; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_none_callee
323
344
; FNATTRS-SAME: (ptr nocapture readnone [[P:%.*]]) {
324
- ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR9 :[0-9]+]]
345
+ ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR11 :[0-9]+]]
325
346
; FNATTRS-NEXT: ret void
326
347
;
327
348
; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_none_callee
328
349
; ATTRIBUTOR-SAME: (ptr nocapture [[P:%.*]]) {
329
- ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR8 :[0-9]+]]
350
+ ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR10 :[0-9]+]]
330
351
; ATTRIBUTOR-NEXT: ret void
331
352
;
332
353
call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: none)
@@ -336,12 +357,12 @@ define void @test_argmem_none_callee(ptr %p) {
336
357
define void @test_argmem_read_callee (ptr %p ) {
337
358
; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_read_callee
338
359
; FNATTRS-SAME: (ptr nocapture readonly [[P:%.*]]) {
339
- ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR10 :[0-9]+]]
360
+ ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR12 :[0-9]+]]
340
361
; FNATTRS-NEXT: ret void
341
362
;
342
363
; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_read_callee
343
364
; ATTRIBUTOR-SAME: (ptr nocapture [[P:%.*]]) {
344
- ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR9 :[0-9]+]]
365
+ ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR11 :[0-9]+]]
345
366
; ATTRIBUTOR-NEXT: ret void
346
367
;
347
368
call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: read)
@@ -351,12 +372,12 @@ define void @test_argmem_read_callee(ptr %p) {
351
372
define void @test_argmem_write_callee (ptr %p ) {
352
373
; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_write_callee
353
374
; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) {
354
- ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR11 :[0-9]+]]
375
+ ; FNATTRS-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR13 :[0-9]+]]
355
376
; FNATTRS-NEXT: ret void
356
377
;
357
378
; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_write_callee
358
379
; ATTRIBUTOR-SAME: (ptr nocapture [[P:%.*]]) {
359
- ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR10 :[0-9]+]]
380
+ ; ATTRIBUTOR-NEXT: call void @direct1_callee(ptr nocapture [[P]]) #[[ATTR12 :[0-9]+]]
360
381
; ATTRIBUTOR-NEXT: ret void
361
382
;
362
383
call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: write)
0 commit comments