Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / LoongArch / vector-fp-imm.ll
blob8009866d3953e19bc30e9ca0c1d6bde2b4951ccd
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.
9 %f2 = type <2 x float>
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:
18 ; LA32F:       # %bb.0:
19 ; LA32F-NEXT:    fld.s $fa0, $a0, 12
20 ; LA32F-NEXT:    movgr2fr.w $fa1, $zero
21 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
22 ; LA32F-NEXT:    fst.s $fa0, $a1, 12
23 ; LA32F-NEXT:    fld.s $fa0, $a0, 8
24 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
25 ; LA32F-NEXT:    fst.s $fa0, $a1, 8
26 ; LA32F-NEXT:    fld.s $fa0, $a0, 4
27 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
28 ; LA32F-NEXT:    fst.s $fa0, $a1, 4
29 ; LA32F-NEXT:    fld.s $fa0, $a0, 0
30 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
31 ; LA32F-NEXT:    fst.s $fa0, $a1, 0
32 ; LA32F-NEXT:    ret
34 ; LA32D-LABEL: test_zero:
35 ; LA32D:       # %bb.0:
36 ; LA32D-NEXT:    fld.s $fa0, $a0, 12
37 ; LA32D-NEXT:    movgr2fr.w $fa1, $zero
38 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
39 ; LA32D-NEXT:    fst.s $fa0, $a1, 12
40 ; LA32D-NEXT:    fld.s $fa0, $a0, 8
41 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
42 ; LA32D-NEXT:    fst.s $fa0, $a1, 8
43 ; LA32D-NEXT:    fld.s $fa0, $a0, 4
44 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
45 ; LA32D-NEXT:    fst.s $fa0, $a1, 4
46 ; LA32D-NEXT:    fld.s $fa0, $a0, 0
47 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
48 ; LA32D-NEXT:    fst.s $fa0, $a1, 0
49 ; LA32D-NEXT:    ret
51 ; LA64F-LABEL: test_zero:
52 ; LA64F:       # %bb.0:
53 ; LA64F-NEXT:    fld.s $fa0, $a0, 12
54 ; LA64F-NEXT:    movgr2fr.w $fa1, $zero
55 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
56 ; LA64F-NEXT:    fst.s $fa0, $a1, 12
57 ; LA64F-NEXT:    fld.s $fa0, $a0, 8
58 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
59 ; LA64F-NEXT:    fst.s $fa0, $a1, 8
60 ; LA64F-NEXT:    fld.s $fa0, $a0, 4
61 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
62 ; LA64F-NEXT:    fst.s $fa0, $a1, 4
63 ; LA64F-NEXT:    fld.s $fa0, $a0, 0
64 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
65 ; LA64F-NEXT:    fst.s $fa0, $a1, 0
66 ; LA64F-NEXT:    ret
68 ; LA64D-LABEL: test_zero:
69 ; LA64D:       # %bb.0:
70 ; LA64D-NEXT:    fld.s $fa0, $a0, 12
71 ; LA64D-NEXT:    movgr2fr.w $fa1, $zero
72 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
73 ; LA64D-NEXT:    fst.s $fa0, $a1, 12
74 ; LA64D-NEXT:    fld.s $fa0, $a0, 8
75 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
76 ; LA64D-NEXT:    fst.s $fa0, $a1, 8
77 ; LA64D-NEXT:    fld.s $fa0, $a0, 4
78 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
79 ; LA64D-NEXT:    fst.s $fa0, $a1, 4
80 ; LA64D-NEXT:    fld.s $fa0, $a0, 0
81 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
82 ; LA64D-NEXT:    fst.s $fa0, $a1, 0
83 ; LA64D-NEXT:    ret
84   %p = load %f4, ptr %P
85   %R = fadd %f4 %p, zeroinitializer
86   store %f4 %R, ptr %S
87   ret void
90 define void @test_f2(ptr %P, ptr %S) nounwind {
91 ; LA32F-LABEL: test_f2:
92 ; LA32F:       # %bb.0:
93 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI1_0)
94 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI1_0)
95 ; LA32F-NEXT:    fld.s $fa0, $a2, 0
96 ; LA32F-NEXT:    fld.s $fa1, $a0, 4
97 ; LA32F-NEXT:    fadd.s $fa0, $fa1, $fa0
98 ; LA32F-NEXT:    fst.s $fa0, $a1, 4
99 ; LA32F-NEXT:    fld.s $fa0, $a0, 0
100 ; LA32F-NEXT:    addi.w $a0, $zero, 1
101 ; LA32F-NEXT:    movgr2fr.w $fa1, $a0
102 ; LA32F-NEXT:    ffint.s.w $fa1, $fa1
103 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
104 ; LA32F-NEXT:    fst.s $fa0, $a1, 0
105 ; LA32F-NEXT:    ret
107 ; LA32D-LABEL: test_f2:
108 ; LA32D:       # %bb.0:
109 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI1_0)
110 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI1_0)
111 ; LA32D-NEXT:    fld.s $fa0, $a2, 0
112 ; LA32D-NEXT:    fld.s $fa1, $a0, 4
113 ; LA32D-NEXT:    fadd.s $fa0, $fa1, $fa0
114 ; LA32D-NEXT:    fst.s $fa0, $a1, 4
115 ; LA32D-NEXT:    fld.s $fa0, $a0, 0
116 ; LA32D-NEXT:    addi.w $a0, $zero, 1
117 ; LA32D-NEXT:    movgr2fr.w $fa1, $a0
118 ; LA32D-NEXT:    ffint.s.w $fa1, $fa1
119 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
120 ; LA32D-NEXT:    fst.s $fa0, $a1, 0
121 ; LA32D-NEXT:    ret
123 ; LA64F-LABEL: test_f2:
124 ; LA64F:       # %bb.0:
125 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI1_0)
126 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI1_0)
127 ; LA64F-NEXT:    fld.s $fa0, $a2, 0
128 ; LA64F-NEXT:    fld.s $fa1, $a0, 4
129 ; LA64F-NEXT:    fadd.s $fa0, $fa1, $fa0
130 ; LA64F-NEXT:    fst.s $fa0, $a1, 4
131 ; LA64F-NEXT:    fld.s $fa0, $a0, 0
132 ; LA64F-NEXT:    addi.w $a0, $zero, 1
133 ; LA64F-NEXT:    movgr2fr.w $fa1, $a0
134 ; LA64F-NEXT:    ffint.s.w $fa1, $fa1
135 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
136 ; LA64F-NEXT:    fst.s $fa0, $a1, 0
137 ; LA64F-NEXT:    ret
139 ; LA64D-LABEL: test_f2:
140 ; LA64D:       # %bb.0:
141 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI1_0)
142 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI1_0)
143 ; LA64D-NEXT:    fld.s $fa0, $a2, 0
144 ; LA64D-NEXT:    fld.s $fa1, $a0, 4
145 ; LA64D-NEXT:    fadd.s $fa0, $fa1, $fa0
146 ; LA64D-NEXT:    fst.s $fa0, $a1, 4
147 ; LA64D-NEXT:    fld.s $fa0, $a0, 0
148 ; LA64D-NEXT:    addi.w $a0, $zero, 1
149 ; LA64D-NEXT:    movgr2fr.w $fa1, $a0
150 ; LA64D-NEXT:    ffint.s.w $fa1, $fa1
151 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
152 ; LA64D-NEXT:    fst.s $fa0, $a1, 0
153 ; LA64D-NEXT:    ret
154   %p = load %f2, ptr %P
155   %R = fadd %f2 %p, < float 1.000000e+00, float 2.000000e+00 >
156   store %f2 %R, ptr %S
157   ret void
160 define void @test_f4(ptr %P, ptr %S) nounwind {
161 ; LA32F-LABEL: test_f4:
162 ; LA32F:       # %bb.0:
163 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_0)
164 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_0)
165 ; LA32F-NEXT:    fld.s $fa0, $a2, 0
166 ; LA32F-NEXT:    fld.s $fa1, $a0, 4
167 ; LA32F-NEXT:    fadd.s $fa0, $fa1, $fa0
168 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_1)
169 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_1)
170 ; LA32F-NEXT:    fld.s $fa1, $a2, 0
171 ; LA32F-NEXT:    fld.s $fa2, $a0, 8
172 ; LA32F-NEXT:    fadd.s $fa1, $fa2, $fa1
173 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_2)
174 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_2)
175 ; LA32F-NEXT:    fld.s $fa2, $a2, 0
176 ; LA32F-NEXT:    fld.s $fa3, $a0, 12
177 ; LA32F-NEXT:    fadd.s $fa2, $fa3, $fa2
178 ; LA32F-NEXT:    fst.s $fa2, $a1, 12
179 ; LA32F-NEXT:    fst.s $fa1, $a1, 8
180 ; LA32F-NEXT:    fst.s $fa0, $a1, 4
181 ; LA32F-NEXT:    fld.s $fa0, $a0, 0
182 ; LA32F-NEXT:    addi.w $a0, $zero, 1
183 ; LA32F-NEXT:    movgr2fr.w $fa1, $a0
184 ; LA32F-NEXT:    ffint.s.w $fa1, $fa1
185 ; LA32F-NEXT:    fadd.s $fa0, $fa0, $fa1
186 ; LA32F-NEXT:    fst.s $fa0, $a1, 0
187 ; LA32F-NEXT:    ret
189 ; LA32D-LABEL: test_f4:
190 ; LA32D:       # %bb.0:
191 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_0)
192 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_0)
193 ; LA32D-NEXT:    fld.s $fa0, $a2, 0
194 ; LA32D-NEXT:    fld.s $fa1, $a0, 4
195 ; LA32D-NEXT:    fadd.s $fa0, $fa1, $fa0
196 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_1)
197 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_1)
198 ; LA32D-NEXT:    fld.s $fa1, $a2, 0
199 ; LA32D-NEXT:    fld.s $fa2, $a0, 8
200 ; LA32D-NEXT:    fadd.s $fa1, $fa2, $fa1
201 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_2)
202 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI2_2)
203 ; LA32D-NEXT:    fld.s $fa2, $a2, 0
204 ; LA32D-NEXT:    fld.s $fa3, $a0, 12
205 ; LA32D-NEXT:    fadd.s $fa2, $fa3, $fa2
206 ; LA32D-NEXT:    fst.s $fa2, $a1, 12
207 ; LA32D-NEXT:    fst.s $fa1, $a1, 8
208 ; LA32D-NEXT:    fst.s $fa0, $a1, 4
209 ; LA32D-NEXT:    fld.s $fa0, $a0, 0
210 ; LA32D-NEXT:    addi.w $a0, $zero, 1
211 ; LA32D-NEXT:    movgr2fr.w $fa1, $a0
212 ; LA32D-NEXT:    ffint.s.w $fa1, $fa1
213 ; LA32D-NEXT:    fadd.s $fa0, $fa0, $fa1
214 ; LA32D-NEXT:    fst.s $fa0, $a1, 0
215 ; LA32D-NEXT:    ret
217 ; LA64F-LABEL: test_f4:
218 ; LA64F:       # %bb.0:
219 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_0)
220 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_0)
221 ; LA64F-NEXT:    fld.s $fa0, $a2, 0
222 ; LA64F-NEXT:    fld.s $fa1, $a0, 4
223 ; LA64F-NEXT:    fadd.s $fa0, $fa1, $fa0
224 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_1)
225 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_1)
226 ; LA64F-NEXT:    fld.s $fa1, $a2, 0
227 ; LA64F-NEXT:    fld.s $fa2, $a0, 8
228 ; LA64F-NEXT:    fadd.s $fa1, $fa2, $fa1
229 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_2)
230 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_2)
231 ; LA64F-NEXT:    fld.s $fa2, $a2, 0
232 ; LA64F-NEXT:    fld.s $fa3, $a0, 12
233 ; LA64F-NEXT:    fadd.s $fa2, $fa3, $fa2
234 ; LA64F-NEXT:    fst.s $fa2, $a1, 12
235 ; LA64F-NEXT:    fst.s $fa1, $a1, 8
236 ; LA64F-NEXT:    fst.s $fa0, $a1, 4
237 ; LA64F-NEXT:    fld.s $fa0, $a0, 0
238 ; LA64F-NEXT:    addi.w $a0, $zero, 1
239 ; LA64F-NEXT:    movgr2fr.w $fa1, $a0
240 ; LA64F-NEXT:    ffint.s.w $fa1, $fa1
241 ; LA64F-NEXT:    fadd.s $fa0, $fa0, $fa1
242 ; LA64F-NEXT:    fst.s $fa0, $a1, 0
243 ; LA64F-NEXT:    ret
245 ; LA64D-LABEL: test_f4:
246 ; LA64D:       # %bb.0:
247 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_0)
248 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_0)
249 ; LA64D-NEXT:    fld.s $fa0, $a2, 0
250 ; LA64D-NEXT:    fld.s $fa1, $a0, 4
251 ; LA64D-NEXT:    fadd.s $fa0, $fa1, $fa0
252 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_1)
253 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_1)
254 ; LA64D-NEXT:    fld.s $fa1, $a2, 0
255 ; LA64D-NEXT:    fld.s $fa2, $a0, 8
256 ; LA64D-NEXT:    fadd.s $fa1, $fa2, $fa1
257 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI2_2)
258 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI2_2)
259 ; LA64D-NEXT:    fld.s $fa2, $a2, 0
260 ; LA64D-NEXT:    fld.s $fa3, $a0, 12
261 ; LA64D-NEXT:    fadd.s $fa2, $fa3, $fa2
262 ; LA64D-NEXT:    fst.s $fa2, $a1, 12
263 ; LA64D-NEXT:    fst.s $fa1, $a1, 8
264 ; LA64D-NEXT:    fst.s $fa0, $a1, 4
265 ; LA64D-NEXT:    fld.s $fa0, $a0, 0
266 ; LA64D-NEXT:    addi.w $a0, $zero, 1
267 ; LA64D-NEXT:    movgr2fr.w $fa1, $a0
268 ; LA64D-NEXT:    ffint.s.w $fa1, $fa1
269 ; LA64D-NEXT:    fadd.s $fa0, $fa0, $fa1
270 ; LA64D-NEXT:    fst.s $fa0, $a1, 0
271 ; LA64D-NEXT:    ret
272   %p = load %f4, ptr %P
273   %R = fadd %f4 %p, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 >
274   store %f4 %R, ptr %S
275   ret void
278 define void @test_f8(ptr %P, ptr %S) nounwind {
279 ; LA32F-LABEL: test_f8:
280 ; LA32F:       # %bb.0:
281 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_0)
282 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_0)
283 ; LA32F-NEXT:    fld.s $fa0, $a2, 0
284 ; LA32F-NEXT:    fld.s $fa1, $a0, 4
285 ; LA32F-NEXT:    fadd.s $fa1, $fa1, $fa0
286 ; LA32F-NEXT:    fld.s $fa2, $a0, 20
287 ; LA32F-NEXT:    fadd.s $fa0, $fa2, $fa0
288 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_1)
289 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_1)
290 ; LA32F-NEXT:    fld.s $fa2, $a2, 0
291 ; LA32F-NEXT:    fld.s $fa3, $a0, 8
292 ; LA32F-NEXT:    fadd.s $fa3, $fa3, $fa2
293 ; LA32F-NEXT:    fld.s $fa4, $a0, 24
294 ; LA32F-NEXT:    fadd.s $fa2, $fa4, $fa2
295 ; LA32F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_2)
296 ; LA32F-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_2)
297 ; LA32F-NEXT:    fld.s $fa4, $a2, 0
298 ; LA32F-NEXT:    fld.s $fa5, $a0, 12
299 ; LA32F-NEXT:    fadd.s $fa5, $fa5, $fa4
300 ; LA32F-NEXT:    fld.s $fa6, $a0, 28
301 ; LA32F-NEXT:    fadd.s $fa4, $fa6, $fa4
302 ; LA32F-NEXT:    fst.s $fa4, $a1, 28
303 ; LA32F-NEXT:    fst.s $fa2, $a1, 24
304 ; LA32F-NEXT:    fst.s $fa0, $a1, 20
305 ; LA32F-NEXT:    fst.s $fa5, $a1, 12
306 ; LA32F-NEXT:    fst.s $fa3, $a1, 8
307 ; LA32F-NEXT:    fst.s $fa1, $a1, 4
308 ; LA32F-NEXT:    addi.w $a2, $zero, 1
309 ; LA32F-NEXT:    movgr2fr.w $fa0, $a2
310 ; LA32F-NEXT:    ffint.s.w $fa0, $fa0
311 ; LA32F-NEXT:    fld.s $fa1, $a0, 16
312 ; LA32F-NEXT:    fadd.s $fa1, $fa1, $fa0
313 ; LA32F-NEXT:    fst.s $fa1, $a1, 16
314 ; LA32F-NEXT:    fld.s $fa1, $a0, 0
315 ; LA32F-NEXT:    fadd.s $fa0, $fa1, $fa0
316 ; LA32F-NEXT:    fst.s $fa0, $a1, 0
317 ; LA32F-NEXT:    ret
319 ; LA32D-LABEL: test_f8:
320 ; LA32D:       # %bb.0:
321 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_0)
322 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_0)
323 ; LA32D-NEXT:    fld.s $fa0, $a2, 0
324 ; LA32D-NEXT:    fld.s $fa1, $a0, 4
325 ; LA32D-NEXT:    fadd.s $fa1, $fa1, $fa0
326 ; LA32D-NEXT:    fld.s $fa2, $a0, 20
327 ; LA32D-NEXT:    fadd.s $fa0, $fa2, $fa0
328 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_1)
329 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_1)
330 ; LA32D-NEXT:    fld.s $fa2, $a2, 0
331 ; LA32D-NEXT:    fld.s $fa3, $a0, 8
332 ; LA32D-NEXT:    fadd.s $fa3, $fa3, $fa2
333 ; LA32D-NEXT:    fld.s $fa4, $a0, 24
334 ; LA32D-NEXT:    fadd.s $fa2, $fa4, $fa2
335 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_2)
336 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI3_2)
337 ; LA32D-NEXT:    fld.s $fa4, $a2, 0
338 ; LA32D-NEXT:    fld.s $fa5, $a0, 12
339 ; LA32D-NEXT:    fadd.s $fa5, $fa5, $fa4
340 ; LA32D-NEXT:    fld.s $fa6, $a0, 28
341 ; LA32D-NEXT:    fadd.s $fa4, $fa6, $fa4
342 ; LA32D-NEXT:    fst.s $fa4, $a1, 28
343 ; LA32D-NEXT:    fst.s $fa2, $a1, 24
344 ; LA32D-NEXT:    fst.s $fa0, $a1, 20
345 ; LA32D-NEXT:    fst.s $fa5, $a1, 12
346 ; LA32D-NEXT:    fst.s $fa3, $a1, 8
347 ; LA32D-NEXT:    fst.s $fa1, $a1, 4
348 ; LA32D-NEXT:    addi.w $a2, $zero, 1
349 ; LA32D-NEXT:    movgr2fr.w $fa0, $a2
350 ; LA32D-NEXT:    ffint.s.w $fa0, $fa0
351 ; LA32D-NEXT:    fld.s $fa1, $a0, 16
352 ; LA32D-NEXT:    fadd.s $fa1, $fa1, $fa0
353 ; LA32D-NEXT:    fst.s $fa1, $a1, 16
354 ; LA32D-NEXT:    fld.s $fa1, $a0, 0
355 ; LA32D-NEXT:    fadd.s $fa0, $fa1, $fa0
356 ; LA32D-NEXT:    fst.s $fa0, $a1, 0
357 ; LA32D-NEXT:    ret
359 ; LA64F-LABEL: test_f8:
360 ; LA64F:       # %bb.0:
361 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_0)
362 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_0)
363 ; LA64F-NEXT:    fld.s $fa0, $a2, 0
364 ; LA64F-NEXT:    fld.s $fa1, $a0, 4
365 ; LA64F-NEXT:    fadd.s $fa1, $fa1, $fa0
366 ; LA64F-NEXT:    fld.s $fa2, $a0, 20
367 ; LA64F-NEXT:    fadd.s $fa0, $fa2, $fa0
368 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_1)
369 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_1)
370 ; LA64F-NEXT:    fld.s $fa2, $a2, 0
371 ; LA64F-NEXT:    fld.s $fa3, $a0, 8
372 ; LA64F-NEXT:    fadd.s $fa3, $fa3, $fa2
373 ; LA64F-NEXT:    fld.s $fa4, $a0, 24
374 ; LA64F-NEXT:    fadd.s $fa2, $fa4, $fa2
375 ; LA64F-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_2)
376 ; LA64F-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_2)
377 ; LA64F-NEXT:    fld.s $fa4, $a2, 0
378 ; LA64F-NEXT:    fld.s $fa5, $a0, 12
379 ; LA64F-NEXT:    fadd.s $fa5, $fa5, $fa4
380 ; LA64F-NEXT:    fld.s $fa6, $a0, 28
381 ; LA64F-NEXT:    fadd.s $fa4, $fa6, $fa4
382 ; LA64F-NEXT:    fst.s $fa4, $a1, 28
383 ; LA64F-NEXT:    fst.s $fa2, $a1, 24
384 ; LA64F-NEXT:    fst.s $fa0, $a1, 20
385 ; LA64F-NEXT:    fst.s $fa5, $a1, 12
386 ; LA64F-NEXT:    fst.s $fa3, $a1, 8
387 ; LA64F-NEXT:    fst.s $fa1, $a1, 4
388 ; LA64F-NEXT:    addi.w $a2, $zero, 1
389 ; LA64F-NEXT:    movgr2fr.w $fa0, $a2
390 ; LA64F-NEXT:    ffint.s.w $fa0, $fa0
391 ; LA64F-NEXT:    fld.s $fa1, $a0, 16
392 ; LA64F-NEXT:    fadd.s $fa1, $fa1, $fa0
393 ; LA64F-NEXT:    fst.s $fa1, $a1, 16
394 ; LA64F-NEXT:    fld.s $fa1, $a0, 0
395 ; LA64F-NEXT:    fadd.s $fa0, $fa1, $fa0
396 ; LA64F-NEXT:    fst.s $fa0, $a1, 0
397 ; LA64F-NEXT:    ret
399 ; LA64D-LABEL: test_f8:
400 ; LA64D:       # %bb.0:
401 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_0)
402 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_0)
403 ; LA64D-NEXT:    fld.s $fa0, $a2, 0
404 ; LA64D-NEXT:    fld.s $fa1, $a0, 4
405 ; LA64D-NEXT:    fadd.s $fa1, $fa1, $fa0
406 ; LA64D-NEXT:    fld.s $fa2, $a0, 20
407 ; LA64D-NEXT:    fadd.s $fa0, $fa2, $fa0
408 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_1)
409 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_1)
410 ; LA64D-NEXT:    fld.s $fa2, $a2, 0
411 ; LA64D-NEXT:    fld.s $fa3, $a0, 8
412 ; LA64D-NEXT:    fadd.s $fa3, $fa3, $fa2
413 ; LA64D-NEXT:    fld.s $fa4, $a0, 24
414 ; LA64D-NEXT:    fadd.s $fa2, $fa4, $fa2
415 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI3_2)
416 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI3_2)
417 ; LA64D-NEXT:    fld.s $fa4, $a2, 0
418 ; LA64D-NEXT:    fld.s $fa5, $a0, 12
419 ; LA64D-NEXT:    fadd.s $fa5, $fa5, $fa4
420 ; LA64D-NEXT:    fld.s $fa6, $a0, 28
421 ; LA64D-NEXT:    fadd.s $fa4, $fa6, $fa4
422 ; LA64D-NEXT:    fst.s $fa4, $a1, 28
423 ; LA64D-NEXT:    fst.s $fa2, $a1, 24
424 ; LA64D-NEXT:    fst.s $fa0, $a1, 20
425 ; LA64D-NEXT:    fst.s $fa5, $a1, 12
426 ; LA64D-NEXT:    fst.s $fa3, $a1, 8
427 ; LA64D-NEXT:    fst.s $fa1, $a1, 4
428 ; LA64D-NEXT:    addi.w $a2, $zero, 1
429 ; LA64D-NEXT:    movgr2fr.w $fa0, $a2
430 ; LA64D-NEXT:    ffint.s.w $fa0, $fa0
431 ; LA64D-NEXT:    fld.s $fa1, $a0, 16
432 ; LA64D-NEXT:    fadd.s $fa1, $fa1, $fa0
433 ; LA64D-NEXT:    fst.s $fa1, $a1, 16
434 ; LA64D-NEXT:    fld.s $fa1, $a0, 0
435 ; LA64D-NEXT:    fadd.s $fa0, $fa1, $fa0
436 ; LA64D-NEXT:    fst.s $fa0, $a1, 0
437 ; LA64D-NEXT:    ret
438   %p = load %f8, ptr %P
439   %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 >
440   store %f8 %R, ptr %S
441   ret void
444 define void @test_d2(ptr %P, ptr %S) nounwind {
445 ; LA32F-LABEL: test_d2:
446 ; LA32F:       # %bb.0:
447 ; LA32F-NEXT:    addi.w $sp, $sp, -16
448 ; LA32F-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
449 ; LA32F-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
450 ; LA32F-NEXT:    st.w $s0, $sp, 4 # 4-byte Folded Spill
451 ; LA32F-NEXT:    move $fp, $a1
452 ; LA32F-NEXT:    move $s0, $a0
453 ; LA32F-NEXT:    ld.w $a0, $a0, 8
454 ; LA32F-NEXT:    ld.w $a1, $s0, 12
455 ; LA32F-NEXT:    lu12i.w $a3, 262144
456 ; LA32F-NEXT:    move $a2, $zero
457 ; LA32F-NEXT:    bl %plt(__adddf3)
458 ; LA32F-NEXT:    st.w $a0, $fp, 8
459 ; LA32F-NEXT:    st.w $a1, $fp, 12
460 ; LA32F-NEXT:    ld.w $a0, $s0, 0
461 ; LA32F-NEXT:    ld.w $a1, $s0, 4
462 ; LA32F-NEXT:    lu12i.w $a3, 261888
463 ; LA32F-NEXT:    move $a2, $zero
464 ; LA32F-NEXT:    bl %plt(__adddf3)
465 ; LA32F-NEXT:    st.w $a0, $fp, 0
466 ; LA32F-NEXT:    st.w $a1, $fp, 4
467 ; LA32F-NEXT:    ld.w $s0, $sp, 4 # 4-byte Folded Reload
468 ; LA32F-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
469 ; LA32F-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
470 ; LA32F-NEXT:    addi.w $sp, $sp, 16
471 ; LA32F-NEXT:    ret
473 ; LA32D-LABEL: test_d2:
474 ; LA32D:       # %bb.0:
475 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI4_0)
476 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI4_0)
477 ; LA32D-NEXT:    fld.d $fa0, $a2, 0
478 ; LA32D-NEXT:    fld.d $fa1, $a0, 8
479 ; LA32D-NEXT:    fadd.d $fa0, $fa1, $fa0
480 ; LA32D-NEXT:    fst.d $fa0, $a1, 8
481 ; LA32D-NEXT:    fld.d $fa0, $a0, 0
482 ; LA32D-NEXT:    addi.w $a0, $zero, 1
483 ; LA32D-NEXT:    movgr2fr.w $fa1, $a0
484 ; LA32D-NEXT:    ffint.s.w $fa1, $fa1
485 ; LA32D-NEXT:    fcvt.d.s $fa1, $fa1
486 ; LA32D-NEXT:    fadd.d $fa0, $fa0, $fa1
487 ; LA32D-NEXT:    fst.d $fa0, $a1, 0
488 ; LA32D-NEXT:    ret
490 ; LA64F-LABEL: test_d2:
491 ; LA64F:       # %bb.0:
492 ; LA64F-NEXT:    addi.d $sp, $sp, -32
493 ; LA64F-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
494 ; LA64F-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
495 ; LA64F-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill
496 ; LA64F-NEXT:    move $fp, $a1
497 ; LA64F-NEXT:    move $s0, $a0
498 ; LA64F-NEXT:    ld.d $a0, $a0, 8
499 ; LA64F-NEXT:    lu52i.d $a1, $zero, 1024
500 ; LA64F-NEXT:    bl %plt(__adddf3)
501 ; LA64F-NEXT:    st.d $a0, $fp, 8
502 ; LA64F-NEXT:    ld.d $a0, $s0, 0
503 ; LA64F-NEXT:    lu52i.d $a1, $zero, 1023
504 ; LA64F-NEXT:    bl %plt(__adddf3)
505 ; LA64F-NEXT:    st.d $a0, $fp, 0
506 ; LA64F-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload
507 ; LA64F-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
508 ; LA64F-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
509 ; LA64F-NEXT:    addi.d $sp, $sp, 32
510 ; LA64F-NEXT:    ret
512 ; LA64D-LABEL: test_d2:
513 ; LA64D:       # %bb.0:
514 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI4_0)
515 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI4_0)
516 ; LA64D-NEXT:    fld.d $fa0, $a2, 0
517 ; LA64D-NEXT:    fld.d $fa1, $a0, 8
518 ; LA64D-NEXT:    fadd.d $fa0, $fa1, $fa0
519 ; LA64D-NEXT:    fst.d $fa0, $a1, 8
520 ; LA64D-NEXT:    fld.d $fa0, $a0, 0
521 ; LA64D-NEXT:    addi.d $a0, $zero, 1
522 ; LA64D-NEXT:    movgr2fr.d $fa1, $a0
523 ; LA64D-NEXT:    ffint.d.l $fa1, $fa1
524 ; LA64D-NEXT:    fadd.d $fa0, $fa0, $fa1
525 ; LA64D-NEXT:    fst.d $fa0, $a1, 0
526 ; LA64D-NEXT:    ret
527   %p = load %d2, ptr %P
528   %R = fadd %d2 %p, < double 1.000000e+00, double 2.000000e+00 >
529   store %d2 %R, ptr %S
530   ret void
533 define void @test_d4(ptr %P, ptr %S) nounwind {
534 ; LA32F-LABEL: test_d4:
535 ; LA32F:       # %bb.0:
536 ; LA32F-NEXT:    addi.w $sp, $sp, -16
537 ; LA32F-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
538 ; LA32F-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
539 ; LA32F-NEXT:    st.w $s0, $sp, 4 # 4-byte Folded Spill
540 ; LA32F-NEXT:    move $fp, $a1
541 ; LA32F-NEXT:    move $s0, $a0
542 ; LA32F-NEXT:    ld.w $a0, $a0, 24
543 ; LA32F-NEXT:    ld.w $a1, $s0, 28
544 ; LA32F-NEXT:    lu12i.w $a3, 262400
545 ; LA32F-NEXT:    move $a2, $zero
546 ; LA32F-NEXT:    bl %plt(__adddf3)
547 ; LA32F-NEXT:    st.w $a0, $fp, 24
548 ; LA32F-NEXT:    st.w $a1, $fp, 28
549 ; LA32F-NEXT:    ld.w $a0, $s0, 16
550 ; LA32F-NEXT:    ld.w $a1, $s0, 20
551 ; LA32F-NEXT:    lu12i.w $a3, 262272
552 ; LA32F-NEXT:    move $a2, $zero
553 ; LA32F-NEXT:    bl %plt(__adddf3)
554 ; LA32F-NEXT:    st.w $a0, $fp, 16
555 ; LA32F-NEXT:    st.w $a1, $fp, 20
556 ; LA32F-NEXT:    ld.w $a0, $s0, 8
557 ; LA32F-NEXT:    ld.w $a1, $s0, 12
558 ; LA32F-NEXT:    lu12i.w $a3, 262144
559 ; LA32F-NEXT:    move $a2, $zero
560 ; LA32F-NEXT:    bl %plt(__adddf3)
561 ; LA32F-NEXT:    st.w $a0, $fp, 8
562 ; LA32F-NEXT:    st.w $a1, $fp, 12
563 ; LA32F-NEXT:    ld.w $a0, $s0, 0
564 ; LA32F-NEXT:    ld.w $a1, $s0, 4
565 ; LA32F-NEXT:    lu12i.w $a3, 261888
566 ; LA32F-NEXT:    move $a2, $zero
567 ; LA32F-NEXT:    bl %plt(__adddf3)
568 ; LA32F-NEXT:    st.w $a0, $fp, 0
569 ; LA32F-NEXT:    st.w $a1, $fp, 4
570 ; LA32F-NEXT:    ld.w $s0, $sp, 4 # 4-byte Folded Reload
571 ; LA32F-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
572 ; LA32F-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
573 ; LA32F-NEXT:    addi.w $sp, $sp, 16
574 ; LA32F-NEXT:    ret
576 ; LA32D-LABEL: test_d4:
577 ; LA32D:       # %bb.0:
578 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_0)
579 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI5_0)
580 ; LA32D-NEXT:    fld.d $fa0, $a2, 0
581 ; LA32D-NEXT:    fld.d $fa1, $a0, 8
582 ; LA32D-NEXT:    fadd.d $fa0, $fa1, $fa0
583 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_1)
584 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI5_1)
585 ; LA32D-NEXT:    fld.d $fa1, $a2, 0
586 ; LA32D-NEXT:    fld.d $fa2, $a0, 16
587 ; LA32D-NEXT:    fadd.d $fa1, $fa2, $fa1
588 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_2)
589 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI5_2)
590 ; LA32D-NEXT:    fld.d $fa2, $a2, 0
591 ; LA32D-NEXT:    fld.d $fa3, $a0, 24
592 ; LA32D-NEXT:    fadd.d $fa2, $fa3, $fa2
593 ; LA32D-NEXT:    fst.d $fa2, $a1, 24
594 ; LA32D-NEXT:    fst.d $fa1, $a1, 16
595 ; LA32D-NEXT:    fst.d $fa0, $a1, 8
596 ; LA32D-NEXT:    fld.d $fa0, $a0, 0
597 ; LA32D-NEXT:    addi.w $a0, $zero, 1
598 ; LA32D-NEXT:    movgr2fr.w $fa1, $a0
599 ; LA32D-NEXT:    ffint.s.w $fa1, $fa1
600 ; LA32D-NEXT:    fcvt.d.s $fa1, $fa1
601 ; LA32D-NEXT:    fadd.d $fa0, $fa0, $fa1
602 ; LA32D-NEXT:    fst.d $fa0, $a1, 0
603 ; LA32D-NEXT:    ret
605 ; LA64F-LABEL: test_d4:
606 ; LA64F:       # %bb.0:
607 ; LA64F-NEXT:    addi.d $sp, $sp, -32
608 ; LA64F-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
609 ; LA64F-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
610 ; LA64F-NEXT:    st.d $s0, $sp, 8 # 8-byte Folded Spill
611 ; LA64F-NEXT:    move $fp, $a1
612 ; LA64F-NEXT:    move $s0, $a0
613 ; LA64F-NEXT:    ld.d $a0, $a0, 24
614 ; LA64F-NEXT:    lu52i.d $a1, $zero, 1025
615 ; LA64F-NEXT:    bl %plt(__adddf3)
616 ; LA64F-NEXT:    st.d $a0, $fp, 24
617 ; LA64F-NEXT:    ld.d $a0, $s0, 8
618 ; LA64F-NEXT:    lu52i.d $a1, $zero, 1024
619 ; LA64F-NEXT:    bl %plt(__adddf3)
620 ; LA64F-NEXT:    st.d $a0, $fp, 8
621 ; LA64F-NEXT:    ld.d $a0, $s0, 0
622 ; LA64F-NEXT:    lu52i.d $a1, $zero, 1023
623 ; LA64F-NEXT:    bl %plt(__adddf3)
624 ; LA64F-NEXT:    st.d $a0, $fp, 0
625 ; LA64F-NEXT:    ld.d $a0, $s0, 16
626 ; LA64F-NEXT:    ori $a1, $zero, 0
627 ; LA64F-NEXT:    lu32i.d $a1, -524288
628 ; LA64F-NEXT:    lu52i.d $a1, $a1, 1024
629 ; LA64F-NEXT:    bl %plt(__adddf3)
630 ; LA64F-NEXT:    st.d $a0, $fp, 16
631 ; LA64F-NEXT:    ld.d $s0, $sp, 8 # 8-byte Folded Reload
632 ; LA64F-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
633 ; LA64F-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
634 ; LA64F-NEXT:    addi.d $sp, $sp, 32
635 ; LA64F-NEXT:    ret
637 ; LA64D-LABEL: test_d4:
638 ; LA64D:       # %bb.0:
639 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_0)
640 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI5_0)
641 ; LA64D-NEXT:    fld.d $fa0, $a2, 0
642 ; LA64D-NEXT:    fld.d $fa1, $a0, 8
643 ; LA64D-NEXT:    fadd.d $fa0, $fa1, $fa0
644 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_1)
645 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI5_1)
646 ; LA64D-NEXT:    fld.d $fa1, $a2, 0
647 ; LA64D-NEXT:    fld.d $fa2, $a0, 16
648 ; LA64D-NEXT:    fadd.d $fa1, $fa2, $fa1
649 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI5_2)
650 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI5_2)
651 ; LA64D-NEXT:    fld.d $fa2, $a2, 0
652 ; LA64D-NEXT:    fld.d $fa3, $a0, 24
653 ; LA64D-NEXT:    fadd.d $fa2, $fa3, $fa2
654 ; LA64D-NEXT:    fst.d $fa2, $a1, 24
655 ; LA64D-NEXT:    fst.d $fa1, $a1, 16
656 ; LA64D-NEXT:    fst.d $fa0, $a1, 8
657 ; LA64D-NEXT:    fld.d $fa0, $a0, 0
658 ; LA64D-NEXT:    addi.d $a0, $zero, 1
659 ; LA64D-NEXT:    movgr2fr.d $fa1, $a0
660 ; LA64D-NEXT:    ffint.d.l $fa1, $fa1
661 ; LA64D-NEXT:    fadd.d $fa0, $fa0, $fa1
662 ; LA64D-NEXT:    fst.d $fa0, $a1, 0
663 ; LA64D-NEXT:    ret
664   %p = load %d4, ptr %P
665   %R = fadd %d4 %p, < double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00 >
666   store %d4 %R, ptr %S
667   ret void
670 define void @test_d8(ptr %P, ptr %S) nounwind {
671 ; LA32F-LABEL: test_d8:
672 ; LA32F:       # %bb.0:
673 ; LA32F-NEXT:    addi.w $sp, $sp, -32
674 ; LA32F-NEXT:    st.w $ra, $sp, 28 # 4-byte Folded Spill
675 ; LA32F-NEXT:    st.w $fp, $sp, 24 # 4-byte Folded Spill
676 ; LA32F-NEXT:    st.w $s0, $sp, 20 # 4-byte Folded Spill
677 ; LA32F-NEXT:    st.w $s1, $sp, 16 # 4-byte Folded Spill
678 ; LA32F-NEXT:    st.w $s2, $sp, 12 # 4-byte Folded Spill
679 ; LA32F-NEXT:    st.w $s3, $sp, 8 # 4-byte Folded Spill
680 ; LA32F-NEXT:    st.w $s4, $sp, 4 # 4-byte Folded Spill
681 ; LA32F-NEXT:    move $fp, $a1
682 ; LA32F-NEXT:    move $s0, $a0
683 ; LA32F-NEXT:    ld.w $a0, $a0, 56
684 ; LA32F-NEXT:    ld.w $a1, $s0, 60
685 ; LA32F-NEXT:    lu12i.w $s1, 262400
686 ; LA32F-NEXT:    move $a2, $zero
687 ; LA32F-NEXT:    move $a3, $s1
688 ; LA32F-NEXT:    bl %plt(__adddf3)
689 ; LA32F-NEXT:    st.w $a0, $fp, 56
690 ; LA32F-NEXT:    st.w $a1, $fp, 60
691 ; LA32F-NEXT:    ld.w $a0, $s0, 48
692 ; LA32F-NEXT:    ld.w $a1, $s0, 52
693 ; LA32F-NEXT:    lu12i.w $s2, 262272
694 ; LA32F-NEXT:    move $a2, $zero
695 ; LA32F-NEXT:    move $a3, $s2
696 ; LA32F-NEXT:    bl %plt(__adddf3)
697 ; LA32F-NEXT:    st.w $a0, $fp, 48
698 ; LA32F-NEXT:    st.w $a1, $fp, 52
699 ; LA32F-NEXT:    ld.w $a0, $s0, 40
700 ; LA32F-NEXT:    ld.w $a1, $s0, 44
701 ; LA32F-NEXT:    lu12i.w $s3, 262144
702 ; LA32F-NEXT:    move $a2, $zero
703 ; LA32F-NEXT:    move $a3, $s3
704 ; LA32F-NEXT:    bl %plt(__adddf3)
705 ; LA32F-NEXT:    st.w $a0, $fp, 40
706 ; LA32F-NEXT:    st.w $a1, $fp, 44
707 ; LA32F-NEXT:    ld.w $a0, $s0, 32
708 ; LA32F-NEXT:    ld.w $a1, $s0, 36
709 ; LA32F-NEXT:    lu12i.w $s4, 261888
710 ; LA32F-NEXT:    move $a2, $zero
711 ; LA32F-NEXT:    move $a3, $s4
712 ; LA32F-NEXT:    bl %plt(__adddf3)
713 ; LA32F-NEXT:    st.w $a0, $fp, 32
714 ; LA32F-NEXT:    st.w $a1, $fp, 36
715 ; LA32F-NEXT:    ld.w $a0, $s0, 24
716 ; LA32F-NEXT:    ld.w $a1, $s0, 28
717 ; LA32F-NEXT:    move $a2, $zero
718 ; LA32F-NEXT:    move $a3, $s1
719 ; LA32F-NEXT:    bl %plt(__adddf3)
720 ; LA32F-NEXT:    st.w $a0, $fp, 24
721 ; LA32F-NEXT:    st.w $a1, $fp, 28
722 ; LA32F-NEXT:    ld.w $a0, $s0, 16
723 ; LA32F-NEXT:    ld.w $a1, $s0, 20
724 ; LA32F-NEXT:    move $a2, $zero
725 ; LA32F-NEXT:    move $a3, $s2
726 ; LA32F-NEXT:    bl %plt(__adddf3)
727 ; LA32F-NEXT:    st.w $a0, $fp, 16
728 ; LA32F-NEXT:    st.w $a1, $fp, 20
729 ; LA32F-NEXT:    ld.w $a0, $s0, 8
730 ; LA32F-NEXT:    ld.w $a1, $s0, 12
731 ; LA32F-NEXT:    move $a2, $zero
732 ; LA32F-NEXT:    move $a3, $s3
733 ; LA32F-NEXT:    bl %plt(__adddf3)
734 ; LA32F-NEXT:    st.w $a0, $fp, 8
735 ; LA32F-NEXT:    st.w $a1, $fp, 12
736 ; LA32F-NEXT:    ld.w $a0, $s0, 0
737 ; LA32F-NEXT:    ld.w $a1, $s0, 4
738 ; LA32F-NEXT:    move $a2, $zero
739 ; LA32F-NEXT:    move $a3, $s4
740 ; LA32F-NEXT:    bl %plt(__adddf3)
741 ; LA32F-NEXT:    st.w $a0, $fp, 0
742 ; LA32F-NEXT:    st.w $a1, $fp, 4
743 ; LA32F-NEXT:    ld.w $s4, $sp, 4 # 4-byte Folded Reload
744 ; LA32F-NEXT:    ld.w $s3, $sp, 8 # 4-byte Folded Reload
745 ; LA32F-NEXT:    ld.w $s2, $sp, 12 # 4-byte Folded Reload
746 ; LA32F-NEXT:    ld.w $s1, $sp, 16 # 4-byte Folded Reload
747 ; LA32F-NEXT:    ld.w $s0, $sp, 20 # 4-byte Folded Reload
748 ; LA32F-NEXT:    ld.w $fp, $sp, 24 # 4-byte Folded Reload
749 ; LA32F-NEXT:    ld.w $ra, $sp, 28 # 4-byte Folded Reload
750 ; LA32F-NEXT:    addi.w $sp, $sp, 32
751 ; LA32F-NEXT:    ret
753 ; LA32D-LABEL: test_d8:
754 ; LA32D:       # %bb.0:
755 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_0)
756 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI6_0)
757 ; LA32D-NEXT:    fld.d $fa0, $a2, 0
758 ; LA32D-NEXT:    fld.d $fa1, $a0, 8
759 ; LA32D-NEXT:    fadd.d $fa1, $fa1, $fa0
760 ; LA32D-NEXT:    fld.d $fa2, $a0, 40
761 ; LA32D-NEXT:    fadd.d $fa0, $fa2, $fa0
762 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_1)
763 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI6_1)
764 ; LA32D-NEXT:    fld.d $fa2, $a2, 0
765 ; LA32D-NEXT:    fld.d $fa3, $a0, 16
766 ; LA32D-NEXT:    fadd.d $fa3, $fa3, $fa2
767 ; LA32D-NEXT:    fld.d $fa4, $a0, 48
768 ; LA32D-NEXT:    fadd.d $fa2, $fa4, $fa2
769 ; LA32D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_2)
770 ; LA32D-NEXT:    addi.w $a2, $a2, %pc_lo12(.LCPI6_2)
771 ; LA32D-NEXT:    fld.d $fa4, $a2, 0
772 ; LA32D-NEXT:    fld.d $fa5, $a0, 24
773 ; LA32D-NEXT:    fadd.d $fa5, $fa5, $fa4
774 ; LA32D-NEXT:    fld.d $fa6, $a0, 56
775 ; LA32D-NEXT:    fadd.d $fa4, $fa6, $fa4
776 ; LA32D-NEXT:    fst.d $fa4, $a1, 56
777 ; LA32D-NEXT:    fst.d $fa2, $a1, 48
778 ; LA32D-NEXT:    fst.d $fa0, $a1, 40
779 ; LA32D-NEXT:    fst.d $fa5, $a1, 24
780 ; LA32D-NEXT:    fst.d $fa3, $a1, 16
781 ; LA32D-NEXT:    fst.d $fa1, $a1, 8
782 ; LA32D-NEXT:    addi.w $a2, $zero, 1
783 ; LA32D-NEXT:    movgr2fr.w $fa0, $a2
784 ; LA32D-NEXT:    ffint.s.w $fa0, $fa0
785 ; LA32D-NEXT:    fcvt.d.s $fa0, $fa0
786 ; LA32D-NEXT:    fld.d $fa1, $a0, 32
787 ; LA32D-NEXT:    fadd.d $fa1, $fa1, $fa0
788 ; LA32D-NEXT:    fst.d $fa1, $a1, 32
789 ; LA32D-NEXT:    fld.d $fa1, $a0, 0
790 ; LA32D-NEXT:    fadd.d $fa0, $fa1, $fa0
791 ; LA32D-NEXT:    fst.d $fa0, $a1, 0
792 ; LA32D-NEXT:    ret
794 ; LA64F-LABEL: test_d8:
795 ; LA64F:       # %bb.0:
796 ; LA64F-NEXT:    addi.d $sp, $sp, -48
797 ; LA64F-NEXT:    st.d $ra, $sp, 40 # 8-byte Folded Spill
798 ; LA64F-NEXT:    st.d $fp, $sp, 32 # 8-byte Folded Spill
799 ; LA64F-NEXT:    st.d $s0, $sp, 24 # 8-byte Folded Spill
800 ; LA64F-NEXT:    st.d $s1, $sp, 16 # 8-byte Folded Spill
801 ; LA64F-NEXT:    st.d $s2, $sp, 8 # 8-byte Folded Spill
802 ; LA64F-NEXT:    st.d $s3, $sp, 0 # 8-byte Folded Spill
803 ; LA64F-NEXT:    move $fp, $a1
804 ; LA64F-NEXT:    move $s0, $a0
805 ; LA64F-NEXT:    ld.d $a0, $a0, 56
806 ; LA64F-NEXT:    lu52i.d $s1, $zero, 1025
807 ; LA64F-NEXT:    move $a1, $s1
808 ; LA64F-NEXT:    bl %plt(__adddf3)
809 ; LA64F-NEXT:    st.d $a0, $fp, 56
810 ; LA64F-NEXT:    ld.d $a0, $s0, 40
811 ; LA64F-NEXT:    lu52i.d $s2, $zero, 1024
812 ; LA64F-NEXT:    move $a1, $s2
813 ; LA64F-NEXT:    bl %plt(__adddf3)
814 ; LA64F-NEXT:    st.d $a0, $fp, 40
815 ; LA64F-NEXT:    ld.d $a0, $s0, 32
816 ; LA64F-NEXT:    lu52i.d $s3, $zero, 1023
817 ; LA64F-NEXT:    move $a1, $s3
818 ; LA64F-NEXT:    bl %plt(__adddf3)
819 ; LA64F-NEXT:    st.d $a0, $fp, 32
820 ; LA64F-NEXT:    ld.d $a0, $s0, 24
821 ; LA64F-NEXT:    move $a1, $s1
822 ; LA64F-NEXT:    bl %plt(__adddf3)
823 ; LA64F-NEXT:    st.d $a0, $fp, 24
824 ; LA64F-NEXT:    ld.d $a0, $s0, 8
825 ; LA64F-NEXT:    move $a1, $s2
826 ; LA64F-NEXT:    bl %plt(__adddf3)
827 ; LA64F-NEXT:    st.d $a0, $fp, 8
828 ; LA64F-NEXT:    ld.d $a0, $s0, 0
829 ; LA64F-NEXT:    move $a1, $s3
830 ; LA64F-NEXT:    bl %plt(__adddf3)
831 ; LA64F-NEXT:    st.d $a0, $fp, 0
832 ; LA64F-NEXT:    ori $a0, $zero, 0
833 ; LA64F-NEXT:    lu32i.d $a0, -524288
834 ; LA64F-NEXT:    lu52i.d $s1, $a0, 1024
835 ; LA64F-NEXT:    ld.d $a0, $s0, 48
836 ; LA64F-NEXT:    move $a1, $s1
837 ; LA64F-NEXT:    bl %plt(__adddf3)
838 ; LA64F-NEXT:    st.d $a0, $fp, 48
839 ; LA64F-NEXT:    ld.d $a0, $s0, 16
840 ; LA64F-NEXT:    move $a1, $s1
841 ; LA64F-NEXT:    bl %plt(__adddf3)
842 ; LA64F-NEXT:    st.d $a0, $fp, 16
843 ; LA64F-NEXT:    ld.d $s3, $sp, 0 # 8-byte Folded Reload
844 ; LA64F-NEXT:    ld.d $s2, $sp, 8 # 8-byte Folded Reload
845 ; LA64F-NEXT:    ld.d $s1, $sp, 16 # 8-byte Folded Reload
846 ; LA64F-NEXT:    ld.d $s0, $sp, 24 # 8-byte Folded Reload
847 ; LA64F-NEXT:    ld.d $fp, $sp, 32 # 8-byte Folded Reload
848 ; LA64F-NEXT:    ld.d $ra, $sp, 40 # 8-byte Folded Reload
849 ; LA64F-NEXT:    addi.d $sp, $sp, 48
850 ; LA64F-NEXT:    ret
852 ; LA64D-LABEL: test_d8:
853 ; LA64D:       # %bb.0:
854 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_0)
855 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI6_0)
856 ; LA64D-NEXT:    fld.d $fa0, $a2, 0
857 ; LA64D-NEXT:    fld.d $fa1, $a0, 8
858 ; LA64D-NEXT:    fadd.d $fa1, $fa1, $fa0
859 ; LA64D-NEXT:    fld.d $fa2, $a0, 40
860 ; LA64D-NEXT:    fadd.d $fa0, $fa2, $fa0
861 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_1)
862 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI6_1)
863 ; LA64D-NEXT:    fld.d $fa2, $a2, 0
864 ; LA64D-NEXT:    fld.d $fa3, $a0, 16
865 ; LA64D-NEXT:    fadd.d $fa3, $fa3, $fa2
866 ; LA64D-NEXT:    fld.d $fa4, $a0, 48
867 ; LA64D-NEXT:    fadd.d $fa2, $fa4, $fa2
868 ; LA64D-NEXT:    pcalau12i $a2, %pc_hi20(.LCPI6_2)
869 ; LA64D-NEXT:    addi.d $a2, $a2, %pc_lo12(.LCPI6_2)
870 ; LA64D-NEXT:    fld.d $fa4, $a2, 0
871 ; LA64D-NEXT:    fld.d $fa5, $a0, 24
872 ; LA64D-NEXT:    fadd.d $fa5, $fa5, $fa4
873 ; LA64D-NEXT:    fld.d $fa6, $a0, 56
874 ; LA64D-NEXT:    fadd.d $fa4, $fa6, $fa4
875 ; LA64D-NEXT:    fst.d $fa4, $a1, 56
876 ; LA64D-NEXT:    fst.d $fa2, $a1, 48
877 ; LA64D-NEXT:    fst.d $fa0, $a1, 40
878 ; LA64D-NEXT:    fst.d $fa5, $a1, 24
879 ; LA64D-NEXT:    fst.d $fa3, $a1, 16
880 ; LA64D-NEXT:    fst.d $fa1, $a1, 8
881 ; LA64D-NEXT:    addi.d $a2, $zero, 1
882 ; LA64D-NEXT:    movgr2fr.d $fa0, $a2
883 ; LA64D-NEXT:    ffint.d.l $fa0, $fa0
884 ; LA64D-NEXT:    fld.d $fa1, $a0, 32
885 ; LA64D-NEXT:    fadd.d $fa1, $fa1, $fa0
886 ; LA64D-NEXT:    fst.d $fa1, $a1, 32
887 ; LA64D-NEXT:    fld.d $fa1, $a0, 0
888 ; LA64D-NEXT:    fadd.d $fa0, $fa1, $fa0
889 ; LA64D-NEXT:    fst.d $fa0, $a1, 0
890 ; LA64D-NEXT:    ret
891   %p = load %d8, ptr %P
892   %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 >
893   store %d8 %R, ptr %S
894   ret void