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