1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2 ; RUN: llc -mtriple=aarch64 -global-isel=0 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64 -global-isel=1 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define double @fpext_f32_f64(float %a) {
6 ; CHECK-LABEL: fpext_f32_f64:
7 ; CHECK: // %bb.0: // %entry
8 ; CHECK-NEXT: fcvt d0, s0
11 %c = fpext float %a to double
15 define double @fpext_f16_f64(half %a) {
16 ; CHECK-LABEL: fpext_f16_f64:
17 ; CHECK: // %bb.0: // %entry
18 ; CHECK-NEXT: fcvt d0, h0
21 %c = fpext half %a to double
25 define float @fpext_f16_f32(half %a) {
26 ; CHECK-LABEL: fpext_f16_f32:
27 ; CHECK: // %bb.0: // %entry
28 ; CHECK-NEXT: fcvt s0, h0
31 %c = fpext half %a to float
35 define fp128 @fpext_f16_f128(half %a) {
36 ; CHECK-LABEL: fpext_f16_f128:
37 ; CHECK: // %bb.0: // %entry
38 ; CHECK-NEXT: b __extendhftf2
40 %c = fpext half %a to fp128
44 define fp128 @fpext_f32_f128(float %a) {
45 ; CHECK-LABEL: fpext_f32_f128:
46 ; CHECK: // %bb.0: // %entry
47 ; CHECK-NEXT: b __extendsftf2
49 %c = fpext float %a to fp128
53 define fp128 @fpext_f64_f128(double %a) {
54 ; CHECK-LABEL: fpext_f64_f128:
55 ; CHECK: // %bb.0: // %entry
56 ; CHECK-NEXT: b __extenddftf2
58 %c = fpext double %a to fp128
62 define <2 x double> @fpext_v2f32_v2f64(<2 x float> %a) {
63 ; CHECK-LABEL: fpext_v2f32_v2f64:
64 ; CHECK: // %bb.0: // %entry
65 ; CHECK-NEXT: fcvtl v0.2d, v0.2s
68 %c = fpext <2 x float> %a to <2 x double>
72 define <3 x double> @fpext_v3f32_v3f64(<3 x float> %a) {
73 ; CHECK-SD-LABEL: fpext_v3f32_v3f64:
74 ; CHECK-SD: // %bb.0: // %entry
75 ; CHECK-SD-NEXT: fcvtl v3.2d, v0.2s
76 ; CHECK-SD-NEXT: fcvtl2 v2.2d, v0.4s
77 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
78 ; CHECK-SD-NEXT: fmov d0, d3
79 ; CHECK-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #8
80 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
83 ; CHECK-GI-LABEL: fpext_v3f32_v3f64:
84 ; CHECK-GI: // %bb.0: // %entry
85 ; CHECK-GI-NEXT: mov s1, v0.s[2]
86 ; CHECK-GI-NEXT: fcvtl v0.2d, v0.2s
87 ; CHECK-GI-NEXT: fcvt d2, s1
88 ; CHECK-GI-NEXT: mov d1, v0.d[1]
89 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
92 %c = fpext <3 x float> %a to <3 x double>
96 define <4 x fp128> @fpext_v4f16_v4f128(<4 x half> %a) {
97 ; CHECK-SD-LABEL: fpext_v4f16_v4f128:
98 ; CHECK-SD: // %bb.0: // %entry
99 ; CHECK-SD-NEXT: sub sp, sp, #64
100 ; CHECK-SD-NEXT: str x30, [sp, #48] // 8-byte Folded Spill
101 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
102 ; CHECK-SD-NEXT: .cfi_offset w30, -16
103 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
104 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
105 ; CHECK-SD-NEXT: // kill: def $h0 killed $h0 killed $q0
106 ; CHECK-SD-NEXT: bl __extendhftf2
107 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
108 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
109 ; CHECK-SD-NEXT: mov h1, v1.h[1]
110 ; CHECK-SD-NEXT: fmov s0, s1
111 ; CHECK-SD-NEXT: bl __extendhftf2
112 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
113 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
114 ; CHECK-SD-NEXT: mov h1, v1.h[2]
115 ; CHECK-SD-NEXT: fmov s0, s1
116 ; CHECK-SD-NEXT: bl __extendhftf2
117 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
118 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
119 ; CHECK-SD-NEXT: mov h1, v1.h[3]
120 ; CHECK-SD-NEXT: fmov s0, s1
121 ; CHECK-SD-NEXT: bl __extendhftf2
122 ; CHECK-SD-NEXT: mov v3.16b, v0.16b
123 ; CHECK-SD-NEXT: ldp q1, q0, [sp] // 32-byte Folded Reload
124 ; CHECK-SD-NEXT: ldr q2, [sp, #32] // 16-byte Folded Reload
125 ; CHECK-SD-NEXT: ldr x30, [sp, #48] // 8-byte Folded Reload
126 ; CHECK-SD-NEXT: add sp, sp, #64
129 ; CHECK-GI-LABEL: fpext_v4f16_v4f128:
130 ; CHECK-GI: // %bb.0: // %entry
131 ; CHECK-GI-NEXT: sub sp, sp, #80
132 ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
133 ; CHECK-GI-NEXT: stp d9, d8, [sp, #56] // 16-byte Folded Spill
134 ; CHECK-GI-NEXT: str x30, [sp, #72] // 8-byte Folded Spill
135 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
136 ; CHECK-GI-NEXT: .cfi_offset w30, -8
137 ; CHECK-GI-NEXT: .cfi_offset b8, -16
138 ; CHECK-GI-NEXT: .cfi_offset b9, -24
139 ; CHECK-GI-NEXT: .cfi_offset b10, -32
140 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
141 ; CHECK-GI-NEXT: mov h8, v0.h[1]
142 ; CHECK-GI-NEXT: mov h9, v0.h[2]
143 ; CHECK-GI-NEXT: mov h10, v0.h[3]
144 ; CHECK-GI-NEXT: // kill: def $h0 killed $h0 killed $q0
145 ; CHECK-GI-NEXT: bl __extendhftf2
146 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
147 ; CHECK-GI-NEXT: fmov s0, s8
148 ; CHECK-GI-NEXT: bl __extendhftf2
149 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
150 ; CHECK-GI-NEXT: fmov s0, s9
151 ; CHECK-GI-NEXT: bl __extendhftf2
152 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
153 ; CHECK-GI-NEXT: fmov s0, s10
154 ; CHECK-GI-NEXT: bl __extendhftf2
155 ; CHECK-GI-NEXT: mov v3.16b, v0.16b
156 ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
157 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #56] // 16-byte Folded Reload
158 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
159 ; CHECK-GI-NEXT: ldr x30, [sp, #72] // 8-byte Folded Reload
160 ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
161 ; CHECK-GI-NEXT: add sp, sp, #80
164 %c = fpext <4 x half> %a to <4 x fp128>
168 define <4 x fp128> @fpext_v4f32_v4f128(<4 x float> %a) {
169 ; CHECK-SD-LABEL: fpext_v4f32_v4f128:
170 ; CHECK-SD: // %bb.0: // %entry
171 ; CHECK-SD-NEXT: sub sp, sp, #80
172 ; CHECK-SD-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
173 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 80
174 ; CHECK-SD-NEXT: .cfi_offset w30, -16
175 ; CHECK-SD-NEXT: str q0, [sp, #48] // 16-byte Folded Spill
176 ; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
177 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
178 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
179 ; CHECK-SD-NEXT: bl __extendsftf2
180 ; CHECK-SD-NEXT: ldr q1, [sp, #32] // 16-byte Folded Reload
181 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
182 ; CHECK-SD-NEXT: mov s1, v1.s[1]
183 ; CHECK-SD-NEXT: fmov s0, s1
184 ; CHECK-SD-NEXT: bl __extendsftf2
185 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
186 ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
187 ; CHECK-SD-NEXT: // kill: def $s0 killed $s0 killed $q0
188 ; CHECK-SD-NEXT: bl __extendsftf2
189 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
190 ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
191 ; CHECK-SD-NEXT: mov s0, v0.s[1]
192 ; CHECK-SD-NEXT: bl __extendsftf2
193 ; CHECK-SD-NEXT: mov v1.16b, v0.16b
194 ; CHECK-SD-NEXT: ldp q0, q3, [sp] // 32-byte Folded Reload
195 ; CHECK-SD-NEXT: ldr q2, [sp, #32] // 16-byte Folded Reload
196 ; CHECK-SD-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
197 ; CHECK-SD-NEXT: add sp, sp, #80
200 ; CHECK-GI-LABEL: fpext_v4f32_v4f128:
201 ; CHECK-GI: // %bb.0: // %entry
202 ; CHECK-GI-NEXT: sub sp, sp, #80
203 ; CHECK-GI-NEXT: str d10, [sp, #48] // 8-byte Folded Spill
204 ; CHECK-GI-NEXT: stp d9, d8, [sp, #56] // 16-byte Folded Spill
205 ; CHECK-GI-NEXT: str x30, [sp, #72] // 8-byte Folded Spill
206 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
207 ; CHECK-GI-NEXT: .cfi_offset w30, -8
208 ; CHECK-GI-NEXT: .cfi_offset b8, -16
209 ; CHECK-GI-NEXT: .cfi_offset b9, -24
210 ; CHECK-GI-NEXT: .cfi_offset b10, -32
211 ; CHECK-GI-NEXT: mov s8, v0.s[1]
212 ; CHECK-GI-NEXT: mov s9, v0.s[2]
213 ; CHECK-GI-NEXT: mov s10, v0.s[3]
214 ; CHECK-GI-NEXT: // kill: def $s0 killed $s0 killed $q0
215 ; CHECK-GI-NEXT: bl __extendsftf2
216 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
217 ; CHECK-GI-NEXT: fmov s0, s8
218 ; CHECK-GI-NEXT: bl __extendsftf2
219 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
220 ; CHECK-GI-NEXT: fmov s0, s9
221 ; CHECK-GI-NEXT: bl __extendsftf2
222 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
223 ; CHECK-GI-NEXT: fmov s0, s10
224 ; CHECK-GI-NEXT: bl __extendsftf2
225 ; CHECK-GI-NEXT: mov v3.16b, v0.16b
226 ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
227 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #56] // 16-byte Folded Reload
228 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
229 ; CHECK-GI-NEXT: ldr x30, [sp, #72] // 8-byte Folded Reload
230 ; CHECK-GI-NEXT: ldr d10, [sp, #48] // 8-byte Folded Reload
231 ; CHECK-GI-NEXT: add sp, sp, #80
234 %c = fpext <4 x float> %a to <4 x fp128>
238 define <4 x fp128> @fpext_v4f64_v4f128(<4 x double> %a) {
239 ; CHECK-SD-LABEL: fpext_v4f64_v4f128:
240 ; CHECK-SD: // %bb.0: // %entry
241 ; CHECK-SD-NEXT: sub sp, sp, #80
242 ; CHECK-SD-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
243 ; CHECK-SD-NEXT: .cfi_def_cfa_offset 80
244 ; CHECK-SD-NEXT: .cfi_offset w30, -16
245 ; CHECK-SD-NEXT: str q1, [sp, #48] // 16-byte Folded Spill
246 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
247 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
248 ; CHECK-SD-NEXT: bl __extenddftf2
249 ; CHECK-SD-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
250 ; CHECK-SD-NEXT: ldr q0, [sp, #16] // 16-byte Folded Reload
251 ; CHECK-SD-NEXT: mov d0, v0.d[1]
252 ; CHECK-SD-NEXT: bl __extenddftf2
253 ; CHECK-SD-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
254 ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
255 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
256 ; CHECK-SD-NEXT: bl __extenddftf2
257 ; CHECK-SD-NEXT: str q0, [sp] // 16-byte Folded Spill
258 ; CHECK-SD-NEXT: ldr q0, [sp, #48] // 16-byte Folded Reload
259 ; CHECK-SD-NEXT: mov d0, v0.d[1]
260 ; CHECK-SD-NEXT: bl __extenddftf2
261 ; CHECK-SD-NEXT: mov v3.16b, v0.16b
262 ; CHECK-SD-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
263 ; CHECK-SD-NEXT: ldr q2, [sp] // 16-byte Folded Reload
264 ; CHECK-SD-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
265 ; CHECK-SD-NEXT: add sp, sp, #80
268 ; CHECK-GI-LABEL: fpext_v4f64_v4f128:
269 ; CHECK-GI: // %bb.0: // %entry
270 ; CHECK-GI-NEXT: sub sp, sp, #80
271 ; CHECK-GI-NEXT: stp d9, d8, [sp, #48] // 16-byte Folded Spill
272 ; CHECK-GI-NEXT: str x30, [sp, #64] // 8-byte Folded Spill
273 ; CHECK-GI-NEXT: .cfi_def_cfa_offset 80
274 ; CHECK-GI-NEXT: .cfi_offset w30, -16
275 ; CHECK-GI-NEXT: .cfi_offset b8, -24
276 ; CHECK-GI-NEXT: .cfi_offset b9, -32
277 ; CHECK-GI-NEXT: str q1, [sp] // 16-byte Folded Spill
278 ; CHECK-GI-NEXT: mov d8, v0.d[1]
279 ; CHECK-GI-NEXT: mov d9, v1.d[1]
280 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
281 ; CHECK-GI-NEXT: bl __extenddftf2
282 ; CHECK-GI-NEXT: str q0, [sp, #32] // 16-byte Folded Spill
283 ; CHECK-GI-NEXT: fmov d0, d8
284 ; CHECK-GI-NEXT: bl __extenddftf2
285 ; CHECK-GI-NEXT: str q0, [sp, #16] // 16-byte Folded Spill
286 ; CHECK-GI-NEXT: ldr q0, [sp] // 16-byte Folded Reload
287 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
288 ; CHECK-GI-NEXT: bl __extenddftf2
289 ; CHECK-GI-NEXT: str q0, [sp] // 16-byte Folded Spill
290 ; CHECK-GI-NEXT: fmov d0, d9
291 ; CHECK-GI-NEXT: bl __extenddftf2
292 ; CHECK-GI-NEXT: mov v3.16b, v0.16b
293 ; CHECK-GI-NEXT: ldp q1, q0, [sp, #16] // 32-byte Folded Reload
294 ; CHECK-GI-NEXT: ldp d9, d8, [sp, #48] // 16-byte Folded Reload
295 ; CHECK-GI-NEXT: ldr q2, [sp] // 16-byte Folded Reload
296 ; CHECK-GI-NEXT: ldr x30, [sp, #64] // 8-byte Folded Reload
297 ; CHECK-GI-NEXT: add sp, sp, #80
300 %c = fpext <4 x double> %a to <4 x fp128>
304 define <4 x double> @fpext_v4f32_v4f64(<4 x float> %a) {
305 ; CHECK-SD-LABEL: fpext_v4f32_v4f64:
306 ; CHECK-SD: // %bb.0: // %entry
307 ; CHECK-SD-NEXT: fcvtl2 v1.2d, v0.4s
308 ; CHECK-SD-NEXT: fcvtl v0.2d, v0.2s
311 ; CHECK-GI-LABEL: fpext_v4f32_v4f64:
312 ; CHECK-GI: // %bb.0: // %entry
313 ; CHECK-GI-NEXT: fcvtl v2.2d, v0.2s
314 ; CHECK-GI-NEXT: fcvtl2 v1.2d, v0.4s
315 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
318 %c = fpext <4 x float> %a to <4 x double>
322 define <2 x double> @fpext_v2f16_v2f64(<2 x half> %a) {
323 ; CHECK-SD-LABEL: fpext_v2f16_v2f64:
324 ; CHECK-SD: // %bb.0: // %entry
325 ; CHECK-SD-NEXT: fcvtl v0.4s, v0.4h
326 ; CHECK-SD-NEXT: fcvtl v0.2d, v0.2s
329 ; CHECK-GI-LABEL: fpext_v2f16_v2f64:
330 ; CHECK-GI: // %bb.0: // %entry
331 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
332 ; CHECK-GI-NEXT: mov h1, v0.h[1]
333 ; CHECK-GI-NEXT: fcvt d0, h0
334 ; CHECK-GI-NEXT: fcvt d1, h1
335 ; CHECK-GI-NEXT: mov v0.d[1], v1.d[0]
338 %c = fpext <2 x half> %a to <2 x double>
342 define <3 x double> @fpext_v3f16_v3f64(<3 x half> %a) {
343 ; CHECK-SD-LABEL: fpext_v3f16_v3f64:
344 ; CHECK-SD: // %bb.0: // %entry
345 ; CHECK-SD-NEXT: fcvtl v1.4s, v0.4h
346 ; CHECK-SD-NEXT: fcvtl v0.2d, v1.2s
347 ; CHECK-SD-NEXT: fcvtl2 v2.2d, v1.4s
348 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
349 ; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8
350 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
351 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
354 ; CHECK-GI-LABEL: fpext_v3f16_v3f64:
355 ; CHECK-GI: // %bb.0: // %entry
356 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
357 ; CHECK-GI-NEXT: mov h1, v0.h[1]
358 ; CHECK-GI-NEXT: mov h2, v0.h[2]
359 ; CHECK-GI-NEXT: fcvt d0, h0
360 ; CHECK-GI-NEXT: fcvt d1, h1
361 ; CHECK-GI-NEXT: fcvt d2, h2
364 %c = fpext <3 x half> %a to <3 x double>
368 define <4 x double> @fpext_v4f16_v4f64(<4 x half> %a) {
369 ; CHECK-SD-LABEL: fpext_v4f16_v4f64:
370 ; CHECK-SD: // %bb.0: // %entry
371 ; CHECK-SD-NEXT: fcvtl v0.4s, v0.4h
372 ; CHECK-SD-NEXT: fcvtl2 v1.2d, v0.4s
373 ; CHECK-SD-NEXT: fcvtl v0.2d, v0.2s
376 ; CHECK-GI-LABEL: fpext_v4f16_v4f64:
377 ; CHECK-GI: // %bb.0: // %entry
378 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
379 ; CHECK-GI-NEXT: mov h1, v0.h[1]
380 ; CHECK-GI-NEXT: mov h2, v0.h[2]
381 ; CHECK-GI-NEXT: mov h3, v0.h[3]
382 ; CHECK-GI-NEXT: fcvt d0, h0
383 ; CHECK-GI-NEXT: fcvt d4, h1
384 ; CHECK-GI-NEXT: fcvt d1, h2
385 ; CHECK-GI-NEXT: fcvt d2, h3
386 ; CHECK-GI-NEXT: mov v0.d[1], v4.d[0]
387 ; CHECK-GI-NEXT: mov v1.d[1], v2.d[0]
390 %c = fpext <4 x half> %a to <4 x double>
394 define <2 x float> @fpext_v2f16_v2f32(<2 x half> %a) {
395 ; CHECK-LABEL: fpext_v2f16_v2f32:
396 ; CHECK: // %bb.0: // %entry
397 ; CHECK-NEXT: fcvtl v0.4s, v0.4h
398 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
401 %c = fpext <2 x half> %a to <2 x float>
405 define <3 x float> @fpext_v3f16_v3f32(<3 x half> %a) {
406 ; CHECK-LABEL: fpext_v3f16_v3f32:
407 ; CHECK: // %bb.0: // %entry
408 ; CHECK-NEXT: fcvtl v0.4s, v0.4h
411 %c = fpext <3 x half> %a to <3 x float>
415 define <4 x float> @fpext_v4f16_v4f32(<4 x half> %a) {
416 ; CHECK-LABEL: fpext_v4f16_v4f32:
417 ; CHECK: // %bb.0: // %entry
418 ; CHECK-NEXT: fcvtl v0.4s, v0.4h
421 %c = fpext <4 x half> %a to <4 x float>
425 define <8 x float> @fpext_v8f16_v8f32(<8 x half> %a) {
426 ; CHECK-SD-LABEL: fpext_v8f16_v8f32:
427 ; CHECK-SD: // %bb.0: // %entry
428 ; CHECK-SD-NEXT: fcvtl2 v1.4s, v0.8h
429 ; CHECK-SD-NEXT: fcvtl v0.4s, v0.4h
432 ; CHECK-GI-LABEL: fpext_v8f16_v8f32:
433 ; CHECK-GI: // %bb.0: // %entry
434 ; CHECK-GI-NEXT: fcvtl v2.4s, v0.4h
435 ; CHECK-GI-NEXT: fcvtl2 v1.4s, v0.8h
436 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
439 %c = fpext <8 x half> %a to <8 x float>