[OpenMP][Flang] Workaround omp_lib error (#123666)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / llvm.exp10.ll
blobc1ea891bc86e7ebc7811c571d4b9805f1ff02cee
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -global-isel=0 -mtriple=aarch64-unknown-unknown < %s | FileCheck -check-prefixes=CHECK,CVT,SDAG,CVT-SDAG %s
3 ; RUN: llc -global-isel=0 -mtriple=aarch64-unknown-unknown -mattr=+fullfp16 < %s | FileCheck -check-prefixes=CHECK,FP16,SDAG,FP16-SDAG %s
4 ; RUN: llc -global-isel=1 -mtriple=aarch64-unknown-unknown < %s | FileCheck -check-prefixes=CHECK,CVT,GISEL,CVT-GISEL %s
5 ; RUN: llc -global-isel=1 -mtriple=aarch64-unknown-unknown -mattr=+fullfp16 < %s | FileCheck -check-prefixes=CHECK,FP16,GISEL,FP16-GISEL %s
7 declare half @llvm.exp10.f16(half)
8 declare <1 x half> @llvm.exp10.v1f16(<1 x half>)
9 declare <2 x half> @llvm.exp10.v2f16(<2 x half>)
10 declare <3 x half> @llvm.exp10.v3f16(<3 x half>)
11 declare <4 x half> @llvm.exp10.v4f16(<4 x half>)
12 declare float @llvm.exp10.f32(float)
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 double @llvm.exp10.f64(double)
18 declare <1 x double> @llvm.exp10.v1f64(<1 x double>)
19 declare <2 x double> @llvm.exp10.v2f64(<2 x double>)
20 declare <3 x double> @llvm.exp10.v3f64(<3 x double>)
21 declare <4 x double> @llvm.exp10.v4f64(<4 x double>)
23 define half @exp10_f16(half %x) {
24 ; CHECK-LABEL: exp10_f16:
25 ; CHECK:       // %bb.0:
26 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
27 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
28 ; CHECK-NEXT:    .cfi_offset w30, -16
29 ; CHECK-NEXT:    fcvt s0, h0
30 ; CHECK-NEXT:    bl exp10f
31 ; CHECK-NEXT:    fcvt h0, s0
32 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
33 ; CHECK-NEXT:    ret
34   %r = call half @llvm.exp10.f16(half %x)
35   ret half %r
38 define <1 x half> @exp10_v1f16(<1 x half> %x) {
39 ; CHECK-LABEL: exp10_v1f16:
40 ; CHECK:       // %bb.0:
41 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
42 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
43 ; CHECK-NEXT:    .cfi_offset w30, -16
44 ; CHECK-NEXT:    fcvt s0, h0
45 ; CHECK-NEXT:    bl exp10f
46 ; CHECK-NEXT:    fcvt h0, s0
47 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
48 ; CHECK-NEXT:    ret
49   %r = call <1 x half> @llvm.exp10.v1f16(<1 x half> %x)
50   ret <1 x half> %r
53 define <2 x half> @exp10_v2f16(<2 x half> %x) {
54 ; SDAG-LABEL: exp10_v2f16:
55 ; SDAG:       // %bb.0:
56 ; SDAG-NEXT:    sub sp, sp, #48
57 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
58 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
59 ; SDAG-NEXT:    .cfi_offset w30, -16
60 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
61 ; SDAG-NEXT:    mov h1, v0.h[1]
62 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
63 ; SDAG-NEXT:    fcvt s0, h1
64 ; SDAG-NEXT:    bl exp10f
65 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
66 ; SDAG-NEXT:    fcvt h0, s0
67 ; SDAG-NEXT:    fcvt s1, h1
68 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
69 ; SDAG-NEXT:    fmov s0, s1
70 ; SDAG-NEXT:    bl exp10f
71 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
72 ; SDAG-NEXT:    fcvt h2, s0
73 ; SDAG-NEXT:    mov h1, v1.h[2]
74 ; SDAG-NEXT:    fcvt s0, h1
75 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
76 ; SDAG-NEXT:    mov v2.h[1], v1.h[0]
77 ; SDAG-NEXT:    str q2, [sp] // 16-byte Folded Spill
78 ; SDAG-NEXT:    bl exp10f
79 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
80 ; SDAG-NEXT:    fcvt h2, s0
81 ; SDAG-NEXT:    mov h1, v1.h[3]
82 ; SDAG-NEXT:    fcvt s0, h1
83 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
84 ; SDAG-NEXT:    mov v1.h[2], v2.h[0]
85 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
86 ; SDAG-NEXT:    bl exp10f
87 ; SDAG-NEXT:    fcvt h1, s0
88 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
89 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
90 ; SDAG-NEXT:    mov v0.h[3], v1.h[0]
91 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
92 ; SDAG-NEXT:    add sp, sp, #48
93 ; SDAG-NEXT:    ret
95 ; GISEL-LABEL: exp10_v2f16:
96 ; GISEL:       // %bb.0:
97 ; GISEL-NEXT:    sub sp, sp, #32
98 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
99 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
100 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
101 ; GISEL-NEXT:    .cfi_offset w30, -8
102 ; GISEL-NEXT:    .cfi_offset b8, -16
103 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
104 ; GISEL-NEXT:    mov h8, v0.h[1]
105 ; GISEL-NEXT:    fcvt s0, h0
106 ; GISEL-NEXT:    bl exp10f
107 ; GISEL-NEXT:    fcvt s1, h8
108 ; GISEL-NEXT:    fcvt h0, s0
109 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
110 ; GISEL-NEXT:    fmov s0, s1
111 ; GISEL-NEXT:    bl exp10f
112 ; GISEL-NEXT:    fcvt h1, s0
113 ; GISEL-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
114 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
115 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
116 ; GISEL-NEXT:    mov v0.h[1], v1.h[0]
117 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
118 ; GISEL-NEXT:    add sp, sp, #32
119 ; GISEL-NEXT:    ret
120   %r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)
121   ret <2 x half> %r
124 define <3 x half> @exp10_v3f16(<3 x half> %x) {
125 ; SDAG-LABEL: exp10_v3f16:
126 ; SDAG:       // %bb.0:
127 ; SDAG-NEXT:    sub sp, sp, #48
128 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
129 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
130 ; SDAG-NEXT:    .cfi_offset w30, -16
131 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
132 ; SDAG-NEXT:    mov h1, v0.h[1]
133 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
134 ; SDAG-NEXT:    fcvt s0, h1
135 ; SDAG-NEXT:    bl exp10f
136 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
137 ; SDAG-NEXT:    fcvt h0, s0
138 ; SDAG-NEXT:    fcvt s1, h1
139 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
140 ; SDAG-NEXT:    fmov s0, s1
141 ; SDAG-NEXT:    bl exp10f
142 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
143 ; SDAG-NEXT:    fcvt h2, s0
144 ; SDAG-NEXT:    mov h1, v1.h[2]
145 ; SDAG-NEXT:    fcvt s0, h1
146 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
147 ; SDAG-NEXT:    mov v2.h[1], v1.h[0]
148 ; SDAG-NEXT:    str q2, [sp] // 16-byte Folded Spill
149 ; SDAG-NEXT:    bl exp10f
150 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
151 ; SDAG-NEXT:    fcvt h2, s0
152 ; SDAG-NEXT:    mov h1, v1.h[3]
153 ; SDAG-NEXT:    fcvt s0, h1
154 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
155 ; SDAG-NEXT:    mov v1.h[2], v2.h[0]
156 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
157 ; SDAG-NEXT:    bl exp10f
158 ; SDAG-NEXT:    fcvt h1, s0
159 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
160 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
161 ; SDAG-NEXT:    mov v0.h[3], v1.h[0]
162 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
163 ; SDAG-NEXT:    add sp, sp, #48
164 ; SDAG-NEXT:    ret
166 ; GISEL-LABEL: exp10_v3f16:
167 ; GISEL:       // %bb.0:
168 ; GISEL-NEXT:    sub sp, sp, #64
169 ; GISEL-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill
170 ; GISEL-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
171 ; GISEL-NEXT:    .cfi_def_cfa_offset 64
172 ; GISEL-NEXT:    .cfi_offset w30, -16
173 ; GISEL-NEXT:    .cfi_offset b8, -24
174 ; GISEL-NEXT:    .cfi_offset b9, -32
175 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
176 ; GISEL-NEXT:    mov h8, v0.h[1]
177 ; GISEL-NEXT:    mov h9, v0.h[2]
178 ; GISEL-NEXT:    fcvt s0, h0
179 ; GISEL-NEXT:    bl exp10f
180 ; GISEL-NEXT:    fcvt s1, h8
181 ; GISEL-NEXT:    fcvt h0, s0
182 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
183 ; GISEL-NEXT:    fmov s0, s1
184 ; GISEL-NEXT:    bl exp10f
185 ; GISEL-NEXT:    fcvt s1, h9
186 ; GISEL-NEXT:    fcvt h0, s0
187 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
188 ; GISEL-NEXT:    fmov s0, s1
189 ; GISEL-NEXT:    bl exp10f
190 ; GISEL-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload
191 ; GISEL-NEXT:    fcvt h0, s0
192 ; GISEL-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload
193 ; GISEL-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
194 ; GISEL-NEXT:    mov v1.h[1], v2.h[0]
195 ; GISEL-NEXT:    mov v1.h[2], v0.h[0]
196 ; GISEL-NEXT:    mov v0.16b, v1.16b
197 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
198 ; GISEL-NEXT:    add sp, sp, #64
199 ; GISEL-NEXT:    ret
200   %r = call <3 x half> @llvm.exp10.v3f16(<3 x half> %x)
201   ret <3 x half> %r
204 define <4 x half> @exp10_v4f16(<4 x half> %x) {
205 ; SDAG-LABEL: exp10_v4f16:
206 ; SDAG:       // %bb.0:
207 ; SDAG-NEXT:    sub sp, sp, #48
208 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
209 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
210 ; SDAG-NEXT:    .cfi_offset w30, -16
211 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
212 ; SDAG-NEXT:    mov h1, v0.h[1]
213 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
214 ; SDAG-NEXT:    fcvt s0, h1
215 ; SDAG-NEXT:    bl exp10f
216 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
217 ; SDAG-NEXT:    fcvt h0, s0
218 ; SDAG-NEXT:    fcvt s1, h1
219 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
220 ; SDAG-NEXT:    fmov s0, s1
221 ; SDAG-NEXT:    bl exp10f
222 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
223 ; SDAG-NEXT:    fcvt h2, s0
224 ; SDAG-NEXT:    mov h1, v1.h[2]
225 ; SDAG-NEXT:    fcvt s0, h1
226 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
227 ; SDAG-NEXT:    mov v2.h[1], v1.h[0]
228 ; SDAG-NEXT:    str q2, [sp] // 16-byte Folded Spill
229 ; SDAG-NEXT:    bl exp10f
230 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
231 ; SDAG-NEXT:    fcvt h2, s0
232 ; SDAG-NEXT:    mov h1, v1.h[3]
233 ; SDAG-NEXT:    fcvt s0, h1
234 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
235 ; SDAG-NEXT:    mov v1.h[2], v2.h[0]
236 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
237 ; SDAG-NEXT:    bl exp10f
238 ; SDAG-NEXT:    fcvt h1, s0
239 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
240 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
241 ; SDAG-NEXT:    mov v0.h[3], v1.h[0]
242 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
243 ; SDAG-NEXT:    add sp, sp, #48
244 ; SDAG-NEXT:    ret
246 ; GISEL-LABEL: exp10_v4f16:
247 ; GISEL:       // %bb.0:
248 ; GISEL-NEXT:    sub sp, sp, #80
249 ; GISEL-NEXT:    str d10, [sp, #48] // 8-byte Folded Spill
250 ; GISEL-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill
251 ; GISEL-NEXT:    str x30, [sp, #72] // 8-byte Folded Spill
252 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
253 ; GISEL-NEXT:    .cfi_offset w30, -8
254 ; GISEL-NEXT:    .cfi_offset b8, -16
255 ; GISEL-NEXT:    .cfi_offset b9, -24
256 ; GISEL-NEXT:    .cfi_offset b10, -32
257 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
258 ; GISEL-NEXT:    mov h8, v0.h[1]
259 ; GISEL-NEXT:    mov h9, v0.h[2]
260 ; GISEL-NEXT:    mov h10, v0.h[3]
261 ; GISEL-NEXT:    fcvt s0, h0
262 ; GISEL-NEXT:    bl exp10f
263 ; GISEL-NEXT:    fcvt s1, h8
264 ; GISEL-NEXT:    fcvt h0, s0
265 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
266 ; GISEL-NEXT:    fmov s0, s1
267 ; GISEL-NEXT:    bl exp10f
268 ; GISEL-NEXT:    fcvt s1, h9
269 ; GISEL-NEXT:    fcvt h0, s0
270 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
271 ; GISEL-NEXT:    fmov s0, s1
272 ; GISEL-NEXT:    bl exp10f
273 ; GISEL-NEXT:    fcvt s1, h10
274 ; GISEL-NEXT:    fcvt h0, s0
275 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
276 ; GISEL-NEXT:    fmov s0, s1
277 ; GISEL-NEXT:    bl exp10f
278 ; GISEL-NEXT:    ldp q3, q2, [sp] // 32-byte Folded Reload
279 ; GISEL-NEXT:    fcvt h0, s0
280 ; GISEL-NEXT:    ldr q1, [sp, #32] // 16-byte Folded Reload
281 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
282 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
283 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
284 ; GISEL-NEXT:    mov v1.h[1], v3.h[0]
285 ; GISEL-NEXT:    mov v1.h[2], v2.h[0]
286 ; GISEL-NEXT:    mov v1.h[3], v0.h[0]
287 ; GISEL-NEXT:    mov v0.16b, v1.16b
288 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
289 ; GISEL-NEXT:    add sp, sp, #80
290 ; GISEL-NEXT:    ret
291   %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)
292   ret <4 x half> %r
295 define float @exp10_f32(float %x) {
296 ; CHECK-LABEL: exp10_f32:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    b exp10f
299   %r = call float @llvm.exp10.f32(float %x)
300   ret float %r
303 define <1 x float> @exp10_v1f32(<1 x float> %x) {
304 ; SDAG-LABEL: exp10_v1f32:
305 ; SDAG:       // %bb.0:
306 ; SDAG-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
307 ; SDAG-NEXT:    .cfi_def_cfa_offset 16
308 ; SDAG-NEXT:    .cfi_offset w30, -16
309 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
310 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
311 ; SDAG-NEXT:    bl exp10f
312 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $d0
313 ; SDAG-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
314 ; SDAG-NEXT:    ret
316 ; GISEL-LABEL: exp10_v1f32:
317 ; GISEL:       // %bb.0:
318 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
319 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
320 ; GISEL-NEXT:    .cfi_offset w30, -16
321 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $d0
322 ; GISEL-NEXT:    bl exp10f
323 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $d0
324 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
325 ; GISEL-NEXT:    ret
326   %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)
327   ret <1 x float> %r
330 define <2 x float> @exp10_v2f32(<2 x float> %x) {
331 ; SDAG-LABEL: exp10_v2f32:
332 ; SDAG:       // %bb.0:
333 ; SDAG-NEXT:    sub sp, sp, #48
334 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
335 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
336 ; SDAG-NEXT:    .cfi_offset w30, -16
337 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
338 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
339 ; SDAG-NEXT:    mov s0, v0.s[1]
340 ; SDAG-NEXT:    bl exp10f
341 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
342 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
343 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
344 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
345 ; SDAG-NEXT:    bl exp10f
346 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
347 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
348 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
349 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
350 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
351 ; SDAG-NEXT:    add sp, sp, #48
352 ; SDAG-NEXT:    ret
354 ; GISEL-LABEL: exp10_v2f32:
355 ; GISEL:       // %bb.0:
356 ; GISEL-NEXT:    sub sp, sp, #32
357 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
358 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
359 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
360 ; GISEL-NEXT:    .cfi_offset w30, -8
361 ; GISEL-NEXT:    .cfi_offset b8, -16
362 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
363 ; GISEL-NEXT:    mov s8, v0.s[1]
364 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
365 ; GISEL-NEXT:    bl exp10f
366 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
367 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
368 ; GISEL-NEXT:    fmov s0, s8
369 ; GISEL-NEXT:    bl exp10f
370 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
371 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
372 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
373 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
374 ; GISEL-NEXT:    mov v1.s[1], v0.s[0]
375 ; GISEL-NEXT:    fmov d0, d1
376 ; GISEL-NEXT:    add sp, sp, #32
377 ; GISEL-NEXT:    ret
378   %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
379   ret <2 x float> %r
382 define <3 x float> @exp10_v3f32(<3 x float> %x) {
383 ; SDAG-LABEL: exp10_v3f32:
384 ; SDAG:       // %bb.0:
385 ; SDAG-NEXT:    sub sp, sp, #48
386 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
387 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
388 ; SDAG-NEXT:    .cfi_offset w30, -16
389 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
390 ; SDAG-NEXT:    mov s0, v0.s[1]
391 ; SDAG-NEXT:    bl exp10f
392 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
393 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
394 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
395 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
396 ; SDAG-NEXT:    bl exp10f
397 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
398 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
399 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
400 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
401 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
402 ; SDAG-NEXT:    mov s0, v0.s[2]
403 ; SDAG-NEXT:    bl exp10f
404 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
405 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
406 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
407 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
408 ; SDAG-NEXT:    mov v0.16b, v1.16b
409 ; SDAG-NEXT:    add sp, sp, #48
410 ; SDAG-NEXT:    ret
412 ; GISEL-LABEL: exp10_v3f32:
413 ; GISEL:       // %bb.0:
414 ; GISEL-NEXT:    sub sp, sp, #64
415 ; GISEL-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill
416 ; GISEL-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
417 ; GISEL-NEXT:    .cfi_def_cfa_offset 64
418 ; GISEL-NEXT:    .cfi_offset w30, -16
419 ; GISEL-NEXT:    .cfi_offset b8, -24
420 ; GISEL-NEXT:    .cfi_offset b9, -32
421 ; GISEL-NEXT:    mov s8, v0.s[1]
422 ; GISEL-NEXT:    mov s9, v0.s[2]
423 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
424 ; GISEL-NEXT:    bl exp10f
425 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
426 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
427 ; GISEL-NEXT:    fmov s0, s8
428 ; GISEL-NEXT:    bl exp10f
429 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
430 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
431 ; GISEL-NEXT:    fmov s0, s9
432 ; GISEL-NEXT:    bl exp10f
433 ; GISEL-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload
434 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
435 ; GISEL-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
436 ; GISEL-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload
437 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
438 ; GISEL-NEXT:    mov v1.s[2], v0.s[0]
439 ; GISEL-NEXT:    mov v0.16b, v1.16b
440 ; GISEL-NEXT:    add sp, sp, #64
441 ; GISEL-NEXT:    ret
442   %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)
443   ret <3 x float> %r
446 define <4 x float> @exp10_v4f32(<4 x float> %x) {
447 ; SDAG-LABEL: exp10_v4f32:
448 ; SDAG:       // %bb.0:
449 ; SDAG-NEXT:    sub sp, sp, #48
450 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
451 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
452 ; SDAG-NEXT:    .cfi_offset w30, -16
453 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
454 ; SDAG-NEXT:    mov s0, v0.s[1]
455 ; SDAG-NEXT:    bl exp10f
456 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
457 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
458 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
459 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
460 ; SDAG-NEXT:    bl exp10f
461 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
462 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
463 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
464 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
465 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
466 ; SDAG-NEXT:    mov s0, v0.s[2]
467 ; SDAG-NEXT:    bl exp10f
468 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
469 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
470 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
471 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
472 ; SDAG-NEXT:    mov s0, v0.s[3]
473 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
474 ; SDAG-NEXT:    bl exp10f
475 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
476 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
477 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
478 ; SDAG-NEXT:    mov v1.s[3], v0.s[0]
479 ; SDAG-NEXT:    mov v0.16b, v1.16b
480 ; SDAG-NEXT:    add sp, sp, #48
481 ; SDAG-NEXT:    ret
483 ; GISEL-LABEL: exp10_v4f32:
484 ; GISEL:       // %bb.0:
485 ; GISEL-NEXT:    sub sp, sp, #80
486 ; GISEL-NEXT:    str d10, [sp, #48] // 8-byte Folded Spill
487 ; GISEL-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill
488 ; GISEL-NEXT:    str x30, [sp, #72] // 8-byte Folded Spill
489 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
490 ; GISEL-NEXT:    .cfi_offset w30, -8
491 ; GISEL-NEXT:    .cfi_offset b8, -16
492 ; GISEL-NEXT:    .cfi_offset b9, -24
493 ; GISEL-NEXT:    .cfi_offset b10, -32
494 ; GISEL-NEXT:    mov s8, v0.s[1]
495 ; GISEL-NEXT:    mov s9, v0.s[2]
496 ; GISEL-NEXT:    mov s10, v0.s[3]
497 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
498 ; GISEL-NEXT:    bl exp10f
499 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
500 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
501 ; GISEL-NEXT:    fmov s0, s8
502 ; GISEL-NEXT:    bl exp10f
503 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
504 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
505 ; GISEL-NEXT:    fmov s0, s9
506 ; GISEL-NEXT:    bl exp10f
507 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
508 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
509 ; GISEL-NEXT:    fmov s0, s10
510 ; GISEL-NEXT:    bl exp10f
511 ; GISEL-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload
512 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
513 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
514 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
515 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
516 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
517 ; GISEL-NEXT:    ldr q2, [sp] // 16-byte Folded Reload
518 ; GISEL-NEXT:    mov v1.s[2], v2.s[0]
519 ; GISEL-NEXT:    mov v1.s[3], v0.s[0]
520 ; GISEL-NEXT:    mov v0.16b, v1.16b
521 ; GISEL-NEXT:    add sp, sp, #80
522 ; GISEL-NEXT:    ret
523   %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)
524   ret <4 x float> %r
527 define double @exp10_f64(double %x) {
528 ; CHECK-LABEL: exp10_f64:
529 ; CHECK:       // %bb.0:
530 ; CHECK-NEXT:    b exp10
531   %r = call double @llvm.exp10.f64(double %x)
532   ret double %r
535 define <1 x double> @exp10_v1f64(<1 x double> %x) {
536 ; CHECK-LABEL: exp10_v1f64:
537 ; CHECK:       // %bb.0:
538 ; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
539 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
540 ; CHECK-NEXT:    .cfi_offset w30, -16
541 ; CHECK-NEXT:    bl exp10
542 ; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
543 ; CHECK-NEXT:    ret
544   %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)
545   ret <1 x double> %r
548 define <2 x double> @exp10_v2f64(<2 x double> %x) {
549 ; SDAG-LABEL: exp10_v2f64:
550 ; SDAG:       // %bb.0:
551 ; SDAG-NEXT:    sub sp, sp, #48
552 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
553 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
554 ; SDAG-NEXT:    .cfi_offset w30, -16
555 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
556 ; SDAG-NEXT:    mov d0, v0.d[1]
557 ; SDAG-NEXT:    bl exp10
558 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
559 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
560 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
561 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
562 ; SDAG-NEXT:    bl exp10
563 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
564 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
565 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
566 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
567 ; SDAG-NEXT:    add sp, sp, #48
568 ; SDAG-NEXT:    ret
570 ; GISEL-LABEL: exp10_v2f64:
571 ; GISEL:       // %bb.0:
572 ; GISEL-NEXT:    sub sp, sp, #32
573 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
574 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
575 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
576 ; GISEL-NEXT:    .cfi_offset w30, -8
577 ; GISEL-NEXT:    .cfi_offset b8, -16
578 ; GISEL-NEXT:    mov d8, v0.d[1]
579 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
580 ; GISEL-NEXT:    bl exp10
581 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
582 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
583 ; GISEL-NEXT:    fmov d0, d8
584 ; GISEL-NEXT:    bl exp10
585 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
586 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
587 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
588 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
589 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
590 ; GISEL-NEXT:    mov v0.16b, v1.16b
591 ; GISEL-NEXT:    add sp, sp, #32
592 ; GISEL-NEXT:    ret
593   %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
594   ret <2 x double> %r
597 define <3 x double> @exp10_v3f64(<3 x double> %x) {
598 ; SDAG-LABEL: exp10_v3f64:
599 ; SDAG:       // %bb.0:
600 ; SDAG-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
601 ; SDAG-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
602 ; SDAG-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
603 ; SDAG-NEXT:    .cfi_def_cfa_offset 32
604 ; SDAG-NEXT:    .cfi_offset w30, -8
605 ; SDAG-NEXT:    .cfi_offset b8, -16
606 ; SDAG-NEXT:    .cfi_offset b9, -24
607 ; SDAG-NEXT:    .cfi_offset b10, -32
608 ; SDAG-NEXT:    fmov d8, d2
609 ; SDAG-NEXT:    fmov d9, d1
610 ; SDAG-NEXT:    bl exp10
611 ; SDAG-NEXT:    fmov d10, d0
612 ; SDAG-NEXT:    fmov d0, d9
613 ; SDAG-NEXT:    bl exp10
614 ; SDAG-NEXT:    fmov d9, d0
615 ; SDAG-NEXT:    fmov d0, d8
616 ; SDAG-NEXT:    bl exp10
617 ; SDAG-NEXT:    fmov d1, d9
618 ; SDAG-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
619 ; SDAG-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
620 ; SDAG-NEXT:    fmov d2, d0
621 ; SDAG-NEXT:    fmov d0, d10
622 ; SDAG-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
623 ; SDAG-NEXT:    ret
625 ; GISEL-LABEL: exp10_v3f64:
626 ; GISEL:       // %bb.0:
627 ; GISEL-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
628 ; GISEL-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
629 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
630 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
631 ; GISEL-NEXT:    .cfi_offset w30, -8
632 ; GISEL-NEXT:    .cfi_offset b8, -16
633 ; GISEL-NEXT:    .cfi_offset b9, -24
634 ; GISEL-NEXT:    .cfi_offset b10, -32
635 ; GISEL-NEXT:    fmov d8, d1
636 ; GISEL-NEXT:    fmov d9, d2
637 ; GISEL-NEXT:    bl exp10
638 ; GISEL-NEXT:    fmov d10, d0
639 ; GISEL-NEXT:    fmov d0, d8
640 ; GISEL-NEXT:    bl exp10
641 ; GISEL-NEXT:    fmov d8, d0
642 ; GISEL-NEXT:    fmov d0, d9
643 ; GISEL-NEXT:    bl exp10
644 ; GISEL-NEXT:    fmov d1, d8
645 ; GISEL-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
646 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
647 ; GISEL-NEXT:    fmov d2, d0
648 ; GISEL-NEXT:    fmov d0, d10
649 ; GISEL-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
650 ; GISEL-NEXT:    ret
651   %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)
652   ret <3 x double> %r
655 define <4 x double> @exp10_v4f64(<4 x double> %x) {
656 ; SDAG-LABEL: exp10_v4f64:
657 ; SDAG:       // %bb.0:
658 ; SDAG-NEXT:    sub sp, sp, #64
659 ; SDAG-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
660 ; SDAG-NEXT:    .cfi_def_cfa_offset 64
661 ; SDAG-NEXT:    .cfi_offset w30, -16
662 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
663 ; SDAG-NEXT:    mov d0, v0.d[1]
664 ; SDAG-NEXT:    str q1, [sp, #32] // 16-byte Folded Spill
665 ; SDAG-NEXT:    bl exp10
666 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
667 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
668 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
669 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
670 ; SDAG-NEXT:    bl exp10
671 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
672 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
673 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
674 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
675 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
676 ; SDAG-NEXT:    mov d0, v0.d[1]
677 ; SDAG-NEXT:    bl exp10
678 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
679 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
680 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
681 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
682 ; SDAG-NEXT:    bl exp10
683 ; SDAG-NEXT:    fmov d1, d0
684 ; SDAG-NEXT:    ldp q2, q0, [sp] // 32-byte Folded Reload
685 ; SDAG-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
686 ; SDAG-NEXT:    mov v1.d[1], v2.d[0]
687 ; SDAG-NEXT:    add sp, sp, #64
688 ; SDAG-NEXT:    ret
690 ; GISEL-LABEL: exp10_v4f64:
691 ; GISEL:       // %bb.0:
692 ; GISEL-NEXT:    sub sp, sp, #80
693 ; GISEL-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill
694 ; GISEL-NEXT:    str x30, [sp, #64] // 8-byte Folded Spill
695 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
696 ; GISEL-NEXT:    .cfi_offset w30, -16
697 ; GISEL-NEXT:    .cfi_offset b8, -24
698 ; GISEL-NEXT:    .cfi_offset b9, -32
699 ; GISEL-NEXT:    str q1, [sp] // 16-byte Folded Spill
700 ; GISEL-NEXT:    mov d8, v0.d[1]
701 ; GISEL-NEXT:    mov d9, v1.d[1]
702 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
703 ; GISEL-NEXT:    bl exp10
704 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
705 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
706 ; GISEL-NEXT:    fmov d0, d8
707 ; GISEL-NEXT:    bl exp10
708 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
709 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
710 ; GISEL-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
711 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
712 ; GISEL-NEXT:    bl exp10
713 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
714 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
715 ; GISEL-NEXT:    fmov d0, d9
716 ; GISEL-NEXT:    bl exp10
717 ; GISEL-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload
718 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
719 ; GISEL-NEXT:    ldr x30, [sp, #64] // 8-byte Folded Reload
720 ; GISEL-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload
721 ; GISEL-NEXT:    mov v2.d[1], v1.d[0]
722 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
723 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
724 ; GISEL-NEXT:    mov v0.16b, v2.16b
725 ; GISEL-NEXT:    add sp, sp, #80
726 ; GISEL-NEXT:    ret
727   %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)
728   ret <4 x double> %r
730 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
731 ; CVT: {{.*}}
732 ; CVT-GISEL: {{.*}}
733 ; CVT-SDAG: {{.*}}
734 ; FP16: {{.*}}
735 ; FP16-GISEL: {{.*}}
736 ; FP16-SDAG: {{.*}}