@@ -178,6 +178,27 @@ define void @test_atomicrmw(ptr %p) {
178178 ret void
179179}
180180
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 )
181202
182203declare void @direct1_callee (ptr %p )
183204
@@ -197,14 +218,14 @@ declare void @direct2_callee(ptr %p) writeonly
197218define void @direct2 (ptr %p ) {
198219; FNATTRS: Function Attrs: memory(write)
199220; FNATTRS-LABEL: define {{[^@]+}}@direct2
200- ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR8 :[0-9]+]] {
221+ ; FNATTRS-SAME: (ptr [[P:%.*]]) #[[ATTR10 :[0-9]+]] {
201222; FNATTRS-NEXT: call void @direct2_callee(ptr [[P]])
202223; FNATTRS-NEXT: ret void
203224;
204225; ATTRIBUTOR: Function Attrs: memory(write)
205226; 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 ]]
208229; ATTRIBUTOR-NEXT: ret void
209230;
210231 call void @direct2_callee (ptr %p )
@@ -215,14 +236,14 @@ define void @direct2(ptr %p) {
215236define void @direct2b (ptr %p ) {
216237; FNATTRS: Function Attrs: memory(write)
217238; FNATTRS-LABEL: define {{[^@]+}}@direct2b
218- ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR8 ]] {
239+ ; FNATTRS-SAME: (ptr nocapture writeonly [[P:%.*]]) #[[ATTR10 ]] {
219240; FNATTRS-NEXT: call void @direct2_callee(ptr nocapture [[P]])
220241; FNATTRS-NEXT: ret void
221242;
222243; ATTRIBUTOR: Function Attrs: memory(write)
223244; 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 ]]
226247; ATTRIBUTOR-NEXT: ret void
227248;
228249 call void @direct2_callee (ptr nocapture %p )
@@ -304,14 +325,14 @@ define void @fptr_test2(ptr %p, ptr %f) {
304325define void @fptr_test3 (ptr %p , ptr %f ) {
305326; FNATTRS: Function Attrs: memory(write)
306327; 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 ]]
309330; FNATTRS-NEXT: ret void
310331;
311332; ATTRIBUTOR: Function Attrs: memory(write)
312333; 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 ]]
315336; ATTRIBUTOR-NEXT: ret void
316337;
317338 call void %f (ptr nocapture %p ) writeonly
@@ -321,12 +342,12 @@ define void @fptr_test3(ptr %p, ptr %f) {
321342define void @test_argmem_none_callee (ptr %p ) {
322343; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_none_callee
323344; 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]+]]
325346; FNATTRS-NEXT: ret void
326347;
327348; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_none_callee
328349; 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]+]]
330351; ATTRIBUTOR-NEXT: ret void
331352;
332353 call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: none)
@@ -336,12 +357,12 @@ define void @test_argmem_none_callee(ptr %p) {
336357define void @test_argmem_read_callee (ptr %p ) {
337358; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_read_callee
338359; 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]+]]
340361; FNATTRS-NEXT: ret void
341362;
342363; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_read_callee
343364; 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]+]]
345366; ATTRIBUTOR-NEXT: ret void
346367;
347368 call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: read)
@@ -351,12 +372,12 @@ define void @test_argmem_read_callee(ptr %p) {
351372define void @test_argmem_write_callee (ptr %p ) {
352373; FNATTRS-LABEL: define {{[^@]+}}@test_argmem_write_callee
353374; 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]+]]
355376; FNATTRS-NEXT: ret void
356377;
357378; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_argmem_write_callee
358379; 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]+]]
360381; ATTRIBUTOR-NEXT: ret void
361382;
362383 call void @direct1_callee (ptr nocapture %p ) memory(readwrite, argmem: write)
0 commit comments