1; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple aarch64 %s -o - | \ 2; RUN: FileCheck %s --check-prefixes CHECK,V8A 3; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple aarch64 -mattr=+v8.3a %s -o - | \ 4; RUN: FileCheck %s --check-prefixes CHECK,V83A 5 6define void @a() "sign-return-address"="all" "sign-return-address-key"="a_key" nounwind { 7; CHECK-LABEL: a: // @a 8; V8A: hint #25 9; V83A: paciasp 10 %1 = alloca i32, align 4 11 %2 = alloca i32, align 4 12 %3 = alloca i32, align 4 13 %4 = alloca i32, align 4 14 %5 = alloca i32, align 4 15 %6 = alloca i32, align 4 16 store i32 1, ptr %1, align 4 17 store i32 2, ptr %2, align 4 18 store i32 3, ptr %3, align 4 19 store i32 4, ptr %4, align 4 20 store i32 5, ptr %5, align 4 21 store i32 6, ptr %6, align 4 22; V8A: hint #29 23; V83A: retaa 24 ret void 25} 26 27define void @b() "sign-return-address"="all" nounwind { 28; CHECK-LABEL: b: // @b 29; V8A: hint #25 30; V83A: paciasp 31 %1 = alloca i32, align 4 32 %2 = alloca i32, align 4 33 %3 = alloca i32, align 4 34 %4 = alloca i32, align 4 35 %5 = alloca i32, align 4 36 %6 = alloca i32, align 4 37 store i32 1, ptr %1, align 4 38 store i32 2, ptr %2, align 4 39 store i32 3, ptr %3, align 4 40 store i32 4, ptr %4, align 4 41 store i32 5, ptr %5, align 4 42 store i32 6, ptr %6, align 4 43; V8A: hint #29 44; V83A: retaa 45 ret void 46} 47 48define void @c() "sign-return-address"="all" nounwind { 49; CHECK-LABEL: c: // @c 50; V8A: hint #25 51; V83A: paciasp 52 %1 = alloca i32, align 4 53 %2 = alloca i32, align 4 54 %3 = alloca i32, align 4 55 %4 = alloca i32, align 4 56 %5 = alloca i32, align 4 57 %6 = alloca i32, align 4 58 store i32 1, ptr %1, align 4 59 store i32 2, ptr %2, align 4 60 store i32 3, ptr %3, align 4 61 store i32 4, ptr %4, align 4 62 store i32 5, ptr %5, align 4 63 store i32 6, ptr %6, align 4 64; V8A: hint #29 65; V83A: retaa 66 ret void 67} 68 69; CHECK-LABEL: OUTLINED_FUNCTION_0: 70; V8A: hint #25 71; V83A: paciasp 72; V8A: hint #29 73; V8A-NEXT: ret 74; V83A: retaa 75