diff --git a/llvm/include/llvm/IR/Intrinsics.td b/llvm/include/llvm/IR/Intrinsics.td --- a/llvm/include/llvm/IR/Intrinsics.td +++ b/llvm/include/llvm/IR/Intrinsics.td @@ -1256,21 +1256,20 @@ ImmArg>, ImmArg>, ImmArg>]>; -def int_experimental_gc_result : Intrinsic<[llvm_any_ty], [llvm_token_ty], - [IntrNoMem]>; -def int_experimental_gc_relocate : Intrinsic<[llvm_any_ty], - [llvm_token_ty, llvm_i32_ty, - llvm_i32_ty], - [IntrNoMem, ImmArg>, - ImmArg>]>; - -def int_experimental_gc_get_pointer_base : Intrinsic<[llvm_anyptr_ty], - [llvm_anyptr_ty], [IntrNoMem, IntrWillReturn, - ReadNone>, NoCapture>]>; - -def int_experimental_gc_get_pointer_offset : Intrinsic<[llvm_i64_ty], - [llvm_anyptr_ty], [IntrNoMem, IntrWillReturn, - ReadNone>, NoCapture>]>; +def int_experimental_gc_result : DefaultAttrsIntrinsic< + [llvm_any_ty], [llvm_token_ty], [IntrNoMem]>; + +def int_experimental_gc_relocate : DefaultAttrsIntrinsic< + [llvm_any_ty], [llvm_token_ty, llvm_i32_ty, llvm_i32_ty], + [IntrNoMem, ImmArg>, ImmArg>]>; + +def int_experimental_gc_get_pointer_base : DefaultAttrsIntrinsic< + [llvm_anyptr_ty], [llvm_anyptr_ty], + [IntrNoMem, IntrWillReturn, ReadNone>, NoCapture>]>; + +def int_experimental_gc_get_pointer_offset : DefaultAttrsIntrinsic< + [llvm_i64_ty], [llvm_anyptr_ty], + [IntrNoMem, IntrWillReturn, ReadNone>, NoCapture>]>; //===------------------------ Coroutine Intrinsics ---------------===// // These are documented in docs/Coroutines.rst diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/statepoint-attrs.ll b/llvm/test/Transforms/RewriteStatepointsForGC/statepoint-attrs.ll --- a/llvm/test/Transforms/RewriteStatepointsForGC/statepoint-attrs.ll +++ b/llvm/test/Transforms/RewriteStatepointsForGC/statepoint-attrs.ll @@ -20,6 +20,6 @@ attributes #1 = { norecurse noimplicitfloat } ;. -; CHECK: attributes #[[ATTR0:[0-9]+]] = { nounwind memory(none) } +; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(none) } ; CHECK: attributes #[[ATTR1]] = { noimplicitfloat norecurse } ;.