Skip to content

Commit a888e49

Browse files
committed
[IR] Memory intrinsics are not unconditionally nosync
Remove the `nosync` attribute from the memory intrinsic definitions (i.e. memset, memcpy, memmove). Like native memory accesses, memory intrinsics can be volatile. This is indicated by an immarg in the intrinsic call. All else equal, a volatile memory intrinsic is `sync`, so we cannot annotate the intrinsic functions themselves as `nosync`. The attributor and function-attr passes know to take the volatile bit into account. Since `nosync` is a default attribute, this means we have to stop using the DefaultAttrIntrinsic tablegen class for memory intrinsics, and specify all default attributes other than `nosync` explicitly. Most of the test changes are trivial churn, but one test case (in nosync.ll) was in fact incorrect before this change. Differential Revision: https://reviews.llvm.org/D102295
1 parent 77b83d3 commit a888e49

File tree

12 files changed

+51
-47
lines changed

12 files changed

+51
-47
lines changed

llvm/include/llvm/IR/Intrinsics.td

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -600,10 +600,10 @@ def int_call_preallocated_teardown : DefaultAttrsIntrinsic<[], [llvm_token_ty]>;
600600
//===------------------- Standard C Library Intrinsics --------------------===//
601601
//
602602

603-
def int_memcpy : DefaultAttrsIntrinsic<[],
603+
def int_memcpy : Intrinsic<[],
604604
[llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
605605
llvm_i1_ty],
606-
[IntrArgMemOnly, IntrWillReturn,
606+
[IntrArgMemOnly, IntrWillReturn, IntrNoFree,
607607
NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
608608
NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
609609
WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>,
@@ -614,25 +614,26 @@ def int_memcpy : DefaultAttrsIntrinsic<[],
614614
// external function.
615615
// The third argument (specifying the size) must be a constant.
616616
def int_memcpy_inline
617-
: DefaultAttrsIntrinsic<[],
617+
: Intrinsic<[],
618618
[llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty, llvm_i1_ty],
619-
[IntrArgMemOnly, IntrWillReturn,
619+
[IntrArgMemOnly, IntrWillReturn, IntrNoFree,
620620
NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
621621
NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
622622
WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>,
623623
ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>;
624624

625-
def int_memmove : DefaultAttrsIntrinsic<[],
625+
def int_memmove : Intrinsic<[],
626626
[llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty,
627627
llvm_i1_ty],
628-
[IntrArgMemOnly, IntrWillReturn,
628+
[IntrArgMemOnly, IntrWillReturn, IntrNoFree,
629629
NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
630630
WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>,
631631
ImmArg<ArgIndex<3>>]>;
632-
def int_memset : DefaultAttrsIntrinsic<[],
632+
def int_memset : Intrinsic<[],
633633
[llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty,
634634
llvm_i1_ty],
635635
[IntrWriteMem, IntrArgMemOnly, IntrWillReturn,
636+
IntrNoFree,
636637
NoCapture<ArgIndex<0>>, WriteOnly<ArgIndex<0>>,
637638
ImmArg<ArgIndex<3>>]>;
638639

llvm/test/Analysis/BasicAA/cs-cs.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,8 @@ entry:
387387
}
388388

389389

390-
; CHECK: attributes #0 = { argmemonly nofree nosync nounwind willreturn writeonly }
391-
; CHECK-NEXT: attributes #1 = { argmemonly nofree nosync nounwind willreturn }
390+
; CHECK: attributes #0 = { argmemonly nofree nounwind willreturn writeonly }
391+
; CHECK-NEXT: attributes #1 = { argmemonly nofree nounwind willreturn }
392392
; CHECK-NEXT: attributes #2 = { argmemonly nosync nounwind willreturn }
393393
; CHECK-NEXT: attributes #3 = { noinline nounwind readonly }
394394
; CHECK-NEXT: attributes #4 = { noinline nounwind writeonly }

llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1) nounwind
7979
; CHECK: attributes #4 = { nofree nosync nounwind readnone willreturn mustprogress }
8080
; CHECK: attributes #5 = { nofree nosync nounwind willreturn mustprogress }
8181
; CHECK: attributes #6 = { nofree norecurse nosync nounwind willreturn mustprogress }
82-
; CHECK: attributes #7 = { argmemonly nofree nosync nounwind willreturn }
82+
; CHECK: attributes #7 = { argmemonly nofree nounwind willreturn }
8383

8484
; Root note.
8585
!0 = !{ }

llvm/test/CodeGen/AMDGPU/addrspacecast-constantexpr.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ define i32 addrspace(3)* @ret_constant_cast_group_gv_gep_to_flat_to_group() #1 {
9898
ret i32 addrspace(3)* addrspacecast (i32 addrspace(4)* getelementptr ([256 x i32], [256 x i32] addrspace(4)* addrspacecast ([256 x i32] addrspace(3)* @lds.arr to [256 x i32] addrspace(4)*), i64 0, i64 8) to i32 addrspace(3)*)
9999
}
100100

101-
; HSA: attributes #0 = { argmemonly nofree nosync nounwind willreturn }
101+
; HSA: attributes #0 = { argmemonly nofree nounwind willreturn }
102102
; HSA: attributes #1 = { nounwind }
103103
; HSA: attributes #2 = { nounwind "amdgpu-queue-ptr" }
104104

llvm/test/Transforms/Attributor/ArgumentPromotion/X86/attributes.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,13 @@ attributes #2 = { argmemonly nounwind }
195195
;.
196196
; IS__TUNIT____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "target-features"="+avx2" }
197197
; IS__TUNIT____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind uwtable willreturn }
198-
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
198+
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
199199
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { willreturn writeonly }
200200
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { nofree nosync nounwind willreturn }
201201
;.
202202
; IS__CGSCC____: attributes #[[ATTR0:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "target-features"="+avx2" }
203203
; IS__CGSCC____: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind uwtable willreturn }
204-
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
204+
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
205205
; IS__CGSCC____: attributes #[[ATTR3:[0-9]+]] = { willreturn writeonly }
206206
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { nounwind willreturn }
207207
;.

