[Xtensa] Implement Windowed Register Option. (#124656)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / storepairsuppress.ll
blob0571bbc278a6f4e72add4725a6542d072c7050a5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64 -mcpu=apple-m1 -mattr=+store-pair-suppress -o - %s | FileCheck --check-prefix=SUPPRESS %s
3 ; RUN: llc -mtriple=aarch64 -mcpu=apple-m1 -mattr=-store-pair-suppress -o - %s | FileCheck --check-prefix=NOSUPPRESS %s
5 define void @vector_units_critial(ptr %dst, <8 x i32> %v0) {
6 ; SUPPRESS-LABEL: vector_units_critial:
7 ; SUPPRESS:       // %bb.0: // %entry
8 ; SUPPRESS-NEXT:    uzp1 v0.8h, v0.8h, v1.8h
9 ; SUPPRESS-NEXT:    xtn v0.8b, v0.8h
10 ; SUPPRESS-NEXT:    mul v1.8b, v0.8b, v0.8b
11 ; SUPPRESS-NEXT:    str d1, [x0, #8]
12 ; SUPPRESS-NEXT:    str d0, [x0]
13 ; SUPPRESS-NEXT:    ret
15 ; NOSUPPRESS-LABEL: vector_units_critial:
16 ; NOSUPPRESS:       // %bb.0: // %entry
17 ; NOSUPPRESS-NEXT:    uzp1 v0.8h, v0.8h, v1.8h
18 ; NOSUPPRESS-NEXT:    xtn v0.8b, v0.8h
19 ; NOSUPPRESS-NEXT:    mul v1.8b, v0.8b, v0.8b
20 ; NOSUPPRESS-NEXT:    stp d0, d1, [x0]
21 ; NOSUPPRESS-NEXT:    ret
22 entry:
23   %add.ptr.1 = getelementptr i8, ptr %dst, i64 8
24   %t = trunc <8 x i32> %v0 to <8 x i8>
25   %mul = mul <8 x i8> %t, %t
26   store <8 x i8> %mul, ptr %add.ptr.1, align 1
27   store <8 x i8> %t, ptr %dst, align 1
28   ret void
31 %struct.widget = type { float, float }
33 define void @load_store_units_critical(ptr %arg, ptr noundef %arg1, i64 noundef %arg2, i64 noundef %arg3) {
34 ; SUPPRESS-LABEL: load_store_units_critical:
35 ; SUPPRESS:       // %bb.0: // %bb
36 ; SUPPRESS-NEXT:    ldr x8, [x0, #8]
37 ; SUPPRESS-NEXT:    ldp s0, s1, [x8]
38 ; SUPPRESS-NEXT:    add x8, x1, x2, lsl #3
39 ; SUPPRESS-NEXT:    ldp s2, s3, [x8]
40 ; SUPPRESS-NEXT:    ldp s4, s5, [x8, #8]
41 ; SUPPRESS-NEXT:    fmul s6, s5, s1
42 ; SUPPRESS-NEXT:    fmul s1, s4, s1
43 ; SUPPRESS-NEXT:    fnmsub s4, s4, s0, s6
44 ; SUPPRESS-NEXT:    fmadd s0, s5, s0, s1
45 ; SUPPRESS-NEXT:    fadd s1, s4, s2
46 ; SUPPRESS-NEXT:    fadd s5, s0, s3
47 ; SUPPRESS-NEXT:    stp s1, s5, [x8]
48 ; SUPPRESS-NEXT:    fsub s2, s2, s4
49 ; SUPPRESS-NEXT:    fsub s0, s3, s0
50 ; SUPPRESS-NEXT:    stp s2, s0, [x8, #8]
51 ; SUPPRESS-NEXT:    ldr x9, [x0, #8]
52 ; SUPPRESS-NEXT:    ldp s3, s4, [x9]
53 ; SUPPRESS-NEXT:    ldp s6, s7, [x8, #16]
54 ; SUPPRESS-NEXT:    ldp s16, s17, [x8, #24]
55 ; SUPPRESS-NEXT:    fmul s18, s17, s4
56 ; SUPPRESS-NEXT:    fmul s4, s16, s4
57 ; SUPPRESS-NEXT:    fnmsub s16, s16, s3, s18
58 ; SUPPRESS-NEXT:    fmadd s3, s17, s3, s4
59 ; SUPPRESS-NEXT:    fadd s4, s16, s6
60 ; SUPPRESS-NEXT:    fadd s17, s3, s7
61 ; SUPPRESS-NEXT:    stp s4, s17, [x8, #16]
62 ; SUPPRESS-NEXT:    fsub s6, s6, s16
63 ; SUPPRESS-NEXT:    fsub s3, s7, s3
64 ; SUPPRESS-NEXT:    stp s6, s3, [x8, #24]
65 ; SUPPRESS-NEXT:    ldr x9, [x0, #8]
66 ; SUPPRESS-NEXT:    ldp s7, s16, [x9]
67 ; SUPPRESS-NEXT:    fmul s18, s16, s17
68 ; SUPPRESS-NEXT:    fmul s17, s7, s17
69 ; SUPPRESS-NEXT:    fnmsub s7, s7, s4, s18
70 ; SUPPRESS-NEXT:    fmadd s4, s16, s4, s17
71 ; SUPPRESS-NEXT:    fadd s16, s7, s1
72 ; SUPPRESS-NEXT:    fadd s17, s4, s5
73 ; SUPPRESS-NEXT:    stp s16, s17, [x8]
74 ; SUPPRESS-NEXT:    fsub s1, s1, s7
75 ; SUPPRESS-NEXT:    fsub s4, s5, s4
76 ; SUPPRESS-NEXT:    stp s1, s4, [x8, #16]
77 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
78 ; SUPPRESS-NEXT:    lsl x9, x3, #4
79 ; SUPPRESS-NEXT:    add x10, x10, x9
80 ; SUPPRESS-NEXT:    ldp s1, s4, [x10]
81 ; SUPPRESS-NEXT:    fmul s5, s4, s3
82 ; SUPPRESS-NEXT:    fmul s3, s1, s3
83 ; SUPPRESS-NEXT:    fnmsub s1, s1, s6, s5
84 ; SUPPRESS-NEXT:    fmadd s3, s4, s6, s3
85 ; SUPPRESS-NEXT:    fadd s4, s1, s2
86 ; SUPPRESS-NEXT:    fadd s5, s3, s0
87 ; SUPPRESS-NEXT:    stp s4, s5, [x8, #8]
88 ; SUPPRESS-NEXT:    fsub s1, s2, s1
89 ; SUPPRESS-NEXT:    fsub s0, s0, s3
90 ; SUPPRESS-NEXT:    stp s1, s0, [x8, #24]
91 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
92 ; SUPPRESS-NEXT:    ldp s0, s1, [x10]
93 ; SUPPRESS-NEXT:    ldp s2, s3, [x8, #32]
94 ; SUPPRESS-NEXT:    ldp s4, s5, [x8, #40]
95 ; SUPPRESS-NEXT:    fmul s6, s5, s1
96 ; SUPPRESS-NEXT:    fmul s1, s4, s1
97 ; SUPPRESS-NEXT:    fnmsub s4, s4, s0, s6
98 ; SUPPRESS-NEXT:    fmadd s0, s5, s0, s1
99 ; SUPPRESS-NEXT:    fadd s1, s4, s2
100 ; SUPPRESS-NEXT:    fadd s5, s0, s3
101 ; SUPPRESS-NEXT:    stp s1, s5, [x8, #32]
102 ; SUPPRESS-NEXT:    fsub s2, s2, s4
103 ; SUPPRESS-NEXT:    fsub s3, s3, s0
104 ; SUPPRESS-NEXT:    stp s2, s3, [x8, #40]
105 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
106 ; SUPPRESS-NEXT:    ldp s0, s4, [x10]
107 ; SUPPRESS-NEXT:    ldp s6, s7, [x8, #48]
108 ; SUPPRESS-NEXT:    ldp s16, s17, [x8, #56]
109 ; SUPPRESS-NEXT:    fmul s18, s17, s4
110 ; SUPPRESS-NEXT:    fmul s4, s16, s4
111 ; SUPPRESS-NEXT:    fnmsub s16, s16, s0, s18
112 ; SUPPRESS-NEXT:    fmadd s0, s17, s0, s4
113 ; SUPPRESS-NEXT:    fadd s4, s16, s6
114 ; SUPPRESS-NEXT:    fadd s17, s0, s7
115 ; SUPPRESS-NEXT:    stp s4, s17, [x8, #48]
116 ; SUPPRESS-NEXT:    fsub s6, s6, s16
117 ; SUPPRESS-NEXT:    fsub s0, s7, s0
118 ; SUPPRESS-NEXT:    stp s6, s0, [x8, #56]
119 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
120 ; SUPPRESS-NEXT:    ldp s7, s16, [x10]
121 ; SUPPRESS-NEXT:    fmul s18, s16, s17
122 ; SUPPRESS-NEXT:    fmul s17, s7, s17
123 ; SUPPRESS-NEXT:    fnmsub s7, s7, s4, s18
124 ; SUPPRESS-NEXT:    fmadd s4, s16, s4, s17
125 ; SUPPRESS-NEXT:    fadd s16, s7, s1
126 ; SUPPRESS-NEXT:    fadd s17, s4, s5
127 ; SUPPRESS-NEXT:    stp s16, s17, [x8, #32]
128 ; SUPPRESS-NEXT:    fsub s7, s1, s7
129 ; SUPPRESS-NEXT:    fsub s4, s5, s4
130 ; SUPPRESS-NEXT:    stp s7, s4, [x8, #48]
131 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
132 ; SUPPRESS-NEXT:    add x9, x10, x9
133 ; SUPPRESS-NEXT:    ldp s1, s5, [x9]
134 ; SUPPRESS-NEXT:    fmul s18, s5, s0
135 ; SUPPRESS-NEXT:    fmul s0, s1, s0
136 ; SUPPRESS-NEXT:    fnmsub s1, s1, s6, s18
137 ; SUPPRESS-NEXT:    fmadd s5, s5, s6, s0
138 ; SUPPRESS-NEXT:    fadd s6, s1, s2
139 ; SUPPRESS-NEXT:    fadd s18, s5, s3
140 ; SUPPRESS-NEXT:    stp s6, s18, [x8, #40]
141 ; SUPPRESS-NEXT:    fsub s0, s2, s1
142 ; SUPPRESS-NEXT:    fsub s1, s3, s5
143 ; SUPPRESS-NEXT:    stp s0, s1, [x8, #56]
144 ; SUPPRESS-NEXT:    ldr x9, [x0, #8]
145 ; SUPPRESS-NEXT:    ldp s2, s3, [x9]
146 ; SUPPRESS-NEXT:    ldp s5, s19, [x8]
147 ; SUPPRESS-NEXT:    fmul s20, s17, s3
148 ; SUPPRESS-NEXT:    fmul s3, s16, s3
149 ; SUPPRESS-NEXT:    fnmsub s16, s16, s2, s20
150 ; SUPPRESS-NEXT:    fmadd s2, s17, s2, s3
151 ; SUPPRESS-NEXT:    fadd s3, s16, s5
152 ; SUPPRESS-NEXT:    fadd s17, s2, s19
153 ; SUPPRESS-NEXT:    stp s3, s17, [x8]
154 ; SUPPRESS-NEXT:    fsub s3, s5, s16
155 ; SUPPRESS-NEXT:    fsub s2, s19, s2
156 ; SUPPRESS-NEXT:    stp s3, s2, [x8, #32]
157 ; SUPPRESS-NEXT:    ldr x9, [x0, #8]
158 ; SUPPRESS-NEXT:    add x9, x9, w3, sxtw #3
159 ; SUPPRESS-NEXT:    ldp s2, s3, [x9]
160 ; SUPPRESS-NEXT:    ldp s5, s16, [x8, #8]
161 ; SUPPRESS-NEXT:    fmul s17, s18, s3
162 ; SUPPRESS-NEXT:    fmul s3, s6, s3
163 ; SUPPRESS-NEXT:    fnmsub s6, s6, s2, s17
164 ; SUPPRESS-NEXT:    fmadd s2, s18, s2, s3
165 ; SUPPRESS-NEXT:    fadd s3, s6, s5
166 ; SUPPRESS-NEXT:    fadd s17, s2, s16
167 ; SUPPRESS-NEXT:    stp s3, s17, [x8, #8]
168 ; SUPPRESS-NEXT:    fsub s3, s5, s6
169 ; SUPPRESS-NEXT:    fsub s2, s16, s2
170 ; SUPPRESS-NEXT:    stp s3, s2, [x8, #40]
171 ; SUPPRESS-NEXT:    lsl x9, x3, #33
172 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
173 ; SUPPRESS-NEXT:    add x9, x10, x9, asr #29
174 ; SUPPRESS-NEXT:    ldp s2, s3, [x9]
175 ; SUPPRESS-NEXT:    ldp s5, s6, [x8, #16]
176 ; SUPPRESS-NEXT:    fmul s16, s4, s3
177 ; SUPPRESS-NEXT:    fmul s3, s7, s3
178 ; SUPPRESS-NEXT:    fnmsub s7, s7, s2, s16
179 ; SUPPRESS-NEXT:    fmadd s2, s4, s2, s3
180 ; SUPPRESS-NEXT:    fadd s3, s7, s5
181 ; SUPPRESS-NEXT:    fadd s4, s2, s6
182 ; SUPPRESS-NEXT:    stp s3, s4, [x8, #16]
183 ; SUPPRESS-NEXT:    fsub s3, s5, s7
184 ; SUPPRESS-NEXT:    fsub s2, s6, s2
185 ; SUPPRESS-NEXT:    stp s3, s2, [x8, #48]
186 ; SUPPRESS-NEXT:    add w9, w3, w3, lsl #1
187 ; SUPPRESS-NEXT:    ldr x10, [x0, #8]
188 ; SUPPRESS-NEXT:    add x9, x10, w9, sxtw #3
189 ; SUPPRESS-NEXT:    ldp s2, s3, [x9]
190 ; SUPPRESS-NEXT:    ldp s4, s5, [x8, #24]
191 ; SUPPRESS-NEXT:    fmul s6, s1, s3
192 ; SUPPRESS-NEXT:    fmul s3, s0, s3
193 ; SUPPRESS-NEXT:    fnmsub s0, s0, s2, s6
194 ; SUPPRESS-NEXT:    fmadd s1, s1, s2, s3
195 ; SUPPRESS-NEXT:    fadd s2, s0, s4
196 ; SUPPRESS-NEXT:    fadd s3, s1, s5
197 ; SUPPRESS-NEXT:    stp s2, s3, [x8, #24]
198 ; SUPPRESS-NEXT:    fsub s0, s4, s0
199 ; SUPPRESS-NEXT:    fsub s1, s5, s1
200 ; SUPPRESS-NEXT:    stp s0, s1, [x8, #56]
201 ; SUPPRESS-NEXT:    ret
203 ; NOSUPPRESS-LABEL: load_store_units_critical:
204 ; NOSUPPRESS:       // %bb.0: // %bb
205 ; NOSUPPRESS-NEXT:    ldr x8, [x0, #8]
206 ; NOSUPPRESS-NEXT:    ldp s0, s1, [x8]
207 ; NOSUPPRESS-NEXT:    add x8, x1, x2, lsl #3
208 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x8]
209 ; NOSUPPRESS-NEXT:    ldp s4, s5, [x8, #8]
210 ; NOSUPPRESS-NEXT:    fmul s6, s5, s1
211 ; NOSUPPRESS-NEXT:    fmul s1, s4, s1
212 ; NOSUPPRESS-NEXT:    fnmsub s4, s4, s0, s6
213 ; NOSUPPRESS-NEXT:    fmadd s0, s5, s0, s1
214 ; NOSUPPRESS-NEXT:    fadd s1, s4, s2
215 ; NOSUPPRESS-NEXT:    fadd s5, s0, s3
216 ; NOSUPPRESS-NEXT:    stp s1, s5, [x8]
217 ; NOSUPPRESS-NEXT:    fsub s2, s2, s4
218 ; NOSUPPRESS-NEXT:    fsub s0, s3, s0
219 ; NOSUPPRESS-NEXT:    stp s2, s0, [x8, #8]
220 ; NOSUPPRESS-NEXT:    ldr x9, [x0, #8]
221 ; NOSUPPRESS-NEXT:    ldp s3, s4, [x9]
222 ; NOSUPPRESS-NEXT:    ldp s6, s7, [x8, #16]
223 ; NOSUPPRESS-NEXT:    ldp s16, s17, [x8, #24]
224 ; NOSUPPRESS-NEXT:    fmul s18, s17, s4
225 ; NOSUPPRESS-NEXT:    fmul s4, s16, s4
226 ; NOSUPPRESS-NEXT:    fnmsub s16, s16, s3, s18
227 ; NOSUPPRESS-NEXT:    fmadd s3, s17, s3, s4
228 ; NOSUPPRESS-NEXT:    fadd s4, s16, s6
229 ; NOSUPPRESS-NEXT:    fadd s17, s3, s7
230 ; NOSUPPRESS-NEXT:    stp s4, s17, [x8, #16]
231 ; NOSUPPRESS-NEXT:    fsub s6, s6, s16
232 ; NOSUPPRESS-NEXT:    fsub s3, s7, s3
233 ; NOSUPPRESS-NEXT:    stp s6, s3, [x8, #24]
234 ; NOSUPPRESS-NEXT:    ldr x9, [x0, #8]
235 ; NOSUPPRESS-NEXT:    ldp s7, s16, [x9]
236 ; NOSUPPRESS-NEXT:    fmul s18, s16, s17
237 ; NOSUPPRESS-NEXT:    fmul s17, s7, s17
238 ; NOSUPPRESS-NEXT:    fnmsub s7, s7, s4, s18
239 ; NOSUPPRESS-NEXT:    fmadd s4, s16, s4, s17
240 ; NOSUPPRESS-NEXT:    fadd s16, s7, s1
241 ; NOSUPPRESS-NEXT:    fadd s17, s4, s5
242 ; NOSUPPRESS-NEXT:    stp s16, s17, [x8]
243 ; NOSUPPRESS-NEXT:    fsub s1, s1, s7
244 ; NOSUPPRESS-NEXT:    fsub s4, s5, s4
245 ; NOSUPPRESS-NEXT:    stp s1, s4, [x8, #16]
246 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
247 ; NOSUPPRESS-NEXT:    lsl x9, x3, #4
248 ; NOSUPPRESS-NEXT:    add x10, x10, x9
249 ; NOSUPPRESS-NEXT:    ldp s1, s4, [x10]
250 ; NOSUPPRESS-NEXT:    fmul s5, s4, s3
251 ; NOSUPPRESS-NEXT:    fmul s3, s1, s3
252 ; NOSUPPRESS-NEXT:    fnmsub s1, s1, s6, s5
253 ; NOSUPPRESS-NEXT:    fmadd s3, s4, s6, s3
254 ; NOSUPPRESS-NEXT:    fadd s4, s1, s2
255 ; NOSUPPRESS-NEXT:    fadd s5, s3, s0
256 ; NOSUPPRESS-NEXT:    stp s4, s5, [x8, #8]
257 ; NOSUPPRESS-NEXT:    fsub s1, s2, s1
258 ; NOSUPPRESS-NEXT:    fsub s0, s0, s3
259 ; NOSUPPRESS-NEXT:    stp s1, s0, [x8, #24]
260 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
261 ; NOSUPPRESS-NEXT:    ldp s0, s1, [x10]
262 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x8, #32]
263 ; NOSUPPRESS-NEXT:    ldp s4, s5, [x8, #40]
264 ; NOSUPPRESS-NEXT:    fmul s6, s5, s1
265 ; NOSUPPRESS-NEXT:    fmul s1, s4, s1
266 ; NOSUPPRESS-NEXT:    fnmsub s4, s4, s0, s6
267 ; NOSUPPRESS-NEXT:    fmadd s0, s5, s0, s1
268 ; NOSUPPRESS-NEXT:    fadd s1, s4, s2
269 ; NOSUPPRESS-NEXT:    fadd s5, s0, s3
270 ; NOSUPPRESS-NEXT:    stp s1, s5, [x8, #32]
271 ; NOSUPPRESS-NEXT:    fsub s2, s2, s4
272 ; NOSUPPRESS-NEXT:    fsub s3, s3, s0
273 ; NOSUPPRESS-NEXT:    stp s2, s3, [x8, #40]
274 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
275 ; NOSUPPRESS-NEXT:    ldp s0, s4, [x10]
276 ; NOSUPPRESS-NEXT:    ldp s6, s7, [x8, #48]
277 ; NOSUPPRESS-NEXT:    ldp s16, s17, [x8, #56]
278 ; NOSUPPRESS-NEXT:    fmul s18, s17, s4
279 ; NOSUPPRESS-NEXT:    fmul s4, s16, s4
280 ; NOSUPPRESS-NEXT:    fnmsub s16, s16, s0, s18
281 ; NOSUPPRESS-NEXT:    fmadd s0, s17, s0, s4
282 ; NOSUPPRESS-NEXT:    fadd s4, s16, s6
283 ; NOSUPPRESS-NEXT:    fadd s17, s0, s7
284 ; NOSUPPRESS-NEXT:    stp s4, s17, [x8, #48]
285 ; NOSUPPRESS-NEXT:    fsub s6, s6, s16
286 ; NOSUPPRESS-NEXT:    fsub s0, s7, s0
287 ; NOSUPPRESS-NEXT:    stp s6, s0, [x8, #56]
288 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
289 ; NOSUPPRESS-NEXT:    ldp s7, s16, [x10]
290 ; NOSUPPRESS-NEXT:    fmul s18, s16, s17
291 ; NOSUPPRESS-NEXT:    fmul s17, s7, s17
292 ; NOSUPPRESS-NEXT:    fnmsub s7, s7, s4, s18
293 ; NOSUPPRESS-NEXT:    fmadd s4, s16, s4, s17
294 ; NOSUPPRESS-NEXT:    fadd s16, s7, s1
295 ; NOSUPPRESS-NEXT:    fadd s17, s4, s5
296 ; NOSUPPRESS-NEXT:    stp s16, s17, [x8, #32]
297 ; NOSUPPRESS-NEXT:    fsub s7, s1, s7
298 ; NOSUPPRESS-NEXT:    fsub s4, s5, s4
299 ; NOSUPPRESS-NEXT:    stp s7, s4, [x8, #48]
300 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
301 ; NOSUPPRESS-NEXT:    add x9, x10, x9
302 ; NOSUPPRESS-NEXT:    ldp s1, s5, [x9]
303 ; NOSUPPRESS-NEXT:    fmul s18, s5, s0
304 ; NOSUPPRESS-NEXT:    fmul s0, s1, s0
305 ; NOSUPPRESS-NEXT:    fnmsub s1, s1, s6, s18
306 ; NOSUPPRESS-NEXT:    fmadd s5, s5, s6, s0
307 ; NOSUPPRESS-NEXT:    fadd s6, s1, s2
308 ; NOSUPPRESS-NEXT:    fadd s18, s5, s3
309 ; NOSUPPRESS-NEXT:    stp s6, s18, [x8, #40]
310 ; NOSUPPRESS-NEXT:    fsub s0, s2, s1
311 ; NOSUPPRESS-NEXT:    fsub s1, s3, s5
312 ; NOSUPPRESS-NEXT:    stp s0, s1, [x8, #56]
313 ; NOSUPPRESS-NEXT:    ldr x9, [x0, #8]
314 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x9]
315 ; NOSUPPRESS-NEXT:    ldp s5, s19, [x8]
316 ; NOSUPPRESS-NEXT:    fmul s20, s17, s3
317 ; NOSUPPRESS-NEXT:    fmul s3, s16, s3
318 ; NOSUPPRESS-NEXT:    fnmsub s16, s16, s2, s20
319 ; NOSUPPRESS-NEXT:    fmadd s2, s17, s2, s3
320 ; NOSUPPRESS-NEXT:    fadd s3, s16, s5
321 ; NOSUPPRESS-NEXT:    fadd s17, s2, s19
322 ; NOSUPPRESS-NEXT:    stp s3, s17, [x8]
323 ; NOSUPPRESS-NEXT:    fsub s3, s5, s16
324 ; NOSUPPRESS-NEXT:    fsub s2, s19, s2
325 ; NOSUPPRESS-NEXT:    stp s3, s2, [x8, #32]
326 ; NOSUPPRESS-NEXT:    ldr x9, [x0, #8]
327 ; NOSUPPRESS-NEXT:    add x9, x9, w3, sxtw #3
328 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x9]
329 ; NOSUPPRESS-NEXT:    ldp s5, s16, [x8, #8]
330 ; NOSUPPRESS-NEXT:    fmul s17, s18, s3
331 ; NOSUPPRESS-NEXT:    fmul s3, s6, s3
332 ; NOSUPPRESS-NEXT:    fnmsub s6, s6, s2, s17
333 ; NOSUPPRESS-NEXT:    fmadd s2, s18, s2, s3
334 ; NOSUPPRESS-NEXT:    fadd s3, s6, s5
335 ; NOSUPPRESS-NEXT:    fadd s17, s2, s16
336 ; NOSUPPRESS-NEXT:    stp s3, s17, [x8, #8]
337 ; NOSUPPRESS-NEXT:    fsub s3, s5, s6
338 ; NOSUPPRESS-NEXT:    fsub s2, s16, s2
339 ; NOSUPPRESS-NEXT:    stp s3, s2, [x8, #40]
340 ; NOSUPPRESS-NEXT:    lsl x9, x3, #33
341 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
342 ; NOSUPPRESS-NEXT:    add x9, x10, x9, asr #29
343 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x9]
344 ; NOSUPPRESS-NEXT:    ldp s5, s6, [x8, #16]
345 ; NOSUPPRESS-NEXT:    fmul s16, s4, s3
346 ; NOSUPPRESS-NEXT:    fmul s3, s7, s3
347 ; NOSUPPRESS-NEXT:    fnmsub s7, s7, s2, s16
348 ; NOSUPPRESS-NEXT:    fmadd s2, s4, s2, s3
349 ; NOSUPPRESS-NEXT:    fadd s3, s7, s5
350 ; NOSUPPRESS-NEXT:    fadd s4, s2, s6
351 ; NOSUPPRESS-NEXT:    stp s3, s4, [x8, #16]
352 ; NOSUPPRESS-NEXT:    fsub s3, s5, s7
353 ; NOSUPPRESS-NEXT:    fsub s2, s6, s2
354 ; NOSUPPRESS-NEXT:    stp s3, s2, [x8, #48]
355 ; NOSUPPRESS-NEXT:    add w9, w3, w3, lsl #1
356 ; NOSUPPRESS-NEXT:    ldr x10, [x0, #8]
357 ; NOSUPPRESS-NEXT:    add x9, x10, w9, sxtw #3
358 ; NOSUPPRESS-NEXT:    ldp s2, s3, [x9]
359 ; NOSUPPRESS-NEXT:    ldp s4, s5, [x8, #24]
360 ; NOSUPPRESS-NEXT:    fmul s6, s1, s3
361 ; NOSUPPRESS-NEXT:    fmul s3, s0, s3
362 ; NOSUPPRESS-NEXT:    fnmsub s0, s0, s2, s6
363 ; NOSUPPRESS-NEXT:    fmadd s1, s1, s2, s3
364 ; NOSUPPRESS-NEXT:    fadd s2, s0, s4
365 ; NOSUPPRESS-NEXT:    fadd s3, s1, s5
366 ; NOSUPPRESS-NEXT:    stp s2, s3, [x8, #24]
367 ; NOSUPPRESS-NEXT:    fsub s0, s4, s0
368 ; NOSUPPRESS-NEXT:    fsub s1, s5, s1
369 ; NOSUPPRESS-NEXT:    stp s0, s1, [x8, #56]
370 ; NOSUPPRESS-NEXT:    ret
372   %shl = shl i64 %arg3, 1
373   %getelementptr = getelementptr inbounds i8, ptr %arg, i64 8
374   %load = load ptr, ptr %getelementptr, align 8
375   %load4 = load float, ptr %load, align 4
376   %getelementptr5 = getelementptr inbounds i8, ptr %load, i64 4
377   %load6 = load float, ptr %getelementptr5, align 4
378   %getelementptr7 = getelementptr %struct.widget, ptr %arg1, i64 %arg2
379   %load8 = load float, ptr %getelementptr7, align 4
380   %getelementptr9 = getelementptr inbounds i8, ptr %getelementptr7, i64 4
381   %load10 = load float, ptr %getelementptr9, align 4
382   %getelementptr11 = getelementptr i8, ptr %getelementptr7, i64 8
383   %load12 = load float, ptr %getelementptr11, align 4
384   %getelementptr13 = getelementptr i8, ptr %getelementptr7, i64 12
385   %load14 = load float, ptr %getelementptr13, align 4
386   %fmul = fmul fast float %load12, %load4
387   %fmul15 = fmul fast float %load14, %load6
388   %fmul16 = fmul fast float %load14, %load4
389   %fmul17 = fmul fast float %load12, %load6
390   %fsub = fsub fast float %fmul, %fmul15
391   %fadd = fadd fast float %fmul16, %fmul17
392   %fadd18 = fadd fast float %fsub, %load8
393   %fadd19 = fadd fast float %fadd, %load10
394   store float %fadd18, ptr %getelementptr7, align 4
395   store float %fadd19, ptr %getelementptr9, align 4
396   %fsub20 = fsub fast float %load8, %fsub
397   %fsub21 = fsub fast float %load10, %fadd
398   store float %fsub20, ptr %getelementptr11, align 4
399   store float %fsub21, ptr %getelementptr13, align 4
400   %load22 = load ptr, ptr %getelementptr, align 8
401   %load23 = load float, ptr %load22, align 4
402   %getelementptr24 = getelementptr inbounds i8, ptr %load22, i64 4
403   %load25 = load float, ptr %getelementptr24, align 4
404   %getelementptr26 = getelementptr i8, ptr %getelementptr7, i64 16
405   %load27 = load float, ptr %getelementptr26, align 4
406   %getelementptr28 = getelementptr i8, ptr %getelementptr7, i64 20
407   %load29 = load float, ptr %getelementptr28, align 4
408   %getelementptr30 = getelementptr i8, ptr %getelementptr7, i64 24
409   %load31 = load float, ptr %getelementptr30, align 4
410   %getelementptr32 = getelementptr i8, ptr %getelementptr7, i64 28
411   %load33 = load float, ptr %getelementptr32, align 4
412   %fmul34 = fmul fast float %load31, %load23
413   %fmul35 = fmul fast float %load33, %load25
414   %fmul36 = fmul fast float %load33, %load23
415   %fmul37 = fmul fast float %load31, %load25
416   %fsub38 = fsub fast float %fmul34, %fmul35
417   %fadd39 = fadd fast float %fmul36, %fmul37
418   %fadd40 = fadd fast float %fsub38, %load27
419   %fadd41 = fadd fast float %fadd39, %load29
420   store float %fadd40, ptr %getelementptr26, align 4
421   store float %fadd41, ptr %getelementptr28, align 4
422   %fsub42 = fsub fast float %load27, %fsub38
423   %fsub43 = fsub fast float %load29, %fadd39
424   store float %fsub42, ptr %getelementptr30, align 4
425   store float %fsub43, ptr %getelementptr32, align 4
426   %load44 = load ptr, ptr %getelementptr, align 8
427   %load45 = load float, ptr %load44, align 4
428   %getelementptr46 = getelementptr inbounds i8, ptr %load44, i64 4
429   %load47 = load float, ptr %getelementptr46, align 4
430   %fmul48 = fmul fast float %load45, %fadd40
431   %fmul49 = fmul fast float %load47, %fadd41
432   %fmul50 = fmul fast float %load45, %fadd41
433   %fmul51 = fmul fast float %load47, %fadd40
434   %fsub52 = fsub fast float %fmul48, %fmul49
435   %fadd53 = fadd fast float %fmul51, %fmul50
436   %fadd54 = fadd fast float %fsub52, %fadd18
437   %fadd55 = fadd fast float %fadd53, %fadd19
438   store float %fadd54, ptr %getelementptr7, align 4
439   store float %fadd55, ptr %getelementptr9, align 4
440   %fsub56 = fsub fast float %fadd18, %fsub52
441   %fsub57 = fsub fast float %fadd19, %fadd53
442   store float %fsub56, ptr %getelementptr26, align 4
443   store float %fsub57, ptr %getelementptr28, align 4
444   %load58 = load ptr, ptr %getelementptr, align 8
445   %getelementptr59 = getelementptr inbounds %struct.widget, ptr %load58, i64 %shl
446   %load60 = load float, ptr %getelementptr59, align 4
447   %getelementptr61 = getelementptr inbounds i8, ptr %getelementptr59, i64 4
448   %load62 = load float, ptr %getelementptr61, align 4
449   %fmul63 = fmul fast float %load60, %fsub42
450   %fmul64 = fmul fast float %load62, %fsub43
451   %fmul65 = fmul fast float %load60, %fsub43
452   %fmul66 = fmul fast float %load62, %fsub42
453   %fsub67 = fsub fast float %fmul63, %fmul64
454   %fadd68 = fadd fast float %fmul66, %fmul65
455   %fadd69 = fadd fast float %fsub67, %fsub20
456   %fadd70 = fadd fast float %fadd68, %fsub21
457   store float %fadd69, ptr %getelementptr11, align 4
458   store float %fadd70, ptr %getelementptr13, align 4
459   %fsub71 = fsub fast float %fsub20, %fsub67
460   %fsub72 = fsub fast float %fsub21, %fadd68
461   store float %fsub71, ptr %getelementptr30, align 4
462   store float %fsub72, ptr %getelementptr32, align 4
463   %load73 = load ptr, ptr %getelementptr, align 8
464   %load74 = load float, ptr %load73, align 4
465   %getelementptr75 = getelementptr inbounds i8, ptr %load73, i64 4
466   %load76 = load float, ptr %getelementptr75, align 4
467   %getelementptr77 = getelementptr i8, ptr %getelementptr7, i64 32
468   %load78 = load float, ptr %getelementptr77, align 4
469   %getelementptr79 = getelementptr i8, ptr %getelementptr7, i64 36
470   %load80 = load float, ptr %getelementptr79, align 4
471   %getelementptr81 = getelementptr i8, ptr %getelementptr7, i64 40
472   %load82 = load float, ptr %getelementptr81, align 4
473   %getelementptr83 = getelementptr i8, ptr %getelementptr7, i64 44
474   %load84 = load float, ptr %getelementptr83, align 4
475   %fmul85 = fmul fast float %load82, %load74
476   %fmul86 = fmul fast float %load84, %load76
477   %fmul87 = fmul fast float %load84, %load74
478   %fmul88 = fmul fast float %load82, %load76
479   %fsub89 = fsub fast float %fmul85, %fmul86
480   %fadd90 = fadd fast float %fmul87, %fmul88
481   %fadd91 = fadd fast float %fsub89, %load78
482   %fadd92 = fadd fast float %fadd90, %load80
483   store float %fadd91, ptr %getelementptr77, align 4
484   store float %fadd92, ptr %getelementptr79, align 4
485   %fsub93 = fsub fast float %load78, %fsub89
486   %fsub94 = fsub fast float %load80, %fadd90
487   store float %fsub93, ptr %getelementptr81, align 4
488   store float %fsub94, ptr %getelementptr83, align 4
489   %load95 = load ptr, ptr %getelementptr, align 8
490   %load96 = load float, ptr %load95, align 4
491   %getelementptr97 = getelementptr inbounds i8, ptr %load95, i64 4
492   %load98 = load float, ptr %getelementptr97, align 4
493   %getelementptr99 = getelementptr i8, ptr %getelementptr7, i64 48
494   %load100 = load float, ptr %getelementptr99, align 4
495   %getelementptr101 = getelementptr i8, ptr %getelementptr7, i64 52
496   %load102 = load float, ptr %getelementptr101, align 4
497   %getelementptr103 = getelementptr i8, ptr %getelementptr7, i64 56
498   %load104 = load float, ptr %getelementptr103, align 4
499   %getelementptr105 = getelementptr i8, ptr %getelementptr7, i64 60
500   %load106 = load float, ptr %getelementptr105, align 4
501   %fmul107 = fmul fast float %load104, %load96
502   %fmul108 = fmul fast float %load106, %load98
503   %fmul109 = fmul fast float %load106, %load96
504   %fmul110 = fmul fast float %load104, %load98
505   %fsub111 = fsub fast float %fmul107, %fmul108
506   %fadd112 = fadd fast float %fmul109, %fmul110
507   %fadd113 = fadd fast float %fsub111, %load100
508   %fadd114 = fadd fast float %fadd112, %load102
509   store float %fadd113, ptr %getelementptr99, align 4
510   store float %fadd114, ptr %getelementptr101, align 4
511   %fsub115 = fsub fast float %load100, %fsub111
512   %fsub116 = fsub fast float %load102, %fadd112
513   store float %fsub115, ptr %getelementptr103, align 4
514   store float %fsub116, ptr %getelementptr105, align 4
515   %load117 = load ptr, ptr %getelementptr, align 8
516   %load118 = load float, ptr %load117, align 4
517   %getelementptr119 = getelementptr inbounds i8, ptr %load117, i64 4
518   %load120 = load float, ptr %getelementptr119, align 4
519   %fmul121 = fmul fast float %load118, %fadd113
520   %fmul122 = fmul fast float %load120, %fadd114
521   %fmul123 = fmul fast float %load118, %fadd114
522   %fmul124 = fmul fast float %load120, %fadd113
523   %fsub125 = fsub fast float %fmul121, %fmul122
524   %fadd126 = fadd fast float %fmul124, %fmul123
525   %fadd127 = fadd fast float %fsub125, %fadd91
526   %fadd128 = fadd fast float %fadd126, %fadd92
527   store float %fadd127, ptr %getelementptr77, align 4
528   store float %fadd128, ptr %getelementptr79, align 4
529   %fsub129 = fsub fast float %fadd91, %fsub125
530   %fsub130 = fsub fast float %fadd92, %fadd126
531   store float %fsub129, ptr %getelementptr99, align 4
532   store float %fsub130, ptr %getelementptr101, align 4
533   %load131 = load ptr, ptr %getelementptr, align 8
534   %getelementptr132 = getelementptr inbounds %struct.widget, ptr %load131, i64 %shl
535   %load133 = load float, ptr %getelementptr132, align 4
536   %getelementptr134 = getelementptr inbounds i8, ptr %getelementptr132, i64 4
537   %load135 = load float, ptr %getelementptr134, align 4
538   %fmul136 = fmul fast float %load133, %fsub115
539   %fmul137 = fmul fast float %load135, %fsub116
540   %fmul138 = fmul fast float %load133, %fsub116
541   %fmul139 = fmul fast float %load135, %fsub115
542   %fsub140 = fsub fast float %fmul136, %fmul137
543   %fadd141 = fadd fast float %fmul139, %fmul138
544   %fadd142 = fadd fast float %fsub140, %fsub93
545   %fadd143 = fadd fast float %fadd141, %fsub94
546   store float %fadd142, ptr %getelementptr81, align 4
547   store float %fadd143, ptr %getelementptr83, align 4
548   %fsub144 = fsub fast float %fsub93, %fsub140
549   %fsub145 = fsub fast float %fsub94, %fadd141
550   store float %fsub144, ptr %getelementptr103, align 4
551   store float %fsub145, ptr %getelementptr105, align 4
552   %load146 = load ptr, ptr %getelementptr, align 8
553   %load147 = load float, ptr %load146, align 4
554   %getelementptr148 = getelementptr inbounds i8, ptr %load146, i64 4
555   %load149 = load float, ptr %getelementptr148, align 4
556   %load150 = load float, ptr %getelementptr7, align 4
557   %load151 = load float, ptr %getelementptr9, align 4
558   %fmul152 = fmul fast float %fadd127, %load147
559   %fmul153 = fmul fast float %fadd128, %load149
560   %fmul154 = fmul fast float %fadd128, %load147
561   %fmul155 = fmul fast float %fadd127, %load149
562   %fsub156 = fsub fast float %fmul152, %fmul153
563   %fadd157 = fadd fast float %fmul154, %fmul155
564   %fadd158 = fadd fast float %fsub156, %load150
565   %fadd159 = fadd fast float %fadd157, %load151
566   store float %fadd158, ptr %getelementptr7, align 4
567   store float %fadd159, ptr %getelementptr9, align 4
568   %fsub160 = fsub fast float %load150, %fsub156
569   %fsub161 = fsub fast float %load151, %fadd157
570   store float %fsub160, ptr %getelementptr77, align 4
571   store float %fsub161, ptr %getelementptr79, align 4
572   %shl162 = shl i64 %arg3, 32
573   %ashr = ashr exact i64 %shl162, 32
574   %load163 = load ptr, ptr %getelementptr, align 8
575   %getelementptr164 = getelementptr inbounds %struct.widget, ptr %load163, i64 %ashr
576   %load165 = load float, ptr %getelementptr164, align 4
577   %getelementptr166 = getelementptr inbounds i8, ptr %getelementptr164, i64 4
578   %load167 = load float, ptr %getelementptr166, align 4
579   %load168 = load float, ptr %getelementptr11, align 4
580   %getelementptr169 = getelementptr i8, ptr %getelementptr7, i64 12
581   %load170 = load float, ptr %getelementptr169, align 4
582   %getelementptr171 = getelementptr i8, ptr %getelementptr7, i64 40
583   %getelementptr172 = getelementptr i8, ptr %getelementptr7, i64 44
584   %fmul173 = fmul fast float %fadd142, %load165
585   %fmul174 = fmul fast float %fadd143, %load167
586   %fmul175 = fmul fast float %fadd143, %load165
587   %fmul176 = fmul fast float %fadd142, %load167
588   %fsub177 = fsub fast float %fmul173, %fmul174
589   %fadd178 = fadd fast float %fmul175, %fmul176
590   %fadd179 = fadd fast float %fsub177, %load168
591   %fadd180 = fadd fast float %fadd178, %load170
592   store float %fadd179, ptr %getelementptr11, align 4
593   store float %fadd180, ptr %getelementptr169, align 4
594   %fsub181 = fsub fast float %load168, %fsub177
595   %fsub182 = fsub fast float %load170, %fadd178
596   store float %fsub181, ptr %getelementptr171, align 4
597   store float %fsub182, ptr %getelementptr172, align 4
598   %shl183 = shl i64 %arg3, 33
599   %ashr184 = ashr exact i64 %shl183, 32
600   %load185 = load ptr, ptr %getelementptr, align 8
601   %getelementptr186 = getelementptr inbounds %struct.widget, ptr %load185, i64 %ashr184
602   %load187 = load float, ptr %getelementptr186, align 4
603   %getelementptr188 = getelementptr inbounds i8, ptr %getelementptr186, i64 4
604   %load189 = load float, ptr %getelementptr188, align 4
605   %load190 = load float, ptr %getelementptr26, align 4
606   %getelementptr191 = getelementptr i8, ptr %getelementptr7, i64 20
607   %load192 = load float, ptr %getelementptr191, align 4
608   %getelementptr193 = getelementptr i8, ptr %getelementptr7, i64 48
609   %getelementptr194 = getelementptr i8, ptr %getelementptr7, i64 52
610   %fmul195 = fmul fast float %fsub129, %load187
611   %fmul196 = fmul fast float %fsub130, %load189
612   %fmul197 = fmul fast float %fsub130, %load187
613   %fmul198 = fmul fast float %fsub129, %load189
614   %fsub199 = fsub fast float %fmul195, %fmul196
615   %fadd200 = fadd fast float %fmul197, %fmul198
616   %fadd201 = fadd fast float %fsub199, %load190
617   %fadd202 = fadd fast float %fadd200, %load192
618   store float %fadd201, ptr %getelementptr26, align 4
619   store float %fadd202, ptr %getelementptr191, align 4
620   %fsub203 = fsub fast float %load190, %fsub199
621   %fsub204 = fsub fast float %load192, %fadd200
622   store float %fsub203, ptr %getelementptr193, align 4
623   store float %fsub204, ptr %getelementptr194, align 4
624   %add = add i64 %ashr184, %arg3
625   %shl205 = shl i64 %add, 32
626   %ashr206 = ashr exact i64 %shl205, 32
627   %load207 = load ptr, ptr %getelementptr, align 8
628   %getelementptr208 = getelementptr inbounds %struct.widget, ptr %load207, i64 %ashr206
629   %load209 = load float, ptr %getelementptr208, align 4
630   %getelementptr210 = getelementptr inbounds i8, ptr %getelementptr208, i64 4
631   %load211 = load float, ptr %getelementptr210, align 4
632   %load212 = load float, ptr %getelementptr30, align 4
633   %getelementptr213 = getelementptr i8, ptr %getelementptr7, i64 28
634   %load214 = load float, ptr %getelementptr213, align 4
635   %getelementptr215 = getelementptr i8, ptr %getelementptr7, i64 56
636   %getelementptr216 = getelementptr i8, ptr %getelementptr7, i64 60
637   %fmul217 = fmul fast float %fsub144, %load209
638   %fmul218 = fmul fast float %fsub145, %load211
639   %fmul219 = fmul fast float %fsub145, %load209
640   %fmul220 = fmul fast float %fsub144, %load211
641   %fsub221 = fsub fast float %fmul217, %fmul218
642   %fadd222 = fadd fast float %fmul219, %fmul220
643   %fadd223 = fadd fast float %fsub221, %load212
644   %fadd224 = fadd fast float %fadd222, %load214
645   store float %fadd223, ptr %getelementptr30, align 4
646   store float %fadd224, ptr %getelementptr213, align 4
647   %fsub225 = fsub fast float %load212, %fsub221
648   %fsub226 = fsub fast float %load214, %fadd222
649   store float %fsub225, ptr %getelementptr215, align 4
650   store float %fsub226, ptr %getelementptr216, align 4
651   ret void