[TableGen] Split DAGISelMatcherOpt FactorNodes into 2 functions. NFC (#125330)
[llvm-project.git] / llvm / test / CodeGen / PowerPC / noredzone.ll
blobd7309816dc59e27f777c829f62b53b8fa7abddad
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-ibm-aix < %s | FileCheck -check-prefix=AIX64 %s
3 ; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc-ibm-aix < %s | FileCheck -check-prefix=AIX32 %s
4 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck -check-prefix=LE64 %s
6 define signext i32 @leaf1_noredzone(i32 signext %a, i32 signext %b) #0 {
7 ; AIX64-LABEL: leaf1_noredzone:
8 ; AIX64:       # %bb.0: # %entry
9 ; AIX64-NEXT:    stdu 1, -64(1)
10 ; AIX64-NEXT:    stw 3, 60(1)
11 ; AIX64-NEXT:    add 3, 3, 4
12 ; AIX64-NEXT:    extsw 3, 3
13 ; AIX64-NEXT:    stw 4, 56(1)
14 ; AIX64-NEXT:    addi 1, 1, 64
15 ; AIX64-NEXT:    blr
17 ; AIX32-LABEL: leaf1_noredzone:
18 ; AIX32:       # %bb.0: # %entry
19 ; AIX32-NEXT:    stwu 1, -32(1)
20 ; AIX32-NEXT:    stw 3, 28(1)
21 ; AIX32-NEXT:    add 3, 3, 4
22 ; AIX32-NEXT:    stw 4, 24(1)
23 ; AIX32-NEXT:    addi 1, 1, 32
24 ; AIX32-NEXT:    blr
26 ; LE64-LABEL: leaf1_noredzone:
27 ; LE64:       # %bb.0: # %entry
28 ; LE64-NEXT:    stdu 1, -48(1)
29 ; LE64-NEXT:    stw 3, 44(1)
30 ; LE64-NEXT:    add 3, 3, 4
31 ; LE64-NEXT:    stw 4, 40(1)
32 ; LE64-NEXT:    extsw 3, 3
33 ; LE64-NEXT:    addi 1, 1, 48
34 ; LE64-NEXT:    blr
35 entry:
36   %a.addr = alloca i32, align 4
37   %b.addr = alloca i32, align 4
38   store i32 %a, ptr %a.addr, align 4
39   store i32 %b, ptr %b.addr, align 4
40   %0 = load i32, ptr %a.addr, align 4
41   %1 = load i32, ptr %b.addr, align 4
42   %add = add nsw i32 %0, %1
43   ret i32 %add
46 define void @nonleaf1_noredzone(i32 signext %a, i32 signext %b) #0 {
47 ; AIX64-LABEL: nonleaf1_noredzone:
48 ; AIX64:       # %bb.0: # %entry
49 ; AIX64-NEXT:    mflr 0
50 ; AIX64-NEXT:    stdu 1, -128(1)
51 ; AIX64-NEXT:    std 0, 144(1)
52 ; AIX64-NEXT:    stw 3, 124(1)
53 ; AIX64-NEXT:    add 3, 3, 4
54 ; AIX64-NEXT:    extsw 3, 3
55 ; AIX64-NEXT:    stw 4, 120(1)
56 ; AIX64-NEXT:    bl .leaf2[PR]
57 ; AIX64-NEXT:    nop
58 ; AIX64-NEXT:    lwz 3, 124(1)
59 ; AIX64-NEXT:    lwz 4, 120(1)
60 ; AIX64-NEXT:    sub 3, 3, 4
61 ; AIX64-NEXT:    extsw 3, 3
62 ; AIX64-NEXT:    bl .leaf2[PR]
63 ; AIX64-NEXT:    nop
64 ; AIX64-NEXT:    addi 1, 1, 128
65 ; AIX64-NEXT:    ld 0, 16(1)
66 ; AIX64-NEXT:    mtlr 0
67 ; AIX64-NEXT:    blr
69 ; AIX32-LABEL: nonleaf1_noredzone:
70 ; AIX32:       # %bb.0: # %entry
71 ; AIX32-NEXT:    mflr 0
72 ; AIX32-NEXT:    stwu 1, -64(1)
73 ; AIX32-NEXT:    stw 0, 72(1)
74 ; AIX32-NEXT:    stw 3, 60(1)
75 ; AIX32-NEXT:    add 3, 3, 4
76 ; AIX32-NEXT:    stw 4, 56(1)
77 ; AIX32-NEXT:    bl .leaf2[PR]
78 ; AIX32-NEXT:    nop
79 ; AIX32-NEXT:    lwz 3, 60(1)
80 ; AIX32-NEXT:    lwz 4, 56(1)
81 ; AIX32-NEXT:    sub 3, 3, 4
82 ; AIX32-NEXT:    bl .leaf2[PR]
83 ; AIX32-NEXT:    nop
84 ; AIX32-NEXT:    addi 1, 1, 64
85 ; AIX32-NEXT:    lwz 0, 8(1)
86 ; AIX32-NEXT:    mtlr 0
87 ; AIX32-NEXT:    blr
89 ; LE64-LABEL: nonleaf1_noredzone:
90 ; LE64:       # %bb.0: # %entry
91 ; LE64-NEXT:    mflr 0
92 ; LE64-NEXT:    stdu 1, -48(1)
93 ; LE64-NEXT:    std 0, 64(1)
94 ; LE64-NEXT:    stw 3, 44(1)
95 ; LE64-NEXT:    add 3, 3, 4
96 ; LE64-NEXT:    extsw 3, 3
97 ; LE64-NEXT:    stw 4, 40(1)
98 ; LE64-NEXT:    bl leaf2
99 ; LE64-NEXT:    nop
100 ; LE64-NEXT:    lwz 3, 44(1)
101 ; LE64-NEXT:    lwz 4, 40(1)
102 ; LE64-NEXT:    sub 3, 3, 4
103 ; LE64-NEXT:    extsw 3, 3
104 ; LE64-NEXT:    bl leaf2
105 ; LE64-NEXT:    nop
106 ; LE64-NEXT:    addi 1, 1, 48
107 ; LE64-NEXT:    ld 0, 16(1)
108 ; LE64-NEXT:    mtlr 0
109 ; LE64-NEXT:    blr
110 entry:
111   %a.addr = alloca i32, align 4
112   %b.addr = alloca i32, align 4
113   store i32 %a, ptr %a.addr, align 4
114   store i32 %b, ptr %b.addr, align 4
115   %0 = load i32, ptr %a.addr, align 4
116   %1 = load i32, ptr %b.addr, align 4
117   %add = add nsw i32 %0, %1
118   call void @leaf2(i32 signext %add)
119   %2 = load i32, ptr %a.addr, align 4
120   %3 = load i32, ptr %b.addr, align 4
121   %sub = sub nsw i32 %2, %3
122   call void @leaf2(i32 signext %sub)
123   ret void
126 declare void @leaf2(i32 signext)
128 define signext i32 @leaf3_noredzone(i32 signext %a, i32 signext %b) #0 {
129 ; AIX64-LABEL: leaf3_noredzone:
130 ; AIX64:       # %bb.0: # %entry
131 ; AIX64-NEXT:    stdu 1, -48(1)
132 ; AIX64-NEXT:    ld 6, 0(1)
133 ; AIX64-NEXT:    mr 5, 3
134 ; AIX64-NEXT:    add 3, 5, 4
135 ; AIX64-NEXT:    extsw 3, 3
136 ; AIX64-NEXT:    stw 5, 48(6)
137 ; AIX64-NEXT:    stw 4, 52(6)
138 ; AIX64-NEXT:    addi 1, 1, 48
139 ; AIX64-NEXT:    blr
141 ; AIX32-LABEL: leaf3_noredzone:
142 ; AIX32:       # %bb.0: # %entry
143 ; AIX32-NEXT:    stwu 1, -32(1)
144 ; AIX32-NEXT:    lwz 6, 0(1)
145 ; AIX32-NEXT:    mr 5, 3
146 ; AIX32-NEXT:    add 3, 3, 4
147 ; AIX32-NEXT:    stw 5, 24(6)
148 ; AIX32-NEXT:    stw 4, 28(6)
149 ; AIX32-NEXT:    addi 1, 1, 32
150 ; AIX32-NEXT:    blr
152 ; LE64-LABEL: leaf3_noredzone:
153 ; LE64:       # %bb.0: # %entry
154 ; LE64-NEXT:    stdu 1, -32(1)
155 ; LE64-NEXT:    ld 5, 0(1)
156 ; LE64-NEXT:    stw 3, 48(5)
157 ; LE64-NEXT:    add 3, 3, 4
158 ; LE64-NEXT:    stw 4, 52(5)
159 ; LE64-NEXT:    extsw 3, 3
160 ; LE64-NEXT:    addi 1, 1, 32
161 ; LE64-NEXT:    blr
162 entry:
163   %f.addr = call ptr @llvm.frameaddress(i32 1)
164   %a.addr = getelementptr ptr, ptr %f.addr, i32 6
165   %b.addr = getelementptr i32, ptr %a.addr, i32 1
166   store i32 %a, ptr %a.addr, align 4
167   store i32 %b, ptr %b.addr, align 4
168   %0 = load i32, ptr %a.addr, align 4
169   %1 = load i32, ptr %b.addr, align 4
170   %add = add nsw i32 %0, %1
171   ret i32 %add
174 define void @nonleaf2_noredzone(i32 signext %a, i32 signext %b) #0 {
175 ; AIX64-LABEL: nonleaf2_noredzone:
176 ; AIX64:       # %bb.0: # %entry
177 ; AIX64-NEXT:    mflr 0
178 ; AIX64-NEXT:    stdu 1, -128(1)
179 ; AIX64-NEXT:    std 0, 144(1)
180 ; AIX64-NEXT:    std 31, 120(1) # 8-byte Folded Spill
181 ; AIX64-NEXT:    add 5, 3, 4
182 ; AIX64-NEXT:    ld 31, 0(1)
183 ; AIX64-NEXT:    extsw 5, 5
184 ; AIX64-NEXT:    stw 3, 48(31)
185 ; AIX64-NEXT:    mr 3, 5
186 ; AIX64-NEXT:    stw 4, 52(31)
187 ; AIX64-NEXT:    bl .leaf2[PR]
188 ; AIX64-NEXT:    nop
189 ; AIX64-NEXT:    lwz 3, 48(31)
190 ; AIX64-NEXT:    lwz 4, 52(31)
191 ; AIX64-NEXT:    sub 3, 3, 4
192 ; AIX64-NEXT:    extsw 3, 3
193 ; AIX64-NEXT:    bl .leaf2[PR]
194 ; AIX64-NEXT:    nop
195 ; AIX64-NEXT:    ld 31, 120(1) # 8-byte Folded Reload
196 ; AIX64-NEXT:    addi 1, 1, 128
197 ; AIX64-NEXT:    ld 0, 16(1)
198 ; AIX64-NEXT:    mtlr 0
199 ; AIX64-NEXT:    blr
201 ; AIX32-LABEL: nonleaf2_noredzone:
202 ; AIX32:       # %bb.0: # %entry
203 ; AIX32-NEXT:    mflr 0
204 ; AIX32-NEXT:    stwu 1, -64(1)
205 ; AIX32-NEXT:    stw 0, 72(1)
206 ; AIX32-NEXT:    add 5, 3, 4
207 ; AIX32-NEXT:    stw 31, 60(1) # 4-byte Folded Spill
208 ; AIX32-NEXT:    lwz 31, 0(1)
209 ; AIX32-NEXT:    stw 3, 24(31)
210 ; AIX32-NEXT:    mr 3, 5
211 ; AIX32-NEXT:    stw 4, 28(31)
212 ; AIX32-NEXT:    bl .leaf2[PR]
213 ; AIX32-NEXT:    nop
214 ; AIX32-NEXT:    lwz 3, 24(31)
215 ; AIX32-NEXT:    lwz 4, 28(31)
216 ; AIX32-NEXT:    sub 3, 3, 4
217 ; AIX32-NEXT:    bl .leaf2[PR]
218 ; AIX32-NEXT:    nop
219 ; AIX32-NEXT:    lwz 31, 60(1) # 4-byte Folded Reload
220 ; AIX32-NEXT:    addi 1, 1, 64
221 ; AIX32-NEXT:    lwz 0, 8(1)
222 ; AIX32-NEXT:    mtlr 0
223 ; AIX32-NEXT:    blr
225 ; LE64-LABEL: nonleaf2_noredzone:
226 ; LE64:       # %bb.0: # %entry
227 ; LE64-NEXT:    mflr 0
228 ; LE64-NEXT:    std 30, -16(1) # 8-byte Folded Spill
229 ; LE64-NEXT:    stdu 1, -48(1)
230 ; LE64-NEXT:    std 0, 64(1)
231 ; LE64-NEXT:    ld 30, 0(1)
232 ; LE64-NEXT:    stw 3, 48(30)
233 ; LE64-NEXT:    add 3, 3, 4
234 ; LE64-NEXT:    stw 4, 52(30)
235 ; LE64-NEXT:    extsw 3, 3
236 ; LE64-NEXT:    bl leaf2
237 ; LE64-NEXT:    nop
238 ; LE64-NEXT:    lwz 3, 48(30)
239 ; LE64-NEXT:    lwz 4, 52(30)
240 ; LE64-NEXT:    sub 3, 3, 4
241 ; LE64-NEXT:    extsw 3, 3
242 ; LE64-NEXT:    bl leaf2
243 ; LE64-NEXT:    nop
244 ; LE64-NEXT:    addi 1, 1, 48
245 ; LE64-NEXT:    ld 0, 16(1)
246 ; LE64-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
247 ; LE64-NEXT:    mtlr 0
248 ; LE64-NEXT:    blr
249 entry:
250   %f.addr = call ptr @llvm.frameaddress(i32 1)
251   %a.addr = getelementptr ptr, ptr %f.addr, i32 6
252   %b.addr = getelementptr i32, ptr %a.addr, i32 1
253   store i32 %a, ptr %a.addr, align 4
254   store i32 %b, ptr %b.addr, align 4
255   %0 = load i32, ptr %a.addr, align 4
256   %1 = load i32, ptr %b.addr, align 4
257   %add = add nsw i32 %0, %1
258   call void @leaf2(i32 signext %add)
259   %2 = load i32, ptr %a.addr, align 4
260   %3 = load i32, ptr %b.addr, align 4
261   %sub = sub nsw i32 %2, %3
262   call void @leaf2(i32 signext %sub)
263   ret void
266 define signext i32 @leaf1_redzone(i32 signext %a, i32 signext %b) #1 {
267 ; AIX64-LABEL: leaf1_redzone:
268 ; AIX64:       # %bb.0: # %entry
269 ; AIX64-NEXT:    stw 3, -4(1)
270 ; AIX64-NEXT:    add 3, 3, 4
271 ; AIX64-NEXT:    extsw 3, 3
272 ; AIX64-NEXT:    stw 4, -8(1)
273 ; AIX64-NEXT:    blr
275 ; AIX32-LABEL: leaf1_redzone:
276 ; AIX32:       # %bb.0: # %entry
277 ; AIX32-NEXT:    stw 3, -4(1)
278 ; AIX32-NEXT:    add 3, 3, 4
279 ; AIX32-NEXT:    stw 4, -8(1)
280 ; AIX32-NEXT:    blr
282 ; LE64-LABEL: leaf1_redzone:
283 ; LE64:       # %bb.0: # %entry
284 ; LE64-NEXT:    stw 3, -4(1)
285 ; LE64-NEXT:    add 3, 3, 4
286 ; LE64-NEXT:    stw 4, -8(1)
287 ; LE64-NEXT:    extsw 3, 3
288 ; LE64-NEXT:    blr
289 entry:
290   %a.addr = alloca i32, align 4
291   %b.addr = alloca i32, align 4
292   store i32 %a, ptr %a.addr, align 4
293   store i32 %b, ptr %b.addr, align 4
294   %0 = load i32, ptr %a.addr, align 4
295   %1 = load i32, ptr %b.addr, align 4
296   %add = add nsw i32 %0, %1
297   ret i32 %add
300 define void @nonleaf1_redzone(i32 signext %a, i32 signext %b) #1 {
301 ; AIX64-LABEL: nonleaf1_redzone:
302 ; AIX64:       # %bb.0: # %entry
303 ; AIX64-NEXT:    mflr 0
304 ; AIX64-NEXT:    stdu 1, -128(1)
305 ; AIX64-NEXT:    std 0, 144(1)
306 ; AIX64-NEXT:    stw 3, 124(1)
307 ; AIX64-NEXT:    add 3, 3, 4
308 ; AIX64-NEXT:    extsw 3, 3
309 ; AIX64-NEXT:    stw 4, 120(1)
310 ; AIX64-NEXT:    bl .leaf2[PR]
311 ; AIX64-NEXT:    nop
312 ; AIX64-NEXT:    lwz 3, 124(1)
313 ; AIX64-NEXT:    lwz 4, 120(1)
314 ; AIX64-NEXT:    sub 3, 3, 4
315 ; AIX64-NEXT:    extsw 3, 3
316 ; AIX64-NEXT:    bl .leaf2[PR]
317 ; AIX64-NEXT:    nop
318 ; AIX64-NEXT:    addi 1, 1, 128
319 ; AIX64-NEXT:    ld 0, 16(1)
320 ; AIX64-NEXT:    mtlr 0
321 ; AIX64-NEXT:    blr
323 ; AIX32-LABEL: nonleaf1_redzone:
324 ; AIX32:       # %bb.0: # %entry
325 ; AIX32-NEXT:    mflr 0
326 ; AIX32-NEXT:    stwu 1, -64(1)
327 ; AIX32-NEXT:    stw 0, 72(1)
328 ; AIX32-NEXT:    stw 3, 60(1)
329 ; AIX32-NEXT:    add 3, 3, 4
330 ; AIX32-NEXT:    stw 4, 56(1)
331 ; AIX32-NEXT:    bl .leaf2[PR]
332 ; AIX32-NEXT:    nop
333 ; AIX32-NEXT:    lwz 3, 60(1)
334 ; AIX32-NEXT:    lwz 4, 56(1)
335 ; AIX32-NEXT:    sub 3, 3, 4
336 ; AIX32-NEXT:    bl .leaf2[PR]
337 ; AIX32-NEXT:    nop
338 ; AIX32-NEXT:    addi 1, 1, 64
339 ; AIX32-NEXT:    lwz 0, 8(1)
340 ; AIX32-NEXT:    mtlr 0
341 ; AIX32-NEXT:    blr
343 ; LE64-LABEL: nonleaf1_redzone:
344 ; LE64:       # %bb.0: # %entry
345 ; LE64-NEXT:    mflr 0
346 ; LE64-NEXT:    stdu 1, -48(1)
347 ; LE64-NEXT:    std 0, 64(1)
348 ; LE64-NEXT:    stw 3, 44(1)
349 ; LE64-NEXT:    add 3, 3, 4
350 ; LE64-NEXT:    extsw 3, 3
351 ; LE64-NEXT:    stw 4, 40(1)
352 ; LE64-NEXT:    bl leaf2
353 ; LE64-NEXT:    nop
354 ; LE64-NEXT:    lwz 3, 44(1)
355 ; LE64-NEXT:    lwz 4, 40(1)
356 ; LE64-NEXT:    sub 3, 3, 4
357 ; LE64-NEXT:    extsw 3, 3
358 ; LE64-NEXT:    bl leaf2
359 ; LE64-NEXT:    nop
360 ; LE64-NEXT:    addi 1, 1, 48
361 ; LE64-NEXT:    ld 0, 16(1)
362 ; LE64-NEXT:    mtlr 0
363 ; LE64-NEXT:    blr
364 entry:
365   %a.addr = alloca i32, align 4
366   %b.addr = alloca i32, align 4
367   store i32 %a, ptr %a.addr, align 4
368   store i32 %b, ptr %b.addr, align 4
369   %0 = load i32, ptr %a.addr, align 4
370   %1 = load i32, ptr %b.addr, align 4
371   %add = add nsw i32 %0, %1
372   call void @leaf2(i32 signext %add)
373   %2 = load i32, ptr %a.addr, align 4
374   %3 = load i32, ptr %b.addr, align 4
375   %sub = sub nsw i32 %2, %3
376   call void @leaf2(i32 signext %sub)
377   ret void
380 define signext i32 @leaf3_redzone(i32 signext %a, i32 signext %b) #1 {
381 ; AIX64-LABEL: leaf3_redzone:
382 ; AIX64:       # %bb.0: # %entry
383 ; AIX64-NEXT:    stdu 1, -48(1)
384 ; AIX64-NEXT:    ld 6, 0(1)
385 ; AIX64-NEXT:    mr 5, 3
386 ; AIX64-NEXT:    add 3, 5, 4
387 ; AIX64-NEXT:    extsw 3, 3
388 ; AIX64-NEXT:    stw 5, 48(6)
389 ; AIX64-NEXT:    stw 4, 52(6)
390 ; AIX64-NEXT:    addi 1, 1, 48
391 ; AIX64-NEXT:    blr
393 ; AIX32-LABEL: leaf3_redzone:
394 ; AIX32:       # %bb.0: # %entry
395 ; AIX32-NEXT:    stwu 1, -32(1)
396 ; AIX32-NEXT:    lwz 6, 0(1)
397 ; AIX32-NEXT:    mr 5, 3
398 ; AIX32-NEXT:    add 3, 3, 4
399 ; AIX32-NEXT:    stw 5, 24(6)
400 ; AIX32-NEXT:    stw 4, 28(6)
401 ; AIX32-NEXT:    addi 1, 1, 32
402 ; AIX32-NEXT:    blr
404 ; LE64-LABEL: leaf3_redzone:
405 ; LE64:       # %bb.0: # %entry
406 ; LE64-NEXT:    stdu 1, -32(1)
407 ; LE64-NEXT:    ld 5, 0(1)
408 ; LE64-NEXT:    stw 3, 48(5)
409 ; LE64-NEXT:    add 3, 3, 4
410 ; LE64-NEXT:    stw 4, 52(5)
411 ; LE64-NEXT:    extsw 3, 3
412 ; LE64-NEXT:    addi 1, 1, 32
413 ; LE64-NEXT:    blr
414 entry:
415   %f.addr = call ptr @llvm.frameaddress(i32 1)
416   %a.addr = getelementptr ptr, ptr %f.addr, i32 6
417   %b.addr = getelementptr i32, ptr %a.addr, i32 1
418   store i32 %a, ptr %a.addr, align 4
419   store i32 %b, ptr %b.addr, align 4
420   %0 = load i32, ptr %a.addr, align 4
421   %1 = load i32, ptr %b.addr, align 4
422   %add = add nsw i32 %0, %1
423   ret i32 %add
426 define void @nonleaf2_redzone(i32 signext %a, i32 signext %b) #1 {
427 ; AIX64-LABEL: nonleaf2_redzone:
428 ; AIX64:       # %bb.0: # %entry
429 ; AIX64-NEXT:    mflr 0
430 ; AIX64-NEXT:    stdu 1, -128(1)
431 ; AIX64-NEXT:    std 0, 144(1)
432 ; AIX64-NEXT:    std 31, 120(1) # 8-byte Folded Spill
433 ; AIX64-NEXT:    add 5, 3, 4
434 ; AIX64-NEXT:    ld 31, 0(1)
435 ; AIX64-NEXT:    extsw 5, 5
436 ; AIX64-NEXT:    stw 3, 48(31)
437 ; AIX64-NEXT:    mr 3, 5
438 ; AIX64-NEXT:    stw 4, 52(31)
439 ; AIX64-NEXT:    bl .leaf2[PR]
440 ; AIX64-NEXT:    nop
441 ; AIX64-NEXT:    lwz 3, 48(31)
442 ; AIX64-NEXT:    lwz 4, 52(31)
443 ; AIX64-NEXT:    sub 3, 3, 4
444 ; AIX64-NEXT:    extsw 3, 3
445 ; AIX64-NEXT:    bl .leaf2[PR]
446 ; AIX64-NEXT:    nop
447 ; AIX64-NEXT:    ld 31, 120(1) # 8-byte Folded Reload
448 ; AIX64-NEXT:    addi 1, 1, 128
449 ; AIX64-NEXT:    ld 0, 16(1)
450 ; AIX64-NEXT:    mtlr 0
451 ; AIX64-NEXT:    blr
453 ; AIX32-LABEL: nonleaf2_redzone:
454 ; AIX32:       # %bb.0: # %entry
455 ; AIX32-NEXT:    mflr 0
456 ; AIX32-NEXT:    stwu 1, -64(1)
457 ; AIX32-NEXT:    stw 0, 72(1)
458 ; AIX32-NEXT:    add 5, 3, 4
459 ; AIX32-NEXT:    stw 31, 60(1) # 4-byte Folded Spill
460 ; AIX32-NEXT:    lwz 31, 0(1)
461 ; AIX32-NEXT:    stw 3, 24(31)
462 ; AIX32-NEXT:    mr 3, 5
463 ; AIX32-NEXT:    stw 4, 28(31)
464 ; AIX32-NEXT:    bl .leaf2[PR]
465 ; AIX32-NEXT:    nop
466 ; AIX32-NEXT:    lwz 3, 24(31)
467 ; AIX32-NEXT:    lwz 4, 28(31)
468 ; AIX32-NEXT:    sub 3, 3, 4
469 ; AIX32-NEXT:    bl .leaf2[PR]
470 ; AIX32-NEXT:    nop
471 ; AIX32-NEXT:    lwz 31, 60(1) # 4-byte Folded Reload
472 ; AIX32-NEXT:    addi 1, 1, 64
473 ; AIX32-NEXT:    lwz 0, 8(1)
474 ; AIX32-NEXT:    mtlr 0
475 ; AIX32-NEXT:    blr
477 ; LE64-LABEL: nonleaf2_redzone:
478 ; LE64:       # %bb.0: # %entry
479 ; LE64-NEXT:    mflr 0
480 ; LE64-NEXT:    std 30, -16(1) # 8-byte Folded Spill
481 ; LE64-NEXT:    stdu 1, -48(1)
482 ; LE64-NEXT:    std 0, 64(1)
483 ; LE64-NEXT:    ld 30, 0(1)
484 ; LE64-NEXT:    stw 3, 48(30)
485 ; LE64-NEXT:    add 3, 3, 4
486 ; LE64-NEXT:    stw 4, 52(30)
487 ; LE64-NEXT:    extsw 3, 3
488 ; LE64-NEXT:    bl leaf2
489 ; LE64-NEXT:    nop
490 ; LE64-NEXT:    lwz 3, 48(30)
491 ; LE64-NEXT:    lwz 4, 52(30)
492 ; LE64-NEXT:    sub 3, 3, 4
493 ; LE64-NEXT:    extsw 3, 3
494 ; LE64-NEXT:    bl leaf2
495 ; LE64-NEXT:    nop
496 ; LE64-NEXT:    addi 1, 1, 48
497 ; LE64-NEXT:    ld 0, 16(1)
498 ; LE64-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
499 ; LE64-NEXT:    mtlr 0
500 ; LE64-NEXT:    blr
501 entry:
502   %f.addr = call ptr @llvm.frameaddress(i32 1)
503   %a.addr = getelementptr ptr, ptr %f.addr, i32 6
504   %b.addr = getelementptr i32, ptr %a.addr, i32 1
505   store i32 %a, ptr %a.addr, align 4
506   store i32 %b, ptr %b.addr, align 4
507   %0 = load i32, ptr %a.addr, align 4
508   %1 = load i32, ptr %b.addr, align 4
509   %add = add nsw i32 %0, %1
510   call void @leaf2(i32 signext %add)
511   %2 = load i32, ptr %a.addr, align 4
512   %3 = load i32, ptr %b.addr, align 4
513   %sub = sub nsw i32 %2, %3
514   call void @leaf2(i32 signext %sub)
515   ret void
518 attributes #0 = { noredzone nounwind noinline }
519 attributes #1 = { nounwind noinline }