1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=riscv32 -mattr=+d \
3 ; RUN: -verify-machineinstrs -target-abi=ilp32d < %s \
4 ; RUN: | FileCheck -check-prefixes=CHECK,RV32IFD %s
5 ; RUN: llc -mtriple=riscv64 -mattr=+d \
6 ; RUN: -verify-machineinstrs -target-abi=lp64d < %s \
7 ; RUN: | FileCheck -check-prefixes=CHECK,RV64IFD %s
9 declare <1 x half> @llvm.exp10.v1f16(<1 x half>)
10 declare <2 x half> @llvm.exp10.v2f16(<2 x half>)
11 declare <3 x half> @llvm.exp10.v3f16(<3 x half>)
12 declare <4 x half> @llvm.exp10.v4f16(<4 x half>)
13 declare <1 x float> @llvm.exp10.v1f32(<1 x float>)
14 declare <2 x float> @llvm.exp10.v2f32(<2 x float>)
15 declare <3 x float> @llvm.exp10.v3f32(<3 x float>)
16 declare <4 x float> @llvm.exp10.v4f32(<4 x float>)
17 declare <1 x double> @llvm.exp10.v1f64(<1 x double>)
18 declare <2 x double> @llvm.exp10.v2f64(<2 x double>)
19 declare <3 x double> @llvm.exp10.v3f64(<3 x double>)
20 declare <4 x double> @llvm.exp10.v4f64(<4 x double>)
22 define <1 x half> @exp10_v1f16(<1 x half> %x) {
23 ; RV32IFD-LABEL: exp10_v1f16:
25 ; RV32IFD-NEXT: addi sp, sp, -16
26 ; RV32IFD-NEXT: .cfi_def_cfa_offset 16
27 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
28 ; RV32IFD-NEXT: .cfi_offset ra, -4
29 ; RV32IFD-NEXT: fmv.w.x fa0, a0
30 ; RV32IFD-NEXT: call __extendhfsf2
31 ; RV32IFD-NEXT: call exp10f
32 ; RV32IFD-NEXT: call __truncsfhf2
33 ; RV32IFD-NEXT: fmv.x.w a0, fa0
34 ; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
35 ; RV32IFD-NEXT: .cfi_restore ra
36 ; RV32IFD-NEXT: addi sp, sp, 16
37 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
40 ; RV64IFD-LABEL: exp10_v1f16:
42 ; RV64IFD-NEXT: addi sp, sp, -16
43 ; RV64IFD-NEXT: .cfi_def_cfa_offset 16
44 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
45 ; RV64IFD-NEXT: .cfi_offset ra, -8
46 ; RV64IFD-NEXT: fmv.w.x fa0, a0
47 ; RV64IFD-NEXT: call __extendhfsf2
48 ; RV64IFD-NEXT: call exp10f
49 ; RV64IFD-NEXT: call __truncsfhf2
50 ; RV64IFD-NEXT: fmv.x.w a0, fa0
51 ; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
52 ; RV64IFD-NEXT: .cfi_restore ra
53 ; RV64IFD-NEXT: addi sp, sp, 16
54 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
56 %r = call <1 x half> @llvm.exp10.v1f16(<1 x half> %x)
60 define <2 x half> @exp10_v2f16(<2 x half> %x) {
61 ; RV32IFD-LABEL: exp10_v2f16:
63 ; RV32IFD-NEXT: addi sp, sp, -16
64 ; RV32IFD-NEXT: .cfi_def_cfa_offset 16
65 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
66 ; RV32IFD-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
67 ; RV32IFD-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill
68 ; RV32IFD-NEXT: .cfi_offset ra, -4
69 ; RV32IFD-NEXT: .cfi_offset s0, -8
70 ; RV32IFD-NEXT: .cfi_offset fs0, -16
71 ; RV32IFD-NEXT: fmv.w.x fs0, a1
72 ; RV32IFD-NEXT: fmv.w.x fa0, a0
73 ; RV32IFD-NEXT: call __extendhfsf2
74 ; RV32IFD-NEXT: call exp10f
75 ; RV32IFD-NEXT: call __truncsfhf2
76 ; RV32IFD-NEXT: fmv.x.w s0, fa0
77 ; RV32IFD-NEXT: fmv.s fa0, fs0
78 ; RV32IFD-NEXT: call __extendhfsf2
79 ; RV32IFD-NEXT: call exp10f
80 ; RV32IFD-NEXT: call __truncsfhf2
81 ; RV32IFD-NEXT: fmv.x.w a1, fa0
82 ; RV32IFD-NEXT: mv a0, s0
83 ; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
84 ; RV32IFD-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
85 ; RV32IFD-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload
86 ; RV32IFD-NEXT: .cfi_restore ra
87 ; RV32IFD-NEXT: .cfi_restore s0
88 ; RV32IFD-NEXT: .cfi_restore fs0
89 ; RV32IFD-NEXT: addi sp, sp, 16
90 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
93 ; RV64IFD-LABEL: exp10_v2f16:
95 ; RV64IFD-NEXT: addi sp, sp, -32
96 ; RV64IFD-NEXT: .cfi_def_cfa_offset 32
97 ; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
98 ; RV64IFD-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
99 ; RV64IFD-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
100 ; RV64IFD-NEXT: .cfi_offset ra, -8
101 ; RV64IFD-NEXT: .cfi_offset s0, -16
102 ; RV64IFD-NEXT: .cfi_offset s1, -24
103 ; RV64IFD-NEXT: mv s0, a1
104 ; RV64IFD-NEXT: fmv.w.x fa0, a0
105 ; RV64IFD-NEXT: call __extendhfsf2
106 ; RV64IFD-NEXT: call exp10f
107 ; RV64IFD-NEXT: call __truncsfhf2
108 ; RV64IFD-NEXT: fmv.x.w s1, fa0
109 ; RV64IFD-NEXT: fmv.w.x fa0, s0
110 ; RV64IFD-NEXT: call __extendhfsf2
111 ; RV64IFD-NEXT: call exp10f
112 ; RV64IFD-NEXT: call __truncsfhf2
113 ; RV64IFD-NEXT: fmv.x.w a1, fa0
114 ; RV64IFD-NEXT: mv a0, s1
115 ; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
116 ; RV64IFD-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
117 ; RV64IFD-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
118 ; RV64IFD-NEXT: .cfi_restore ra
119 ; RV64IFD-NEXT: .cfi_restore s0
120 ; RV64IFD-NEXT: .cfi_restore s1
121 ; RV64IFD-NEXT: addi sp, sp, 32
122 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
124 %r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)
128 define <3 x half> @exp10_v3f16(<3 x half> %x) {
129 ; RV32IFD-LABEL: exp10_v3f16:
131 ; RV32IFD-NEXT: addi sp, sp, -48
132 ; RV32IFD-NEXT: .cfi_def_cfa_offset 48
133 ; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill
134 ; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill
135 ; RV32IFD-NEXT: sw s1, 36(sp) # 4-byte Folded Spill
136 ; RV32IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill
137 ; RV32IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill
138 ; RV32IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill
139 ; RV32IFD-NEXT: .cfi_offset ra, -4
140 ; RV32IFD-NEXT: .cfi_offset s0, -8
141 ; RV32IFD-NEXT: .cfi_offset s1, -12
142 ; RV32IFD-NEXT: .cfi_offset fs0, -24
143 ; RV32IFD-NEXT: .cfi_offset fs1, -32
144 ; RV32IFD-NEXT: .cfi_offset fs2, -40
145 ; RV32IFD-NEXT: mv s0, a0
146 ; RV32IFD-NEXT: lhu a0, 8(a1)
147 ; RV32IFD-NEXT: lhu a2, 0(a1)
148 ; RV32IFD-NEXT: lhu a1, 4(a1)
149 ; RV32IFD-NEXT: fmv.w.x fs0, a0
150 ; RV32IFD-NEXT: fmv.w.x fs1, a2
151 ; RV32IFD-NEXT: fmv.w.x fa0, a1
152 ; RV32IFD-NEXT: call __extendhfsf2
153 ; RV32IFD-NEXT: call exp10f
154 ; RV32IFD-NEXT: call __truncsfhf2
155 ; RV32IFD-NEXT: fmv.s fs2, fa0
156 ; RV32IFD-NEXT: fmv.s fa0, fs1
157 ; RV32IFD-NEXT: call __extendhfsf2
158 ; RV32IFD-NEXT: call exp10f
159 ; RV32IFD-NEXT: fmv.x.w a0, fs2
160 ; RV32IFD-NEXT: slli s1, a0, 16
161 ; RV32IFD-NEXT: call __truncsfhf2
162 ; RV32IFD-NEXT: fmv.x.w a0, fa0
163 ; RV32IFD-NEXT: slli a0, a0, 16
164 ; RV32IFD-NEXT: srli a0, a0, 16
165 ; RV32IFD-NEXT: or s1, a0, s1
166 ; RV32IFD-NEXT: fmv.s fa0, fs0
167 ; RV32IFD-NEXT: call __extendhfsf2
168 ; RV32IFD-NEXT: call exp10f
169 ; RV32IFD-NEXT: call __truncsfhf2
170 ; RV32IFD-NEXT: fmv.x.w a0, fa0
171 ; RV32IFD-NEXT: sw s1, 0(s0)
172 ; RV32IFD-NEXT: sh a0, 4(s0)
173 ; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
174 ; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
175 ; RV32IFD-NEXT: lw s1, 36(sp) # 4-byte Folded Reload
176 ; RV32IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload
177 ; RV32IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload
178 ; RV32IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload
179 ; RV32IFD-NEXT: .cfi_restore ra
180 ; RV32IFD-NEXT: .cfi_restore s0
181 ; RV32IFD-NEXT: .cfi_restore s1
182 ; RV32IFD-NEXT: .cfi_restore fs0
183 ; RV32IFD-NEXT: .cfi_restore fs1
184 ; RV32IFD-NEXT: .cfi_restore fs2
185 ; RV32IFD-NEXT: addi sp, sp, 48
186 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
189 ; RV64IFD-LABEL: exp10_v3f16:
191 ; RV64IFD-NEXT: addi sp, sp, -48
192 ; RV64IFD-NEXT: .cfi_def_cfa_offset 48
193 ; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
194 ; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
195 ; RV64IFD-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
196 ; RV64IFD-NEXT: sd s2, 16(sp) # 8-byte Folded Spill
197 ; RV64IFD-NEXT: fsd fs0, 8(sp) # 8-byte Folded Spill
198 ; RV64IFD-NEXT: .cfi_offset ra, -8
199 ; RV64IFD-NEXT: .cfi_offset s0, -16
200 ; RV64IFD-NEXT: .cfi_offset s1, -24
201 ; RV64IFD-NEXT: .cfi_offset s2, -32
202 ; RV64IFD-NEXT: .cfi_offset fs0, -40
203 ; RV64IFD-NEXT: lhu s1, 0(a1)
204 ; RV64IFD-NEXT: lhu a2, 8(a1)
205 ; RV64IFD-NEXT: lhu s2, 16(a1)
206 ; RV64IFD-NEXT: mv s0, a0
207 ; RV64IFD-NEXT: fmv.w.x fa0, a2
208 ; RV64IFD-NEXT: call __extendhfsf2
209 ; RV64IFD-NEXT: call exp10f
210 ; RV64IFD-NEXT: call __truncsfhf2
211 ; RV64IFD-NEXT: fmv.s fs0, fa0
212 ; RV64IFD-NEXT: fmv.w.x fa0, s1
213 ; RV64IFD-NEXT: call __extendhfsf2
214 ; RV64IFD-NEXT: call exp10f
215 ; RV64IFD-NEXT: fmv.x.w a0, fs0
216 ; RV64IFD-NEXT: slli s1, a0, 16
217 ; RV64IFD-NEXT: call __truncsfhf2
218 ; RV64IFD-NEXT: fmv.x.w a0, fa0
219 ; RV64IFD-NEXT: slli a0, a0, 48
220 ; RV64IFD-NEXT: srli a0, a0, 48
221 ; RV64IFD-NEXT: or s1, a0, s1
222 ; RV64IFD-NEXT: fmv.w.x fa0, s2
223 ; RV64IFD-NEXT: call __extendhfsf2
224 ; RV64IFD-NEXT: call exp10f
225 ; RV64IFD-NEXT: call __truncsfhf2
226 ; RV64IFD-NEXT: fmv.x.w a0, fa0
227 ; RV64IFD-NEXT: sw s1, 0(s0)
228 ; RV64IFD-NEXT: sh a0, 4(s0)
229 ; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
230 ; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
231 ; RV64IFD-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
232 ; RV64IFD-NEXT: ld s2, 16(sp) # 8-byte Folded Reload
233 ; RV64IFD-NEXT: fld fs0, 8(sp) # 8-byte Folded Reload
234 ; RV64IFD-NEXT: .cfi_restore ra
235 ; RV64IFD-NEXT: .cfi_restore s0
236 ; RV64IFD-NEXT: .cfi_restore s1
237 ; RV64IFD-NEXT: .cfi_restore s2
238 ; RV64IFD-NEXT: .cfi_restore fs0
239 ; RV64IFD-NEXT: addi sp, sp, 48
240 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
242 %r = call <3 x half> @llvm.exp10.v3f16(<3 x half> %x)
246 define <4 x half> @exp10_v4f16(<4 x half> %x) {
247 ; RV32IFD-LABEL: exp10_v4f16:
249 ; RV32IFD-NEXT: addi sp, sp, -64
250 ; RV32IFD-NEXT: .cfi_def_cfa_offset 64
251 ; RV32IFD-NEXT: sw ra, 60(sp) # 4-byte Folded Spill
252 ; RV32IFD-NEXT: sw s0, 56(sp) # 4-byte Folded Spill
253 ; RV32IFD-NEXT: sw s1, 52(sp) # 4-byte Folded Spill
254 ; RV32IFD-NEXT: sw s2, 48(sp) # 4-byte Folded Spill
255 ; RV32IFD-NEXT: sw s3, 44(sp) # 4-byte Folded Spill
256 ; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill
257 ; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill
258 ; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill
259 ; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill
260 ; RV32IFD-NEXT: .cfi_offset ra, -4
261 ; RV32IFD-NEXT: .cfi_offset s0, -8
262 ; RV32IFD-NEXT: .cfi_offset s1, -12
263 ; RV32IFD-NEXT: .cfi_offset s2, -16
264 ; RV32IFD-NEXT: .cfi_offset s3, -20
265 ; RV32IFD-NEXT: .cfi_offset fs0, -32
266 ; RV32IFD-NEXT: .cfi_offset fs1, -40
267 ; RV32IFD-NEXT: .cfi_offset fs2, -48
268 ; RV32IFD-NEXT: .cfi_offset fs3, -56
269 ; RV32IFD-NEXT: mv s0, a0
270 ; RV32IFD-NEXT: lhu a0, 12(a1)
271 ; RV32IFD-NEXT: lhu a2, 0(a1)
272 ; RV32IFD-NEXT: lhu a3, 4(a1)
273 ; RV32IFD-NEXT: lhu a1, 8(a1)
274 ; RV32IFD-NEXT: fmv.w.x fs0, a0
275 ; RV32IFD-NEXT: fmv.w.x fs1, a2
276 ; RV32IFD-NEXT: fmv.w.x fs2, a3
277 ; RV32IFD-NEXT: fmv.w.x fa0, a1
278 ; RV32IFD-NEXT: call __extendhfsf2
279 ; RV32IFD-NEXT: call exp10f
280 ; RV32IFD-NEXT: call __truncsfhf2
281 ; RV32IFD-NEXT: fmv.s fs3, fa0
282 ; RV32IFD-NEXT: fmv.s fa0, fs2
283 ; RV32IFD-NEXT: call __extendhfsf2
284 ; RV32IFD-NEXT: call exp10f
285 ; RV32IFD-NEXT: call __truncsfhf2
286 ; RV32IFD-NEXT: fmv.s fs2, fa0
287 ; RV32IFD-NEXT: fmv.s fa0, fs1
288 ; RV32IFD-NEXT: call __extendhfsf2
289 ; RV32IFD-NEXT: call exp10f
290 ; RV32IFD-NEXT: call __truncsfhf2
291 ; RV32IFD-NEXT: fmv.s fs1, fa0
292 ; RV32IFD-NEXT: fmv.s fa0, fs0
293 ; RV32IFD-NEXT: call __extendhfsf2
294 ; RV32IFD-NEXT: call exp10f
295 ; RV32IFD-NEXT: fmv.x.w s1, fs1
296 ; RV32IFD-NEXT: fmv.x.w s2, fs2
297 ; RV32IFD-NEXT: fmv.x.w s3, fs3
298 ; RV32IFD-NEXT: call __truncsfhf2
299 ; RV32IFD-NEXT: fmv.x.w a0, fa0
300 ; RV32IFD-NEXT: sh s1, 0(s0)
301 ; RV32IFD-NEXT: sh s2, 2(s0)
302 ; RV32IFD-NEXT: sh s3, 4(s0)
303 ; RV32IFD-NEXT: sh a0, 6(s0)
304 ; RV32IFD-NEXT: lw ra, 60(sp) # 4-byte Folded Reload
305 ; RV32IFD-NEXT: lw s0, 56(sp) # 4-byte Folded Reload
306 ; RV32IFD-NEXT: lw s1, 52(sp) # 4-byte Folded Reload
307 ; RV32IFD-NEXT: lw s2, 48(sp) # 4-byte Folded Reload
308 ; RV32IFD-NEXT: lw s3, 44(sp) # 4-byte Folded Reload
309 ; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload
310 ; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload
311 ; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload
312 ; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload
313 ; RV32IFD-NEXT: .cfi_restore ra
314 ; RV32IFD-NEXT: .cfi_restore s0
315 ; RV32IFD-NEXT: .cfi_restore s1
316 ; RV32IFD-NEXT: .cfi_restore s2
317 ; RV32IFD-NEXT: .cfi_restore s3
318 ; RV32IFD-NEXT: .cfi_restore fs0
319 ; RV32IFD-NEXT: .cfi_restore fs1
320 ; RV32IFD-NEXT: .cfi_restore fs2
321 ; RV32IFD-NEXT: .cfi_restore fs3
322 ; RV32IFD-NEXT: addi sp, sp, 64
323 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
326 ; RV64IFD-LABEL: exp10_v4f16:
328 ; RV64IFD-NEXT: addi sp, sp, -64
329 ; RV64IFD-NEXT: .cfi_def_cfa_offset 64
330 ; RV64IFD-NEXT: sd ra, 56(sp) # 8-byte Folded Spill
331 ; RV64IFD-NEXT: sd s0, 48(sp) # 8-byte Folded Spill
332 ; RV64IFD-NEXT: sd s1, 40(sp) # 8-byte Folded Spill
333 ; RV64IFD-NEXT: sd s2, 32(sp) # 8-byte Folded Spill
334 ; RV64IFD-NEXT: sd s3, 24(sp) # 8-byte Folded Spill
335 ; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
336 ; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
337 ; RV64IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill
338 ; RV64IFD-NEXT: .cfi_offset ra, -8
339 ; RV64IFD-NEXT: .cfi_offset s0, -16
340 ; RV64IFD-NEXT: .cfi_offset s1, -24
341 ; RV64IFD-NEXT: .cfi_offset s2, -32
342 ; RV64IFD-NEXT: .cfi_offset s3, -40
343 ; RV64IFD-NEXT: .cfi_offset fs0, -48
344 ; RV64IFD-NEXT: .cfi_offset fs1, -56
345 ; RV64IFD-NEXT: .cfi_offset fs2, -64
346 ; RV64IFD-NEXT: lhu s1, 0(a1)
347 ; RV64IFD-NEXT: lhu s2, 8(a1)
348 ; RV64IFD-NEXT: lhu a2, 16(a1)
349 ; RV64IFD-NEXT: lhu s3, 24(a1)
350 ; RV64IFD-NEXT: mv s0, a0
351 ; RV64IFD-NEXT: fmv.w.x fa0, a2
352 ; RV64IFD-NEXT: call __extendhfsf2
353 ; RV64IFD-NEXT: call exp10f
354 ; RV64IFD-NEXT: call __truncsfhf2
355 ; RV64IFD-NEXT: fmv.s fs0, fa0
356 ; RV64IFD-NEXT: fmv.w.x fa0, s2
357 ; RV64IFD-NEXT: call __extendhfsf2
358 ; RV64IFD-NEXT: call exp10f
359 ; RV64IFD-NEXT: call __truncsfhf2
360 ; RV64IFD-NEXT: fmv.s fs1, fa0
361 ; RV64IFD-NEXT: fmv.w.x fa0, s1
362 ; RV64IFD-NEXT: call __extendhfsf2
363 ; RV64IFD-NEXT: call exp10f
364 ; RV64IFD-NEXT: call __truncsfhf2
365 ; RV64IFD-NEXT: fmv.s fs2, fa0
366 ; RV64IFD-NEXT: fmv.w.x fa0, s3
367 ; RV64IFD-NEXT: call __extendhfsf2
368 ; RV64IFD-NEXT: call exp10f
369 ; RV64IFD-NEXT: fmv.x.w s1, fs2
370 ; RV64IFD-NEXT: fmv.x.w s2, fs1
371 ; RV64IFD-NEXT: fmv.x.w s3, fs0
372 ; RV64IFD-NEXT: call __truncsfhf2
373 ; RV64IFD-NEXT: fmv.x.w a0, fa0
374 ; RV64IFD-NEXT: sh s1, 0(s0)
375 ; RV64IFD-NEXT: sh s2, 2(s0)
376 ; RV64IFD-NEXT: sh s3, 4(s0)
377 ; RV64IFD-NEXT: sh a0, 6(s0)
378 ; RV64IFD-NEXT: ld ra, 56(sp) # 8-byte Folded Reload
379 ; RV64IFD-NEXT: ld s0, 48(sp) # 8-byte Folded Reload
380 ; RV64IFD-NEXT: ld s1, 40(sp) # 8-byte Folded Reload
381 ; RV64IFD-NEXT: ld s2, 32(sp) # 8-byte Folded Reload
382 ; RV64IFD-NEXT: ld s3, 24(sp) # 8-byte Folded Reload
383 ; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
384 ; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
385 ; RV64IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload
386 ; RV64IFD-NEXT: .cfi_restore ra
387 ; RV64IFD-NEXT: .cfi_restore s0
388 ; RV64IFD-NEXT: .cfi_restore s1
389 ; RV64IFD-NEXT: .cfi_restore s2
390 ; RV64IFD-NEXT: .cfi_restore s3
391 ; RV64IFD-NEXT: .cfi_restore fs0
392 ; RV64IFD-NEXT: .cfi_restore fs1
393 ; RV64IFD-NEXT: .cfi_restore fs2
394 ; RV64IFD-NEXT: addi sp, sp, 64
395 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
397 %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)
401 define <1 x float> @exp10_v1f32(<1 x float> %x) {
402 ; RV32IFD-LABEL: exp10_v1f32:
404 ; RV32IFD-NEXT: addi sp, sp, -16
405 ; RV32IFD-NEXT: .cfi_def_cfa_offset 16
406 ; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
407 ; RV32IFD-NEXT: .cfi_offset ra, -4
408 ; RV32IFD-NEXT: call exp10f
409 ; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
410 ; RV32IFD-NEXT: .cfi_restore ra
411 ; RV32IFD-NEXT: addi sp, sp, 16
412 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
415 ; RV64IFD-LABEL: exp10_v1f32:
417 ; RV64IFD-NEXT: addi sp, sp, -16
418 ; RV64IFD-NEXT: .cfi_def_cfa_offset 16
419 ; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
420 ; RV64IFD-NEXT: .cfi_offset ra, -8
421 ; RV64IFD-NEXT: call exp10f
422 ; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
423 ; RV64IFD-NEXT: .cfi_restore ra
424 ; RV64IFD-NEXT: addi sp, sp, 16
425 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
427 %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)
431 define <2 x float> @exp10_v2f32(<2 x float> %x) {
432 ; RV32IFD-LABEL: exp10_v2f32:
434 ; RV32IFD-NEXT: addi sp, sp, -32
435 ; RV32IFD-NEXT: .cfi_def_cfa_offset 32
436 ; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
437 ; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
438 ; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
439 ; RV32IFD-NEXT: .cfi_offset ra, -4
440 ; RV32IFD-NEXT: .cfi_offset fs0, -16
441 ; RV32IFD-NEXT: .cfi_offset fs1, -24
442 ; RV32IFD-NEXT: fmv.s fs0, fa1
443 ; RV32IFD-NEXT: call exp10f
444 ; RV32IFD-NEXT: fmv.s fs1, fa0
445 ; RV32IFD-NEXT: fmv.s fa0, fs0
446 ; RV32IFD-NEXT: call exp10f
447 ; RV32IFD-NEXT: fmv.s fa1, fa0
448 ; RV32IFD-NEXT: fmv.s fa0, fs1
449 ; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
450 ; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
451 ; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
452 ; RV32IFD-NEXT: .cfi_restore ra
453 ; RV32IFD-NEXT: .cfi_restore fs0
454 ; RV32IFD-NEXT: .cfi_restore fs1
455 ; RV32IFD-NEXT: addi sp, sp, 32
456 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
459 ; RV64IFD-LABEL: exp10_v2f32:
461 ; RV64IFD-NEXT: addi sp, sp, -32
462 ; RV64IFD-NEXT: .cfi_def_cfa_offset 32
463 ; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
464 ; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
465 ; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
466 ; RV64IFD-NEXT: .cfi_offset ra, -8
467 ; RV64IFD-NEXT: .cfi_offset fs0, -16
468 ; RV64IFD-NEXT: .cfi_offset fs1, -24
469 ; RV64IFD-NEXT: fmv.s fs0, fa1
470 ; RV64IFD-NEXT: call exp10f
471 ; RV64IFD-NEXT: fmv.s fs1, fa0
472 ; RV64IFD-NEXT: fmv.s fa0, fs0
473 ; RV64IFD-NEXT: call exp10f
474 ; RV64IFD-NEXT: fmv.s fa1, fa0
475 ; RV64IFD-NEXT: fmv.s fa0, fs1
476 ; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
477 ; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
478 ; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
479 ; RV64IFD-NEXT: .cfi_restore ra
480 ; RV64IFD-NEXT: .cfi_restore fs0
481 ; RV64IFD-NEXT: .cfi_restore fs1
482 ; RV64IFD-NEXT: addi sp, sp, 32
483 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
485 %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
489 define <3 x float> @exp10_v3f32(<3 x float> %x) {
490 ; RV32IFD-LABEL: exp10_v3f32:
492 ; RV32IFD-NEXT: addi sp, sp, -32
493 ; RV32IFD-NEXT: .cfi_def_cfa_offset 32
494 ; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
495 ; RV32IFD-NEXT: sw s0, 24(sp) # 4-byte Folded Spill
496 ; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
497 ; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
498 ; RV32IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill
499 ; RV32IFD-NEXT: .cfi_offset ra, -4
500 ; RV32IFD-NEXT: .cfi_offset s0, -8
501 ; RV32IFD-NEXT: .cfi_offset fs0, -16
502 ; RV32IFD-NEXT: .cfi_offset fs1, -24
503 ; RV32IFD-NEXT: .cfi_offset fs2, -32
504 ; RV32IFD-NEXT: fmv.s fs0, fa2
505 ; RV32IFD-NEXT: fmv.s fs1, fa1
506 ; RV32IFD-NEXT: mv s0, a0
507 ; RV32IFD-NEXT: call exp10f
508 ; RV32IFD-NEXT: fmv.s fs2, fa0
509 ; RV32IFD-NEXT: fmv.s fa0, fs1
510 ; RV32IFD-NEXT: call exp10f
511 ; RV32IFD-NEXT: fmv.s fs1, fa0
512 ; RV32IFD-NEXT: fmv.s fa0, fs0
513 ; RV32IFD-NEXT: call exp10f
514 ; RV32IFD-NEXT: fsw fs2, 0(s0)
515 ; RV32IFD-NEXT: fsw fs1, 4(s0)
516 ; RV32IFD-NEXT: fsw fa0, 8(s0)
517 ; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
518 ; RV32IFD-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
519 ; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
520 ; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
521 ; RV32IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload
522 ; RV32IFD-NEXT: .cfi_restore ra
523 ; RV32IFD-NEXT: .cfi_restore s0
524 ; RV32IFD-NEXT: .cfi_restore fs0
525 ; RV32IFD-NEXT: .cfi_restore fs1
526 ; RV32IFD-NEXT: .cfi_restore fs2
527 ; RV32IFD-NEXT: addi sp, sp, 32
528 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
531 ; RV64IFD-LABEL: exp10_v3f32:
533 ; RV64IFD-NEXT: addi sp, sp, -48
534 ; RV64IFD-NEXT: .cfi_def_cfa_offset 48
535 ; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
536 ; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
537 ; RV64IFD-NEXT: sd s1, 24(sp) # 8-byte Folded Spill
538 ; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
539 ; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
540 ; RV64IFD-NEXT: .cfi_offset ra, -8
541 ; RV64IFD-NEXT: .cfi_offset s0, -16
542 ; RV64IFD-NEXT: .cfi_offset s1, -24
543 ; RV64IFD-NEXT: .cfi_offset fs0, -32
544 ; RV64IFD-NEXT: .cfi_offset fs1, -40
545 ; RV64IFD-NEXT: fmv.s fs0, fa2
546 ; RV64IFD-NEXT: fmv.s fs1, fa0
547 ; RV64IFD-NEXT: mv s0, a0
548 ; RV64IFD-NEXT: fmv.s fa0, fa1
549 ; RV64IFD-NEXT: call exp10f
550 ; RV64IFD-NEXT: fmv.x.w a0, fa0
551 ; RV64IFD-NEXT: slli s1, a0, 32
552 ; RV64IFD-NEXT: fmv.s fa0, fs1
553 ; RV64IFD-NEXT: call exp10f
554 ; RV64IFD-NEXT: fmv.x.w a0, fa0
555 ; RV64IFD-NEXT: slli a0, a0, 32
556 ; RV64IFD-NEXT: srli a0, a0, 32
557 ; RV64IFD-NEXT: or s1, a0, s1
558 ; RV64IFD-NEXT: fmv.s fa0, fs0
559 ; RV64IFD-NEXT: call exp10f
560 ; RV64IFD-NEXT: sd s1, 0(s0)
561 ; RV64IFD-NEXT: fsw fa0, 8(s0)
562 ; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
563 ; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
564 ; RV64IFD-NEXT: ld s1, 24(sp) # 8-byte Folded Reload
565 ; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
566 ; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
567 ; RV64IFD-NEXT: .cfi_restore ra
568 ; RV64IFD-NEXT: .cfi_restore s0
569 ; RV64IFD-NEXT: .cfi_restore s1
570 ; RV64IFD-NEXT: .cfi_restore fs0
571 ; RV64IFD-NEXT: .cfi_restore fs1
572 ; RV64IFD-NEXT: addi sp, sp, 48
573 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
575 %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)
579 define <4 x float> @exp10_v4f32(<4 x float> %x) {
580 ; RV32IFD-LABEL: exp10_v4f32:
582 ; RV32IFD-NEXT: addi sp, sp, -48
583 ; RV32IFD-NEXT: .cfi_def_cfa_offset 48
584 ; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill
585 ; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill
586 ; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill
587 ; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill
588 ; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill
589 ; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill
590 ; RV32IFD-NEXT: .cfi_offset ra, -4
591 ; RV32IFD-NEXT: .cfi_offset s0, -8
592 ; RV32IFD-NEXT: .cfi_offset fs0, -16
593 ; RV32IFD-NEXT: .cfi_offset fs1, -24
594 ; RV32IFD-NEXT: .cfi_offset fs2, -32
595 ; RV32IFD-NEXT: .cfi_offset fs3, -40
596 ; RV32IFD-NEXT: fmv.s fs0, fa3
597 ; RV32IFD-NEXT: fmv.s fs1, fa2
598 ; RV32IFD-NEXT: fmv.s fs2, fa1
599 ; RV32IFD-NEXT: mv s0, a0
600 ; RV32IFD-NEXT: call exp10f
601 ; RV32IFD-NEXT: fmv.s fs3, fa0
602 ; RV32IFD-NEXT: fmv.s fa0, fs2
603 ; RV32IFD-NEXT: call exp10f
604 ; RV32IFD-NEXT: fmv.s fs2, fa0
605 ; RV32IFD-NEXT: fmv.s fa0, fs1
606 ; RV32IFD-NEXT: call exp10f
607 ; RV32IFD-NEXT: fmv.s fs1, fa0
608 ; RV32IFD-NEXT: fmv.s fa0, fs0
609 ; RV32IFD-NEXT: call exp10f
610 ; RV32IFD-NEXT: fsw fs3, 0(s0)
611 ; RV32IFD-NEXT: fsw fs2, 4(s0)
612 ; RV32IFD-NEXT: fsw fs1, 8(s0)
613 ; RV32IFD-NEXT: fsw fa0, 12(s0)
614 ; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
615 ; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
616 ; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload
617 ; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload
618 ; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload
619 ; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload
620 ; RV32IFD-NEXT: .cfi_restore ra
621 ; RV32IFD-NEXT: .cfi_restore s0
622 ; RV32IFD-NEXT: .cfi_restore fs0
623 ; RV32IFD-NEXT: .cfi_restore fs1
624 ; RV32IFD-NEXT: .cfi_restore fs2
625 ; RV32IFD-NEXT: .cfi_restore fs3
626 ; RV32IFD-NEXT: addi sp, sp, 48
627 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
630 ; RV64IFD-LABEL: exp10_v4f32:
632 ; RV64IFD-NEXT: addi sp, sp, -48
633 ; RV64IFD-NEXT: .cfi_def_cfa_offset 48
634 ; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
635 ; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
636 ; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill
637 ; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill
638 ; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill
639 ; RV64IFD-NEXT: fsd fs3, 0(sp) # 8-byte Folded Spill
640 ; RV64IFD-NEXT: .cfi_offset ra, -8
641 ; RV64IFD-NEXT: .cfi_offset s0, -16
642 ; RV64IFD-NEXT: .cfi_offset fs0, -24
643 ; RV64IFD-NEXT: .cfi_offset fs1, -32
644 ; RV64IFD-NEXT: .cfi_offset fs2, -40
645 ; RV64IFD-NEXT: .cfi_offset fs3, -48
646 ; RV64IFD-NEXT: fmv.s fs0, fa3
647 ; RV64IFD-NEXT: fmv.s fs1, fa2
648 ; RV64IFD-NEXT: fmv.s fs2, fa1
649 ; RV64IFD-NEXT: mv s0, a0
650 ; RV64IFD-NEXT: call exp10f
651 ; RV64IFD-NEXT: fmv.s fs3, fa0
652 ; RV64IFD-NEXT: fmv.s fa0, fs2
653 ; RV64IFD-NEXT: call exp10f
654 ; RV64IFD-NEXT: fmv.s fs2, fa0
655 ; RV64IFD-NEXT: fmv.s fa0, fs1
656 ; RV64IFD-NEXT: call exp10f
657 ; RV64IFD-NEXT: fmv.s fs1, fa0
658 ; RV64IFD-NEXT: fmv.s fa0, fs0
659 ; RV64IFD-NEXT: call exp10f
660 ; RV64IFD-NEXT: fsw fs3, 0(s0)
661 ; RV64IFD-NEXT: fsw fs2, 4(s0)
662 ; RV64IFD-NEXT: fsw fs1, 8(s0)
663 ; RV64IFD-NEXT: fsw fa0, 12(s0)
664 ; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
665 ; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
666 ; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload
667 ; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload
668 ; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload
669 ; RV64IFD-NEXT: fld fs3, 0(sp) # 8-byte Folded Reload
670 ; RV64IFD-NEXT: .cfi_restore ra
671 ; RV64IFD-NEXT: .cfi_restore s0
672 ; RV64IFD-NEXT: .cfi_restore fs0
673 ; RV64IFD-NEXT: .cfi_restore fs1
674 ; RV64IFD-NEXT: .cfi_restore fs2
675 ; RV64IFD-NEXT: .cfi_restore fs3
676 ; RV64IFD-NEXT: addi sp, sp, 48
677 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
679 %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)
684 ; define <1 x double> @exp10_v1f64(<1 x double> %x) {
685 ; %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)
686 ; ret <1 x double> %r
689 define <2 x double> @exp10_v2f64(<2 x double> %x) {
690 ; RV32IFD-LABEL: exp10_v2f64:
692 ; RV32IFD-NEXT: addi sp, sp, -32
693 ; RV32IFD-NEXT: .cfi_def_cfa_offset 32
694 ; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
695 ; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
696 ; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
697 ; RV32IFD-NEXT: .cfi_offset ra, -4
698 ; RV32IFD-NEXT: .cfi_offset fs0, -16
699 ; RV32IFD-NEXT: .cfi_offset fs1, -24
700 ; RV32IFD-NEXT: fmv.d fs0, fa1
701 ; RV32IFD-NEXT: call exp10
702 ; RV32IFD-NEXT: fmv.d fs1, fa0
703 ; RV32IFD-NEXT: fmv.d fa0, fs0
704 ; RV32IFD-NEXT: call exp10
705 ; RV32IFD-NEXT: fmv.d fa1, fa0
706 ; RV32IFD-NEXT: fmv.d fa0, fs1
707 ; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
708 ; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
709 ; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
710 ; RV32IFD-NEXT: .cfi_restore ra
711 ; RV32IFD-NEXT: .cfi_restore fs0
712 ; RV32IFD-NEXT: .cfi_restore fs1
713 ; RV32IFD-NEXT: addi sp, sp, 32
714 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
717 ; RV64IFD-LABEL: exp10_v2f64:
719 ; RV64IFD-NEXT: addi sp, sp, -32
720 ; RV64IFD-NEXT: .cfi_def_cfa_offset 32
721 ; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
722 ; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
723 ; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
724 ; RV64IFD-NEXT: .cfi_offset ra, -8
725 ; RV64IFD-NEXT: .cfi_offset fs0, -16
726 ; RV64IFD-NEXT: .cfi_offset fs1, -24
727 ; RV64IFD-NEXT: fmv.d fs0, fa1
728 ; RV64IFD-NEXT: call exp10
729 ; RV64IFD-NEXT: fmv.d fs1, fa0
730 ; RV64IFD-NEXT: fmv.d fa0, fs0
731 ; RV64IFD-NEXT: call exp10
732 ; RV64IFD-NEXT: fmv.d fa1, fa0
733 ; RV64IFD-NEXT: fmv.d fa0, fs1
734 ; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
735 ; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
736 ; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
737 ; RV64IFD-NEXT: .cfi_restore ra
738 ; RV64IFD-NEXT: .cfi_restore fs0
739 ; RV64IFD-NEXT: .cfi_restore fs1
740 ; RV64IFD-NEXT: addi sp, sp, 32
741 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
743 %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
747 define <3 x double> @exp10_v3f64(<3 x double> %x) {
748 ; RV32IFD-LABEL: exp10_v3f64:
750 ; RV32IFD-NEXT: addi sp, sp, -32
751 ; RV32IFD-NEXT: .cfi_def_cfa_offset 32
752 ; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
753 ; RV32IFD-NEXT: sw s0, 24(sp) # 4-byte Folded Spill
754 ; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill
755 ; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill
756 ; RV32IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill
757 ; RV32IFD-NEXT: .cfi_offset ra, -4
758 ; RV32IFD-NEXT: .cfi_offset s0, -8
759 ; RV32IFD-NEXT: .cfi_offset fs0, -16
760 ; RV32IFD-NEXT: .cfi_offset fs1, -24
761 ; RV32IFD-NEXT: .cfi_offset fs2, -32
762 ; RV32IFD-NEXT: fmv.d fs0, fa2
763 ; RV32IFD-NEXT: fmv.d fs1, fa1
764 ; RV32IFD-NEXT: mv s0, a0
765 ; RV32IFD-NEXT: call exp10
766 ; RV32IFD-NEXT: fmv.d fs2, fa0
767 ; RV32IFD-NEXT: fmv.d fa0, fs1
768 ; RV32IFD-NEXT: call exp10
769 ; RV32IFD-NEXT: fmv.d fs1, fa0
770 ; RV32IFD-NEXT: fmv.d fa0, fs0
771 ; RV32IFD-NEXT: call exp10
772 ; RV32IFD-NEXT: fsd fs2, 0(s0)
773 ; RV32IFD-NEXT: fsd fs1, 8(s0)
774 ; RV32IFD-NEXT: fsd fa0, 16(s0)
775 ; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
776 ; RV32IFD-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
777 ; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
778 ; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
779 ; RV32IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload
780 ; RV32IFD-NEXT: .cfi_restore ra
781 ; RV32IFD-NEXT: .cfi_restore s0
782 ; RV32IFD-NEXT: .cfi_restore fs0
783 ; RV32IFD-NEXT: .cfi_restore fs1
784 ; RV32IFD-NEXT: .cfi_restore fs2
785 ; RV32IFD-NEXT: addi sp, sp, 32
786 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
789 ; RV64IFD-LABEL: exp10_v3f64:
791 ; RV64IFD-NEXT: addi sp, sp, -48
792 ; RV64IFD-NEXT: .cfi_def_cfa_offset 48
793 ; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
794 ; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
795 ; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill
796 ; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill
797 ; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill
798 ; RV64IFD-NEXT: .cfi_offset ra, -8
799 ; RV64IFD-NEXT: .cfi_offset s0, -16
800 ; RV64IFD-NEXT: .cfi_offset fs0, -24
801 ; RV64IFD-NEXT: .cfi_offset fs1, -32
802 ; RV64IFD-NEXT: .cfi_offset fs2, -40
803 ; RV64IFD-NEXT: fmv.d fs0, fa2
804 ; RV64IFD-NEXT: fmv.d fs1, fa1
805 ; RV64IFD-NEXT: mv s0, a0
806 ; RV64IFD-NEXT: call exp10
807 ; RV64IFD-NEXT: fmv.d fs2, fa0
808 ; RV64IFD-NEXT: fmv.d fa0, fs1
809 ; RV64IFD-NEXT: call exp10
810 ; RV64IFD-NEXT: fmv.d fs1, fa0
811 ; RV64IFD-NEXT: fmv.d fa0, fs0
812 ; RV64IFD-NEXT: call exp10
813 ; RV64IFD-NEXT: fsd fs2, 0(s0)
814 ; RV64IFD-NEXT: fsd fs1, 8(s0)
815 ; RV64IFD-NEXT: fsd fa0, 16(s0)
816 ; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
817 ; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
818 ; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload
819 ; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload
820 ; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload
821 ; RV64IFD-NEXT: .cfi_restore ra
822 ; RV64IFD-NEXT: .cfi_restore s0
823 ; RV64IFD-NEXT: .cfi_restore fs0
824 ; RV64IFD-NEXT: .cfi_restore fs1
825 ; RV64IFD-NEXT: .cfi_restore fs2
826 ; RV64IFD-NEXT: addi sp, sp, 48
827 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
829 %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)
833 define <4 x double> @exp10_v4f64(<4 x double> %x) {
834 ; RV32IFD-LABEL: exp10_v4f64:
836 ; RV32IFD-NEXT: addi sp, sp, -48
837 ; RV32IFD-NEXT: .cfi_def_cfa_offset 48
838 ; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill
839 ; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill
840 ; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill
841 ; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill
842 ; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill
843 ; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill
844 ; RV32IFD-NEXT: .cfi_offset ra, -4
845 ; RV32IFD-NEXT: .cfi_offset s0, -8
846 ; RV32IFD-NEXT: .cfi_offset fs0, -16
847 ; RV32IFD-NEXT: .cfi_offset fs1, -24
848 ; RV32IFD-NEXT: .cfi_offset fs2, -32
849 ; RV32IFD-NEXT: .cfi_offset fs3, -40
850 ; RV32IFD-NEXT: fmv.d fs0, fa3
851 ; RV32IFD-NEXT: fmv.d fs1, fa2
852 ; RV32IFD-NEXT: fmv.d fs2, fa1
853 ; RV32IFD-NEXT: mv s0, a0
854 ; RV32IFD-NEXT: call exp10
855 ; RV32IFD-NEXT: fmv.d fs3, fa0
856 ; RV32IFD-NEXT: fmv.d fa0, fs2
857 ; RV32IFD-NEXT: call exp10
858 ; RV32IFD-NEXT: fmv.d fs2, fa0
859 ; RV32IFD-NEXT: fmv.d fa0, fs1
860 ; RV32IFD-NEXT: call exp10
861 ; RV32IFD-NEXT: fmv.d fs1, fa0
862 ; RV32IFD-NEXT: fmv.d fa0, fs0
863 ; RV32IFD-NEXT: call exp10
864 ; RV32IFD-NEXT: fsd fs3, 0(s0)
865 ; RV32IFD-NEXT: fsd fs2, 8(s0)
866 ; RV32IFD-NEXT: fsd fs1, 16(s0)
867 ; RV32IFD-NEXT: fsd fa0, 24(s0)
868 ; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
869 ; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
870 ; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload
871 ; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload
872 ; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload
873 ; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload
874 ; RV32IFD-NEXT: .cfi_restore ra
875 ; RV32IFD-NEXT: .cfi_restore s0
876 ; RV32IFD-NEXT: .cfi_restore fs0
877 ; RV32IFD-NEXT: .cfi_restore fs1
878 ; RV32IFD-NEXT: .cfi_restore fs2
879 ; RV32IFD-NEXT: .cfi_restore fs3
880 ; RV32IFD-NEXT: addi sp, sp, 48
881 ; RV32IFD-NEXT: .cfi_def_cfa_offset 0
884 ; RV64IFD-LABEL: exp10_v4f64:
886 ; RV64IFD-NEXT: addi sp, sp, -48
887 ; RV64IFD-NEXT: .cfi_def_cfa_offset 48
888 ; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill
889 ; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill
890 ; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill
891 ; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill
892 ; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill
893 ; RV64IFD-NEXT: fsd fs3, 0(sp) # 8-byte Folded Spill
894 ; RV64IFD-NEXT: .cfi_offset ra, -8
895 ; RV64IFD-NEXT: .cfi_offset s0, -16
896 ; RV64IFD-NEXT: .cfi_offset fs0, -24
897 ; RV64IFD-NEXT: .cfi_offset fs1, -32
898 ; RV64IFD-NEXT: .cfi_offset fs2, -40
899 ; RV64IFD-NEXT: .cfi_offset fs3, -48
900 ; RV64IFD-NEXT: fmv.d fs0, fa3
901 ; RV64IFD-NEXT: fmv.d fs1, fa2
902 ; RV64IFD-NEXT: fmv.d fs2, fa1
903 ; RV64IFD-NEXT: mv s0, a0
904 ; RV64IFD-NEXT: call exp10
905 ; RV64IFD-NEXT: fmv.d fs3, fa0
906 ; RV64IFD-NEXT: fmv.d fa0, fs2
907 ; RV64IFD-NEXT: call exp10
908 ; RV64IFD-NEXT: fmv.d fs2, fa0
909 ; RV64IFD-NEXT: fmv.d fa0, fs1
910 ; RV64IFD-NEXT: call exp10
911 ; RV64IFD-NEXT: fmv.d fs1, fa0
912 ; RV64IFD-NEXT: fmv.d fa0, fs0
913 ; RV64IFD-NEXT: call exp10
914 ; RV64IFD-NEXT: fsd fs3, 0(s0)
915 ; RV64IFD-NEXT: fsd fs2, 8(s0)
916 ; RV64IFD-NEXT: fsd fs1, 16(s0)
917 ; RV64IFD-NEXT: fsd fa0, 24(s0)
918 ; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload
919 ; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload
920 ; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload
921 ; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload
922 ; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload
923 ; RV64IFD-NEXT: fld fs3, 0(sp) # 8-byte Folded Reload
924 ; RV64IFD-NEXT: .cfi_restore ra
925 ; RV64IFD-NEXT: .cfi_restore s0
926 ; RV64IFD-NEXT: .cfi_restore fs0
927 ; RV64IFD-NEXT: .cfi_restore fs1
928 ; RV64IFD-NEXT: .cfi_restore fs2
929 ; RV64IFD-NEXT: .cfi_restore fs3
930 ; RV64IFD-NEXT: addi sp, sp, 48
931 ; RV64IFD-NEXT: .cfi_def_cfa_offset 0
933 %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)
936 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: