| ; 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: str x19, [sp, #-16]! // 8-byte Folded Spill |
| ; CHECK-NEXT: .seh_save_reg_x x19, 16 |
| ; CHECK-NEXT: str x30, [sp, #8] // 8-byte Spill |
| ; CHECK-NEXT: .seh_save_reg x30, 8 |
| ; CHECK-NEXT: .seh_endprologue |
| ; CHECK-NEXT: mov w19, w1 |
| ; CHECK-NEXT: blr x0 |
| ; CHECK-NEXT: mov w0, w19 |
| ; CHECK-NEXT: .seh_startepilogue |
| ; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Reload |
| ; CHECK-NEXT: .seh_save_reg x30, 8 |
| ; CHECK-NEXT: ldr x19, [sp], #16 // 8-byte Folded Reload |
| ; CHECK-NEXT: .seh_save_reg_x x19, 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: str x19, [sp, #-16]! // 8-byte Folded Spill |
| ; CHECK-NEXT: .seh_save_reg_x x19, 16 |
| ; CHECK-NEXT: str x30, [sp, #8] // 8-byte Spill |
| ; CHECK-NEXT: .seh_save_reg x30, 8 |
| ; CHECK-NEXT: .seh_endprologue |
| ; CHECK-NEXT: mov w19, w1 |
| ; CHECK-NEXT: blr x0 |
| ; CHECK-NEXT: mov w0, w19 |
| ; CHECK-NEXT: .seh_startepilogue |
| ; CHECK-NEXT: ldr x30, [sp, #8] // 8-byte Reload |
| ; CHECK-NEXT: .seh_save_reg x30, 8 |
| ; CHECK-NEXT: ldr x19, [sp], #16 // 8-byte Folded Reload |
| ; CHECK-NEXT: .seh_save_reg_x x19, 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 |
| } |