blob: 54f8e3f4c5a64de65d8c685c6ec5cbc90d44b629 [file]
; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s
; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype obj -o - %s | llvm-readobj -u - | FileCheck %s -check-prefix CHECK-UNWIND
declare dso_local void @g(ptr noundef)
define dso_local preserve_mostcc void @f(ptr noundef %p) #0 {
entry:
%p.addr = alloca ptr, align 8
store ptr %p, ptr %p.addr, align 8
%0 = load ptr, ptr %p.addr, align 8
call void @g(ptr noundef %0)
ret void
}
attributes #0 = { nounwind uwtable(sync) }
; CHECK: str x30, [sp, #16]
; CHECK-NEXT: .seh_save_reg x30, 16
; CHECK: str x9, [sp, #24]
; CHECK-NEXT: .seh_save_any_reg x9, 24
; CHECK: stp x10, x11, [sp, #32
; CHECK-NEXT: .seh_save_any_reg_p x10, 32
; CHECK: stp x12, x13, [sp, #48]
; CHECK-NEXT: .seh_save_any_reg_p x12, 48
; CHECK: stp x14, x15, [sp, #64]
; CHECK-NEXT: .seh_save_any_reg_p x14, 64
; CHECK: .seh_endprologue
; CHECK: .seh_startepilogue
; CHECK: ldp x14, x15, [sp, #64]
; CHECK-NEXT: .seh_save_any_reg_p x14, 64
; CHECK: ldp x12, x13, [sp, #48]
; CHECK-NEXT: .seh_save_any_reg_p x12, 48
; CHECK: ldp x10, x11, [sp, #32
; CHECK-NEXT: .seh_save_any_reg_p x10, 32
; CHECK: ldr x9, [sp, #24]
; CHECK-NEXT: .seh_save_any_reg x9, 24
; CHECK: ldr x30, [sp, #16]
; CHECK-NEXT: .seh_save_reg x30, 16
; CHECK: .seh_endepilogue
; CHECK-UNWIND: Prologue [
; CHECK-UNWIND: 0xe74e04 ; stp x14, x15, [sp, #64]
; CHECK-UNWIND: 0xe74c03 ; stp x12, x13, [sp, #48]
; CHECK-UNWIND: 0xe74a02 ; stp x10, x11, [sp, #32]
; CHECK-UNWIND: 0xe70903 ; str x9, [sp, #24]
; CHECK-UNWIND: 0xd2c2 ; str x30, [sp, #16]
; CHECK-UNWIND: 0x05 ; sub sp, #80
; CHECK-UNWIND: 0xe4 ; end
; CHECK-UNWIND: ]