[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / llvm.exp10.ll
blobc3f14b0dcff71ee70bc6d175249642889e7d54d2
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:    fmov x8, d0
104 ; GISEL-NEXT:    fmov s0, w8
105 ; GISEL-NEXT:    mov h8, v0.h[1]
106 ; GISEL-NEXT:    fcvt s0, h0
107 ; GISEL-NEXT:    bl exp10f
108 ; GISEL-NEXT:    fcvt s1, h8
109 ; GISEL-NEXT:    fcvt h0, s0
110 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
111 ; GISEL-NEXT:    fmov s0, s1
112 ; GISEL-NEXT:    bl exp10f
113 ; GISEL-NEXT:    fcvt h0, s0
114 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
115 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
116 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
117 ; GISEL-NEXT:    mov v1.h[1], v0.h[0]
118 ; GISEL-NEXT:    mov v1.h[2], v0.h[0]
119 ; GISEL-NEXT:    mov v1.h[3], v0.h[0]
120 ; GISEL-NEXT:    mov v0.16b, v1.16b
121 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
122 ; GISEL-NEXT:    add sp, sp, #32
123 ; GISEL-NEXT:    ret
124   %r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)
125   ret <2 x half> %r
128 define <3 x half> @exp10_v3f16(<3 x half> %x) {
129 ; SDAG-LABEL: exp10_v3f16:
130 ; SDAG:       // %bb.0:
131 ; SDAG-NEXT:    sub sp, sp, #48
132 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
133 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
134 ; SDAG-NEXT:    .cfi_offset w30, -16
135 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
136 ; SDAG-NEXT:    mov h1, v0.h[1]
137 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
138 ; SDAG-NEXT:    fcvt s0, h1
139 ; SDAG-NEXT:    bl exp10f
140 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
141 ; SDAG-NEXT:    fcvt h0, s0
142 ; SDAG-NEXT:    fcvt s1, h1
143 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
144 ; SDAG-NEXT:    fmov s0, s1
145 ; SDAG-NEXT:    bl exp10f
146 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
147 ; SDAG-NEXT:    fcvt h2, s0
148 ; SDAG-NEXT:    mov h1, v1.h[2]
149 ; SDAG-NEXT:    fcvt s0, h1
150 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
151 ; SDAG-NEXT:    mov v2.h[1], v1.h[0]
152 ; SDAG-NEXT:    str q2, [sp] // 16-byte Folded Spill
153 ; SDAG-NEXT:    bl exp10f
154 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
155 ; SDAG-NEXT:    fcvt h2, s0
156 ; SDAG-NEXT:    mov h1, v1.h[3]
157 ; SDAG-NEXT:    fcvt s0, h1
158 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
159 ; SDAG-NEXT:    mov v1.h[2], v2.h[0]
160 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
161 ; SDAG-NEXT:    bl exp10f
162 ; SDAG-NEXT:    fcvt h1, s0
163 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
164 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
165 ; SDAG-NEXT:    mov v0.h[3], v1.h[0]
166 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
167 ; SDAG-NEXT:    add sp, sp, #48
168 ; SDAG-NEXT:    ret
170 ; GISEL-LABEL: exp10_v3f16:
171 ; GISEL:       // %bb.0:
172 ; GISEL-NEXT:    sub sp, sp, #64
173 ; GISEL-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill
174 ; GISEL-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
175 ; GISEL-NEXT:    .cfi_def_cfa_offset 64
176 ; GISEL-NEXT:    .cfi_offset w30, -16
177 ; GISEL-NEXT:    .cfi_offset b8, -24
178 ; GISEL-NEXT:    .cfi_offset b9, -32
179 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
180 ; GISEL-NEXT:    mov h8, v0.h[1]
181 ; GISEL-NEXT:    mov h9, v0.h[2]
182 ; GISEL-NEXT:    fcvt s0, h0
183 ; GISEL-NEXT:    bl exp10f
184 ; GISEL-NEXT:    fcvt s1, h8
185 ; GISEL-NEXT:    fcvt h0, s0
186 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
187 ; GISEL-NEXT:    fmov s0, s1
188 ; GISEL-NEXT:    bl exp10f
189 ; GISEL-NEXT:    fcvt s1, h9
190 ; GISEL-NEXT:    fcvt h0, s0
191 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
192 ; GISEL-NEXT:    fmov s0, s1
193 ; GISEL-NEXT:    bl exp10f
194 ; GISEL-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload
195 ; GISEL-NEXT:    fcvt h0, s0
196 ; GISEL-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload
197 ; GISEL-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
198 ; GISEL-NEXT:    mov v1.h[1], v2.h[0]
199 ; GISEL-NEXT:    mov v1.h[2], v0.h[0]
200 ; GISEL-NEXT:    mov v1.h[3], v0.h[0]
201 ; GISEL-NEXT:    mov v0.16b, v1.16b
202 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
203 ; GISEL-NEXT:    add sp, sp, #64
204 ; GISEL-NEXT:    ret
205   %r = call <3 x half> @llvm.exp10.v3f16(<3 x half> %x)
206   ret <3 x half> %r
209 define <4 x half> @exp10_v4f16(<4 x half> %x) {
210 ; SDAG-LABEL: exp10_v4f16:
211 ; SDAG:       // %bb.0:
212 ; SDAG-NEXT:    sub sp, sp, #48
213 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
214 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
215 ; SDAG-NEXT:    .cfi_offset w30, -16
216 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
217 ; SDAG-NEXT:    mov h1, v0.h[1]
218 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
219 ; SDAG-NEXT:    fcvt s0, h1
220 ; SDAG-NEXT:    bl exp10f
221 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
222 ; SDAG-NEXT:    fcvt h0, s0
223 ; SDAG-NEXT:    fcvt s1, h1
224 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
225 ; SDAG-NEXT:    fmov s0, s1
226 ; SDAG-NEXT:    bl exp10f
227 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
228 ; SDAG-NEXT:    fcvt h2, s0
229 ; SDAG-NEXT:    mov h1, v1.h[2]
230 ; SDAG-NEXT:    fcvt s0, h1
231 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
232 ; SDAG-NEXT:    mov v2.h[1], v1.h[0]
233 ; SDAG-NEXT:    str q2, [sp] // 16-byte Folded Spill
234 ; SDAG-NEXT:    bl exp10f
235 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
236 ; SDAG-NEXT:    fcvt h2, s0
237 ; SDAG-NEXT:    mov h1, v1.h[3]
238 ; SDAG-NEXT:    fcvt s0, h1
239 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
240 ; SDAG-NEXT:    mov v1.h[2], v2.h[0]
241 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
242 ; SDAG-NEXT:    bl exp10f
243 ; SDAG-NEXT:    fcvt h1, s0
244 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
245 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
246 ; SDAG-NEXT:    mov v0.h[3], v1.h[0]
247 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
248 ; SDAG-NEXT:    add sp, sp, #48
249 ; SDAG-NEXT:    ret
251 ; GISEL-LABEL: exp10_v4f16:
252 ; GISEL:       // %bb.0:
253 ; GISEL-NEXT:    sub sp, sp, #80
254 ; GISEL-NEXT:    str d10, [sp, #48] // 8-byte Folded Spill
255 ; GISEL-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill
256 ; GISEL-NEXT:    str x30, [sp, #72] // 8-byte Folded Spill
257 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
258 ; GISEL-NEXT:    .cfi_offset w30, -8
259 ; GISEL-NEXT:    .cfi_offset b8, -16
260 ; GISEL-NEXT:    .cfi_offset b9, -24
261 ; GISEL-NEXT:    .cfi_offset b10, -32
262 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
263 ; GISEL-NEXT:    mov h8, v0.h[1]
264 ; GISEL-NEXT:    mov h9, v0.h[2]
265 ; GISEL-NEXT:    mov h10, v0.h[3]
266 ; GISEL-NEXT:    fcvt s0, h0
267 ; GISEL-NEXT:    bl exp10f
268 ; GISEL-NEXT:    fcvt s1, h8
269 ; GISEL-NEXT:    fcvt h0, s0
270 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
271 ; GISEL-NEXT:    fmov s0, s1
272 ; GISEL-NEXT:    bl exp10f
273 ; GISEL-NEXT:    fcvt s1, h9
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:    fcvt s1, h10
279 ; GISEL-NEXT:    fcvt h0, s0
280 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
281 ; GISEL-NEXT:    fmov s0, s1
282 ; GISEL-NEXT:    bl exp10f
283 ; GISEL-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload
284 ; GISEL-NEXT:    fcvt h0, s0
285 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
286 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
287 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
288 ; GISEL-NEXT:    mov v1.h[1], v2.h[0]
289 ; GISEL-NEXT:    ldr q2, [sp] // 16-byte Folded Reload
290 ; GISEL-NEXT:    mov v1.h[2], v2.h[0]
291 ; GISEL-NEXT:    mov v1.h[3], v0.h[0]
292 ; GISEL-NEXT:    mov v0.16b, v1.16b
293 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
294 ; GISEL-NEXT:    add sp, sp, #80
295 ; GISEL-NEXT:    ret
296   %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)
297   ret <4 x half> %r
300 define float @exp10_f32(float %x) {
301 ; SDAG-LABEL: exp10_f32:
302 ; SDAG:       // %bb.0:
303 ; SDAG-NEXT:    b exp10f
305 ; GISEL-LABEL: exp10_f32:
306 ; GISEL:       // %bb.0:
307 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
308 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
309 ; GISEL-NEXT:    .cfi_offset w30, -16
310 ; GISEL-NEXT:    bl exp10f
311 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
312 ; GISEL-NEXT:    ret
313   %r = call float @llvm.exp10.f32(float %x)
314   ret float %r
317 define <1 x float> @exp10_v1f32(<1 x float> %x) {
318 ; SDAG-LABEL: exp10_v1f32:
319 ; SDAG:       // %bb.0:
320 ; SDAG-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
321 ; SDAG-NEXT:    .cfi_def_cfa_offset 16
322 ; SDAG-NEXT:    .cfi_offset w30, -16
323 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
324 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
325 ; SDAG-NEXT:    bl exp10f
326 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $d0
327 ; SDAG-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
328 ; SDAG-NEXT:    ret
330 ; GISEL-LABEL: exp10_v1f32:
331 ; GISEL:       // %bb.0:
332 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
333 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
334 ; GISEL-NEXT:    .cfi_offset w30, -16
335 ; GISEL-NEXT:    fmov x8, d0
336 ; GISEL-NEXT:    fmov s0, w8
337 ; GISEL-NEXT:    bl exp10f
338 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $d0
339 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
340 ; GISEL-NEXT:    ret
341   %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)
342   ret <1 x float> %r
345 define <2 x float> @exp10_v2f32(<2 x float> %x) {
346 ; SDAG-LABEL: exp10_v2f32:
347 ; SDAG:       // %bb.0:
348 ; SDAG-NEXT:    sub sp, sp, #48
349 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
350 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
351 ; SDAG-NEXT:    .cfi_offset w30, -16
352 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
353 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
354 ; SDAG-NEXT:    mov s0, v0.s[1]
355 ; SDAG-NEXT:    bl exp10f
356 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
357 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
358 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
359 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
360 ; SDAG-NEXT:    bl exp10f
361 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
362 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
363 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
364 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
365 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
366 ; SDAG-NEXT:    add sp, sp, #48
367 ; SDAG-NEXT:    ret
369 ; GISEL-LABEL: exp10_v2f32:
370 ; GISEL:       // %bb.0:
371 ; GISEL-NEXT:    sub sp, sp, #32
372 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
373 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
374 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
375 ; GISEL-NEXT:    .cfi_offset w30, -8
376 ; GISEL-NEXT:    .cfi_offset b8, -16
377 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
378 ; GISEL-NEXT:    mov s8, v0.s[1]
379 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
380 ; GISEL-NEXT:    bl exp10f
381 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
382 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
383 ; GISEL-NEXT:    fmov s0, s8
384 ; GISEL-NEXT:    bl exp10f
385 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
386 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
387 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
388 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
389 ; GISEL-NEXT:    mov v1.s[1], v0.s[0]
390 ; GISEL-NEXT:    fmov d0, d1
391 ; GISEL-NEXT:    add sp, sp, #32
392 ; GISEL-NEXT:    ret
393   %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
394   ret <2 x float> %r
397 define <3 x float> @exp10_v3f32(<3 x float> %x) {
398 ; SDAG-LABEL: exp10_v3f32:
399 ; SDAG:       // %bb.0:
400 ; SDAG-NEXT:    sub sp, sp, #48
401 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
402 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
403 ; SDAG-NEXT:    .cfi_offset w30, -16
404 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
405 ; SDAG-NEXT:    mov s0, v0.s[1]
406 ; SDAG-NEXT:    bl exp10f
407 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
408 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
409 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
410 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
411 ; SDAG-NEXT:    bl exp10f
412 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
413 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
414 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
415 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
416 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
417 ; SDAG-NEXT:    mov s0, v0.s[2]
418 ; SDAG-NEXT:    bl exp10f
419 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
420 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
421 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
422 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
423 ; SDAG-NEXT:    mov v0.16b, v1.16b
424 ; SDAG-NEXT:    add sp, sp, #48
425 ; SDAG-NEXT:    ret
427 ; GISEL-LABEL: exp10_v3f32:
428 ; GISEL:       // %bb.0:
429 ; GISEL-NEXT:    sub sp, sp, #64
430 ; GISEL-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill
431 ; GISEL-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
432 ; GISEL-NEXT:    .cfi_def_cfa_offset 64
433 ; GISEL-NEXT:    .cfi_offset w30, -16
434 ; GISEL-NEXT:    .cfi_offset b8, -24
435 ; GISEL-NEXT:    .cfi_offset b9, -32
436 ; GISEL-NEXT:    mov s8, v0.s[1]
437 ; GISEL-NEXT:    mov s9, v0.s[2]
438 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
439 ; GISEL-NEXT:    bl exp10f
440 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
441 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
442 ; GISEL-NEXT:    fmov s0, s8
443 ; GISEL-NEXT:    bl exp10f
444 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
445 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
446 ; GISEL-NEXT:    fmov s0, s9
447 ; GISEL-NEXT:    bl exp10f
448 ; GISEL-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload
449 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
450 ; GISEL-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
451 ; GISEL-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload
452 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
453 ; GISEL-NEXT:    mov v1.s[2], v0.s[0]
454 ; GISEL-NEXT:    mov v1.s[3], v0.s[0]
455 ; GISEL-NEXT:    mov v0.16b, v1.16b
456 ; GISEL-NEXT:    add sp, sp, #64
457 ; GISEL-NEXT:    ret
458   %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)
459   ret <3 x float> %r
462 define <4 x float> @exp10_v4f32(<4 x float> %x) {
463 ; SDAG-LABEL: exp10_v4f32:
464 ; SDAG:       // %bb.0:
465 ; SDAG-NEXT:    sub sp, sp, #48
466 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
467 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
468 ; SDAG-NEXT:    .cfi_offset w30, -16
469 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
470 ; SDAG-NEXT:    mov s0, v0.s[1]
471 ; SDAG-NEXT:    bl exp10f
472 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
473 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
474 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
475 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
476 ; SDAG-NEXT:    bl exp10f
477 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
478 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
479 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
480 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
481 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
482 ; SDAG-NEXT:    mov s0, v0.s[2]
483 ; SDAG-NEXT:    bl exp10f
484 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
485 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
486 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
487 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
488 ; SDAG-NEXT:    mov s0, v0.s[3]
489 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
490 ; SDAG-NEXT:    bl exp10f
491 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
492 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
493 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
494 ; SDAG-NEXT:    mov v1.s[3], v0.s[0]
495 ; SDAG-NEXT:    mov v0.16b, v1.16b
496 ; SDAG-NEXT:    add sp, sp, #48
497 ; SDAG-NEXT:    ret
499 ; GISEL-LABEL: exp10_v4f32:
500 ; GISEL:       // %bb.0:
501 ; GISEL-NEXT:    sub sp, sp, #80
502 ; GISEL-NEXT:    str d10, [sp, #48] // 8-byte Folded Spill
503 ; GISEL-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill
504 ; GISEL-NEXT:    str x30, [sp, #72] // 8-byte Folded Spill
505 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
506 ; GISEL-NEXT:    .cfi_offset w30, -8
507 ; GISEL-NEXT:    .cfi_offset b8, -16
508 ; GISEL-NEXT:    .cfi_offset b9, -24
509 ; GISEL-NEXT:    .cfi_offset b10, -32
510 ; GISEL-NEXT:    mov s8, v0.s[1]
511 ; GISEL-NEXT:    mov s9, v0.s[2]
512 ; GISEL-NEXT:    mov s10, v0.s[3]
513 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
514 ; GISEL-NEXT:    bl exp10f
515 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
516 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
517 ; GISEL-NEXT:    fmov s0, s8
518 ; GISEL-NEXT:    bl exp10f
519 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
520 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
521 ; GISEL-NEXT:    fmov s0, s9
522 ; GISEL-NEXT:    bl exp10f
523 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
524 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
525 ; GISEL-NEXT:    fmov s0, s10
526 ; GISEL-NEXT:    bl exp10f
527 ; GISEL-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload
528 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
529 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
530 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
531 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
532 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
533 ; GISEL-NEXT:    ldr q2, [sp] // 16-byte Folded Reload
534 ; GISEL-NEXT:    mov v1.s[2], v2.s[0]
535 ; GISEL-NEXT:    mov v1.s[3], v0.s[0]
536 ; GISEL-NEXT:    mov v0.16b, v1.16b
537 ; GISEL-NEXT:    add sp, sp, #80
538 ; GISEL-NEXT:    ret
539   %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)
540   ret <4 x float> %r
543 define double @exp10_f64(double %x) {
544 ; SDAG-LABEL: exp10_f64:
545 ; SDAG:       // %bb.0:
546 ; SDAG-NEXT:    b exp10
548 ; GISEL-LABEL: exp10_f64:
549 ; GISEL:       // %bb.0:
550 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
551 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
552 ; GISEL-NEXT:    .cfi_offset w30, -16
553 ; GISEL-NEXT:    bl exp10
554 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
555 ; GISEL-NEXT:    ret
556   %r = call double @llvm.exp10.f64(double %x)
557   ret double %r
560 ; FIXME: Broken
561 ; define <1 x double> @exp10_v1f64(<1 x double> %x) {
562 ;   %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)
563 ;   ret <1 x double> %r
564 ; }
566 define <2 x double> @exp10_v2f64(<2 x double> %x) {
567 ; SDAG-LABEL: exp10_v2f64:
568 ; SDAG:       // %bb.0:
569 ; SDAG-NEXT:    sub sp, sp, #48
570 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
571 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
572 ; SDAG-NEXT:    .cfi_offset w30, -16
573 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
574 ; SDAG-NEXT:    mov d0, v0.d[1]
575 ; SDAG-NEXT:    bl exp10
576 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
577 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
578 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
579 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
580 ; SDAG-NEXT:    bl exp10
581 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
582 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
583 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
584 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
585 ; SDAG-NEXT:    add sp, sp, #48
586 ; SDAG-NEXT:    ret
588 ; GISEL-LABEL: exp10_v2f64:
589 ; GISEL:       // %bb.0:
590 ; GISEL-NEXT:    sub sp, sp, #32
591 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
592 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
593 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
594 ; GISEL-NEXT:    .cfi_offset w30, -8
595 ; GISEL-NEXT:    .cfi_offset b8, -16
596 ; GISEL-NEXT:    mov d8, v0.d[1]
597 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
598 ; GISEL-NEXT:    bl exp10
599 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
600 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
601 ; GISEL-NEXT:    fmov d0, d8
602 ; GISEL-NEXT:    bl exp10
603 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
604 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
605 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
606 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
607 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
608 ; GISEL-NEXT:    mov v0.16b, v1.16b
609 ; GISEL-NEXT:    add sp, sp, #32
610 ; GISEL-NEXT:    ret
611   %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
612   ret <2 x double> %r
615 define <3 x double> @exp10_v3f64(<3 x double> %x) {
616 ; SDAG-LABEL: exp10_v3f64:
617 ; SDAG:       // %bb.0:
618 ; SDAG-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
619 ; SDAG-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
620 ; SDAG-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
621 ; SDAG-NEXT:    .cfi_def_cfa_offset 32
622 ; SDAG-NEXT:    .cfi_offset w30, -8
623 ; SDAG-NEXT:    .cfi_offset b8, -16
624 ; SDAG-NEXT:    .cfi_offset b9, -24
625 ; SDAG-NEXT:    .cfi_offset b10, -32
626 ; SDAG-NEXT:    fmov d8, d2
627 ; SDAG-NEXT:    fmov d9, d1
628 ; SDAG-NEXT:    bl exp10
629 ; SDAG-NEXT:    fmov d10, d0
630 ; SDAG-NEXT:    fmov d0, d9
631 ; SDAG-NEXT:    bl exp10
632 ; SDAG-NEXT:    fmov d9, d0
633 ; SDAG-NEXT:    fmov d0, d8
634 ; SDAG-NEXT:    bl exp10
635 ; SDAG-NEXT:    fmov d1, d9
636 ; SDAG-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
637 ; SDAG-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
638 ; SDAG-NEXT:    fmov d2, d0
639 ; SDAG-NEXT:    fmov d0, d10
640 ; SDAG-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
641 ; SDAG-NEXT:    ret
643 ; GISEL-LABEL: exp10_v3f64:
644 ; GISEL:       // %bb.0:
645 ; GISEL-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
646 ; GISEL-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
647 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
648 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
649 ; GISEL-NEXT:    .cfi_offset w30, -8
650 ; GISEL-NEXT:    .cfi_offset b8, -16
651 ; GISEL-NEXT:    .cfi_offset b9, -24
652 ; GISEL-NEXT:    .cfi_offset b10, -32
653 ; GISEL-NEXT:    fmov d8, d1
654 ; GISEL-NEXT:    fmov d9, d2
655 ; GISEL-NEXT:    bl exp10
656 ; GISEL-NEXT:    fmov d10, d0
657 ; GISEL-NEXT:    fmov d0, d8
658 ; GISEL-NEXT:    bl exp10
659 ; GISEL-NEXT:    fmov d8, d0
660 ; GISEL-NEXT:    fmov d0, d9
661 ; GISEL-NEXT:    bl exp10
662 ; GISEL-NEXT:    fmov d1, d8
663 ; GISEL-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
664 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
665 ; GISEL-NEXT:    fmov d2, d0
666 ; GISEL-NEXT:    fmov d0, d10
667 ; GISEL-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
668 ; GISEL-NEXT:    ret
669   %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)
670   ret <3 x double> %r
673 define <4 x double> @exp10_v4f64(<4 x double> %x) {
674 ; SDAG-LABEL: exp10_v4f64:
675 ; SDAG:       // %bb.0:
676 ; SDAG-NEXT:    sub sp, sp, #64
677 ; SDAG-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
678 ; SDAG-NEXT:    .cfi_def_cfa_offset 64
679 ; SDAG-NEXT:    .cfi_offset w30, -16
680 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
681 ; SDAG-NEXT:    mov d0, v0.d[1]
682 ; SDAG-NEXT:    str q1, [sp, #32] // 16-byte Folded Spill
683 ; SDAG-NEXT:    bl exp10
684 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
685 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
686 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
687 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
688 ; SDAG-NEXT:    bl exp10
689 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
690 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
691 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
692 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
693 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
694 ; SDAG-NEXT:    mov d0, v0.d[1]
695 ; SDAG-NEXT:    bl exp10
696 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
697 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
698 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
699 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
700 ; SDAG-NEXT:    bl exp10
701 ; SDAG-NEXT:    fmov d1, d0
702 ; SDAG-NEXT:    ldp q2, q0, [sp] // 32-byte Folded Reload
703 ; SDAG-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
704 ; SDAG-NEXT:    mov v1.d[1], v2.d[0]
705 ; SDAG-NEXT:    add sp, sp, #64
706 ; SDAG-NEXT:    ret
708 ; GISEL-LABEL: exp10_v4f64:
709 ; GISEL:       // %bb.0:
710 ; GISEL-NEXT:    sub sp, sp, #80
711 ; GISEL-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill
712 ; GISEL-NEXT:    str x30, [sp, #64] // 8-byte Folded Spill
713 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
714 ; GISEL-NEXT:    .cfi_offset w30, -16
715 ; GISEL-NEXT:    .cfi_offset b8, -24
716 ; GISEL-NEXT:    .cfi_offset b9, -32
717 ; GISEL-NEXT:    str q1, [sp] // 16-byte Folded Spill
718 ; GISEL-NEXT:    mov d8, v0.d[1]
719 ; GISEL-NEXT:    mov d9, v1.d[1]
720 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
721 ; GISEL-NEXT:    bl exp10
722 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
723 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
724 ; GISEL-NEXT:    fmov d0, d8
725 ; GISEL-NEXT:    bl exp10
726 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
727 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
728 ; GISEL-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
729 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
730 ; GISEL-NEXT:    bl exp10
731 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
732 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
733 ; GISEL-NEXT:    fmov d0, d9
734 ; GISEL-NEXT:    bl exp10
735 ; GISEL-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload
736 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
737 ; GISEL-NEXT:    ldr x30, [sp, #64] // 8-byte Folded Reload
738 ; GISEL-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload
739 ; GISEL-NEXT:    mov v2.d[1], v1.d[0]
740 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
741 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
742 ; GISEL-NEXT:    mov v0.16b, v2.16b
743 ; GISEL-NEXT:    add sp, sp, #80
744 ; GISEL-NEXT:    ret
745   %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)
746   ret <4 x double> %r
748 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
749 ; CVT: {{.*}}
750 ; CVT-GISEL: {{.*}}
751 ; CVT-SDAG: {{.*}}
752 ; FP16: {{.*}}
753 ; FP16-GISEL: {{.*}}
754 ; FP16-SDAG: {{.*}}