[PATCH] D137557: [PtrAuth] Use default attributes for some ptrauth intrinsics

Nikita Popov via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 7 08:28:28 PST 2022


nikic created this revision.
nikic added reviewers: ab, kristof.beyls.
Herald added a project: All.
nikic requested review of this revision.
Herald added subscribers: llvm-commits, jdoerfert.
Herald added a project: LLVM.

This uses the default intrinsic attributes (nofree, nosync, nocallback, willreturn) for a subset of the ptrauth intrinsics. Notably, this does not use them for auth and resign, because these intrinsics are specified to trap and as such are not willreturn. As far as I understood, the returning intrinsics may not trap (or can only trap in cases where behavior is undefined).


https://reviews.llvm.org/D137557

Files:
  llvm/include/llvm/IR/Intrinsics.td


Index: llvm/include/llvm/IR/Intrinsics.td
===================================================================
--- llvm/include/llvm/IR/Intrinsics.td
+++ llvm/include/llvm/IR/Intrinsics.td
@@ -2078,9 +2078,9 @@
 // Sign an unauthenticated pointer using the specified key and discriminator,
 // passed in that order.
 // Returns the first argument, with some known bits replaced with a signature.
-def int_ptrauth_sign : Intrinsic<[llvm_i64_ty],
-                                 [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty],
-                                 [IntrNoMem, ImmArg<ArgIndex<1>>]>;
+def int_ptrauth_sign :
+  DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty],
+                        [IntrNoMem, ImmArg<ArgIndex<1>>]>;
 
 // Authenticate a signed pointer, using the specified key and discriminator.
 // Returns the first argument, with the signature bits removed.
@@ -2106,15 +2106,14 @@
 // The second argument specifies the key.
 // This behaves like @llvm.ptrauth.auth, but doesn't require the signature to
 // be valid.
-def int_ptrauth_strip : Intrinsic<[llvm_i64_ty],
-                                  [llvm_i64_ty, llvm_i32_ty],
-                                  [IntrNoMem, ImmArg<ArgIndex<1>>]>;
+def int_ptrauth_strip :
+  DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
+                        [IntrNoMem, ImmArg<ArgIndex<1>>]>;
 
 // Blend a small integer discriminator with an address discriminator, producing
 // a new discriminator value.
-def int_ptrauth_blend : Intrinsic<[llvm_i64_ty],
-                                  [llvm_i64_ty, llvm_i64_ty],
-                                  [IntrNoMem]>;
+def int_ptrauth_blend :
+  DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
 
 // Compute the signature of a value, using a given discriminator.
 // This differs from @llvm.ptrauth.sign in that it doesn't embed the computed
@@ -2122,9 +2121,8 @@
 // That allows it to be used to sign non-pointer data: in that sense, it is
 // generic.  There is no generic @llvm.ptrauth.auth: instead, the signature
 // can be computed using @llvm.ptrauth.sign_generic, and compared with icmp.
-def int_ptrauth_sign_generic : Intrinsic<[llvm_i64_ty],
-                                         [llvm_i64_ty, llvm_i64_ty],
-                                         [IntrNoMem]>;
+def int_ptrauth_sign_generic :
+  DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
 
 //===----------------------------------------------------------------------===//
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137557.473688.patch
Type: text/x-patch
Size: 2562 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221107/7595ee42/attachment.bin>


More information about the llvm-commits mailing list