[Xtensa] Implement Windowed Register Option. (#124656)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / stack-hazard-windows.ll
blob927d8b68c46be35ec7253041319f37107a076d61
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=0 | FileCheck %s --check-prefixes=CHECK0
3 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=64 | FileCheck %s --check-prefixes=CHECK64
4 ; RUN: llc < %s -mtriple=aarch64-windows-pc-msvc -aarch64-stack-hazard-size=1024 | FileCheck %s --check-prefixes=CHECK1024
6 define i32 @fpr_csr_stackobj(double %x) "aarch64_pstate_sm_compatible" "frame-pointer"="all" {
7 ; CHECK0-LABEL: fpr_csr_stackobj:
8 ; CHECK0:       .seh_proc fpr_csr_stackobj
9 ; CHECK0-NEXT:  // %bb.0: // %entry
10 ; CHECK0-NEXT:    str x23, [sp, #-48]! // 8-byte Folded Spill
11 ; CHECK0-NEXT:    .seh_save_reg_x x23, 48
12 ; CHECK0-NEXT:    stp x29, x30, [sp, #8] // 16-byte Folded Spill
13 ; CHECK0-NEXT:    .seh_save_fplr 8
14 ; CHECK0-NEXT:    stp d9, d10, [sp, #24] // 16-byte Folded Spill
15 ; CHECK0-NEXT:    .seh_save_fregp d9, 24
16 ; CHECK0-NEXT:    add x29, sp, #8
17 ; CHECK0-NEXT:    .seh_add_fp 8
18 ; CHECK0-NEXT:    .seh_endprologue
19 ; CHECK0-NEXT:    mov w0, wzr
20 ; CHECK0-NEXT:    //APP
21 ; CHECK0-NEXT:    //NO_APP
22 ; CHECK0-NEXT:    str d0, [x29, #32]
23 ; CHECK0-NEXT:    .seh_startepilogue
24 ; CHECK0-NEXT:    ldp d9, d10, [sp, #24] // 16-byte Folded Reload
25 ; CHECK0-NEXT:    .seh_save_fregp d9, 24
26 ; CHECK0-NEXT:    ldp x29, x30, [sp, #8] // 16-byte Folded Reload
27 ; CHECK0-NEXT:    .seh_save_fplr 8
28 ; CHECK0-NEXT:    ldr x23, [sp], #48 // 8-byte Folded Reload
29 ; CHECK0-NEXT:    .seh_save_reg_x x23, 48
30 ; CHECK0-NEXT:    .seh_endepilogue
31 ; CHECK0-NEXT:    ret
32 ; CHECK0-NEXT:    .seh_endfunclet
33 ; CHECK0-NEXT:    .seh_endproc
35 ; CHECK64-LABEL: fpr_csr_stackobj:
36 ; CHECK64:       .seh_proc fpr_csr_stackobj
37 ; CHECK64-NEXT:  // %bb.0: // %entry
38 ; CHECK64-NEXT:    sub sp, sp, #192
39 ; CHECK64-NEXT:    .seh_stackalloc 192
40 ; CHECK64-NEXT:    str x23, [sp, #80] // 8-byte Folded Spill
41 ; CHECK64-NEXT:    .seh_save_reg x23, 80
42 ; CHECK64-NEXT:    str x29, [sp, #88] // 8-byte Folded Spill
43 ; CHECK64-NEXT:    .seh_save_reg x29, 88
44 ; CHECK64-NEXT:    str x30, [sp, #96] // 8-byte Folded Spill
45 ; CHECK64-NEXT:    .seh_save_reg x30, 96
46 ; CHECK64-NEXT:    str d9, [sp, #168] // 8-byte Folded Spill
47 ; CHECK64-NEXT:    .seh_save_freg d9, 168
48 ; CHECK64-NEXT:    str d10, [sp, #176] // 8-byte Folded Spill
49 ; CHECK64-NEXT:    .seh_save_freg d10, 176
50 ; CHECK64-NEXT:    add x29, sp, #88
51 ; CHECK64-NEXT:    .seh_add_fp 88
52 ; CHECK64-NEXT:    .seh_endprologue
53 ; CHECK64-NEXT:    mov w0, wzr
54 ; CHECK64-NEXT:    //APP
55 ; CHECK64-NEXT:    //NO_APP
56 ; CHECK64-NEXT:    stur d0, [x29, #-16]
57 ; CHECK64-NEXT:    .seh_startepilogue
58 ; CHECK64-NEXT:    ldr d10, [sp, #176] // 8-byte Folded Reload
59 ; CHECK64-NEXT:    .seh_save_freg d10, 176
60 ; CHECK64-NEXT:    ldr d9, [sp, #168] // 8-byte Folded Reload
61 ; CHECK64-NEXT:    .seh_save_freg d9, 168
62 ; CHECK64-NEXT:    ldr x30, [sp, #96] // 8-byte Folded Reload
63 ; CHECK64-NEXT:    .seh_save_reg x30, 96
64 ; CHECK64-NEXT:    ldr x29, [sp, #88] // 8-byte Folded Reload
65 ; CHECK64-NEXT:    .seh_save_reg x29, 88
66 ; CHECK64-NEXT:    ldr x23, [sp, #80] // 8-byte Folded Reload
67 ; CHECK64-NEXT:    .seh_save_reg x23, 80
68 ; CHECK64-NEXT:    add sp, sp, #192
69 ; CHECK64-NEXT:    .seh_stackalloc 192
70 ; CHECK64-NEXT:    .seh_endepilogue
71 ; CHECK64-NEXT:    ret
72 ; CHECK64-NEXT:    .seh_endfunclet
73 ; CHECK64-NEXT:    .seh_endproc
75 ; CHECK1024-LABEL: fpr_csr_stackobj:
76 ; CHECK1024:       .seh_proc fpr_csr_stackobj
77 ; CHECK1024-NEXT:  // %bb.0: // %entry
78 ; CHECK1024-NEXT:    sub sp, sp, #1072
79 ; CHECK1024-NEXT:    .seh_stackalloc 1072
80 ; CHECK1024-NEXT:    str x23, [sp] // 8-byte Folded Spill
81 ; CHECK1024-NEXT:    .seh_save_reg x23, 0
82 ; CHECK1024-NEXT:    str x29, [sp, #8] // 8-byte Folded Spill
83 ; CHECK1024-NEXT:    .seh_save_reg x29, 8
84 ; CHECK1024-NEXT:    str x30, [sp, #16] // 8-byte Folded Spill
85 ; CHECK1024-NEXT:    .seh_save_reg x30, 16
86 ; CHECK1024-NEXT:    str d9, [sp, #1048] // 8-byte Folded Spill
87 ; CHECK1024-NEXT:    .seh_save_freg d9, 1048
88 ; CHECK1024-NEXT:    str d10, [sp, #1056] // 8-byte Folded Spill
89 ; CHECK1024-NEXT:    .seh_save_freg d10, 1056
90 ; CHECK1024-NEXT:    add x29, sp, #8
91 ; CHECK1024-NEXT:    .seh_add_fp 8
92 ; CHECK1024-NEXT:    .seh_endprologue
93 ; CHECK1024-NEXT:    sub sp, sp, #1040
94 ; CHECK1024-NEXT:    mov w0, wzr
95 ; CHECK1024-NEXT:    //APP
96 ; CHECK1024-NEXT:    //NO_APP
97 ; CHECK1024-NEXT:    stur d0, [x29, #-16]
98 ; CHECK1024-NEXT:    .seh_startepilogue
99 ; CHECK1024-NEXT:    add sp, sp, #1040
100 ; CHECK1024-NEXT:    .seh_stackalloc 1040
101 ; CHECK1024-NEXT:    ldr d10, [sp, #1056] // 8-byte Folded Reload
102 ; CHECK1024-NEXT:    .seh_save_freg d10, 1056
103 ; CHECK1024-NEXT:    ldr d9, [sp, #1048] // 8-byte Folded Reload
104 ; CHECK1024-NEXT:    .seh_save_freg d9, 1048
105 ; CHECK1024-NEXT:    ldr x30, [sp, #16] // 8-byte Folded Reload
106 ; CHECK1024-NEXT:    .seh_save_reg x30, 16
107 ; CHECK1024-NEXT:    ldr x29, [sp, #8] // 8-byte Folded Reload
108 ; CHECK1024-NEXT:    .seh_save_reg x29, 8
109 ; CHECK1024-NEXT:    ldr x23, [sp] // 8-byte Folded Reload
110 ; CHECK1024-NEXT:    .seh_save_reg x23, 0
111 ; CHECK1024-NEXT:    add sp, sp, #1072
112 ; CHECK1024-NEXT:    .seh_stackalloc 1072
113 ; CHECK1024-NEXT:    .seh_endepilogue
114 ; CHECK1024-NEXT:    ret
115 ; CHECK1024-NEXT:    .seh_endfunclet
116 ; CHECK1024-NEXT:    .seh_endproc
117 entry:
118   %a = alloca double
119   tail call void asm sideeffect "", "~{x23},~{d9},~{d10}"()
120   store double %x, ptr %a
121   ret i32 0