1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32F
3 ; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D
4 ; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F
5 ; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D
7 ;; TODO: Merge the offset of address calculation into the offset field of instructions.
10 %f4 = type <4 x float>
11 %f8 = type <8 x float>
12 %d2 = type <2 x double>
13 %d4 = type <4 x double>
14 %d8 = type <8 x double>
16 define void @test_zero(ptr %P, ptr %S) nounwind {
17 ; LA32F-LABEL: test_zero:
19 ; LA32F-NEXT: fld.s $fa0, $a0, 12
20 ; LA32F-NEXT: fld.s $fa1, $a0, 0
21 ; LA32F-NEXT: fld.s $fa2, $a0, 4
22 ; LA32F-NEXT: fld.s $fa3, $a0, 8
23 ; LA32F-NEXT: movgr2fr.w $fa4, $zero
24 ; LA32F-NEXT: fadd.s $fa1, $fa1, $fa4
25 ; LA32F-NEXT: fadd.s $fa2, $fa2, $fa4
26 ; LA32F-NEXT: fadd.s $fa3, $fa3, $fa4
27 ; LA32F-NEXT: fadd.s $fa0, $fa0, $fa4
28 ; LA32F-NEXT: fst.s $fa0, $a1, 12
29 ; LA32F-NEXT: fst.s $fa3, $a1, 8
30 ; LA32F-NEXT: fst.s $fa2, $a1, 4
31 ; LA32F-NEXT: fst.s $fa1, $a1, 0
34 ; LA32D-LABEL: test_zero:
36 ; LA32D-NEXT: fld.s $fa0, $a0, 12
37 ; LA32D-NEXT: fld.s $fa1, $a0, 0
38 ; LA32D-NEXT: fld.s $fa2, $a0, 4
39 ; LA32D-NEXT: fld.s $fa3, $a0, 8
40 ; LA32D-NEXT: movgr2fr.w $fa4, $zero
41 ; LA32D-NEXT: fadd.s $fa1, $fa1, $fa4
42 ; LA32D-NEXT: fadd.s $fa2, $fa2, $fa4
43 ; LA32D-NEXT: fadd.s $fa3, $fa3, $fa4
44 ; LA32D-NEXT: fadd.s $fa0, $fa0, $fa4
45 ; LA32D-NEXT: fst.s $fa0, $a1, 12
46 ; LA32D-NEXT: fst.s $fa3, $a1, 8
47 ; LA32D-NEXT: fst.s $fa2, $a1, 4
48 ; LA32D-NEXT: fst.s $fa1, $a1, 0
51 ; LA64F-LABEL: test_zero:
53 ; LA64F-NEXT: fld.s $fa0, $a0, 12
54 ; LA64F-NEXT: fld.s $fa1, $a0, 0
55 ; LA64F-NEXT: fld.s $fa2, $a0, 4
56 ; LA64F-NEXT: fld.s $fa3, $a0, 8
57 ; LA64F-NEXT: movgr2fr.w $fa4, $zero
58 ; LA64F-NEXT: fadd.s $fa1, $fa1, $fa4
59 ; LA64F-NEXT: fadd.s $fa2, $fa2, $fa4
60 ; LA64F-NEXT: fadd.s $fa3, $fa3, $fa4
61 ; LA64F-NEXT: fadd.s $fa0, $fa0, $fa4
62 ; LA64F-NEXT: fst.s $fa0, $a1, 12
63 ; LA64F-NEXT: fst.s $fa3, $a1, 8
64 ; LA64F-NEXT: fst.s $fa2, $a1, 4
65 ; LA64F-NEXT: fst.s $fa1, $a1, 0
68 ; LA64D-LABEL: test_zero:
70 ; LA64D-NEXT: vld $vr0, $a0, 0
71 ; LA64D-NEXT: vrepli.b $vr1, 0
72 ; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1
73 ; LA64D-NEXT: vst $vr0, $a1, 0
76 %R = fadd %f4 %p, zeroinitializer
81 define void @test_f2(ptr %P, ptr %S) nounwind {
82 ; LA32F-LABEL: test_f2:
84 ; LA32F-NEXT: fld.s $fa0, $a0, 4
85 ; LA32F-NEXT: fld.s $fa1, $a0, 0
86 ; LA32F-NEXT: addi.w $a0, $zero, 1
87 ; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0)
88 ; LA32F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0)
89 ; LA32F-NEXT: movgr2fr.w $fa3, $a0
90 ; LA32F-NEXT: ffint.s.w $fa3, $fa3
91 ; LA32F-NEXT: fadd.s $fa1, $fa1, $fa3
92 ; LA32F-NEXT: fadd.s $fa0, $fa0, $fa2
93 ; LA32F-NEXT: fst.s $fa0, $a1, 4
94 ; LA32F-NEXT: fst.s $fa1, $a1, 0
97 ; LA32D-LABEL: test_f2:
99 ; LA32D-NEXT: fld.s $fa0, $a0, 4
100 ; LA32D-NEXT: fld.s $fa1, $a0, 0
101 ; LA32D-NEXT: addi.w $a0, $zero, 1
102 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0)
103 ; LA32D-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0)
104 ; LA32D-NEXT: movgr2fr.w $fa3, $a0
105 ; LA32D-NEXT: ffint.s.w $fa3, $fa3
106 ; LA32D-NEXT: fadd.s $fa1, $fa1, $fa3
107 ; LA32D-NEXT: fadd.s $fa0, $fa0, $fa2
108 ; LA32D-NEXT: fst.s $fa0, $a1, 4
109 ; LA32D-NEXT: fst.s $fa1, $a1, 0
112 ; LA64F-LABEL: test_f2:
114 ; LA64F-NEXT: fld.s $fa0, $a0, 4
115 ; LA64F-NEXT: fld.s $fa1, $a0, 0
116 ; LA64F-NEXT: addi.w $a0, $zero, 1
117 ; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0)
118 ; LA64F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0)
119 ; LA64F-NEXT: movgr2fr.w $fa3, $a0
120 ; LA64F-NEXT: ffint.s.w $fa3, $fa3
121 ; LA64F-NEXT: fadd.s $fa1, $fa1, $fa3
122 ; LA64F-NEXT: fadd.s $fa0, $fa0, $fa2
123 ; LA64F-NEXT: fst.s $fa0, $a1, 4
124 ; LA64F-NEXT: fst.s $fa1, $a1, 0
127 ; LA64D-LABEL: test_f2:
129 ; LA64D-NEXT: ld.d $a0, $a0, 0
130 ; LA64D-NEXT: vinsgr2vr.d $vr0, $a0, 0
131 ; LA64D-NEXT: lu12i.w $a0, 260096
132 ; LA64D-NEXT: lu52i.d $a0, $a0, 1024
133 ; LA64D-NEXT: vreplgr2vr.d $vr1, $a0
134 ; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1
135 ; LA64D-NEXT: vpickve2gr.d $a0, $vr0, 0
136 ; LA64D-NEXT: st.d $a0, $a1, 0
138 %p = load %f2, ptr %P
139 %R = fadd %f2 %p, < float 1.000000e+00, float 2.000000e+00 >
144 define void @test_f4(ptr %P, ptr %S) nounwind {
145 ; LA32F-LABEL: test_f4:
147 ; LA32F-NEXT: fld.s $fa0, $a0, 12
148 ; LA32F-NEXT: fld.s $fa1, $a0, 8
149 ; LA32F-NEXT: fld.s $fa2, $a0, 4
150 ; LA32F-NEXT: fld.s $fa3, $a0, 0
151 ; LA32F-NEXT: addi.w $a0, $zero, 1
152 ; LA32F-NEXT: movgr2fr.w $fa4, $a0
153 ; LA32F-NEXT: ffint.s.w $fa4, $fa4
154 ; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
155 ; LA32F-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0)
156 ; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1)
157 ; LA32F-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1)
158 ; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2)
159 ; LA32F-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2)
160 ; LA32F-NEXT: fadd.s $fa3, $fa3, $fa4
161 ; LA32F-NEXT: fadd.s $fa2, $fa2, $fa5
162 ; LA32F-NEXT: fadd.s $fa1, $fa1, $fa6
163 ; LA32F-NEXT: fadd.s $fa0, $fa0, $fa7
164 ; LA32F-NEXT: fst.s $fa0, $a1, 12
165 ; LA32F-NEXT: fst.s $fa1, $a1, 8
166 ; LA32F-NEXT: fst.s $fa2, $a1, 4
167 ; LA32F-NEXT: fst.s $fa3, $a1, 0
170 ; LA32D-LABEL: test_f4:
172 ; LA32D-NEXT: fld.s $fa0, $a0, 12
173 ; LA32D-NEXT: fld.s $fa1, $a0, 8
174 ; LA32D-NEXT: fld.s $fa2, $a0, 4
175 ; LA32D-NEXT: fld.s $fa3, $a0, 0
176 ; LA32D-NEXT: addi.w $a0, $zero, 1
177 ; LA32D-NEXT: movgr2fr.w $fa4, $a0
178 ; LA32D-NEXT: ffint.s.w $fa4, $fa4
179 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
180 ; LA32D-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0)
181 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1)
182 ; LA32D-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1)
183 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2)
184 ; LA32D-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2)
185 ; LA32D-NEXT: fadd.s $fa3, $fa3, $fa4
186 ; LA32D-NEXT: fadd.s $fa2, $fa2, $fa5
187 ; LA32D-NEXT: fadd.s $fa1, $fa1, $fa6
188 ; LA32D-NEXT: fadd.s $fa0, $fa0, $fa7
189 ; LA32D-NEXT: fst.s $fa0, $a1, 12
190 ; LA32D-NEXT: fst.s $fa1, $a1, 8
191 ; LA32D-NEXT: fst.s $fa2, $a1, 4
192 ; LA32D-NEXT: fst.s $fa3, $a1, 0
195 ; LA64F-LABEL: test_f4:
197 ; LA64F-NEXT: fld.s $fa0, $a0, 12
198 ; LA64F-NEXT: fld.s $fa1, $a0, 8
199 ; LA64F-NEXT: fld.s $fa2, $a0, 4
200 ; LA64F-NEXT: fld.s $fa3, $a0, 0
201 ; LA64F-NEXT: addi.w $a0, $zero, 1
202 ; LA64F-NEXT: movgr2fr.w $fa4, $a0
203 ; LA64F-NEXT: ffint.s.w $fa4, $fa4
204 ; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
205 ; LA64F-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0)
206 ; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1)
207 ; LA64F-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1)
208 ; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2)
209 ; LA64F-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2)
210 ; LA64F-NEXT: fadd.s $fa3, $fa3, $fa4
211 ; LA64F-NEXT: fadd.s $fa2, $fa2, $fa5
212 ; LA64F-NEXT: fadd.s $fa1, $fa1, $fa6
213 ; LA64F-NEXT: fadd.s $fa0, $fa0, $fa7
214 ; LA64F-NEXT: fst.s $fa0, $a1, 12
215 ; LA64F-NEXT: fst.s $fa1, $a1, 8
216 ; LA64F-NEXT: fst.s $fa2, $a1, 4
217 ; LA64F-NEXT: fst.s $fa3, $a1, 0
220 ; LA64D-LABEL: test_f4:
222 ; LA64D-NEXT: vld $vr0, $a0, 0
223 ; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
224 ; LA64D-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI2_0)
225 ; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1
226 ; LA64D-NEXT: vst $vr0, $a1, 0
228 %p = load %f4, ptr %P
229 %R = fadd %f4 %p, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 >
234 define void @test_f8(ptr %P, ptr %S) nounwind {
235 ; LA32F-LABEL: test_f8:
237 ; LA32F-NEXT: addi.w $a2, $zero, 1
238 ; LA32F-NEXT: movgr2fr.w $fa0, $a2
239 ; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0)
240 ; LA32F-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0)
241 ; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1)
242 ; LA32F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1)
243 ; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2)
244 ; LA32F-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2)
245 ; LA32F-NEXT: fld.s $fa4, $a0, 28
246 ; LA32F-NEXT: fld.s $fa5, $a0, 24
247 ; LA32F-NEXT: fld.s $fa6, $a0, 12
248 ; LA32F-NEXT: fld.s $fa7, $a0, 8
249 ; LA32F-NEXT: fld.s $ft0, $a0, 0
250 ; LA32F-NEXT: fld.s $ft1, $a0, 16
251 ; LA32F-NEXT: fld.s $ft2, $a0, 4
252 ; LA32F-NEXT: ffint.s.w $fa0, $fa0
253 ; LA32F-NEXT: fadd.s $ft0, $ft0, $fa0
254 ; LA32F-NEXT: fadd.s $fa0, $ft1, $fa0
255 ; LA32F-NEXT: fld.s $ft1, $a0, 20
256 ; LA32F-NEXT: fadd.s $ft2, $ft2, $fa1
257 ; LA32F-NEXT: fadd.s $fa7, $fa7, $fa2
258 ; LA32F-NEXT: fadd.s $fa6, $fa6, $fa3
259 ; LA32F-NEXT: fadd.s $fa1, $ft1, $fa1
260 ; LA32F-NEXT: fadd.s $fa2, $fa5, $fa2
261 ; LA32F-NEXT: fadd.s $fa3, $fa4, $fa3
262 ; LA32F-NEXT: fst.s $fa3, $a1, 28
263 ; LA32F-NEXT: fst.s $fa2, $a1, 24
264 ; LA32F-NEXT: fst.s $fa1, $a1, 20
265 ; LA32F-NEXT: fst.s $fa6, $a1, 12
266 ; LA32F-NEXT: fst.s $fa7, $a1, 8
267 ; LA32F-NEXT: fst.s $ft2, $a1, 4
268 ; LA32F-NEXT: fst.s $fa0, $a1, 16
269 ; LA32F-NEXT: fst.s $ft0, $a1, 0
272 ; LA32D-LABEL: test_f8:
274 ; LA32D-NEXT: addi.w $a2, $zero, 1
275 ; LA32D-NEXT: movgr2fr.w $fa0, $a2
276 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0)
277 ; LA32D-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0)
278 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1)
279 ; LA32D-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1)
280 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2)
281 ; LA32D-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2)
282 ; LA32D-NEXT: fld.s $fa4, $a0, 28
283 ; LA32D-NEXT: fld.s $fa5, $a0, 24
284 ; LA32D-NEXT: fld.s $fa6, $a0, 12
285 ; LA32D-NEXT: fld.s $fa7, $a0, 8
286 ; LA32D-NEXT: fld.s $ft0, $a0, 0
287 ; LA32D-NEXT: fld.s $ft1, $a0, 16
288 ; LA32D-NEXT: fld.s $ft2, $a0, 4
289 ; LA32D-NEXT: ffint.s.w $fa0, $fa0
290 ; LA32D-NEXT: fadd.s $ft0, $ft0, $fa0
291 ; LA32D-NEXT: fadd.s $fa0, $ft1, $fa0
292 ; LA32D-NEXT: fld.s $ft1, $a0, 20
293 ; LA32D-NEXT: fadd.s $ft2, $ft2, $fa1
294 ; LA32D-NEXT: fadd.s $fa7, $fa7, $fa2
295 ; LA32D-NEXT: fadd.s $fa6, $fa6, $fa3
296 ; LA32D-NEXT: fadd.s $fa1, $ft1, $fa1
297 ; LA32D-NEXT: fadd.s $fa2, $fa5, $fa2
298 ; LA32D-NEXT: fadd.s $fa3, $fa4, $fa3
299 ; LA32D-NEXT: fst.s $fa3, $a1, 28
300 ; LA32D-NEXT: fst.s $fa2, $a1, 24
301 ; LA32D-NEXT: fst.s $fa1, $a1, 20
302 ; LA32D-NEXT: fst.s $fa6, $a1, 12
303 ; LA32D-NEXT: fst.s $fa7, $a1, 8
304 ; LA32D-NEXT: fst.s $ft2, $a1, 4
305 ; LA32D-NEXT: fst.s $fa0, $a1, 16
306 ; LA32D-NEXT: fst.s $ft0, $a1, 0
309 ; LA64F-LABEL: test_f8:
311 ; LA64F-NEXT: addi.w $a2, $zero, 1
312 ; LA64F-NEXT: movgr2fr.w $fa0, $a2
313 ; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0)
314 ; LA64F-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0)
315 ; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1)
316 ; LA64F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1)
317 ; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2)
318 ; LA64F-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2)
319 ; LA64F-NEXT: fld.s $fa4, $a0, 28
320 ; LA64F-NEXT: fld.s $fa5, $a0, 24
321 ; LA64F-NEXT: fld.s $fa6, $a0, 12
322 ; LA64F-NEXT: fld.s $fa7, $a0, 8
323 ; LA64F-NEXT: fld.s $ft0, $a0, 0
324 ; LA64F-NEXT: fld.s $ft1, $a0, 16
325 ; LA64F-NEXT: fld.s $ft2, $a0, 4
326 ; LA64F-NEXT: ffint.s.w $fa0, $fa0
327 ; LA64F-NEXT: fadd.s $ft0, $ft0, $fa0
328 ; LA64F-NEXT: fadd.s $fa0, $ft1, $fa0
329 ; LA64F-NEXT: fld.s $ft1, $a0, 20
330 ; LA64F-NEXT: fadd.s $ft2, $ft2, $fa1
331 ; LA64F-NEXT: fadd.s $fa7, $fa7, $fa2
332 ; LA64F-NEXT: fadd.s $fa6, $fa6, $fa3
333 ; LA64F-NEXT: fadd.s $fa1, $ft1, $fa1
334 ; LA64F-NEXT: fadd.s $fa2, $fa5, $fa2
335 ; LA64F-NEXT: fadd.s $fa3, $fa4, $fa3
336 ; LA64F-NEXT: fst.s $fa3, $a1, 28
337 ; LA64F-NEXT: fst.s $fa2, $a1, 24
338 ; LA64F-NEXT: fst.s $fa1, $a1, 20
339 ; LA64F-NEXT: fst.s $fa6, $a1, 12
340 ; LA64F-NEXT: fst.s $fa7, $a1, 8
341 ; LA64F-NEXT: fst.s $ft2, $a1, 4
342 ; LA64F-NEXT: fst.s $fa0, $a1, 16
343 ; LA64F-NEXT: fst.s $ft0, $a1, 0
346 ; LA64D-LABEL: test_f8:
348 ; LA64D-NEXT: vld $vr0, $a0, 16
349 ; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0)
350 ; LA64D-NEXT: vld $vr1, $a2, %pc_lo12(.LCPI3_0)
351 ; LA64D-NEXT: vld $vr2, $a0, 0
352 ; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1
353 ; LA64D-NEXT: vfadd.s $vr1, $vr2, $vr1
354 ; LA64D-NEXT: vst $vr1, $a1, 0
355 ; LA64D-NEXT: vst $vr0, $a1, 16
357 %p = load %f8, ptr %P
358 %R = fadd %f8 %p, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 >
363 define void @test_d2(ptr %P, ptr %S) nounwind {
364 ; LA32F-LABEL: test_d2:
366 ; LA32F-NEXT: addi.w $sp, $sp, -32
367 ; LA32F-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill
368 ; LA32F-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill
369 ; LA32F-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill
370 ; LA32F-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill
371 ; LA32F-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill
372 ; LA32F-NEXT: st.w $s3, $sp, 8 # 4-byte Folded Spill
373 ; LA32F-NEXT: ld.w $fp, $a0, 8
374 ; LA32F-NEXT: ld.w $s0, $a0, 12
375 ; LA32F-NEXT: ld.w $a2, $a0, 0
376 ; LA32F-NEXT: ld.w $a4, $a0, 4
377 ; LA32F-NEXT: move $s1, $a1
378 ; LA32F-NEXT: lu12i.w $a3, 261888
379 ; LA32F-NEXT: move $a0, $a2
380 ; LA32F-NEXT: move $a1, $a4
381 ; LA32F-NEXT: move $a2, $zero
382 ; LA32F-NEXT: bl %plt(__adddf3)
383 ; LA32F-NEXT: move $s2, $a0
384 ; LA32F-NEXT: move $s3, $a1
385 ; LA32F-NEXT: lu12i.w $a3, 262144
386 ; LA32F-NEXT: move $a0, $fp
387 ; LA32F-NEXT: move $a1, $s0
388 ; LA32F-NEXT: move $a2, $zero
389 ; LA32F-NEXT: bl %plt(__adddf3)
390 ; LA32F-NEXT: st.w $a0, $s1, 8
391 ; LA32F-NEXT: st.w $a1, $s1, 12
392 ; LA32F-NEXT: st.w $s2, $s1, 0
393 ; LA32F-NEXT: st.w $s3, $s1, 4
394 ; LA32F-NEXT: ld.w $s3, $sp, 8 # 4-byte Folded Reload
395 ; LA32F-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload
396 ; LA32F-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload
397 ; LA32F-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload
398 ; LA32F-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload
399 ; LA32F-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload
400 ; LA32F-NEXT: addi.w $sp, $sp, 32
403 ; LA32D-LABEL: test_d2:
405 ; LA32D-NEXT: fld.d $fa0, $a0, 8
406 ; LA32D-NEXT: fld.d $fa1, $a0, 0
407 ; LA32D-NEXT: addi.w $a0, $zero, 1
408 ; LA32D-NEXT: movgr2fr.w $fa2, $a0
409 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)
410 ; LA32D-NEXT: fld.d $fa3, $a0, %pc_lo12(.LCPI4_0)
411 ; LA32D-NEXT: ffint.s.w $fa2, $fa2
412 ; LA32D-NEXT: fcvt.d.s $fa2, $fa2
413 ; LA32D-NEXT: fadd.d $fa1, $fa1, $fa2
414 ; LA32D-NEXT: fadd.d $fa0, $fa0, $fa3
415 ; LA32D-NEXT: fst.d $fa0, $a1, 8
416 ; LA32D-NEXT: fst.d $fa1, $a1, 0
419 ; LA64F-LABEL: test_d2:
421 ; LA64F-NEXT: addi.d $sp, $sp, -32
422 ; LA64F-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill
423 ; LA64F-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill
424 ; LA64F-NEXT: st.d $s0, $sp, 8 # 8-byte Folded Spill
425 ; LA64F-NEXT: st.d $s1, $sp, 0 # 8-byte Folded Spill
426 ; LA64F-NEXT: ld.d $fp, $a0, 8
427 ; LA64F-NEXT: ld.d $a0, $a0, 0
428 ; LA64F-NEXT: move $s0, $a1
429 ; LA64F-NEXT: lu52i.d $a1, $zero, 1023
430 ; LA64F-NEXT: bl %plt(__adddf3)
431 ; LA64F-NEXT: move $s1, $a0
432 ; LA64F-NEXT: lu52i.d $a1, $zero, 1024
433 ; LA64F-NEXT: move $a0, $fp
434 ; LA64F-NEXT: bl %plt(__adddf3)
435 ; LA64F-NEXT: st.d $a0, $s0, 8
436 ; LA64F-NEXT: st.d $s1, $s0, 0
437 ; LA64F-NEXT: ld.d $s1, $sp, 0 # 8-byte Folded Reload
438 ; LA64F-NEXT: ld.d $s0, $sp, 8 # 8-byte Folded Reload
439 ; LA64F-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload
440 ; LA64F-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload
441 ; LA64F-NEXT: addi.d $sp, $sp, 32
444 ; LA64D-LABEL: test_d2:
446 ; LA64D-NEXT: vld $vr0, $a0, 0
447 ; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)
448 ; LA64D-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI4_0)
449 ; LA64D-NEXT: vfadd.d $vr0, $vr0, $vr1
450 ; LA64D-NEXT: vst $vr0, $a1, 0
452 %p = load %d2, ptr %P
453 %R = fadd %d2 %p, < double 1.000000e+00, double 2.000000e+00 >
458 define void @test_d4(ptr %P, ptr %S) nounwind {
459 ; LA32F-LABEL: test_d4:
461 ; LA32F-NEXT: addi.w $sp, $sp, -48
462 ; LA32F-NEXT: st.w $ra, $sp, 44 # 4-byte Folded Spill
463 ; LA32F-NEXT: st.w $fp, $sp, 40 # 4-byte Folded Spill
464 ; LA32F-NEXT: st.w $s0, $sp, 36 # 4-byte Folded Spill
465 ; LA32F-NEXT: st.w $s1, $sp, 32 # 4-byte Folded Spill
466 ; LA32F-NEXT: st.w $s2, $sp, 28 # 4-byte Folded Spill
467 ; LA32F-NEXT: st.w $s3, $sp, 24 # 4-byte Folded Spill
468 ; LA32F-NEXT: st.w $s4, $sp, 20 # 4-byte Folded Spill
469 ; LA32F-NEXT: st.w $s5, $sp, 16 # 4-byte Folded Spill
470 ; LA32F-NEXT: st.w $s6, $sp, 12 # 4-byte Folded Spill
471 ; LA32F-NEXT: st.w $s7, $sp, 8 # 4-byte Folded Spill
472 ; LA32F-NEXT: ld.w $fp, $a0, 24
473 ; LA32F-NEXT: ld.w $s0, $a0, 28
474 ; LA32F-NEXT: ld.w $s1, $a0, 16
475 ; LA32F-NEXT: ld.w $s2, $a0, 20
476 ; LA32F-NEXT: ld.w $s3, $a0, 8
477 ; LA32F-NEXT: ld.w $s4, $a0, 12
478 ; LA32F-NEXT: ld.w $a2, $a0, 0
479 ; LA32F-NEXT: ld.w $a4, $a0, 4
480 ; LA32F-NEXT: move $s5, $a1
481 ; LA32F-NEXT: lu12i.w $a3, 261888
482 ; LA32F-NEXT: move $a0, $a2
483 ; LA32F-NEXT: move $a1, $a4
484 ; LA32F-NEXT: move $a2, $zero
485 ; LA32F-NEXT: bl %plt(__adddf3)
486 ; LA32F-NEXT: move $s6, $a0
487 ; LA32F-NEXT: move $s7, $a1
488 ; LA32F-NEXT: lu12i.w $a3, 262144
489 ; LA32F-NEXT: move $a0, $s3
490 ; LA32F-NEXT: move $a1, $s4
491 ; LA32F-NEXT: move $a2, $zero
492 ; LA32F-NEXT: bl %plt(__adddf3)
493 ; LA32F-NEXT: move $s3, $a0
494 ; LA32F-NEXT: move $s4, $a1
495 ; LA32F-NEXT: lu12i.w $a3, 262272
496 ; LA32F-NEXT: move $a0, $s1
497 ; LA32F-NEXT: move $a1, $s2
498 ; LA32F-NEXT: move $a2, $zero
499 ; LA32F-NEXT: bl %plt(__adddf3)
500 ; LA32F-NEXT: move $s1, $a0
501 ; LA32F-NEXT: move $s2, $a1
502 ; LA32F-NEXT: lu12i.w $a3, 262400
503 ; LA32F-NEXT: move $a0, $fp
504 ; LA32F-NEXT: move $a1, $s0
505 ; LA32F-NEXT: move $a2, $zero
506 ; LA32F-NEXT: bl %plt(__adddf3)
507 ; LA32F-NEXT: st.w $a0, $s5, 24
508 ; LA32F-NEXT: st.w $a1, $s5, 28
509 ; LA32F-NEXT: st.w $s1, $s5, 16
510 ; LA32F-NEXT: st.w $s2, $s5, 20
511 ; LA32F-NEXT: st.w $s3, $s5, 8
512 ; LA32F-NEXT: st.w $s4, $s5, 12
513 ; LA32F-NEXT: st.w $s6, $s5, 0
514 ; LA32F-NEXT: st.w $s7, $s5, 4
515 ; LA32F-NEXT: ld.w $s7, $sp, 8 # 4-byte Folded Reload
516 ; LA32F-NEXT: ld.w $s6, $sp, 12 # 4-byte Folded Reload
517 ; LA32F-NEXT: ld.w $s5, $sp, 16 # 4-byte Folded Reload
518 ; LA32F-NEXT: ld.w $s4, $sp, 20 # 4-byte Folded Reload
519 ; LA32F-NEXT: ld.w $s3, $sp, 24 # 4-byte Folded Reload
520 ; LA32F-NEXT: ld.w $s2, $sp, 28 # 4-byte Folded Reload
521 ; LA32F-NEXT: ld.w $s1, $sp, 32 # 4-byte Folded Reload
522 ; LA32F-NEXT: ld.w $s0, $sp, 36 # 4-byte Folded Reload
523 ; LA32F-NEXT: ld.w $fp, $sp, 40 # 4-byte Folded Reload
524 ; LA32F-NEXT: ld.w $ra, $sp, 44 # 4-byte Folded Reload
525 ; LA32F-NEXT: addi.w $sp, $sp, 48
528 ; LA32D-LABEL: test_d4:
530 ; LA32D-NEXT: fld.d $fa0, $a0, 24
531 ; LA32D-NEXT: fld.d $fa1, $a0, 16
532 ; LA32D-NEXT: fld.d $fa2, $a0, 8
533 ; LA32D-NEXT: fld.d $fa3, $a0, 0
534 ; LA32D-NEXT: addi.w $a0, $zero, 1
535 ; LA32D-NEXT: movgr2fr.w $fa4, $a0
536 ; LA32D-NEXT: ffint.s.w $fa4, $fa4
537 ; LA32D-NEXT: fcvt.d.s $fa4, $fa4
538 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)
539 ; LA32D-NEXT: fld.d $fa5, $a0, %pc_lo12(.LCPI5_0)
540 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_1)
541 ; LA32D-NEXT: fld.d $fa6, $a0, %pc_lo12(.LCPI5_1)
542 ; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_2)
543 ; LA32D-NEXT: fld.d $fa7, $a0, %pc_lo12(.LCPI5_2)
544 ; LA32D-NEXT: fadd.d $fa3, $fa3, $fa4
545 ; LA32D-NEXT: fadd.d $fa2, $fa2, $fa5
546 ; LA32D-NEXT: fadd.d $fa1, $fa1, $fa6
547 ; LA32D-NEXT: fadd.d $fa0, $fa0, $fa7
548 ; LA32D-NEXT: fst.d $fa0, $a1, 24
549 ; LA32D-NEXT: fst.d $fa1, $a1, 16
550 ; LA32D-NEXT: fst.d $fa2, $a1, 8
551 ; LA32D-NEXT: fst.d $fa3, $a1, 0
554 ; LA64F-LABEL: test_d4:
556 ; LA64F-NEXT: addi.d $sp, $sp, -48
557 ; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill
558 ; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill
559 ; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill
560 ; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill
561 ; LA64F-NEXT: st.d $s2, $sp, 8 # 8-byte Folded Spill
562 ; LA64F-NEXT: st.d $s3, $sp, 0 # 8-byte Folded Spill
563 ; LA64F-NEXT: ld.d $fp, $a0, 24
564 ; LA64F-NEXT: ld.d $s0, $a0, 8
565 ; LA64F-NEXT: ld.d $s1, $a0, 0
566 ; LA64F-NEXT: ld.d $a0, $a0, 16
567 ; LA64F-NEXT: move $s2, $a1
568 ; LA64F-NEXT: ori $a1, $zero, 0
569 ; LA64F-NEXT: lu32i.d $a1, -524288
570 ; LA64F-NEXT: lu52i.d $a1, $a1, 1024
571 ; LA64F-NEXT: bl %plt(__adddf3)
572 ; LA64F-NEXT: move $s3, $a0
573 ; LA64F-NEXT: lu52i.d $a1, $zero, 1023
574 ; LA64F-NEXT: move $a0, $s1
575 ; LA64F-NEXT: bl %plt(__adddf3)
576 ; LA64F-NEXT: move $s1, $a0
577 ; LA64F-NEXT: lu52i.d $a1, $zero, 1024
578 ; LA64F-NEXT: move $a0, $s0
579 ; LA64F-NEXT: bl %plt(__adddf3)
580 ; LA64F-NEXT: move $s0, $a0
581 ; LA64F-NEXT: lu52i.d $a1, $zero, 1025
582 ; LA64F-NEXT: move $a0, $fp
583 ; LA64F-NEXT: bl %plt(__adddf3)
584 ; LA64F-NEXT: st.d $a0, $s2, 24
585 ; LA64F-NEXT: st.d $s0, $s2, 8
586 ; LA64F-NEXT: st.d $s1, $s2, 0
587 ; LA64F-NEXT: st.d $s3, $s2, 16
588 ; LA64F-NEXT: ld.d $s3, $sp, 0 # 8-byte Folded Reload
589 ; LA64F-NEXT: ld.d $s2, $sp, 8 # 8-byte Folded Reload
590 ; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload
591 ; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload
592 ; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload
593 ; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload
594 ; LA64F-NEXT: addi.d $sp, $sp, 48
597 ; LA64D-LABEL: test_d4:
599 ; LA64D-NEXT: vld $vr0, $a0, 0
600 ; LA64D-NEXT: vld $vr1, $a0, 16
601 ; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)
602 ; LA64D-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI5_0)
603 ; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_1)
604 ; LA64D-NEXT: vld $vr3, $a0, %pc_lo12(.LCPI5_1)
605 ; LA64D-NEXT: vfadd.d $vr1, $vr1, $vr2
606 ; LA64D-NEXT: vfadd.d $vr0, $vr0, $vr3
607 ; LA64D-NEXT: vst $vr0, $a1, 0
608 ; LA64D-NEXT: vst $vr1, $a1, 16
610 %p = load %d4, ptr %P
611 %R = fadd %d4 %p, < double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00 >
616 define void @test_d8(ptr %P, ptr %S) nounwind {
617 ; LA32F-LABEL: test_d8:
619 ; LA32F-NEXT: addi.w $sp, $sp, -96
620 ; LA32F-NEXT: st.w $ra, $sp, 92 # 4-byte Folded Spill
621 ; LA32F-NEXT: st.w $fp, $sp, 88 # 4-byte Folded Spill
622 ; LA32F-NEXT: st.w $s0, $sp, 84 # 4-byte Folded Spill
623 ; LA32F-NEXT: st.w $s1, $sp, 80 # 4-byte Folded Spill
624 ; LA32F-NEXT: st.w $s2, $sp, 76 # 4-byte Folded Spill
625 ; LA32F-NEXT: st.w $s3, $sp, 72 # 4-byte Folded Spill
626 ; LA32F-NEXT: st.w $s4, $sp, 68 # 4-byte Folded Spill
627 ; LA32F-NEXT: st.w $s5, $sp, 64 # 4-byte Folded Spill
628 ; LA32F-NEXT: st.w $s6, $sp, 60 # 4-byte Folded Spill
629 ; LA32F-NEXT: st.w $s7, $sp, 56 # 4-byte Folded Spill
630 ; LA32F-NEXT: st.w $s8, $sp, 52 # 4-byte Folded Spill
631 ; LA32F-NEXT: ld.w $a2, $a0, 56
632 ; LA32F-NEXT: st.w $a2, $sp, 48 # 4-byte Folded Spill
633 ; LA32F-NEXT: ld.w $a2, $a0, 60
634 ; LA32F-NEXT: st.w $a2, $sp, 44 # 4-byte Folded Spill
635 ; LA32F-NEXT: ld.w $a2, $a0, 48
636 ; LA32F-NEXT: st.w $a2, $sp, 32 # 4-byte Folded Spill
637 ; LA32F-NEXT: ld.w $a2, $a0, 52
638 ; LA32F-NEXT: st.w $a2, $sp, 28 # 4-byte Folded Spill
639 ; LA32F-NEXT: ld.w $s8, $a0, 40
640 ; LA32F-NEXT: ld.w $a2, $a0, 44
641 ; LA32F-NEXT: st.w $a2, $sp, 16 # 4-byte Folded Spill
642 ; LA32F-NEXT: ld.w $s3, $a0, 32
643 ; LA32F-NEXT: ld.w $s4, $a0, 36
644 ; LA32F-NEXT: ld.w $s5, $a0, 24
645 ; LA32F-NEXT: ld.w $s6, $a0, 28
646 ; LA32F-NEXT: ld.w $s1, $a0, 16
647 ; LA32F-NEXT: ld.w $s2, $a0, 20
648 ; LA32F-NEXT: ld.w $s7, $a0, 8
649 ; LA32F-NEXT: ld.w $s0, $a0, 12
650 ; LA32F-NEXT: ld.w $a2, $a0, 0
651 ; LA32F-NEXT: ld.w $a4, $a0, 4
652 ; LA32F-NEXT: move $fp, $a1
653 ; LA32F-NEXT: lu12i.w $a3, 261888
654 ; LA32F-NEXT: move $a0, $a2
655 ; LA32F-NEXT: move $a1, $a4
656 ; LA32F-NEXT: move $a2, $zero
657 ; LA32F-NEXT: bl %plt(__adddf3)
658 ; LA32F-NEXT: st.w $a0, $sp, 40 # 4-byte Folded Spill
659 ; LA32F-NEXT: st.w $a1, $sp, 36 # 4-byte Folded Spill
660 ; LA32F-NEXT: lu12i.w $a3, 262144
661 ; LA32F-NEXT: move $a0, $s7
662 ; LA32F-NEXT: move $a1, $s0
663 ; LA32F-NEXT: move $a2, $zero
664 ; LA32F-NEXT: move $s0, $a3
665 ; LA32F-NEXT: bl %plt(__adddf3)
666 ; LA32F-NEXT: st.w $a0, $sp, 24 # 4-byte Folded Spill
667 ; LA32F-NEXT: st.w $a1, $sp, 20 # 4-byte Folded Spill
668 ; LA32F-NEXT: lu12i.w $s7, 262272
669 ; LA32F-NEXT: move $a0, $s1
670 ; LA32F-NEXT: move $a1, $s2
671 ; LA32F-NEXT: move $a2, $zero
672 ; LA32F-NEXT: move $a3, $s7
673 ; LA32F-NEXT: bl %plt(__adddf3)
674 ; LA32F-NEXT: st.w $a0, $sp, 12 # 4-byte Folded Spill
675 ; LA32F-NEXT: move $s2, $a1
676 ; LA32F-NEXT: lu12i.w $a3, 262400
677 ; LA32F-NEXT: move $a0, $s5
678 ; LA32F-NEXT: move $a1, $s6
679 ; LA32F-NEXT: move $a2, $zero
680 ; LA32F-NEXT: bl %plt(__adddf3)
681 ; LA32F-NEXT: move $s5, $a0
682 ; LA32F-NEXT: move $s6, $a1
683 ; LA32F-NEXT: move $a0, $s3
684 ; LA32F-NEXT: move $a1, $s4
685 ; LA32F-NEXT: move $a2, $zero
686 ; LA32F-NEXT: lu12i.w $a3, 261888
687 ; LA32F-NEXT: bl %plt(__adddf3)
688 ; LA32F-NEXT: move $s3, $a0
689 ; LA32F-NEXT: move $s4, $a1
690 ; LA32F-NEXT: move $a0, $s8
691 ; LA32F-NEXT: ld.w $a1, $sp, 16 # 4-byte Folded Reload
692 ; LA32F-NEXT: move $a2, $zero
693 ; LA32F-NEXT: move $a3, $s0
694 ; LA32F-NEXT: bl %plt(__adddf3)
695 ; LA32F-NEXT: move $s8, $a0
696 ; LA32F-NEXT: move $s0, $a1
697 ; LA32F-NEXT: ld.w $a0, $sp, 32 # 4-byte Folded Reload
698 ; LA32F-NEXT: ld.w $a1, $sp, 28 # 4-byte Folded Reload
699 ; LA32F-NEXT: move $a2, $zero
700 ; LA32F-NEXT: move $a3, $s7
701 ; LA32F-NEXT: bl %plt(__adddf3)
702 ; LA32F-NEXT: move $s7, $a0
703 ; LA32F-NEXT: move $s1, $a1
704 ; LA32F-NEXT: ld.w $a0, $sp, 48 # 4-byte Folded Reload
705 ; LA32F-NEXT: ld.w $a1, $sp, 44 # 4-byte Folded Reload
706 ; LA32F-NEXT: move $a2, $zero
707 ; LA32F-NEXT: lu12i.w $a3, 262400
708 ; LA32F-NEXT: bl %plt(__adddf3)
709 ; LA32F-NEXT: st.w $a0, $fp, 56
710 ; LA32F-NEXT: st.w $a1, $fp, 60
711 ; LA32F-NEXT: st.w $s7, $fp, 48
712 ; LA32F-NEXT: st.w $s1, $fp, 52
713 ; LA32F-NEXT: st.w $s8, $fp, 40
714 ; LA32F-NEXT: st.w $s0, $fp, 44
715 ; LA32F-NEXT: st.w $s3, $fp, 32
716 ; LA32F-NEXT: st.w $s4, $fp, 36
717 ; LA32F-NEXT: st.w $s5, $fp, 24
718 ; LA32F-NEXT: st.w $s6, $fp, 28
719 ; LA32F-NEXT: ld.w $a0, $sp, 12 # 4-byte Folded Reload
720 ; LA32F-NEXT: st.w $a0, $fp, 16
721 ; LA32F-NEXT: st.w $s2, $fp, 20
722 ; LA32F-NEXT: ld.w $a0, $sp, 24 # 4-byte Folded Reload
723 ; LA32F-NEXT: st.w $a0, $fp, 8
724 ; LA32F-NEXT: ld.w $a0, $sp, 20 # 4-byte Folded Reload
725 ; LA32F-NEXT: st.w $a0, $fp, 12
726 ; LA32F-NEXT: ld.w $a0, $sp, 40 # 4-byte Folded Reload
727 ; LA32F-NEXT: st.w $a0, $fp, 0
728 ; LA32F-NEXT: ld.w $a0, $sp, 36 # 4-byte Folded Reload
729 ; LA32F-NEXT: st.w $a0, $fp, 4
730 ; LA32F-NEXT: ld.w $s8, $sp, 52 # 4-byte Folded Reload
731 ; LA32F-NEXT: ld.w $s7, $sp, 56 # 4-byte Folded Reload
732 ; LA32F-NEXT: ld.w $s6, $sp, 60 # 4-byte Folded Reload
733 ; LA32F-NEXT: ld.w $s5, $sp, 64 # 4-byte Folded Reload
734 ; LA32F-NEXT: ld.w $s4, $sp, 68 # 4-byte Folded Reload
735 ; LA32F-NEXT: ld.w $s3, $sp, 72 # 4-byte Folded Reload
736 ; LA32F-NEXT: ld.w $s2, $sp, 76 # 4-byte Folded Reload
737 ; LA32F-NEXT: ld.w $s1, $sp, 80 # 4-byte Folded Reload
738 ; LA32F-NEXT: ld.w $s0, $sp, 84 # 4-byte Folded Reload
739 ; LA32F-NEXT: ld.w $fp, $sp, 88 # 4-byte Folded Reload
740 ; LA32F-NEXT: ld.w $ra, $sp, 92 # 4-byte Folded Reload
741 ; LA32F-NEXT: addi.w $sp, $sp, 96
744 ; LA32D-LABEL: test_d8:
746 ; LA32D-NEXT: addi.w $a2, $zero, 1
747 ; LA32D-NEXT: movgr2fr.w $fa0, $a2
748 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_0)
749 ; LA32D-NEXT: fld.d $fa1, $a2, %pc_lo12(.LCPI6_0)
750 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_1)
751 ; LA32D-NEXT: fld.d $fa2, $a2, %pc_lo12(.LCPI6_1)
752 ; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_2)
753 ; LA32D-NEXT: fld.d $fa3, $a2, %pc_lo12(.LCPI6_2)
754 ; LA32D-NEXT: fld.d $fa4, $a0, 56
755 ; LA32D-NEXT: fld.d $fa5, $a0, 48
756 ; LA32D-NEXT: fld.d $fa6, $a0, 24
757 ; LA32D-NEXT: fld.d $fa7, $a0, 16
758 ; LA32D-NEXT: fld.d $ft0, $a0, 8
759 ; LA32D-NEXT: fld.d $ft1, $a0, 0
760 ; LA32D-NEXT: fld.d $ft2, $a0, 32
761 ; LA32D-NEXT: ffint.s.w $fa0, $fa0
762 ; LA32D-NEXT: fcvt.d.s $fa0, $fa0
763 ; LA32D-NEXT: fadd.d $ft1, $ft1, $fa0
764 ; LA32D-NEXT: fadd.d $fa0, $ft2, $fa0
765 ; LA32D-NEXT: fld.d $ft2, $a0, 40
766 ; LA32D-NEXT: fadd.d $ft0, $ft0, $fa1
767 ; LA32D-NEXT: fadd.d $fa7, $fa7, $fa2
768 ; LA32D-NEXT: fadd.d $fa6, $fa6, $fa3
769 ; LA32D-NEXT: fadd.d $fa1, $ft2, $fa1
770 ; LA32D-NEXT: fadd.d $fa2, $fa5, $fa2
771 ; LA32D-NEXT: fadd.d $fa3, $fa4, $fa3
772 ; LA32D-NEXT: fst.d $fa3, $a1, 56
773 ; LA32D-NEXT: fst.d $fa2, $a1, 48
774 ; LA32D-NEXT: fst.d $fa1, $a1, 40
775 ; LA32D-NEXT: fst.d $fa6, $a1, 24
776 ; LA32D-NEXT: fst.d $fa7, $a1, 16
777 ; LA32D-NEXT: fst.d $ft0, $a1, 8
778 ; LA32D-NEXT: fst.d $fa0, $a1, 32
779 ; LA32D-NEXT: fst.d $ft1, $a1, 0
782 ; LA64F-LABEL: test_d8:
784 ; LA64F-NEXT: addi.d $sp, $sp, -112
785 ; LA64F-NEXT: st.d $ra, $sp, 104 # 8-byte Folded Spill
786 ; LA64F-NEXT: st.d $fp, $sp, 96 # 8-byte Folded Spill
787 ; LA64F-NEXT: st.d $s0, $sp, 88 # 8-byte Folded Spill
788 ; LA64F-NEXT: st.d $s1, $sp, 80 # 8-byte Folded Spill
789 ; LA64F-NEXT: st.d $s2, $sp, 72 # 8-byte Folded Spill
790 ; LA64F-NEXT: st.d $s3, $sp, 64 # 8-byte Folded Spill
791 ; LA64F-NEXT: st.d $s4, $sp, 56 # 8-byte Folded Spill
792 ; LA64F-NEXT: st.d $s5, $sp, 48 # 8-byte Folded Spill
793 ; LA64F-NEXT: st.d $s6, $sp, 40 # 8-byte Folded Spill
794 ; LA64F-NEXT: st.d $s7, $sp, 32 # 8-byte Folded Spill
795 ; LA64F-NEXT: st.d $s8, $sp, 24 # 8-byte Folded Spill
796 ; LA64F-NEXT: ld.d $a2, $a0, 56
797 ; LA64F-NEXT: st.d $a2, $sp, 16 # 8-byte Folded Spill
798 ; LA64F-NEXT: ld.d $s1, $a0, 40
799 ; LA64F-NEXT: ld.d $s2, $a0, 32
800 ; LA64F-NEXT: ld.d $s3, $a0, 24
801 ; LA64F-NEXT: ld.d $s4, $a0, 8
802 ; LA64F-NEXT: ld.d $s5, $a0, 0
803 ; LA64F-NEXT: ld.d $s6, $a0, 48
804 ; LA64F-NEXT: ld.d $a0, $a0, 16
805 ; LA64F-NEXT: move $fp, $a1
806 ; LA64F-NEXT: ori $a1, $zero, 0
807 ; LA64F-NEXT: lu32i.d $a1, -524288
808 ; LA64F-NEXT: lu52i.d $s7, $a1, 1024
809 ; LA64F-NEXT: move $a1, $s7
810 ; LA64F-NEXT: bl %plt(__adddf3)
811 ; LA64F-NEXT: st.d $a0, $sp, 8 # 8-byte Folded Spill
812 ; LA64F-NEXT: move $a0, $s6
813 ; LA64F-NEXT: move $a1, $s7
814 ; LA64F-NEXT: bl %plt(__adddf3)
815 ; LA64F-NEXT: move $s6, $a0
816 ; LA64F-NEXT: lu52i.d $s7, $zero, 1023
817 ; LA64F-NEXT: move $a0, $s5
818 ; LA64F-NEXT: move $a1, $s7
819 ; LA64F-NEXT: bl %plt(__adddf3)
820 ; LA64F-NEXT: move $s5, $a0
821 ; LA64F-NEXT: lu52i.d $s0, $zero, 1024
822 ; LA64F-NEXT: move $a0, $s4
823 ; LA64F-NEXT: move $a1, $s0
824 ; LA64F-NEXT: bl %plt(__adddf3)
825 ; LA64F-NEXT: move $s4, $a0
826 ; LA64F-NEXT: lu52i.d $s8, $zero, 1025
827 ; LA64F-NEXT: move $a0, $s3
828 ; LA64F-NEXT: move $a1, $s8
829 ; LA64F-NEXT: bl %plt(__adddf3)
830 ; LA64F-NEXT: move $s3, $a0
831 ; LA64F-NEXT: move $a0, $s2
832 ; LA64F-NEXT: move $a1, $s7
833 ; LA64F-NEXT: bl %plt(__adddf3)
834 ; LA64F-NEXT: move $s2, $a0
835 ; LA64F-NEXT: move $a0, $s1
836 ; LA64F-NEXT: move $a1, $s0
837 ; LA64F-NEXT: bl %plt(__adddf3)
838 ; LA64F-NEXT: move $s0, $a0
839 ; LA64F-NEXT: ld.d $a0, $sp, 16 # 8-byte Folded Reload
840 ; LA64F-NEXT: move $a1, $s8
841 ; LA64F-NEXT: bl %plt(__adddf3)
842 ; LA64F-NEXT: st.d $a0, $fp, 56
843 ; LA64F-NEXT: st.d $s0, $fp, 40
844 ; LA64F-NEXT: st.d $s2, $fp, 32
845 ; LA64F-NEXT: st.d $s3, $fp, 24
846 ; LA64F-NEXT: st.d $s4, $fp, 8
847 ; LA64F-NEXT: st.d $s5, $fp, 0
848 ; LA64F-NEXT: st.d $s6, $fp, 48
849 ; LA64F-NEXT: ld.d $a0, $sp, 8 # 8-byte Folded Reload
850 ; LA64F-NEXT: st.d $a0, $fp, 16
851 ; LA64F-NEXT: ld.d $s8, $sp, 24 # 8-byte Folded Reload
852 ; LA64F-NEXT: ld.d $s7, $sp, 32 # 8-byte Folded Reload
853 ; LA64F-NEXT: ld.d $s6, $sp, 40 # 8-byte Folded Reload
854 ; LA64F-NEXT: ld.d $s5, $sp, 48 # 8-byte Folded Reload
855 ; LA64F-NEXT: ld.d $s4, $sp, 56 # 8-byte Folded Reload
856 ; LA64F-NEXT: ld.d $s3, $sp, 64 # 8-byte Folded Reload
857 ; LA64F-NEXT: ld.d $s2, $sp, 72 # 8-byte Folded Reload
858 ; LA64F-NEXT: ld.d $s1, $sp, 80 # 8-byte Folded Reload
859 ; LA64F-NEXT: ld.d $s0, $sp, 88 # 8-byte Folded Reload
860 ; LA64F-NEXT: ld.d $fp, $sp, 96 # 8-byte Folded Reload
861 ; LA64F-NEXT: ld.d $ra, $sp, 104 # 8-byte Folded Reload
862 ; LA64F-NEXT: addi.d $sp, $sp, 112
865 ; LA64D-LABEL: test_d8:
867 ; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_0)
868 ; LA64D-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI6_0)
869 ; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_1)
870 ; LA64D-NEXT: vld $vr1, $a2, %pc_lo12(.LCPI6_1)
871 ; LA64D-NEXT: vld $vr2, $a0, 16
872 ; LA64D-NEXT: vld $vr3, $a0, 0
873 ; LA64D-NEXT: vld $vr4, $a0, 48
874 ; LA64D-NEXT: vld $vr5, $a0, 32
875 ; LA64D-NEXT: vfadd.d $vr2, $vr2, $vr0
876 ; LA64D-NEXT: vfadd.d $vr3, $vr3, $vr1
877 ; LA64D-NEXT: vfadd.d $vr0, $vr4, $vr0
878 ; LA64D-NEXT: vfadd.d $vr1, $vr5, $vr1
879 ; LA64D-NEXT: vst $vr1, $a1, 32
880 ; LA64D-NEXT: vst $vr0, $a1, 48
881 ; LA64D-NEXT: vst $vr3, $a1, 0
882 ; LA64D-NEXT: vst $vr2, $a1, 16
884 %p = load %d8, ptr %P
885 %R = fadd %d8 %p, < double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00 >