[llvm] fa7780c - [IR] Use default attributes for unordered memcpy/memset (#218409)

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 07:34:16 PDT 2026


Author: Nikita Popov
Date: 2026-08-24T14:34:11Z
New Revision: fa7780cf69632f4b705f67319ff5fc02b0e36c5e

URL: https://github.com/llvm/llvm-project/commit/fa7780cf69632f4b705f67319ff5fc02b0e36c5e
DIFF: https://github.com/llvm/llvm-project/commit/fa7780cf69632f4b705f67319ff5fc02b0e36c5e.diff

LOG: [IR] Use default attributes for unordered memcpy/memset (#218409)

All the default attributes (willreturn, nosync, nofree, nocallback)
apply to these, so make them DefaultAttrsIntrinsics.

This was raised in
https://github.com/llvm/llvm-project/pull/204795#issuecomment-4937647710.

Added: 
    

Modified: 
    llvm/include/llvm/IR/Intrinsics.td
    llvm/test/Analysis/BasicAA/cs-cs.ll

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td
index 12211799e358c..f6fdf97d7f283 100644
--- a/llvm/include/llvm/IR/Intrinsics.td
+++ b/llvm/include/llvm/IR/Intrinsics.td
@@ -2565,28 +2565,24 @@ def int_xray_typedevent : Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty, llvm_i64_ty],
 
 // @llvm.memcpy.element.unordered.atomic.*(dest, src, length, elementsize)
 def int_memcpy_element_unordered_atomic
-    : Intrinsic<[],
-                [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty, llvm_i32_ty],
-                [IntrArgMemOnly, IntrWillReturn, IntrNoSync,
-                 NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
-                 WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>,
-                 ImmArg<ArgIndex<3>>]>;
+    : DefaultAttrsIntrinsic<
+          [], [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty, llvm_i32_ty],
+          [IntrArgMemOnly, NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
+           WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>, ImmArg<ArgIndex<3>>]>;
 
 // @llvm.memmove.element.unordered.atomic.*(dest, src, length, elementsize)
 def int_memmove_element_unordered_atomic
-    : Intrinsic<[],
-                [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty, llvm_i32_ty],
-                [IntrArgMemOnly, IntrWillReturn, IntrNoSync,
-                 NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
-                 WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>,
-                 ImmArg<ArgIndex<3>>]>;
+    : DefaultAttrsIntrinsic<
+          [], [llvm_anyptr_ty, llvm_anyptr_ty, llvm_anyint_ty, llvm_i32_ty],
+          [IntrArgMemOnly, NoCapture<ArgIndex<0>>, NoCapture<ArgIndex<1>>,
+           WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>, ImmArg<ArgIndex<3>>]>;
 
 // @llvm.memset.element.unordered.atomic.*(dest, value, length, elementsize)
 def int_memset_element_unordered_atomic
-    : Intrinsic<[], [llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty, llvm_i32_ty],
-                [IntrWriteMem, IntrArgMemOnly, IntrWillReturn, IntrNoSync,
-                 NoCapture<ArgIndex<0>>, WriteOnly<ArgIndex<0>>,
-                 ImmArg<ArgIndex<3>>]>;
+    : DefaultAttrsIntrinsic<
+          [], [llvm_anyptr_ty, llvm_i8_ty, llvm_anyint_ty, llvm_i32_ty],
+          [IntrWriteMem, IntrArgMemOnly, NoCapture<ArgIndex<0>>,
+           WriteOnly<ArgIndex<0>>, ImmArg<ArgIndex<3>>]>;
 
 //===------------------------ Reduction Intrinsics ------------------------===//
 //

diff  --git a/llvm/test/Analysis/BasicAA/cs-cs.ll b/llvm/test/Analysis/BasicAA/cs-cs.ll
index 5eee9ec8705e1..f6e4e2ef1c27e 100644
--- a/llvm/test/Analysis/BasicAA/cs-cs.ll
+++ b/llvm/test/Analysis/BasicAA/cs-cs.ll
@@ -406,26 +406,26 @@ entry:
   call void @an_argmemonly_func(ptr %q) #9 [ "unknown"() ]
   ret void
 
-; CHECK: Just Ref:  Ptr: i8* %p        <->  call void @a_readonly_func(ptr %p) #9 [ "unknown"() ]
-; CHECK: Just Ref:  Ptr: i8* %q        <->  call void @a_readonly_func(ptr %p) #9 [ "unknown"() ]
-; CHECK: NoModRef:  Ptr: i8* %p        <->  call void @an_inaccessiblememonly_func() #10 [ "unknown"() ]
-; CHECK: NoModRef:  Ptr: i8* %q        <->  call void @an_inaccessiblememonly_func() #10 [ "unknown"() ]
-; CHECK: Both ModRef:  Ptr: i8* %p        <->  call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ]
-; CHECK: Both ModRef:  Ptr: i8* %q     <->  call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ]
-; CHECK: Both ModRef:  Ptr: i8* %p        <->  call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ]
-; CHECK: Both ModRef:  Ptr: i8* %q     <->  call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ]
-; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ]
-; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ]
-; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ]
-; CHECK: NoModRef:   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #9 [ "unknown"() ]
-; CHECK: NoModRef:   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #10 [ "unknown"() ]
-; CHECK: Both ModRef:   call void @an_argmemonly_func(ptr %q) #12 [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #11 [ "unknown"() ]
+; CHECK: Just Ref:  Ptr: i8* %p        <->  call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ]
+; CHECK: Just Ref:  Ptr: i8* %q        <->  call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ]
+; CHECK: NoModRef:  Ptr: i8* %p        <->  call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ]
+; CHECK: NoModRef:  Ptr: i8* %q        <->  call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:  Ptr: i8* %p        <->  call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:  Ptr: i8* %q     <->  call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:  Ptr: i8* %p        <->  call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:  Ptr: i8* %q     <->  call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ]
+; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Just Ref:   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: NoModRef:   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @a_readonly_func(ptr %p) #{{.*}} [ "unknown"() ]
+; CHECK: NoModRef:   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @an_inaccessiblememonly_func() #{{.*}} [ "unknown"() ]
+; CHECK: Both ModRef:   call void @an_argmemonly_func(ptr %q) #{{.*}} [ "unknown"() ] <->   call void @an_inaccessibleorargmemonly_func(ptr %q) #{{.*}} [ "unknown"() ]
 }
 
 attributes #0 = { argmemonly nounwind }


        


More information about the llvm-commits mailing list