xref: /llvm-project/llvm/test/CodeGen/PowerPC/aix-spills-for-eh.ll (revision 9a28814f59e8f52cc63ae3d17023cee8348d9b53)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr9 -mattr=+altivec -verify-machineinstrs --vec-extabi \
3; RUN:   -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
4; RUN:   -mtriple=powerpc-unknown-aix < %s  | FileCheck %s --check-prefix 32BIT
5
6; RUN: llc -mcpu=pwr9 -mattr=+altivec -verify-machineinstrs --vec-extabi \
7; RUN:   -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
8; RUN:   -mtriple=powerpc64-unknown-aix < %s | FileCheck %s --check-prefix 64BIT
9
10@_ZTIi = external constant ptr
11
12; Function Attrs: uwtable mustprogress
13define dso_local signext i32 @_Z5test2iPPKc(i32 signext %argc, ptr nocapture readnone %argv) local_unnamed_addr #0 personality ptr @__gxx_personality_v0{
14; 32BIT-LABEL: _Z5test2iPPKc:
15; 32BIT:       # %bb.0: # %entry
16; 32BIT-NEXT:    mflr r0
17; 32BIT-NEXT:    stwu r1, -464(r1)
18; 32BIT-NEXT:    stw r0, 472(r1)
19; 32BIT-NEXT:    stw r30, 320(r1) # 4-byte Folded Spill
20; 32BIT-NEXT:    li r30, 0
21; 32BIT-NEXT:    stxv v20, 64(r1) # 16-byte Folded Spill
22; 32BIT-NEXT:    stxv v21, 80(r1) # 16-byte Folded Spill
23; 32BIT-NEXT:    stw r31, 324(r1) # 4-byte Folded Spill
24; 32BIT-NEXT:    mr r31, r3
25; 32BIT-NEXT:    stw r14, 256(r1) # 4-byte Folded Spill
26; 32BIT-NEXT:    stxv v22, 96(r1) # 16-byte Folded Spill
27; 32BIT-NEXT:    stw r15, 260(r1) # 4-byte Folded Spill
28; 32BIT-NEXT:    stxv v23, 112(r1) # 16-byte Folded Spill
29; 32BIT-NEXT:    stw r16, 264(r1) # 4-byte Folded Spill
30; 32BIT-NEXT:    stxv v24, 128(r1) # 16-byte Folded Spill
31; 32BIT-NEXT:    stw r17, 268(r1) # 4-byte Folded Spill
32; 32BIT-NEXT:    stw r18, 272(r1) # 4-byte Folded Spill
33; 32BIT-NEXT:    stxv v25, 144(r1) # 16-byte Folded Spill
34; 32BIT-NEXT:    stw r19, 276(r1) # 4-byte Folded Spill
35; 32BIT-NEXT:    stxv v26, 160(r1) # 16-byte Folded Spill
36; 32BIT-NEXT:    stw r20, 280(r1) # 4-byte Folded Spill
37; 32BIT-NEXT:    stxv v27, 176(r1) # 16-byte Folded Spill
38; 32BIT-NEXT:    stw r21, 284(r1) # 4-byte Folded Spill
39; 32BIT-NEXT:    stw r22, 288(r1) # 4-byte Folded Spill
40; 32BIT-NEXT:    stxv v28, 192(r1) # 16-byte Folded Spill
41; 32BIT-NEXT:    stw r23, 292(r1) # 4-byte Folded Spill
42; 32BIT-NEXT:    stxv v29, 208(r1) # 16-byte Folded Spill
43; 32BIT-NEXT:    stw r24, 296(r1) # 4-byte Folded Spill
44; 32BIT-NEXT:    stxv v30, 224(r1) # 16-byte Folded Spill
45; 32BIT-NEXT:    stw r25, 300(r1) # 4-byte Folded Spill
46; 32BIT-NEXT:    stw r26, 304(r1) # 4-byte Folded Spill
47; 32BIT-NEXT:    stxv v31, 240(r1) # 16-byte Folded Spill
48; 32BIT-NEXT:    stw r27, 308(r1) # 4-byte Folded Spill
49; 32BIT-NEXT:    stw r28, 312(r1) # 4-byte Folded Spill
50; 32BIT-NEXT:    stw r29, 316(r1) # 4-byte Folded Spill
51; 32BIT-NEXT:    stfd f15, 328(r1) # 8-byte Folded Spill
52; 32BIT-NEXT:    stfd f16, 336(r1) # 8-byte Folded Spill
53; 32BIT-NEXT:    stfd f17, 344(r1) # 8-byte Folded Spill
54; 32BIT-NEXT:    stfd f18, 352(r1) # 8-byte Folded Spill
55; 32BIT-NEXT:    stfd f19, 360(r1) # 8-byte Folded Spill
56; 32BIT-NEXT:    stfd f20, 368(r1) # 8-byte Folded Spill
57; 32BIT-NEXT:    stfd f21, 376(r1) # 8-byte Folded Spill
58; 32BIT-NEXT:    stfd f22, 384(r1) # 8-byte Folded Spill
59; 32BIT-NEXT:    stfd f23, 392(r1) # 8-byte Folded Spill
60; 32BIT-NEXT:    stfd f24, 400(r1) # 8-byte Folded Spill
61; 32BIT-NEXT:    stfd f25, 408(r1) # 8-byte Folded Spill
62; 32BIT-NEXT:    stfd f26, 416(r1) # 8-byte Folded Spill
63; 32BIT-NEXT:    stfd f27, 424(r1) # 8-byte Folded Spill
64; 32BIT-NEXT:    stfd f28, 432(r1) # 8-byte Folded Spill
65; 32BIT-NEXT:    stfd f29, 440(r1) # 8-byte Folded Spill
66; 32BIT-NEXT:    stfd f30, 448(r1) # 8-byte Folded Spill
67; 32BIT-NEXT:    stfd f31, 456(r1) # 8-byte Folded Spill
68; 32BIT-NEXT:    #APP
69; 32BIT-NEXT:    nop
70; 32BIT-NEXT:    #NO_APP
71; 32BIT-NEXT:  L..tmp0:
72; 32BIT-NEXT:    bl ._Z4testi[PR]
73; 32BIT-NEXT:    nop
74; 32BIT-NEXT:  L..tmp1:
75; 32BIT-NEXT:  L..BB0_1: # %return
76; 32BIT-NEXT:    lxv v31, 240(r1) # 16-byte Folded Reload
77; 32BIT-NEXT:    lxv v30, 224(r1) # 16-byte Folded Reload
78; 32BIT-NEXT:    lxv v29, 208(r1) # 16-byte Folded Reload
79; 32BIT-NEXT:    lxv v28, 192(r1) # 16-byte Folded Reload
80; 32BIT-NEXT:    mr r3, r30
81; 32BIT-NEXT:    lxv v27, 176(r1) # 16-byte Folded Reload
82; 32BIT-NEXT:    lxv v26, 160(r1) # 16-byte Folded Reload
83; 32BIT-NEXT:    lxv v25, 144(r1) # 16-byte Folded Reload
84; 32BIT-NEXT:    lxv v24, 128(r1) # 16-byte Folded Reload
85; 32BIT-NEXT:    lxv v23, 112(r1) # 16-byte Folded Reload
86; 32BIT-NEXT:    lxv v22, 96(r1) # 16-byte Folded Reload
87; 32BIT-NEXT:    lxv v21, 80(r1) # 16-byte Folded Reload
88; 32BIT-NEXT:    lxv v20, 64(r1) # 16-byte Folded Reload
89; 32BIT-NEXT:    lfd f31, 456(r1) # 8-byte Folded Reload
90; 32BIT-NEXT:    lfd f30, 448(r1) # 8-byte Folded Reload
91; 32BIT-NEXT:    lfd f29, 440(r1) # 8-byte Folded Reload
92; 32BIT-NEXT:    lfd f28, 432(r1) # 8-byte Folded Reload
93; 32BIT-NEXT:    lwz r31, 324(r1) # 4-byte Folded Reload
94; 32BIT-NEXT:    lwz r30, 320(r1) # 4-byte Folded Reload
95; 32BIT-NEXT:    lwz r29, 316(r1) # 4-byte Folded Reload
96; 32BIT-NEXT:    lfd f27, 424(r1) # 8-byte Folded Reload
97; 32BIT-NEXT:    lwz r28, 312(r1) # 4-byte Folded Reload
98; 32BIT-NEXT:    lwz r27, 308(r1) # 4-byte Folded Reload
99; 32BIT-NEXT:    lwz r26, 304(r1) # 4-byte Folded Reload
100; 32BIT-NEXT:    lfd f26, 416(r1) # 8-byte Folded Reload
101; 32BIT-NEXT:    lwz r25, 300(r1) # 4-byte Folded Reload
102; 32BIT-NEXT:    lwz r24, 296(r1) # 4-byte Folded Reload
103; 32BIT-NEXT:    lwz r23, 292(r1) # 4-byte Folded Reload
104; 32BIT-NEXT:    lfd f25, 408(r1) # 8-byte Folded Reload
105; 32BIT-NEXT:    lwz r22, 288(r1) # 4-byte Folded Reload
106; 32BIT-NEXT:    lwz r21, 284(r1) # 4-byte Folded Reload
107; 32BIT-NEXT:    lwz r20, 280(r1) # 4-byte Folded Reload
108; 32BIT-NEXT:    lfd f24, 400(r1) # 8-byte Folded Reload
109; 32BIT-NEXT:    lwz r19, 276(r1) # 4-byte Folded Reload
110; 32BIT-NEXT:    lwz r18, 272(r1) # 4-byte Folded Reload
111; 32BIT-NEXT:    lwz r17, 268(r1) # 4-byte Folded Reload
112; 32BIT-NEXT:    lfd f23, 392(r1) # 8-byte Folded Reload
113; 32BIT-NEXT:    lwz r16, 264(r1) # 4-byte Folded Reload
114; 32BIT-NEXT:    lwz r15, 260(r1) # 4-byte Folded Reload
115; 32BIT-NEXT:    lwz r14, 256(r1) # 4-byte Folded Reload
116; 32BIT-NEXT:    lfd f22, 384(r1) # 8-byte Folded Reload
117; 32BIT-NEXT:    lfd f21, 376(r1) # 8-byte Folded Reload
118; 32BIT-NEXT:    lfd f20, 368(r1) # 8-byte Folded Reload
119; 32BIT-NEXT:    lfd f19, 360(r1) # 8-byte Folded Reload
120; 32BIT-NEXT:    lfd f18, 352(r1) # 8-byte Folded Reload
121; 32BIT-NEXT:    lfd f17, 344(r1) # 8-byte Folded Reload
122; 32BIT-NEXT:    lfd f16, 336(r1) # 8-byte Folded Reload
123; 32BIT-NEXT:    lfd f15, 328(r1) # 8-byte Folded Reload
124; 32BIT-NEXT:    addi r1, r1, 464
125; 32BIT-NEXT:    lwz r0, 8(r1)
126; 32BIT-NEXT:    mtlr r0
127; 32BIT-NEXT:    blr
128; 32BIT-NEXT:  L..BB0_2: # %lpad
129; 32BIT-NEXT:  L..tmp2:
130; 32BIT-NEXT:    bl .__cxa_begin_catch[PR]
131; 32BIT-NEXT:    nop
132; 32BIT-NEXT:    lwz r3, 0(r3)
133; 32BIT-NEXT:    add r30, r3, r31
134; 32BIT-NEXT:    bl .__cxa_end_catch[PR]
135; 32BIT-NEXT:    nop
136; 32BIT-NEXT:    b L..BB0_1
137;
138; 64BIT-LABEL: _Z5test2iPPKc:
139; 64BIT:       # %bb.0: # %entry
140; 64BIT-NEXT:    mflr r0
141; 64BIT-NEXT:    stdu r1, -592(r1)
142; 64BIT-NEXT:    std r0, 608(r1)
143; 64BIT-NEXT:    std r30, 440(r1) # 8-byte Folded Spill
144; 64BIT-NEXT:    li r30, 0
145; 64BIT-NEXT:    stxv v20, 112(r1) # 16-byte Folded Spill
146; 64BIT-NEXT:    stxv v21, 128(r1) # 16-byte Folded Spill
147; 64BIT-NEXT:    std r31, 448(r1) # 8-byte Folded Spill
148; 64BIT-NEXT:    mr r31, r3
149; 64BIT-NEXT:    std r14, 312(r1) # 8-byte Folded Spill
150; 64BIT-NEXT:    stxv v22, 144(r1) # 16-byte Folded Spill
151; 64BIT-NEXT:    std r15, 320(r1) # 8-byte Folded Spill
152; 64BIT-NEXT:    stxv v23, 160(r1) # 16-byte Folded Spill
153; 64BIT-NEXT:    std r16, 328(r1) # 8-byte Folded Spill
154; 64BIT-NEXT:    stxv v24, 176(r1) # 16-byte Folded Spill
155; 64BIT-NEXT:    std r17, 336(r1) # 8-byte Folded Spill
156; 64BIT-NEXT:    std r18, 344(r1) # 8-byte Folded Spill
157; 64BIT-NEXT:    stxv v25, 192(r1) # 16-byte Folded Spill
158; 64BIT-NEXT:    std r19, 352(r1) # 8-byte Folded Spill
159; 64BIT-NEXT:    stxv v26, 208(r1) # 16-byte Folded Spill
160; 64BIT-NEXT:    std r20, 360(r1) # 8-byte Folded Spill
161; 64BIT-NEXT:    stxv v27, 224(r1) # 16-byte Folded Spill
162; 64BIT-NEXT:    std r21, 368(r1) # 8-byte Folded Spill
163; 64BIT-NEXT:    std r22, 376(r1) # 8-byte Folded Spill
164; 64BIT-NEXT:    stxv v28, 240(r1) # 16-byte Folded Spill
165; 64BIT-NEXT:    std r23, 384(r1) # 8-byte Folded Spill
166; 64BIT-NEXT:    stxv v29, 256(r1) # 16-byte Folded Spill
167; 64BIT-NEXT:    std r24, 392(r1) # 8-byte Folded Spill
168; 64BIT-NEXT:    stxv v30, 272(r1) # 16-byte Folded Spill
169; 64BIT-NEXT:    std r25, 400(r1) # 8-byte Folded Spill
170; 64BIT-NEXT:    std r26, 408(r1) # 8-byte Folded Spill
171; 64BIT-NEXT:    stxv v31, 288(r1) # 16-byte Folded Spill
172; 64BIT-NEXT:    std r27, 416(r1) # 8-byte Folded Spill
173; 64BIT-NEXT:    std r28, 424(r1) # 8-byte Folded Spill
174; 64BIT-NEXT:    std r29, 432(r1) # 8-byte Folded Spill
175; 64BIT-NEXT:    stfd f15, 456(r1) # 8-byte Folded Spill
176; 64BIT-NEXT:    stfd f16, 464(r1) # 8-byte Folded Spill
177; 64BIT-NEXT:    stfd f17, 472(r1) # 8-byte Folded Spill
178; 64BIT-NEXT:    stfd f18, 480(r1) # 8-byte Folded Spill
179; 64BIT-NEXT:    stfd f19, 488(r1) # 8-byte Folded Spill
180; 64BIT-NEXT:    stfd f20, 496(r1) # 8-byte Folded Spill
181; 64BIT-NEXT:    stfd f21, 504(r1) # 8-byte Folded Spill
182; 64BIT-NEXT:    stfd f22, 512(r1) # 8-byte Folded Spill
183; 64BIT-NEXT:    stfd f23, 520(r1) # 8-byte Folded Spill
184; 64BIT-NEXT:    stfd f24, 528(r1) # 8-byte Folded Spill
185; 64BIT-NEXT:    stfd f25, 536(r1) # 8-byte Folded Spill
186; 64BIT-NEXT:    stfd f26, 544(r1) # 8-byte Folded Spill
187; 64BIT-NEXT:    stfd f27, 552(r1) # 8-byte Folded Spill
188; 64BIT-NEXT:    stfd f28, 560(r1) # 8-byte Folded Spill
189; 64BIT-NEXT:    stfd f29, 568(r1) # 8-byte Folded Spill
190; 64BIT-NEXT:    stfd f30, 576(r1) # 8-byte Folded Spill
191; 64BIT-NEXT:    stfd f31, 584(r1) # 8-byte Folded Spill
192; 64BIT-NEXT:    #APP
193; 64BIT-NEXT:    nop
194; 64BIT-NEXT:    #NO_APP
195; 64BIT-NEXT:  L..tmp0:
196; 64BIT-NEXT:    bl ._Z4testi[PR]
197; 64BIT-NEXT:    nop
198; 64BIT-NEXT:  L..tmp1:
199; 64BIT-NEXT:  L..BB0_1: # %return
200; 64BIT-NEXT:    lxv v31, 288(r1) # 16-byte Folded Reload
201; 64BIT-NEXT:    lxv v30, 272(r1) # 16-byte Folded Reload
202; 64BIT-NEXT:    lxv v29, 256(r1) # 16-byte Folded Reload
203; 64BIT-NEXT:    lxv v28, 240(r1) # 16-byte Folded Reload
204; 64BIT-NEXT:    extsw r3, r30
205; 64BIT-NEXT:    lxv v27, 224(r1) # 16-byte Folded Reload
206; 64BIT-NEXT:    lxv v26, 208(r1) # 16-byte Folded Reload
207; 64BIT-NEXT:    lxv v25, 192(r1) # 16-byte Folded Reload
208; 64BIT-NEXT:    lxv v24, 176(r1) # 16-byte Folded Reload
209; 64BIT-NEXT:    lxv v23, 160(r1) # 16-byte Folded Reload
210; 64BIT-NEXT:    lxv v22, 144(r1) # 16-byte Folded Reload
211; 64BIT-NEXT:    lxv v21, 128(r1) # 16-byte Folded Reload
212; 64BIT-NEXT:    lxv v20, 112(r1) # 16-byte Folded Reload
213; 64BIT-NEXT:    lfd f31, 584(r1) # 8-byte Folded Reload
214; 64BIT-NEXT:    lfd f30, 576(r1) # 8-byte Folded Reload
215; 64BIT-NEXT:    lfd f29, 568(r1) # 8-byte Folded Reload
216; 64BIT-NEXT:    lfd f28, 560(r1) # 8-byte Folded Reload
217; 64BIT-NEXT:    ld r31, 448(r1) # 8-byte Folded Reload
218; 64BIT-NEXT:    ld r30, 440(r1) # 8-byte Folded Reload
219; 64BIT-NEXT:    ld r29, 432(r1) # 8-byte Folded Reload
220; 64BIT-NEXT:    lfd f27, 552(r1) # 8-byte Folded Reload
221; 64BIT-NEXT:    ld r28, 424(r1) # 8-byte Folded Reload
222; 64BIT-NEXT:    ld r27, 416(r1) # 8-byte Folded Reload
223; 64BIT-NEXT:    ld r26, 408(r1) # 8-byte Folded Reload
224; 64BIT-NEXT:    lfd f26, 544(r1) # 8-byte Folded Reload
225; 64BIT-NEXT:    ld r25, 400(r1) # 8-byte Folded Reload
226; 64BIT-NEXT:    ld r24, 392(r1) # 8-byte Folded Reload
227; 64BIT-NEXT:    ld r23, 384(r1) # 8-byte Folded Reload
228; 64BIT-NEXT:    lfd f25, 536(r1) # 8-byte Folded Reload
229; 64BIT-NEXT:    ld r22, 376(r1) # 8-byte Folded Reload
230; 64BIT-NEXT:    ld r21, 368(r1) # 8-byte Folded Reload
231; 64BIT-NEXT:    ld r20, 360(r1) # 8-byte Folded Reload
232; 64BIT-NEXT:    lfd f24, 528(r1) # 8-byte Folded Reload
233; 64BIT-NEXT:    ld r19, 352(r1) # 8-byte Folded Reload
234; 64BIT-NEXT:    ld r18, 344(r1) # 8-byte Folded Reload
235; 64BIT-NEXT:    ld r17, 336(r1) # 8-byte Folded Reload
236; 64BIT-NEXT:    lfd f23, 520(r1) # 8-byte Folded Reload
237; 64BIT-NEXT:    ld r16, 328(r1) # 8-byte Folded Reload
238; 64BIT-NEXT:    ld r15, 320(r1) # 8-byte Folded Reload
239; 64BIT-NEXT:    ld r14, 312(r1) # 8-byte Folded Reload
240; 64BIT-NEXT:    lfd f22, 512(r1) # 8-byte Folded Reload
241; 64BIT-NEXT:    lfd f21, 504(r1) # 8-byte Folded Reload
242; 64BIT-NEXT:    lfd f20, 496(r1) # 8-byte Folded Reload
243; 64BIT-NEXT:    lfd f19, 488(r1) # 8-byte Folded Reload
244; 64BIT-NEXT:    lfd f18, 480(r1) # 8-byte Folded Reload
245; 64BIT-NEXT:    lfd f17, 472(r1) # 8-byte Folded Reload
246; 64BIT-NEXT:    lfd f16, 464(r1) # 8-byte Folded Reload
247; 64BIT-NEXT:    lfd f15, 456(r1) # 8-byte Folded Reload
248; 64BIT-NEXT:    addi r1, r1, 592
249; 64BIT-NEXT:    ld r0, 16(r1)
250; 64BIT-NEXT:    mtlr r0
251; 64BIT-NEXT:    blr
252; 64BIT-NEXT:  L..BB0_2: # %lpad
253; 64BIT-NEXT:  L..tmp2:
254; 64BIT-NEXT:    bl .__cxa_begin_catch[PR]
255; 64BIT-NEXT:    nop
256; 64BIT-NEXT:    lwz r3, 0(r3)
257; 64BIT-NEXT:    add r30, r3, r31
258; 64BIT-NEXT:    bl .__cxa_end_catch[PR]
259; 64BIT-NEXT:    nop
260; 64BIT-NEXT:    b L..BB0_1
261entry:
262  tail call void asm sideeffect "nop", "~{r14},~{f15},~{v20}"()
263  %call = invoke signext i32 @_Z4testi(i32 signext %argc)
264          to label %return unwind label %lpad
265
266lpad:                                             ; preds = %entry
267  %0 = landingpad { ptr, i32 }
268          catch ptr @_ZTIi
269  %1 = extractvalue { ptr, i32 } %0, 1
270  %2 = tail call i32 @llvm.eh.typeid.for(ptr @_ZTIi) #3
271  %matches = icmp eq i32 %1, %2
272  br i1 %matches, label %catch, label %eh.resume
273
274catch:                                            ; preds = %lpad
275  %3 = extractvalue { ptr, i32 } %0, 0
276  %4 = tail call ptr @__cxa_begin_catch(ptr %3) #3
277  %5 = load i32, ptr %4, align 4
278  %add = add nsw i32 %5, %argc
279  tail call void @__cxa_end_catch()
280  br label %return
281
282return:                                           ; preds = %entry, %catch
283  %retval.0 = phi i32 [ %add, %catch ], [ 0, %entry ]
284  ret i32 %retval.0
285
286eh.resume:                                        ; preds = %lpad
287  resume { ptr, i32 } %0
288}
289
290declare signext i32 @_Z4testi(i32 signext) local_unnamed_addr
291
292declare i32 @__gxx_personality_v0(...)
293
294; Function Attrs: nounwind readnone
295declare i32 @llvm.eh.typeid.for(ptr)
296
297declare ptr @__cxa_begin_catch(ptr) local_unnamed_addr
298
299declare void @__cxa_end_catch() local_unnamed_addr
300
301attributes #0 = { uwtable }
302