xref: /llvm-project/llvm/test/CodeGen/AArch64/storepairsuppress.ll (revision 2f083b364f43fb12b2fdf23935e1f0b6958d0882)
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
4
5define 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
14;
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
22entry:
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
29}
30
31%struct.widget = type { float, float }
32
33define 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
202;
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
371bb:
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
652}
653