xref: /llvm-project/llvm/test/CodeGen/AArch64/cfi-sync-async.ll (revision 6e54fccede402c9ed0e8038aa258a99c5a2773e5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s
3
4declare i32 @g0(i32)
5declare i32 @g1(ptr)
6
7define i32 @foo_nounwind(i1 %cmp) nounwind {
8; CHECK-LABEL: foo_nounwind:
9; CHECK:       // %bb.0:
10; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
11; CHECK-NEXT:    sub sp, sp, #97, lsl #12 // =397312
12; CHECK-NEXT:    sub sp, sp, #2688
13; CHECK-NEXT:    tbz w0, #0, .LBB0_2
14; CHECK-NEXT:  // %bb.1: // %br1
15; CHECK-NEXT:    mov w0, wzr
16; CHECK-NEXT:    bl g0
17; CHECK-NEXT:    add w0, w0, #1
18; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
19; CHECK-NEXT:    add sp, sp, #2688
20; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
21; CHECK-NEXT:    ret
22; CHECK-NEXT:  .LBB0_2: // %br2
23; CHECK-NEXT:    mov w8, #42 // =0x2a
24; CHECK-NEXT:    mov x0, sp
25; CHECK-NEXT:    str w8, [sp]
26; CHECK-NEXT:    bl g1
27; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
28; CHECK-NEXT:    add sp, sp, #2688
29; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
30; CHECK-NEXT:    b g0
31  %ptr = alloca i32, i32 100000, align 4
32  br i1 %cmp, label %br1, label %br2
33
34br1:
35  %call1 = call i32 @g0(i32 0)
36  %rv1 = add i32 %call1, 1
37  ret i32 %rv1
38
39br2:
40  store i32 42, ptr %ptr, align 4
41  %call2 = call i32 @g1(ptr %ptr)
42  %rv2 = tail call i32 @g0(i32 %call2)
43  ret i32 %rv2
44}
45
46define i32 @foo_default(i1 %cmp) {
47; CHECK-LABEL: foo_default:
48; CHECK:       // %bb.0:
49; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
50; CHECK-NEXT:    sub sp, sp, #97, lsl #12 // =397312
51; CHECK-NEXT:    sub sp, sp, #2688
52; CHECK-NEXT:    .cfi_def_cfa_offset 400016
53; CHECK-NEXT:    .cfi_offset w30, -8
54; CHECK-NEXT:    .cfi_offset w29, -16
55; CHECK-NEXT:    tbz w0, #0, .LBB1_2
56; CHECK-NEXT:  // %bb.1: // %br1
57; CHECK-NEXT:    mov w0, wzr
58; CHECK-NEXT:    bl g0
59; CHECK-NEXT:    add w0, w0, #1
60; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
61; CHECK-NEXT:    add sp, sp, #2688
62; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
63; CHECK-NEXT:    ret
64; CHECK-NEXT:  .LBB1_2: // %br2
65; CHECK-NEXT:    mov w8, #42 // =0x2a
66; CHECK-NEXT:    mov x0, sp
67; CHECK-NEXT:    str w8, [sp]
68; CHECK-NEXT:    bl g1
69; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
70; CHECK-NEXT:    add sp, sp, #2688
71; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
72; CHECK-NEXT:    b g0
73  %ptr = alloca i32, i32 100000, align 4
74  br i1 %cmp, label %br1, label %br2
75
76br1:
77  %call1 = call i32 @g0(i32 0)
78  %rv1 = add i32 %call1, 1
79  ret i32 %rv1
80
81br2:
82  store i32 42, ptr %ptr, align 4
83  %call2 = call i32 @g1(ptr %ptr)
84  %rv2 = tail call i32 @g0(i32 %call2)
85  ret i32 %rv2
86}
87
88define i32 @foo_uwtable(i1 %cmp) uwtable {
89; CHECK-LABEL: foo_uwtable:
90; CHECK:       // %bb.0:
91; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
92; CHECK-NEXT:    .cfi_def_cfa_offset 16
93; CHECK-NEXT:    .cfi_offset w30, -8
94; CHECK-NEXT:    .cfi_offset w29, -16
95; CHECK-NEXT:    sub sp, sp, #97, lsl #12 // =397312
96; CHECK-NEXT:    .cfi_def_cfa_offset 397328
97; CHECK-NEXT:    sub sp, sp, #2688
98; CHECK-NEXT:    .cfi_def_cfa_offset 400016
99; CHECK-NEXT:    .cfi_remember_state
100; CHECK-NEXT:    tbz w0, #0, .LBB2_2
101; CHECK-NEXT:  // %bb.1: // %br1
102; CHECK-NEXT:    mov w0, wzr
103; CHECK-NEXT:    bl g0
104; CHECK-NEXT:    add w0, w0, #1
105; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
106; CHECK-NEXT:    .cfi_def_cfa_offset 2704
107; CHECK-NEXT:    add sp, sp, #2688
108; CHECK-NEXT:    .cfi_def_cfa_offset 16
109; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
110; CHECK-NEXT:    .cfi_def_cfa_offset 0
111; CHECK-NEXT:    .cfi_restore w30
112; CHECK-NEXT:    .cfi_restore w29
113; CHECK-NEXT:    ret
114; CHECK-NEXT:  .LBB2_2: // %br2
115; CHECK-NEXT:    .cfi_restore_state
116; CHECK-NEXT:    mov w8, #42 // =0x2a
117; CHECK-NEXT:    mov x0, sp
118; CHECK-NEXT:    str w8, [sp]
119; CHECK-NEXT:    bl g1
120; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
121; CHECK-NEXT:    .cfi_def_cfa_offset 2704
122; CHECK-NEXT:    add sp, sp, #2688
123; CHECK-NEXT:    .cfi_def_cfa_offset 16
124; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
125; CHECK-NEXT:    .cfi_def_cfa_offset 0
126; CHECK-NEXT:    .cfi_restore w30
127; CHECK-NEXT:    .cfi_restore w29
128; CHECK-NEXT:    b g0
129  %ptr = alloca i32, i32 100000, align 4
130  br i1 %cmp, label %br1, label %br2
131
132br1:
133  %call1 = call i32 @g0(i32 0)
134  %rv1 = add i32 %call1, 1
135  ret i32 %rv1
136
137br2:
138  store i32 42, ptr %ptr, align 4
139  %call2 = call i32 @g1(ptr %ptr)
140  %rv2 = tail call i32 @g0(i32 %call2)
141  ret i32 %rv2
142}
143
144define i32 @foo_uwtable_sync(i1 %cmp) uwtable(sync) {
145; CHECK-LABEL: foo_uwtable_sync:
146; CHECK:       // %bb.0:
147; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
148; CHECK-NEXT:    sub sp, sp, #97, lsl #12 // =397312
149; CHECK-NEXT:    sub sp, sp, #2688
150; CHECK-NEXT:    .cfi_def_cfa_offset 400016
151; CHECK-NEXT:    .cfi_offset w30, -8
152; CHECK-NEXT:    .cfi_offset w29, -16
153; CHECK-NEXT:    tbz w0, #0, .LBB3_2
154; CHECK-NEXT:  // %bb.1: // %br1
155; CHECK-NEXT:    mov w0, wzr
156; CHECK-NEXT:    bl g0
157; CHECK-NEXT:    add w0, w0, #1
158; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
159; CHECK-NEXT:    add sp, sp, #2688
160; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
161; CHECK-NEXT:    ret
162; CHECK-NEXT:  .LBB3_2: // %br2
163; CHECK-NEXT:    mov w8, #42 // =0x2a
164; CHECK-NEXT:    mov x0, sp
165; CHECK-NEXT:    str w8, [sp]
166; CHECK-NEXT:    bl g1
167; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
168; CHECK-NEXT:    add sp, sp, #2688
169; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
170; CHECK-NEXT:    b g0
171  %ptr = alloca i32, i32 100000, align 4
172  br i1 %cmp, label %br1, label %br2
173
174br1:
175  %call1 = call i32 @g0(i32 0)
176  %rv1 = add i32 %call1, 1
177  ret i32 %rv1
178
179br2:
180  store i32 42, ptr %ptr, align 4
181  %call2 = call i32 @g1(ptr %ptr)
182  %rv2 = tail call i32 @g0(i32 %call2)
183  ret i32 %rv2
184}
185
186define i32 @foo_uwtable_async(i1 %cmp) uwtable(async) {
187; CHECK-LABEL: foo_uwtable_async:
188; CHECK:       // %bb.0:
189; CHECK-NEXT:    stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
190; CHECK-NEXT:    .cfi_def_cfa_offset 16
191; CHECK-NEXT:    .cfi_offset w30, -8
192; CHECK-NEXT:    .cfi_offset w29, -16
193; CHECK-NEXT:    sub sp, sp, #97, lsl #12 // =397312
194; CHECK-NEXT:    .cfi_def_cfa_offset 397328
195; CHECK-NEXT:    sub sp, sp, #2688
196; CHECK-NEXT:    .cfi_def_cfa_offset 400016
197; CHECK-NEXT:    .cfi_remember_state
198; CHECK-NEXT:    tbz w0, #0, .LBB4_2
199; CHECK-NEXT:  // %bb.1: // %br1
200; CHECK-NEXT:    mov w0, wzr
201; CHECK-NEXT:    bl g0
202; CHECK-NEXT:    add w0, w0, #1
203; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
204; CHECK-NEXT:    .cfi_def_cfa_offset 2704
205; CHECK-NEXT:    add sp, sp, #2688
206; CHECK-NEXT:    .cfi_def_cfa_offset 16
207; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
208; CHECK-NEXT:    .cfi_def_cfa_offset 0
209; CHECK-NEXT:    .cfi_restore w30
210; CHECK-NEXT:    .cfi_restore w29
211; CHECK-NEXT:    ret
212; CHECK-NEXT:  .LBB4_2: // %br2
213; CHECK-NEXT:    .cfi_restore_state
214; CHECK-NEXT:    mov w8, #42 // =0x2a
215; CHECK-NEXT:    mov x0, sp
216; CHECK-NEXT:    str w8, [sp]
217; CHECK-NEXT:    bl g1
218; CHECK-NEXT:    add sp, sp, #97, lsl #12 // =397312
219; CHECK-NEXT:    .cfi_def_cfa_offset 2704
220; CHECK-NEXT:    add sp, sp, #2688
221; CHECK-NEXT:    .cfi_def_cfa_offset 16
222; CHECK-NEXT:    ldp x29, x30, [sp], #16 // 16-byte Folded Reload
223; CHECK-NEXT:    .cfi_def_cfa_offset 0
224; CHECK-NEXT:    .cfi_restore w30
225; CHECK-NEXT:    .cfi_restore w29
226; CHECK-NEXT:    b g0
227  %ptr = alloca i32, i32 100000, align 4
228  br i1 %cmp, label %br1, label %br2
229
230br1:
231  %call1 = call i32 @g0(i32 0)
232  %rv1 = add i32 %call1, 1
233  ret i32 %rv1
234
235br2:
236  store i32 42, ptr %ptr, align 4
237  %call2 = call i32 @g1(ptr %ptr)
238  %rv2 = tail call i32 @g0(i32 %call2)
239  ret i32 %rv2
240}
241