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