xref: /llvm-project/llvm/test/CodeGen/X86/apx/push2-pop2-cfi-seh.ll (revision cb112eb16cff222d8fbe7cfd3cb0834f538a691d)
1*cb112eb1SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=LIN-REF
3*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2 | FileCheck %s --check-prefix=LIN
4*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=LIN-PPX
5*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=WIN-REF
6*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2 | FileCheck %s --check-prefix=WIN
7*cb112eb1SShengchen Kan; RUN: llc < %s -mtriple=x86_64-windows-msvc -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=WIN-PPX
8*cb112eb1SShengchen Kan
9*cb112eb1SShengchen Kandefine i32 @csr6_alloc16(ptr %argv) {
10*cb112eb1SShengchen Kan; LIN-REF-LABEL: csr6_alloc16:
11*cb112eb1SShengchen Kan; LIN-REF:       # %bb.0: # %entry
12*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %rbp
13*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 16
14*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %r15
15*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 24
16*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %r14
17*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 32
18*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %r13
19*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 40
20*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %r12
21*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 48
22*cb112eb1SShengchen Kan; LIN-REF-NEXT:    pushq %rbx
23*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 56
24*cb112eb1SShengchen Kan; LIN-REF-NEXT:    subq $24, %rsp
25*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 80
26*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %rbx, -56
27*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %r12, -48
28*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %r13, -40
29*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %r14, -32
30*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %r15, -24
31*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_offset %rbp, -16
32*cb112eb1SShengchen Kan; LIN-REF-NEXT:    #APP
33*cb112eb1SShengchen Kan; LIN-REF-NEXT:    #NO_APP
34*cb112eb1SShengchen Kan; LIN-REF-NEXT:    xorl %ecx, %ecx
35*cb112eb1SShengchen Kan; LIN-REF-NEXT:    xorl %eax, %eax
36*cb112eb1SShengchen Kan; LIN-REF-NEXT:    callq *%rcx
37*cb112eb1SShengchen Kan; LIN-REF-NEXT:    addq $24, %rsp
38*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 56
39*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %rbx
40*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 48
41*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %r12
42*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 40
43*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %r13
44*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 32
45*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %r14
46*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 24
47*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %r15
48*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 16
49*cb112eb1SShengchen Kan; LIN-REF-NEXT:    popq %rbp
50*cb112eb1SShengchen Kan; LIN-REF-NEXT:    .cfi_def_cfa_offset 8
51*cb112eb1SShengchen Kan; LIN-REF-NEXT:    retq
52*cb112eb1SShengchen Kan;
53*cb112eb1SShengchen Kan; LIN-LABEL: csr6_alloc16:
54*cb112eb1SShengchen Kan; LIN:       # %bb.0: # %entry
55*cb112eb1SShengchen Kan; LIN-NEXT:    pushq %rax
56*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 16
57*cb112eb1SShengchen Kan; LIN-NEXT:    push2 %r15, %rbp
58*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 32
59*cb112eb1SShengchen Kan; LIN-NEXT:    push2 %r13, %r14
60*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 48
61*cb112eb1SShengchen Kan; LIN-NEXT:    push2 %rbx, %r12
62*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 64
63*cb112eb1SShengchen Kan; LIN-NEXT:    subq $32, %rsp
64*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 96
65*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %rbx, -64
66*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %r12, -56
67*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %r13, -48
68*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %r14, -40
69*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %r15, -32
70*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_offset %rbp, -24
71*cb112eb1SShengchen Kan; LIN-NEXT:    #APP
72*cb112eb1SShengchen Kan; LIN-NEXT:    #NO_APP
73*cb112eb1SShengchen Kan; LIN-NEXT:    xorl %ecx, %ecx
74*cb112eb1SShengchen Kan; LIN-NEXT:    xorl %eax, %eax
75*cb112eb1SShengchen Kan; LIN-NEXT:    callq *%rcx
76*cb112eb1SShengchen Kan; LIN-NEXT:    addq $32, %rsp
77*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 64
78*cb112eb1SShengchen Kan; LIN-NEXT:    pop2 %r12, %rbx
79*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 48
80*cb112eb1SShengchen Kan; LIN-NEXT:    pop2 %r14, %r13
81*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 32
82*cb112eb1SShengchen Kan; LIN-NEXT:    pop2 %rbp, %r15
83*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 16
84*cb112eb1SShengchen Kan; LIN-NEXT:    popq %rcx
85*cb112eb1SShengchen Kan; LIN-NEXT:    .cfi_def_cfa_offset 8
86*cb112eb1SShengchen Kan; LIN-NEXT:    retq
87*cb112eb1SShengchen Kan;
88*cb112eb1SShengchen Kan; LIN-PPX-LABEL: csr6_alloc16:
89*cb112eb1SShengchen Kan; LIN-PPX:       # %bb.0: # %entry
90*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    pushq %rax
91*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 16
92*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    push2p %r15, %rbp
93*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 32
94*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    push2p %r13, %r14
95*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 48
96*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    push2p %rbx, %r12
97*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 64
98*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    subq $32, %rsp
99*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 96
100*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %rbx, -64
101*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %r12, -56
102*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %r13, -48
103*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %r14, -40
104*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %r15, -32
105*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_offset %rbp, -24
106*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    #APP
107*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    #NO_APP
108*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    xorl %ecx, %ecx
109*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    xorl %eax, %eax
110*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    callq *%rcx
111*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    addq $32, %rsp
112*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 64
113*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    pop2p %r12, %rbx
114*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 48
115*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    pop2p %r14, %r13
116*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 32
117*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    pop2p %rbp, %r15
118*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 16
119*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    popq %rcx
120*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    .cfi_def_cfa_offset 8
121*cb112eb1SShengchen Kan; LIN-PPX-NEXT:    retq
122*cb112eb1SShengchen Kan;
123*cb112eb1SShengchen Kan; WIN-REF-LABEL: csr6_alloc16:
124*cb112eb1SShengchen Kan; WIN-REF:       # %bb.0: # %entry
125*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %r15
126*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %r15
127*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %r14
128*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %r14
129*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %r13
130*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %r13
131*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %r12
132*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %r12
133*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %rbp
134*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %rbp
135*cb112eb1SShengchen Kan; WIN-REF-NEXT:    pushq %rbx
136*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_pushreg %rbx
137*cb112eb1SShengchen Kan; WIN-REF-NEXT:    subq $56, %rsp
138*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_stackalloc 56
139*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_endprologue
140*cb112eb1SShengchen Kan; WIN-REF-NEXT:    #APP
141*cb112eb1SShengchen Kan; WIN-REF-NEXT:    #NO_APP
142*cb112eb1SShengchen Kan; WIN-REF-NEXT:    xorl %eax, %eax
143*cb112eb1SShengchen Kan; WIN-REF-NEXT:    callq *%rax
144*cb112eb1SShengchen Kan; WIN-REF-NEXT:    nop
145*cb112eb1SShengchen Kan; WIN-REF-NEXT:    addq $56, %rsp
146*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %rbx
147*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %rbp
148*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %r12
149*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %r13
150*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %r14
151*cb112eb1SShengchen Kan; WIN-REF-NEXT:    popq %r15
152*cb112eb1SShengchen Kan; WIN-REF-NEXT:    retq
153*cb112eb1SShengchen Kan; WIN-REF-NEXT:    .seh_endproc
154*cb112eb1SShengchen Kan;
155*cb112eb1SShengchen Kan; WIN-LABEL: csr6_alloc16:
156*cb112eb1SShengchen Kan; WIN:       # %bb.0: # %entry
157*cb112eb1SShengchen Kan; WIN-NEXT:    pushq %rax
158*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %rax
159*cb112eb1SShengchen Kan; WIN-NEXT:    push2 %r14, %r15
160*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %r15
161*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %r14
162*cb112eb1SShengchen Kan; WIN-NEXT:    push2 %r12, %r13
163*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %r13
164*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %r12
165*cb112eb1SShengchen Kan; WIN-NEXT:    push2 %rbx, %rbp
166*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %rbp
167*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_pushreg %rbx
168*cb112eb1SShengchen Kan; WIN-NEXT:    subq $64, %rsp
169*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_stackalloc 64
170*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_endprologue
171*cb112eb1SShengchen Kan; WIN-NEXT:    #APP
172*cb112eb1SShengchen Kan; WIN-NEXT:    #NO_APP
173*cb112eb1SShengchen Kan; WIN-NEXT:    xorl %eax, %eax
174*cb112eb1SShengchen Kan; WIN-NEXT:    callq *%rax
175*cb112eb1SShengchen Kan; WIN-NEXT:    nop
176*cb112eb1SShengchen Kan; WIN-NEXT:    addq $64, %rsp
177*cb112eb1SShengchen Kan; WIN-NEXT:    pop2 %rbp, %rbx
178*cb112eb1SShengchen Kan; WIN-NEXT:    pop2 %r13, %r12
179*cb112eb1SShengchen Kan; WIN-NEXT:    pop2 %r15, %r14
180*cb112eb1SShengchen Kan; WIN-NEXT:    popq %rcx
181*cb112eb1SShengchen Kan; WIN-NEXT:    retq
182*cb112eb1SShengchen Kan; WIN-NEXT:    .seh_endproc
183*cb112eb1SShengchen Kan;
184*cb112eb1SShengchen Kan; WIN-PPX-LABEL: csr6_alloc16:
185*cb112eb1SShengchen Kan; WIN-PPX:       # %bb.0: # %entry
186*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    pushq %rax
187*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %rax
188*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    push2p %r14, %r15
189*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %r15
190*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %r14
191*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    push2p %r12, %r13
192*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %r13
193*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %r12
194*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    push2p %rbx, %rbp
195*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %rbp
196*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_pushreg %rbx
197*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    subq $64, %rsp
198*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_stackalloc 64
199*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_endprologue
200*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    #APP
201*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    #NO_APP
202*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    xorl %eax, %eax
203*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    callq *%rax
204*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    nop
205*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    addq $64, %rsp
206*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    pop2p %rbp, %rbx
207*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    pop2p %r13, %r12
208*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    pop2p %r15, %r14
209*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    popq %rcx
210*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    retq
211*cb112eb1SShengchen Kan; WIN-PPX-NEXT:    .seh_endproc
212*cb112eb1SShengchen Kanentry:
213*cb112eb1SShengchen Kan  tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{r12},~{rbx},~{dirflag},~{fpsr},~{flags}"()
214*cb112eb1SShengchen Kan  %a = alloca [3 x ptr], align 8
215*cb112eb1SShengchen Kan  %b = call ptr (...) null()
216*cb112eb1SShengchen Kan  ret i32 undef
217*cb112eb1SShengchen Kan}
218