; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc < %s -mtriple=aarch64-windows | FileCheck %s define dso_local i32 @func(ptr %g, i32 %a) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" { ; CHECK-LABEL: func: ; CHECK: .seh_proc func ; CHECK-NEXT: // %bb.0: // %entry ; CHECK-NEXT: hint #27 ; CHECK-NEXT: .seh_pac_sign_lr ; CHECK-NEXT: sub sp, sp, #16 ; CHECK-NEXT: .seh_stackalloc 16 ; CHECK-NEXT: stp x19, x30, [sp] // 16-byte Folded Spill ; CHECK-NEXT: .seh_save_lrpair x19, 0 ; CHECK-NEXT: .seh_endprologue ; CHECK-NEXT: mov w19, w1 ; CHECK-NEXT: blr x0 ; CHECK-NEXT: mov w0, w19 ; CHECK-NEXT: .seh_startepilogue ; CHECK-NEXT: ldp x19, x30, [sp] // 16-byte Folded Reload ; CHECK-NEXT: .seh_save_lrpair x19, 0 ; CHECK-NEXT: add sp, sp, #16 ; CHECK-NEXT: .seh_stackalloc 16 ; CHECK-NEXT: hint #31 ; CHECK-NEXT: .seh_pac_sign_lr ; CHECK-NEXT: .seh_endepilogue ; CHECK-NEXT: ret ; CHECK-NEXT: .seh_endfunclet ; CHECK-NEXT: .seh_endproc entry: tail call void %g() #2 ret i32 %a } ;; For func2, check that the potentially folded autibsp+ret -> retab ;; is handled correctly - currently we inhibit producing retab here. define dso_local i32 @func2(ptr %g, i32 %a) "sign-return-address"="non-leaf" "sign-return-address-key"="b_key" "target-features"="+v8.3a" { ; CHECK-LABEL: func2: ; CHECK: .seh_proc func2 ; CHECK-NEXT: // %bb.0: // %entry ; CHECK-NEXT: pacibsp ; CHECK-NEXT: .seh_pac_sign_lr ; CHECK-NEXT: sub sp, sp, #16 ; CHECK-NEXT: .seh_stackalloc 16 ; CHECK-NEXT: stp x19, x30, [sp] // 16-byte Folded Spill ; CHECK-NEXT: .seh_save_lrpair x19, 0 ; CHECK-NEXT: .seh_endprologue ; CHECK-NEXT: mov w19, w1 ; CHECK-NEXT: blr x0 ; CHECK-NEXT: mov w0, w19 ; CHECK-NEXT: .seh_startepilogue ; CHECK-NEXT: ldp x19, x30, [sp] // 16-byte Folded Reload ; CHECK-NEXT: .seh_save_lrpair x19, 0 ; CHECK-NEXT: add sp, sp, #16 ; CHECK-NEXT: .seh_stackalloc 16 ; CHECK-NEXT: autibsp ; CHECK-NEXT: .seh_pac_sign_lr ; CHECK-NEXT: .seh_endepilogue ; CHECK-NEXT: ret ; CHECK-NEXT: .seh_endfunclet ; CHECK-NEXT: .seh_endproc entry: tail call void %g() #2 ret i32 %a }