[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / llvm.exp10.ll
blobe2cd3835e44996b101b0a2b601b6a8614530179c
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-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] // 16-byte Folded Spill
281 ; GISEL-NEXT:    fmov s0, s1
282 ; GISEL-NEXT:    bl exp10f
283 ; GISEL-NEXT:    ldr q1, [sp, #32] // 16-byte Folded Reload
284 ; GISEL-NEXT:    ldr q2, [sp] // 16-byte Folded Reload
285 ; GISEL-NEXT:    fcvt h0, s0
286 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
287 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
288 ; GISEL-NEXT:    mov v1.h[1], v2.h[0]
289 ; GISEL-NEXT:    ldr q2, [sp, #16] // 16-byte Folded Reload
290 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
291 ; GISEL-NEXT:    mov v1.h[2], v2.h[0]
292 ; GISEL-NEXT:    mov v1.h[3], v0.h[0]
293 ; GISEL-NEXT:    mov v0.16b, v1.16b
294 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
295 ; GISEL-NEXT:    add sp, sp, #80
296 ; GISEL-NEXT:    ret
297   %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)
298   ret <4 x half> %r
301 define float @exp10_f32(float %x) {
302 ; SDAG-LABEL: exp10_f32:
303 ; SDAG:       // %bb.0:
304 ; SDAG-NEXT:    b exp10f
306 ; GISEL-LABEL: exp10_f32:
307 ; GISEL:       // %bb.0:
308 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
309 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
310 ; GISEL-NEXT:    .cfi_offset w30, -16
311 ; GISEL-NEXT:    bl exp10f
312 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
313 ; GISEL-NEXT:    ret
314   %r = call float @llvm.exp10.f32(float %x)
315   ret float %r
318 define <1 x float> @exp10_v1f32(<1 x float> %x) {
319 ; SDAG-LABEL: exp10_v1f32:
320 ; SDAG:       // %bb.0:
321 ; SDAG-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
322 ; SDAG-NEXT:    .cfi_def_cfa_offset 16
323 ; SDAG-NEXT:    .cfi_offset w30, -16
324 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
325 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
326 ; SDAG-NEXT:    bl exp10f
327 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $d0
328 ; SDAG-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
329 ; SDAG-NEXT:    ret
331 ; GISEL-LABEL: exp10_v1f32:
332 ; GISEL:       // %bb.0:
333 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
334 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
335 ; GISEL-NEXT:    .cfi_offset w30, -16
336 ; GISEL-NEXT:    fmov x8, d0
337 ; GISEL-NEXT:    fmov s0, w8
338 ; GISEL-NEXT:    bl exp10f
339 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $d0
340 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
341 ; GISEL-NEXT:    ret
342   %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)
343   ret <1 x float> %r
346 define <2 x float> @exp10_v2f32(<2 x float> %x) {
347 ; SDAG-LABEL: exp10_v2f32:
348 ; SDAG:       // %bb.0:
349 ; SDAG-NEXT:    sub sp, sp, #48
350 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
351 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
352 ; SDAG-NEXT:    .cfi_offset w30, -16
353 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
354 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
355 ; SDAG-NEXT:    mov s0, v0.s[1]
356 ; SDAG-NEXT:    bl exp10f
357 ; SDAG-NEXT:    str d0, [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:    str d0, [sp] // 16-byte Folded Spill
382 ; GISEL-NEXT:    fmov s0, s8
383 ; GISEL-NEXT:    bl exp10f
384 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
385 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
386 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
387 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
388 ; GISEL-NEXT:    mov v1.s[1], v0.s[0]
389 ; GISEL-NEXT:    fmov d0, d1
390 ; GISEL-NEXT:    add sp, sp, #32
391 ; GISEL-NEXT:    ret
392   %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
393   ret <2 x float> %r
396 define <3 x float> @exp10_v3f32(<3 x float> %x) {
397 ; SDAG-LABEL: exp10_v3f32:
398 ; SDAG:       // %bb.0:
399 ; SDAG-NEXT:    sub sp, sp, #48
400 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
401 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
402 ; SDAG-NEXT:    .cfi_offset w30, -16
403 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
404 ; SDAG-NEXT:    mov s0, v0.s[1]
405 ; SDAG-NEXT:    bl exp10f
406 ; SDAG-NEXT:    str d0, [sp] // 16-byte Folded Spill
407 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
408 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
409 ; SDAG-NEXT:    bl exp10f
410 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
411 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
412 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
413 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
414 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
415 ; SDAG-NEXT:    mov s0, v0.s[2]
416 ; SDAG-NEXT:    bl exp10f
417 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
418 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
419 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
420 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
421 ; SDAG-NEXT:    mov v0.16b, v1.16b
422 ; SDAG-NEXT:    add sp, sp, #48
423 ; SDAG-NEXT:    ret
425 ; GISEL-LABEL: exp10_v3f32:
426 ; GISEL:       // %bb.0:
427 ; GISEL-NEXT:    sub sp, sp, #64
428 ; GISEL-NEXT:    stp d9, d8, [sp, #32] // 16-byte Folded Spill
429 ; GISEL-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
430 ; GISEL-NEXT:    .cfi_def_cfa_offset 64
431 ; GISEL-NEXT:    .cfi_offset w30, -16
432 ; GISEL-NEXT:    .cfi_offset b8, -24
433 ; GISEL-NEXT:    .cfi_offset b9, -32
434 ; GISEL-NEXT:    mov s8, v0.s[1]
435 ; GISEL-NEXT:    mov s9, v0.s[2]
436 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
437 ; GISEL-NEXT:    bl exp10f
438 ; GISEL-NEXT:    str d0, [sp, #16] // 16-byte Folded Spill
439 ; GISEL-NEXT:    fmov s0, s8
440 ; GISEL-NEXT:    bl exp10f
441 ; GISEL-NEXT:    str d0, [sp] // 16-byte Folded Spill
442 ; GISEL-NEXT:    fmov s0, s9
443 ; GISEL-NEXT:    bl exp10f
444 ; GISEL-NEXT:    ldp q2, q1, [sp] // 32-byte Folded Reload
445 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
446 ; GISEL-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
447 ; GISEL-NEXT:    ldp d9, d8, [sp, #32] // 16-byte Folded Reload
448 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
449 ; GISEL-NEXT:    mov v1.s[2], v0.s[0]
450 ; GISEL-NEXT:    mov v1.s[3], v0.s[0]
451 ; GISEL-NEXT:    mov v0.16b, v1.16b
452 ; GISEL-NEXT:    add sp, sp, #64
453 ; GISEL-NEXT:    ret
454   %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)
455   ret <3 x float> %r
458 define <4 x float> @exp10_v4f32(<4 x float> %x) {
459 ; SDAG-LABEL: exp10_v4f32:
460 ; SDAG:       // %bb.0:
461 ; SDAG-NEXT:    sub sp, sp, #48
462 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
463 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
464 ; SDAG-NEXT:    .cfi_offset w30, -16
465 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
466 ; SDAG-NEXT:    mov s0, v0.s[1]
467 ; SDAG-NEXT:    bl exp10f
468 ; SDAG-NEXT:    str d0, [sp] // 16-byte Folded Spill
469 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
470 ; SDAG-NEXT:    // kill: def $s0 killed $s0 killed $q0
471 ; SDAG-NEXT:    bl exp10f
472 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
473 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
474 ; SDAG-NEXT:    mov v0.s[1], v1.s[0]
475 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
476 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
477 ; SDAG-NEXT:    mov s0, v0.s[2]
478 ; SDAG-NEXT:    bl exp10f
479 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
480 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
481 ; SDAG-NEXT:    mov v1.s[2], v0.s[0]
482 ; SDAG-NEXT:    ldr q0, [sp, #16] // 16-byte Folded Reload
483 ; SDAG-NEXT:    mov s0, v0.s[3]
484 ; SDAG-NEXT:    str q1, [sp] // 16-byte Folded Spill
485 ; SDAG-NEXT:    bl exp10f
486 ; SDAG-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
487 ; SDAG-NEXT:    // kill: def $s0 killed $s0 def $q0
488 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
489 ; SDAG-NEXT:    mov v1.s[3], v0.s[0]
490 ; SDAG-NEXT:    mov v0.16b, v1.16b
491 ; SDAG-NEXT:    add sp, sp, #48
492 ; SDAG-NEXT:    ret
494 ; GISEL-LABEL: exp10_v4f32:
495 ; GISEL:       // %bb.0:
496 ; GISEL-NEXT:    sub sp, sp, #80
497 ; GISEL-NEXT:    str d10, [sp, #48] // 8-byte Folded Spill
498 ; GISEL-NEXT:    stp d9, d8, [sp, #56] // 16-byte Folded Spill
499 ; GISEL-NEXT:    str x30, [sp, #72] // 8-byte Folded Spill
500 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
501 ; GISEL-NEXT:    .cfi_offset w30, -8
502 ; GISEL-NEXT:    .cfi_offset b8, -16
503 ; GISEL-NEXT:    .cfi_offset b9, -24
504 ; GISEL-NEXT:    .cfi_offset b10, -32
505 ; GISEL-NEXT:    mov s8, v0.s[1]
506 ; GISEL-NEXT:    mov s9, v0.s[2]
507 ; GISEL-NEXT:    mov s10, v0.s[3]
508 ; GISEL-NEXT:    // kill: def $s0 killed $s0 killed $q0
509 ; GISEL-NEXT:    bl exp10f
510 ; GISEL-NEXT:    str d0, [sp, #32] // 16-byte Folded Spill
511 ; GISEL-NEXT:    fmov s0, s8
512 ; GISEL-NEXT:    bl exp10f
513 ; GISEL-NEXT:    str d0, [sp, #16] // 16-byte Folded Spill
514 ; GISEL-NEXT:    fmov s0, s9
515 ; GISEL-NEXT:    bl exp10f
516 ; GISEL-NEXT:    str d0, [sp] // 16-byte Folded Spill
517 ; GISEL-NEXT:    fmov s0, s10
518 ; GISEL-NEXT:    bl exp10f
519 ; GISEL-NEXT:    ldp q2, q1, [sp, #16] // 32-byte Folded Reload
520 ; GISEL-NEXT:    // kill: def $s0 killed $s0 def $q0
521 ; GISEL-NEXT:    ldr x30, [sp, #72] // 8-byte Folded Reload
522 ; GISEL-NEXT:    ldp d9, d8, [sp, #56] // 16-byte Folded Reload
523 ; GISEL-NEXT:    ldr d10, [sp, #48] // 8-byte Folded Reload
524 ; GISEL-NEXT:    mov v1.s[1], v2.s[0]
525 ; GISEL-NEXT:    ldr q2, [sp] // 16-byte Folded Reload
526 ; GISEL-NEXT:    mov v1.s[2], v2.s[0]
527 ; GISEL-NEXT:    mov v1.s[3], v0.s[0]
528 ; GISEL-NEXT:    mov v0.16b, v1.16b
529 ; GISEL-NEXT:    add sp, sp, #80
530 ; GISEL-NEXT:    ret
531   %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)
532   ret <4 x float> %r
535 define double @exp10_f64(double %x) {
536 ; SDAG-LABEL: exp10_f64:
537 ; SDAG:       // %bb.0:
538 ; SDAG-NEXT:    b exp10
540 ; GISEL-LABEL: exp10_f64:
541 ; GISEL:       // %bb.0:
542 ; GISEL-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
543 ; GISEL-NEXT:    .cfi_def_cfa_offset 16
544 ; GISEL-NEXT:    .cfi_offset w30, -16
545 ; GISEL-NEXT:    bl exp10
546 ; GISEL-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
547 ; GISEL-NEXT:    ret
548   %r = call double @llvm.exp10.f64(double %x)
549   ret double %r
552 ; FIXME: Broken
553 ; define <1 x double> @exp10_v1f64(<1 x double> %x) {
554 ;   %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)
555 ;   ret <1 x double> %r
556 ; }
558 define <2 x double> @exp10_v2f64(<2 x double> %x) {
559 ; SDAG-LABEL: exp10_v2f64:
560 ; SDAG:       // %bb.0:
561 ; SDAG-NEXT:    sub sp, sp, #48
562 ; SDAG-NEXT:    str x30, [sp, #32] // 8-byte Folded Spill
563 ; SDAG-NEXT:    .cfi_def_cfa_offset 48
564 ; SDAG-NEXT:    .cfi_offset w30, -16
565 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
566 ; SDAG-NEXT:    mov d0, v0.d[1]
567 ; SDAG-NEXT:    bl exp10
568 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
569 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
570 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
571 ; SDAG-NEXT:    bl exp10
572 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
573 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
574 ; SDAG-NEXT:    ldr x30, [sp, #32] // 8-byte Folded Reload
575 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
576 ; SDAG-NEXT:    add sp, sp, #48
577 ; SDAG-NEXT:    ret
579 ; GISEL-LABEL: exp10_v2f64:
580 ; GISEL:       // %bb.0:
581 ; GISEL-NEXT:    sub sp, sp, #32
582 ; GISEL-NEXT:    str d8, [sp, #16] // 8-byte Folded Spill
583 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
584 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
585 ; GISEL-NEXT:    .cfi_offset w30, -8
586 ; GISEL-NEXT:    .cfi_offset b8, -16
587 ; GISEL-NEXT:    mov d8, v0.d[1]
588 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
589 ; GISEL-NEXT:    bl exp10
590 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
591 ; GISEL-NEXT:    fmov d0, d8
592 ; GISEL-NEXT:    bl exp10
593 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
594 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
595 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
596 ; GISEL-NEXT:    ldr d8, [sp, #16] // 8-byte Folded Reload
597 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
598 ; GISEL-NEXT:    mov v0.16b, v1.16b
599 ; GISEL-NEXT:    add sp, sp, #32
600 ; GISEL-NEXT:    ret
601   %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
602   ret <2 x double> %r
605 define <3 x double> @exp10_v3f64(<3 x double> %x) {
606 ; SDAG-LABEL: exp10_v3f64:
607 ; SDAG:       // %bb.0:
608 ; SDAG-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
609 ; SDAG-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
610 ; SDAG-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
611 ; SDAG-NEXT:    .cfi_def_cfa_offset 32
612 ; SDAG-NEXT:    .cfi_offset w30, -8
613 ; SDAG-NEXT:    .cfi_offset b8, -16
614 ; SDAG-NEXT:    .cfi_offset b9, -24
615 ; SDAG-NEXT:    .cfi_offset b10, -32
616 ; SDAG-NEXT:    fmov d8, d2
617 ; SDAG-NEXT:    fmov d9, d1
618 ; SDAG-NEXT:    bl exp10
619 ; SDAG-NEXT:    fmov d10, d0
620 ; SDAG-NEXT:    fmov d0, d9
621 ; SDAG-NEXT:    bl exp10
622 ; SDAG-NEXT:    fmov d9, d0
623 ; SDAG-NEXT:    fmov d0, d8
624 ; SDAG-NEXT:    bl exp10
625 ; SDAG-NEXT:    fmov d1, d9
626 ; SDAG-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
627 ; SDAG-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
628 ; SDAG-NEXT:    fmov d2, d0
629 ; SDAG-NEXT:    fmov d0, d10
630 ; SDAG-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
631 ; SDAG-NEXT:    ret
633 ; GISEL-LABEL: exp10_v3f64:
634 ; GISEL:       // %bb.0:
635 ; GISEL-NEXT:    str d10, [sp, #-32]! // 8-byte Folded Spill
636 ; GISEL-NEXT:    stp d9, d8, [sp, #8] // 16-byte Folded Spill
637 ; GISEL-NEXT:    str x30, [sp, #24] // 8-byte Folded Spill
638 ; GISEL-NEXT:    .cfi_def_cfa_offset 32
639 ; GISEL-NEXT:    .cfi_offset w30, -8
640 ; GISEL-NEXT:    .cfi_offset b8, -16
641 ; GISEL-NEXT:    .cfi_offset b9, -24
642 ; GISEL-NEXT:    .cfi_offset b10, -32
643 ; GISEL-NEXT:    fmov d8, d1
644 ; GISEL-NEXT:    fmov d9, d2
645 ; GISEL-NEXT:    bl exp10
646 ; GISEL-NEXT:    fmov d10, d0
647 ; GISEL-NEXT:    fmov d0, d8
648 ; GISEL-NEXT:    bl exp10
649 ; GISEL-NEXT:    fmov d8, d0
650 ; GISEL-NEXT:    fmov d0, d9
651 ; GISEL-NEXT:    bl exp10
652 ; GISEL-NEXT:    fmov d1, d8
653 ; GISEL-NEXT:    ldp d9, d8, [sp, #8] // 16-byte Folded Reload
654 ; GISEL-NEXT:    ldr x30, [sp, #24] // 8-byte Folded Reload
655 ; GISEL-NEXT:    fmov d2, d0
656 ; GISEL-NEXT:    fmov d0, d10
657 ; GISEL-NEXT:    ldr d10, [sp], #32 // 8-byte Folded Reload
658 ; GISEL-NEXT:    ret
659   %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)
660   ret <3 x double> %r
663 define <4 x double> @exp10_v4f64(<4 x double> %x) {
664 ; SDAG-LABEL: exp10_v4f64:
665 ; SDAG:       // %bb.0:
666 ; SDAG-NEXT:    sub sp, sp, #64
667 ; SDAG-NEXT:    str x30, [sp, #48] // 8-byte Folded Spill
668 ; SDAG-NEXT:    .cfi_def_cfa_offset 64
669 ; SDAG-NEXT:    .cfi_offset w30, -16
670 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
671 ; SDAG-NEXT:    mov d0, v0.d[1]
672 ; SDAG-NEXT:    str q1, [sp, #32] // 16-byte Folded Spill
673 ; SDAG-NEXT:    bl exp10
674 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
675 ; SDAG-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
676 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
677 ; SDAG-NEXT:    bl exp10
678 ; SDAG-NEXT:    ldr q1, [sp, #16] // 16-byte Folded Reload
679 ; SDAG-NEXT:    // kill: def $d0 killed $d0 def $q0
680 ; SDAG-NEXT:    mov v0.d[1], v1.d[0]
681 ; SDAG-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
682 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
683 ; SDAG-NEXT:    mov d0, v0.d[1]
684 ; SDAG-NEXT:    bl exp10
685 ; SDAG-NEXT:    str q0, [sp] // 16-byte Folded Spill
686 ; SDAG-NEXT:    ldr q0, [sp, #32] // 16-byte Folded Reload
687 ; SDAG-NEXT:    // kill: def $d0 killed $d0 killed $q0
688 ; SDAG-NEXT:    bl exp10
689 ; SDAG-NEXT:    fmov d1, d0
690 ; SDAG-NEXT:    ldp q2, q0, [sp] // 32-byte Folded Reload
691 ; SDAG-NEXT:    ldr x30, [sp, #48] // 8-byte Folded Reload
692 ; SDAG-NEXT:    mov v1.d[1], v2.d[0]
693 ; SDAG-NEXT:    add sp, sp, #64
694 ; SDAG-NEXT:    ret
696 ; GISEL-LABEL: exp10_v4f64:
697 ; GISEL:       // %bb.0:
698 ; GISEL-NEXT:    sub sp, sp, #80
699 ; GISEL-NEXT:    stp d9, d8, [sp, #48] // 16-byte Folded Spill
700 ; GISEL-NEXT:    str x30, [sp, #64] // 8-byte Folded Spill
701 ; GISEL-NEXT:    .cfi_def_cfa_offset 80
702 ; GISEL-NEXT:    .cfi_offset w30, -16
703 ; GISEL-NEXT:    .cfi_offset b8, -24
704 ; GISEL-NEXT:    .cfi_offset b9, -32
705 ; GISEL-NEXT:    str q1, [sp] // 16-byte Folded Spill
706 ; GISEL-NEXT:    mov d8, v0.d[1]
707 ; GISEL-NEXT:    mov d9, v1.d[1]
708 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
709 ; GISEL-NEXT:    bl exp10
710 ; GISEL-NEXT:    str q0, [sp, #32] // 16-byte Folded Spill
711 ; GISEL-NEXT:    fmov d0, d8
712 ; GISEL-NEXT:    bl exp10
713 ; GISEL-NEXT:    str q0, [sp, #16] // 16-byte Folded Spill
714 ; GISEL-NEXT:    ldr q0, [sp] // 16-byte Folded Reload
715 ; GISEL-NEXT:    // kill: def $d0 killed $d0 killed $q0
716 ; GISEL-NEXT:    bl exp10
717 ; GISEL-NEXT:    str q0, [sp] // 16-byte Folded Spill
718 ; GISEL-NEXT:    fmov d0, d9
719 ; GISEL-NEXT:    bl exp10
720 ; GISEL-NEXT:    ldp q1, q2, [sp, #16] // 32-byte Folded Reload
721 ; GISEL-NEXT:    // kill: def $d0 killed $d0 def $q0
722 ; GISEL-NEXT:    ldr x30, [sp, #64] // 8-byte Folded Reload
723 ; GISEL-NEXT:    ldp d9, d8, [sp, #48] // 16-byte Folded Reload
724 ; GISEL-NEXT:    mov v2.d[1], v1.d[0]
725 ; GISEL-NEXT:    ldr q1, [sp] // 16-byte Folded Reload
726 ; GISEL-NEXT:    mov v1.d[1], v0.d[0]
727 ; GISEL-NEXT:    mov v0.16b, v2.16b
728 ; GISEL-NEXT:    add sp, sp, #80
729 ; GISEL-NEXT:    ret
730   %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)
731   ret <4 x double> %r
733 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
734 ; CVT: {{.*}}
735 ; CVT-GISEL: {{.*}}
736 ; CVT-SDAG: {{.*}}
737 ; FP16: {{.*}}
738 ; FP16-GISEL: {{.*}}
739 ; FP16-SDAG: {{.*}}