1; RUN: llc -mtriple aarch64-arm-linux-gnu --enable-machine-outliner \ 2; RUN: -verify-machineinstrs %s -o - | FileCheck --check-prefixes CHECK,V8A %s 3; RUN-V83A: llc -mtriple aarch64-arm-none-eabi -enable-machine-outliner \ 4; RUN-V83A: -verify-machineinstrs -mattr=+v8.3a %s -o - > %t 5; RUN-V83A: FileCheck --check-prefixes CHECK,V83A < %t %s 6 7declare i32 @thunk_called_fn(i32, i32, i32, i32) 8 9define i32 @a() #0 { 10; CHECK-LABEL: a: // @a 11; CHECK: // %bb.0: // %entry 12; V8A-NEXT: hint #25 13; V83A-NEXT: paciasp 14; V8A: hint #29 15; V83A: autiasp 16; CHECK-NEXT: ret 17entry: 18 %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4) 19 %cx = add i32 %call, 8 20 ret i32 %cx 21} 22 23define i32 @b() #0 { 24; CHECK-LABEL: b: // @b 25; CHECK: // %bb.0: // %entry 26; V8A-NEXT: hint #25 27; V83A-NEXT: paciasp 28; CHECK-NEXT: .cfi_negate_ra_state 29; V8A: hint #29 30; V83A: autiasp 31; CHECK-NEXT: ret 32entry: 33 %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4) 34 %cx = add i32 %call, 88 35 ret i32 %cx 36} 37 38define hidden i32 @c(i32 (i32, i32, i32, i32)* %fptr) #0 { 39; CHECK-LABEL: c: // @c 40; CHECK: // %bb.0: // %entry 41; V8A-NEXT: hint #25 42; V83A-NEXT: paciasp 43; CHECK-NEXT: .cfi_negate_ra_state 44; V8A: hint #29 45; V83A: autiasp 46; CHECK-NEXT: ret 47entry: 48 %call = tail call i32 %fptr(i32 1, i32 2, i32 3, i32 4) 49 %add = add nsw i32 %call, 8 50 ret i32 %add 51} 52 53define hidden i32 @d(i32 (i32, i32, i32, i32)* %fptr) #0 { 54; CHECK-LABEL: d: // @d 55; CHECK: // %bb.0: // %entry 56; V8A-NEXT: hint #25 57; V83A-NEXT: paciasp 58; CHECK-NEXT: .cfi_negate_ra_state 59; V8A: hint #29 60; V83A: autiasp 61; CHECK-NEXT: ret 62entry: 63 %call = tail call i32 %fptr(i32 1, i32 2, i32 3, i32 4) 64 %add = add nsw i32 %call, 88 65 ret i32 %add 66} 67 68attributes #0 = { "sign-return-address"="non-leaf" } 69 70; CHECK-NOT: [[OUTLINED_FUNCTION_{{.*}}]] 71; CHECK-NOT: .cfi_b_key_frame 72; CHECK-NOT: paci{{[a,b]}}sp 73; CHECK-NOT: hint #2{{[5,7]}} 74; CHECK-NOT: .cfi_negate_ra_state 75; CHECK-NOT: auti{{[a,b]}}sp 76; CHECK-NOT: hint #{{[29,31]}} 77