llvm/test/Transforms/Attributor/ArgumentPromotion/X86/min-legal-vector-width.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ attributes #5 = { argmemonly nounwind }
767767
; IS__TUNIT____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
768768
; IS__TUNIT____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
769769
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
770-
; IS__TUNIT____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
770+
; IS__TUNIT____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
771771
; IS__TUNIT____: attributes #[[ATTR6:[0-9]+]] = { willreturn writeonly }
772772
; IS__TUNIT____: attributes #[[ATTR7:[0-9]+]] = { nofree nosync nounwind willreturn }
773773
;.
@@ -776,7 +776,7 @@ attributes #5 = { argmemonly nounwind }
776776
; IS__CGSCC____: attributes #[[ATTR2:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx512vl" }
777777
; IS__CGSCC____: attributes #[[ATTR3:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="512" "prefer-vector-width"="256" "target-features"="+avx2" }
778778
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { argmemonly inlinehint nofree norecurse nosync nounwind uwtable willreturn "min-legal-vector-width"="256" "prefer-vector-width"="256" "target-features"="+avx2" }
779-
; IS__CGSCC____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
779+
; IS__CGSCC____: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
780780
; IS__CGSCC____: attributes #[[ATTR6:[0-9]+]] = { willreturn writeonly }
781781
; IS__CGSCC____: attributes #[[ATTR7:[0-9]+]] = { nounwind willreturn }
782782
;.

