; RUN: llc < %s -O0 -mtriple=aarch64-none-linux-gnu -mattr=+pauth | FileCheck --check-prefixes=CHECK,O0 %s ; RUN: llc < %s -O2 -mtriple=aarch64-none-linux-gnu -mattr=+pauth | FileCheck --check-prefixes=CHECK,O2 %s @ds = external global i8 declare void @f(ptr %p) ; CHECK: call: define void @call(ptr %p) { ; CHECK: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: bl f notail call void @f(ptr %p) [ "deactivation-symbol"(ptr @ds) ] ret void } ; CHECK: pauth_sign_zero: define i64 @pauth_sign_zero(i64 %p) { ; O0: mov x8, xzr ; CHECK: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; O0-NEXT: pacia x0, x8 ; O2-NEXT: paciza x0 %signed = call i64 @llvm.ptrauth.sign(i64 %p, i32 0, i64 0) [ "deactivation-symbol"(ptr @ds) ] ret i64 %signed } ; CHECK: pauth_sign_const: define i64 @pauth_sign_const(i64 %p) { ; CHECK: mov x16, #12345 ; CHECK-NEXT: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: pacia x0, x16 %signed = call i64 @llvm.ptrauth.sign(i64 %p, i32 0, i64 12345) [ "deactivation-symbol"(ptr @ds) ] ret i64 %signed } ; CHECK: pauth_sign: define i64 @pauth_sign(i64 %p, i64 %d) { ; CHECK: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: pacia x0, x1 %signed = call i64 @llvm.ptrauth.sign(i64 %p, i32 0, i64 %d) [ "deactivation-symbol"(ptr @ds) ] ret i64 %signed } ; CHECK: pauth_auth_zero: define i64 @pauth_auth_zero(i64 %p) { ; CHECK: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: autiza x0 %authed = call i64 @llvm.ptrauth.auth(i64 %p, i32 0, i64 0) [ "deactivation-symbol"(ptr @ds) ] ret i64 %authed } ; CHECK: pauth_auth_const: define i64 @pauth_auth_const(i64 %p) { ; CHECK: mov x8, #12345 ; CHECK-NEXT: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: autia x0, x8 %authed = call i64 @llvm.ptrauth.auth(i64 %p, i32 0, i64 12345) [ "deactivation-symbol"(ptr @ds) ] ret i64 %authed } ; CHECK: pauth_auth: define i64 @pauth_auth(i64 %p, i64 %d) { ; CHECK: [[LABEL:.L.*]]: ; CHECK-NEXT: .reloc [[LABEL]], R_AARCH64_PATCHINST, ds ; CHECK-NEXT: autia x0, x1 %authed = call i64 @llvm.ptrauth.auth(i64 %p, i32 0, i64 %d) [ "deactivation-symbol"(ptr @ds) ] ret i64 %authed }