[llvm-branch-commits] [llvm] AArch64: Relax x16/x17 constraint on AUT in certain cases. (PR #132857)
Anatoly Trosinenko via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jun 11 10:58:43 PDT 2025
================
@@ -1,279 +1,327 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel=0 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL="L" --check-prefix=UNCHECKED
+; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL="L" --check-prefixes=UNCHECKED,UNCHECKED-DARWIN
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL="L" --check-prefix=UNCHECKED
+; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL="L" --check-prefixes=UNCHECKED,UNCHECKED-DARWIN
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel=0 -verify-machineinstrs \
-; RUN: | FileCheck %s -DL="L" --check-prefix=CHECKED
+; RUN: | FileCheck %s -DL="L" --check-prefixes=CHECKED,CHECKED-DARWIN
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: | FileCheck %s -DL="L" --check-prefix=CHECKED
+; RUN: | FileCheck %s -DL="L" --check-prefixes=CHECKED,CHECKED-DARWIN
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel=0 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL="L" --check-prefix=TRAP
+; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL="L" --check-prefixes=TRAP,TRAP-DARWIN
; RUN: llc < %s -mtriple arm64e-apple-darwin -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL="L" --check-prefix=TRAP
+; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL="L" --check-prefixes=TRAP,TRAP-DARWIN
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel=0 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL=".L" --check-prefix=UNCHECKED
+; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL=".L" --check-prefixes=UNCHECKED,UNCHECKED-ELF
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL=".L" --check-prefix=UNCHECKED
+; RUN: -aarch64-ptrauth-auth-checks=none | FileCheck %s -DL=".L" --check-prefixes=UNCHECKED,UNCHECKED-ELF
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel=0 -verify-machineinstrs \
-; RUN: | FileCheck %s -DL=".L" --check-prefix=CHECKED
+; RUN: | FileCheck %s -DL=".L" --check-prefixes=CHECKED,CHECKED-ELF
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: | FileCheck %s -DL=".L" --check-prefix=CHECKED
+; RUN: | FileCheck %s -DL=".L" --check-prefixes=CHECKED,CHECKED-ELF
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel=0 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL=".L" --check-prefix=TRAP
+; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL=".L" --check-prefixes=TRAP,TRAP-ELF
; RUN: llc < %s -mtriple aarch64-linux-gnu -mattr=+pauth -global-isel -global-isel-abort=1 -verify-machineinstrs \
-; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL=".L" --check-prefix=TRAP
+; RUN: -aarch64-ptrauth-auth-checks=trap | FileCheck %s -DL=".L" --check-prefixes=TRAP,TRAP-ELF
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
define i64 @test_auth_ia(i64 %arg, i64 %arg1) {
; UNCHECKED-LABEL: test_auth_ia:
-; UNCHECKED: %bb.0:
-; UNCHECKED-NEXT: mov x16, x0
-; UNCHECKED-NEXT: autia x16, x1
-; UNCHECKED-NEXT: mov x0, x16
-; UNCHECKED-NEXT: ret
+; UNCHECKED: %bb.0:
+; UNCHECKED-DARWIN-NEXT: mov x16, x0
+; UNCHECKED-DARWIN-NEXT: autia x16, x1
+; UNCHECKED-DARWIN-NEXT: mov x0, x16
+; UNCHECKED-ELF-NEXT: autia x0, x1
+; UNCHECKED-NEXT: ret
;
; CHECKED-LABEL: test_auth_ia:
-; CHECKED: %bb.0:
-; CHECKED-NEXT: mov x16, x0
-; CHECKED-NEXT: autia x16, x1
-; CHECKED-NEXT: mov x0, x16
-; CHECKED-NEXT: ret
+; CHECKED: %bb.0:
+; CHECKED-DARWIN-NEXT: mov x16, x0
+; CHECKED-DARWIN-NEXT: autia x16, x1
+; CHECKED-DARWIN-NEXT: mov x0, x16
+; CHECKED-ELF-NEXT: autia x0, x1
+; CHECKED-NEXT: ret
;
; TRAP-LABEL: test_auth_ia:
; TRAP: %bb.0:
-; TRAP-NEXT: mov x16, x0
-; TRAP-NEXT: autia x16, x1
-; TRAP-NEXT: mov x17, x16
-; TRAP-NEXT: xpaci x17
-; TRAP-NEXT: cmp x16, x17
+; TRAP-DARWIN-NEXT: mov x16, x0
+; TRAP-DARWIN-NEXT: autia x16, x1
+; TRAP-DARWIN-NEXT: mov x17, x16
+; TRAP-DARWIN-NEXT: xpaci x17
+; TRAP-DARWIN-NEXT: cmp x16, x17
+; TRAP-ELF-NEXT: autia x0, x1
+; TRAP-ELF-NEXT: mov x8, x0
+; TRAP-ELF-NEXT: xpaci x8
+; TRAP-ELF-NEXT: cmp x0, x8
; TRAP-NEXT: b.eq [[L]]auth_success_0
; TRAP-NEXT: brk #0xc470
; TRAP-NEXT: Lauth_success_0:
-; TRAP-NEXT: mov x0, x16
+; TRAP-DARWIN-NEXT: mov x0, x16
; TRAP-NEXT: ret
%tmp = call i64 @llvm.ptrauth.auth(i64 %arg, i32 0, i64 %arg1)
----------------
atrosinenko wrote:
It may be worth adding one more test case to check that tied operands are handled properly. Something along the lines
```llvm
%tmp = call i64 @llvm.ptrauth.auth(i64 %arg1, i32 0, i64 %arg)
```
i.e. operands are swapped - to test that one `mov` is still emitted:
```
autia x1, x0
mov x0, x1
ret
```
As we do not test the mapping of keys to real instructions, one test case mentioning an arbitrary key should be enough.
https://github.com/llvm/llvm-project/pull/132857
More information about the llvm-branch-commits
mailing list