llvm/test/Transforms/Attributor/heap_to_stack.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,6 @@ define void @test16d(i8 %v, i8** %P) {
774774
; IS________NPM: attributes #[[ATTR2:[0-9]+]] = { nofree nounwind }
775775
; IS________NPM: attributes #[[ATTR3]] = { noreturn }
776776
; IS________NPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
777-
; IS________NPM: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
777+
; IS________NPM: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
778778
; IS________NPM: attributes #[[ATTR6]] = { nounwind }
779779
;.

llvm/test/Transforms/Attributor/lowerheap.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ attributes #0 = { nounwind willreturn }
6666
; IS________OPM: attributes #[[ATTR1]] = { nounwind }
6767
;.
6868
; IS________NPM: attributes #[[ATTR0:[0-9]+]] = { nounwind willreturn }
69-
; IS________NPM: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn writeonly }
69+
; IS________NPM: attributes #[[ATTR1:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
7070
; IS________NPM: attributes #[[ATTR2]] = { nounwind }
7171
;.

llvm/test/Transforms/Attributor/nosync.ll

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -404,16 +404,16 @@ declare void @llvm.memset(i8* %dest, i8 %val, i32 %len, i1 %isvolatile)
404404
; It is odd to add nocapture but a result of the llvm.memcpy nocapture.
405405
;
406406
define i32 @memcpy_volatile(i8* %ptr1, i8* %ptr2) {
407-
; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn
407+
; IS__TUNIT____: Function Attrs: argmemonly nofree nounwind willreturn
408408
; IS__TUNIT____-LABEL: define {{[^@]+}}@memcpy_volatile
409409
; IS__TUNIT____-SAME: (i8* nocapture nofree writeonly [[PTR1:%.*]], i8* nocapture nofree readonly [[PTR2:%.*]]) #[[ATTR10:[0-9]+]] {
410-
; IS__TUNIT____-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree writeonly [[PTR1]], i8* noalias nocapture nofree readonly [[PTR2]], i32 noundef 8, i1 noundef true) #[[ATTR17:[0-9]+]]
410+
; IS__TUNIT____-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree writeonly [[PTR1]], i8* noalias nocapture nofree readonly [[PTR2]], i32 noundef 8, i1 noundef true) #[[ATTR18:[0-9]+]]
411411
; IS__TUNIT____-NEXT: ret i32 4
412412
;
413-
; IS__CGSCC____: Function Attrs: argmemonly nofree nosync nounwind willreturn
413+
; IS__CGSCC____: Function Attrs: argmemonly nofree nounwind willreturn
414414
; IS__CGSCC____-LABEL: define {{[^@]+}}@memcpy_volatile
415415
; IS__CGSCC____-SAME: (i8* nocapture nofree writeonly [[PTR1:%.*]], i8* nocapture nofree readonly [[PTR2:%.*]]) #[[ATTR10:[0-9]+]] {
416-
; IS__CGSCC____-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree writeonly [[PTR1]], i8* noalias nocapture nofree readonly [[PTR2]], i32 noundef 8, i1 noundef true) #[[ATTR18:[0-9]+]]
416+
; IS__CGSCC____-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree writeonly [[PTR1]], i8* noalias nocapture nofree readonly [[PTR2]], i32 noundef 8, i1 noundef true) #[[ATTR19:[0-9]+]]
417417
; IS__CGSCC____-NEXT: ret i32 4
418418
;
419419
call void @llvm.memcpy(i8* %ptr1, i8* %ptr2, i32 8, i1 1)
@@ -428,13 +428,13 @@ define i32 @memset_non_volatile(i8* %ptr1, i8 %val) {
428428
; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
429429
; IS__TUNIT____-LABEL: define {{[^@]+}}@memset_non_volatile
430430
; IS__TUNIT____-SAME: (i8* nocapture nofree writeonly [[PTR1:%.*]], i8 [[VAL:%.*]]) #[[ATTR11:[0-9]+]] {
431-
; IS__TUNIT____-NEXT: call void @llvm.memset.p0i8.i32(i8* nocapture nofree writeonly [[PTR1]], i8 [[VAL]], i32 noundef 8, i1 noundef false) #[[ATTR18:[0-9]+]]
431+
; IS__TUNIT____-NEXT: call void @llvm.memset.p0i8.i32(i8* nocapture nofree writeonly [[PTR1]], i8 [[VAL]], i32 noundef 8, i1 noundef false) #[[ATTR19:[0-9]+]]
432432
; IS__TUNIT____-NEXT: ret i32 4
433433
;
434434
; IS__CGSCC____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
435435
; IS__CGSCC____-LABEL: define {{[^@]+}}@memset_non_volatile
436436
; IS__CGSCC____-SAME: (i8* nocapture nofree writeonly [[PTR1:%.*]], i8 [[VAL:%.*]]) #[[ATTR11:[0-9]+]] {
437-
; IS__CGSCC____-NEXT: call void @llvm.memset.p0i8.i32(i8* nocapture nofree writeonly [[PTR1]], i8 [[VAL]], i32 noundef 8, i1 noundef false) #[[ATTR19:[0-9]+]]
437+
; IS__CGSCC____-NEXT: call void @llvm.memset.p0i8.i32(i8* nocapture nofree writeonly [[PTR1]], i8 [[VAL]], i32 noundef 8, i1 noundef false) #[[ATTR20:[0-9]+]]
438438
; IS__CGSCC____-NEXT: ret i32 4
439439
;
440440
call void @llvm.memset(i8* %ptr1, i8 %val, i32 8, i1 0)
@@ -508,13 +508,13 @@ define float @cos_test2(float %x) {
508508
; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn
509509
; IS__TUNIT____-LABEL: define {{[^@]+}}@cos_test2
510510
; IS__TUNIT____-SAME: (float [[X:%.*]]) #[[ATTR15]] {
511-
; IS__TUNIT____-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR19:[0-9]+]]
511+
; IS__TUNIT____-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR20:[0-9]+]]
512512
; IS__TUNIT____-NEXT: ret float [[C]]
513513
;
514514
; IS__CGSCC____: Function Attrs: nofree nosync nounwind readnone willreturn
515515
; IS__CGSCC____-LABEL: define {{[^@]+}}@cos_test2
516516
; IS__CGSCC____-SAME: (float [[X:%.*]]) #[[ATTR16:[0-9]+]] {
517-
; IS__CGSCC____-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR20:[0-9]+]]
517+
; IS__CGSCC____-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR21:[0-9]+]]
518518
; IS__CGSCC____-NEXT: ret float [[C]]
519519
;
520520
%c = call float @llvm.cos(float %x)
@@ -531,16 +531,17 @@ define float @cos_test2(float %x) {
531531
; IS__TUNIT____: attributes #[[ATTR7]] = { nofree nounwind }
532532
; IS__TUNIT____: attributes #[[ATTR8]] = { nofree nosync nounwind willreturn }
533533
; IS__TUNIT____: attributes #[[ATTR9]] = { nofree nosync nounwind }
534-
; IS__TUNIT____: attributes #[[ATTR10]] = { argmemonly nofree nosync nounwind willreturn }
534+
; IS__TUNIT____: attributes #[[ATTR10]] = { argmemonly nofree nounwind willreturn }
535535
; IS__TUNIT____: attributes #[[ATTR11]] = { argmemonly nofree nosync nounwind willreturn writeonly }
536536
; IS__TUNIT____: attributes #[[ATTR12:[0-9]+]] = { convergent readnone }
537537
; IS__TUNIT____: attributes #[[ATTR13]] = { readnone }
538538
; IS__TUNIT____: attributes #[[ATTR14]] = { nounwind }
539539
; IS__TUNIT____: attributes #[[ATTR15]] = { nofree nosync nounwind readnone willreturn }
540-
; IS__TUNIT____: attributes #[[ATTR16:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
541-
; IS__TUNIT____: attributes #[[ATTR17]] = { willreturn }
542-
; IS__TUNIT____: attributes #[[ATTR18]] = { willreturn writeonly }
543-
; IS__TUNIT____: attributes #[[ATTR19]] = { readnone willreturn }
540+
; IS__TUNIT____: attributes #[[ATTR16:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
541+
; IS__TUNIT____: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
542+
; IS__TUNIT____: attributes #[[ATTR18]] = { willreturn }
543+
; IS__TUNIT____: attributes #[[ATTR19]] = { willreturn writeonly }
544+
; IS__TUNIT____: attributes #[[ATTR20]] = { readnone willreturn }
544545
;.
545546
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn }
546547
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind uwtable willreturn }
@@ -552,17 +553,18 @@ define float @cos_test2(float %x) {
552553
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { nofree norecurse nounwind }
553554
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind willreturn }
554555
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind }
555-
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { argmemonly nofree nosync nounwind willreturn }
556+
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { argmemonly nofree nounwind willreturn }
556557
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { argmemonly nofree nosync nounwind willreturn writeonly }
557558
; IS__CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { convergent readnone }
558559
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { readnone }
559560
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { nounwind }
560561
; IS__CGSCC_OPM: attributes #[[ATTR15]] = { nofree norecurse nosync nounwind readnone willreturn }
561562
; IS__CGSCC_OPM: attributes #[[ATTR16]] = { nofree nosync nounwind readnone willreturn }
562-
; IS__CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
563-
; IS__CGSCC_OPM: attributes #[[ATTR18]] = { willreturn }
564-
; IS__CGSCC_OPM: attributes #[[ATTR19]] = { willreturn writeonly }
565-
; IS__CGSCC_OPM: attributes #[[ATTR20]] = { readnone willreturn }
563+
; IS__CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
564+
; IS__CGSCC_OPM: attributes #[[ATTR18:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
565+
; IS__CGSCC_OPM: attributes #[[ATTR19]] = { willreturn }
566+
; IS__CGSCC_OPM: attributes #[[ATTR20]] = { willreturn writeonly }
567+
; IS__CGSCC_OPM: attributes #[[ATTR21]] = { readnone willreturn }
566568
;.
567569
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind optsize readnone ssp uwtable willreturn }
568570
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { argmemonly nofree norecurse nosync nounwind uwtable willreturn }
@@ -574,15 +576,16 @@ define float @cos_test2(float %x) {
574576
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree norecurse nounwind }
575577
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind willreturn }
576578
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind }
577-
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { argmemonly nofree nosync nounwind willreturn }
579+
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { argmemonly nofree nounwind willreturn }
578580
; IS__CGSCC_NPM: attributes #[[ATTR11]] = { argmemonly nofree nosync nounwind willreturn writeonly }
579581
; IS__CGSCC_NPM: attributes #[[ATTR12:[0-9]+]] = { convergent readnone }
580582
; IS__CGSCC_NPM: attributes #[[ATTR13]] = { readnone }
581583
; IS__CGSCC_NPM: attributes #[[ATTR14]] = { nounwind }
582584
; IS__CGSCC_NPM: attributes #[[ATTR15]] = { nofree norecurse nosync nounwind readnone willreturn }
583585
; IS__CGSCC_NPM: attributes #[[ATTR16]] = { nofree nosync nounwind readnone willreturn }
584-
; IS__CGSCC_NPM: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
585-
; IS__CGSCC_NPM: attributes #[[ATTR18]] = { willreturn }
586-
; IS__CGSCC_NPM: attributes #[[ATTR19]] = { willreturn writeonly }
587-
; IS__CGSCC_NPM: attributes #[[ATTR20]] = { readnone willreturn }
586+
; IS__CGSCC_NPM: attributes #[[ATTR17:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
587+
; IS__CGSCC_NPM: attributes #[[ATTR18:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
588+
; IS__CGSCC_NPM: attributes #[[ATTR19]] = { willreturn }
589+
; IS__CGSCC_NPM: attributes #[[ATTR20]] = { willreturn writeonly }
590+
; IS__CGSCC_NPM: attributes #[[ATTR21]] = { readnone willreturn }
588591
;.

0 commit comments

Comments
 (0)