1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple aarch64-apple-darwin | FileCheck --check-prefixes=CHECK,NOFP16 %s
3 ; RUN: llc < %s -mtriple aarch64-apple-darwin -mattr=+v8.2a,+fullfp16 | FileCheck --check-prefixes=CHECK,FP16 %s
5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
10 define <1 x float> @test_copysign_v1f32_v1f32(<1 x float> %a, <1 x float> %b) #0 {
11 ; CHECK-LABEL: test_copysign_v1f32_v1f32:
13 ; CHECK-NEXT: mvni.2s v2, #128, lsl #24
14 ; CHECK-NEXT: bif.8b v0, v1, v2
16 %r = call <1 x float> @llvm.copysign.v1f32(<1 x float> %a, <1 x float> %b)
20 ; WidenVecRes mismatched
21 define <1 x float> @test_copysign_v1f32_v1f64(<1 x float> %a, <1 x double> %b) #0 {
22 ; CHECK-LABEL: test_copysign_v1f32_v1f64:
24 ; CHECK-NEXT: ; kill: def $d1 killed $d1 def $q1
25 ; CHECK-NEXT: mvni.2s v2, #128, lsl #24
26 ; CHECK-NEXT: fcvtn v1.2s, v1.2d
27 ; CHECK-NEXT: bif.8b v0, v1, v2
29 %tmp0 = fptrunc <1 x double> %b to <1 x float>
30 %r = call <1 x float> @llvm.copysign.v1f32(<1 x float> %a, <1 x float> %tmp0)
34 declare <1 x float> @llvm.copysign.v1f32(<1 x float> %a, <1 x float> %b) #0
39 define <1 x double> @test_copysign_v1f64_v1f32(<1 x double> %a, <1 x float> %b) #0 {
40 ; CHECK-LABEL: test_copysign_v1f64_v1f32:
42 ; CHECK-NEXT: movi.2d v2, #0xffffffffffffffff
43 ; CHECK-NEXT: fcvtl v1.2d, v1.2s
44 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
45 ; CHECK-NEXT: fneg.2d v2, v2
46 ; CHECK-NEXT: bif.16b v0, v1, v2
47 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
49 %tmp0 = fpext <1 x float> %b to <1 x double>
50 %r = call <1 x double> @llvm.copysign.v1f64(<1 x double> %a, <1 x double> %tmp0)
54 define <1 x double> @test_copysign_v1f64_v1f64(<1 x double> %a, <1 x double> %b) #0 {
55 ; CHECK-LABEL: test_copysign_v1f64_v1f64:
57 ; CHECK-NEXT: movi.2d v2, #0xffffffffffffffff
58 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
59 ; CHECK-NEXT: ; kill: def $d1 killed $d1 def $q1
60 ; CHECK-NEXT: fneg.2d v2, v2
61 ; CHECK-NEXT: bif.16b v0, v1, v2
62 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
64 %r = call <1 x double> @llvm.copysign.v1f64(<1 x double> %a, <1 x double> %b)
68 declare <1 x double> @llvm.copysign.v1f64(<1 x double> %a, <1 x double> %b) #0
72 define <2 x float> @test_copysign_v2f32_v2f32(<2 x float> %a, <2 x float> %b) #0 {
73 ; CHECK-LABEL: test_copysign_v2f32_v2f32:
75 ; CHECK-NEXT: mvni.2s v2, #128, lsl #24
76 ; CHECK-NEXT: bif.8b v0, v1, v2
78 %r = call <2 x float> @llvm.copysign.v2f32(<2 x float> %a, <2 x float> %b)
82 define <2 x float> @test_copysign_v2f32_v2f64(<2 x float> %a, <2 x double> %b) #0 {
83 ; CHECK-LABEL: test_copysign_v2f32_v2f64:
85 ; CHECK-NEXT: fcvtn v1.2s, v1.2d
86 ; CHECK-NEXT: mvni.2s v2, #128, lsl #24
87 ; CHECK-NEXT: bif.8b v0, v1, v2
89 %tmp0 = fptrunc <2 x double> %b to <2 x float>
90 %r = call <2 x float> @llvm.copysign.v2f32(<2 x float> %a, <2 x float> %tmp0)
94 declare <2 x float> @llvm.copysign.v2f32(<2 x float> %a, <2 x float> %b) #0
98 define <4 x float> @test_copysign_v4f32_v4f32(<4 x float> %a, <4 x float> %b) #0 {
99 ; CHECK-LABEL: test_copysign_v4f32_v4f32:
101 ; CHECK-NEXT: mvni.4s v2, #128, lsl #24
102 ; CHECK-NEXT: bif.16b v0, v1, v2
104 %r = call <4 x float> @llvm.copysign.v4f32(<4 x float> %a, <4 x float> %b)
109 define <4 x float> @test_copysign_v4f32_v4f64(<4 x float> %a, <4 x double> %b) #0 {
110 ; CHECK-LABEL: test_copysign_v4f32_v4f64:
112 ; CHECK-NEXT: fcvtn v1.2s, v1.2d
113 ; CHECK-NEXT: fcvtn2 v1.4s, v2.2d
114 ; CHECK-NEXT: mvni.4s v2, #128, lsl #24
115 ; CHECK-NEXT: bif.16b v0, v1, v2
117 %tmp0 = fptrunc <4 x double> %b to <4 x float>
118 %r = call <4 x float> @llvm.copysign.v4f32(<4 x float> %a, <4 x float> %tmp0)
122 declare <4 x float> @llvm.copysign.v4f32(<4 x float> %a, <4 x float> %b) #0
126 define <2 x double> @test_copysign_v2f64_v232(<2 x double> %a, <2 x float> %b) #0 {
127 ; CHECK-LABEL: test_copysign_v2f64_v232:
129 ; CHECK-NEXT: movi.2d v2, #0xffffffffffffffff
130 ; CHECK-NEXT: fcvtl v1.2d, v1.2s
131 ; CHECK-NEXT: fneg.2d v2, v2
132 ; CHECK-NEXT: bif.16b v0, v1, v2
134 %tmp0 = fpext <2 x float> %b to <2 x double>
135 %r = call <2 x double> @llvm.copysign.v2f64(<2 x double> %a, <2 x double> %tmp0)
139 define <2 x double> @test_copysign_v2f64_v2f64(<2 x double> %a, <2 x double> %b) #0 {
140 ; CHECK-LABEL: test_copysign_v2f64_v2f64:
142 ; CHECK-NEXT: movi.2d v2, #0xffffffffffffffff
143 ; CHECK-NEXT: fneg.2d v2, v2
144 ; CHECK-NEXT: bif.16b v0, v1, v2
146 %r = call <2 x double> @llvm.copysign.v2f64(<2 x double> %a, <2 x double> %b)
150 declare <2 x double> @llvm.copysign.v2f64(<2 x double> %a, <2 x double> %b) #0
154 ; SplitVecRes mismatched
155 define <4 x double> @test_copysign_v4f64_v4f32(<4 x double> %a, <4 x float> %b) #0 {
156 ; CHECK-LABEL: test_copysign_v4f64_v4f32:
158 ; CHECK-NEXT: movi.2d v3, #0xffffffffffffffff
159 ; CHECK-NEXT: fcvtl v4.2d, v2.2s
160 ; CHECK-NEXT: fcvtl2 v2.2d, v2.4s
161 ; CHECK-NEXT: fneg.2d v3, v3
162 ; CHECK-NEXT: bif.16b v1, v2, v3
163 ; CHECK-NEXT: bif.16b v0, v4, v3
165 %tmp0 = fpext <4 x float> %b to <4 x double>
166 %r = call <4 x double> @llvm.copysign.v4f64(<4 x double> %a, <4 x double> %tmp0)
171 define <4 x double> @test_copysign_v4f64_v4f64(<4 x double> %a, <4 x double> %b) #0 {
172 ; CHECK-LABEL: test_copysign_v4f64_v4f64:
174 ; CHECK-NEXT: movi.2d v4, #0xffffffffffffffff
175 ; CHECK-NEXT: fneg.2d v4, v4
176 ; CHECK-NEXT: bif.16b v0, v2, v4
177 ; CHECK-NEXT: bif.16b v1, v3, v4
179 %r = call <4 x double> @llvm.copysign.v4f64(<4 x double> %a, <4 x double> %b)
183 declare <4 x double> @llvm.copysign.v4f64(<4 x double> %a, <4 x double> %b) #0
187 define <4 x half> @test_copysign_v4f16_v4f16(<4 x half> %a, <4 x half> %b) #0 {
188 ; NOFP16-LABEL: test_copysign_v4f16_v4f16:
190 ; NOFP16-NEXT: ; kill: def $d1 killed $d1 def $q1
191 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 def $q0
192 ; NOFP16-NEXT: mov h3, v1[1]
193 ; NOFP16-NEXT: mov h4, v0[1]
194 ; NOFP16-NEXT: mov h5, v1[2]
195 ; NOFP16-NEXT: mov h6, v0[2]
196 ; NOFP16-NEXT: mvni.4s v2, #128, lsl #24
197 ; NOFP16-NEXT: fcvt s7, h1
198 ; NOFP16-NEXT: fcvt s16, h0
199 ; NOFP16-NEXT: mov h1, v1[3]
200 ; NOFP16-NEXT: fcvt s3, h3
201 ; NOFP16-NEXT: fcvt s4, h4
202 ; NOFP16-NEXT: fcvt s1, h1
203 ; NOFP16-NEXT: bit.16b v3, v4, v2
204 ; NOFP16-NEXT: fcvt s4, h5
205 ; NOFP16-NEXT: fcvt s5, h6
206 ; NOFP16-NEXT: mov.16b v6, v2
207 ; NOFP16-NEXT: bsl.16b v6, v16, v7
208 ; NOFP16-NEXT: mov h7, v0[3]
209 ; NOFP16-NEXT: bit.16b v4, v5, v2
210 ; NOFP16-NEXT: fcvt h3, s3
211 ; NOFP16-NEXT: fcvt h0, s6
212 ; NOFP16-NEXT: fcvt s5, h7
213 ; NOFP16-NEXT: mov.h v0[1], v3[0]
214 ; NOFP16-NEXT: fcvt h3, s4
215 ; NOFP16-NEXT: bit.16b v1, v5, v2
216 ; NOFP16-NEXT: mov.h v0[2], v3[0]
217 ; NOFP16-NEXT: fcvt h1, s1
218 ; NOFP16-NEXT: mov.h v0[3], v1[0]
219 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 killed $q0
222 ; FP16-LABEL: test_copysign_v4f16_v4f16:
224 ; FP16-NEXT: mvni.4h v2, #128, lsl #8
225 ; FP16-NEXT: bif.8b v0, v1, v2
227 %r = call <4 x half> @llvm.copysign.v4f16(<4 x half> %a, <4 x half> %b)
231 define <4 x half> @test_copysign_v4f16_v4f32(<4 x half> %a, <4 x float> %b) #0 {
232 ; NOFP16-LABEL: test_copysign_v4f16_v4f32:
234 ; NOFP16-NEXT: fcvtn v1.4h, v1.4s
235 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 def $q0
236 ; NOFP16-NEXT: mov h3, v0[1]
237 ; NOFP16-NEXT: mov h5, v0[2]
238 ; NOFP16-NEXT: mvni.4s v2, #128, lsl #24
239 ; NOFP16-NEXT: fcvt s7, h0
240 ; NOFP16-NEXT: mov h4, v1[1]
241 ; NOFP16-NEXT: fcvt s3, h3
242 ; NOFP16-NEXT: mov h6, v1[2]
243 ; NOFP16-NEXT: fcvt s16, h1
244 ; NOFP16-NEXT: mov h1, v1[3]
245 ; NOFP16-NEXT: fcvt s4, h4
246 ; NOFP16-NEXT: fcvt s1, h1
247 ; NOFP16-NEXT: bif.16b v3, v4, v2
248 ; NOFP16-NEXT: fcvt s4, h5
249 ; NOFP16-NEXT: fcvt s5, h6
250 ; NOFP16-NEXT: mov.16b v6, v2
251 ; NOFP16-NEXT: bsl.16b v6, v7, v16
252 ; NOFP16-NEXT: mov h7, v0[3]
253 ; NOFP16-NEXT: bif.16b v4, v5, v2
254 ; NOFP16-NEXT: fcvt h3, s3
255 ; NOFP16-NEXT: fcvt h0, s6
256 ; NOFP16-NEXT: fcvt s5, h7
257 ; NOFP16-NEXT: mov.h v0[1], v3[0]
258 ; NOFP16-NEXT: fcvt h3, s4
259 ; NOFP16-NEXT: bit.16b v1, v5, v2
260 ; NOFP16-NEXT: mov.h v0[2], v3[0]
261 ; NOFP16-NEXT: fcvt h1, s1
262 ; NOFP16-NEXT: mov.h v0[3], v1[0]
263 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 killed $q0
266 ; FP16-LABEL: test_copysign_v4f16_v4f32:
268 ; FP16-NEXT: fcvtn v1.4h, v1.4s
269 ; FP16-NEXT: mvni.4h v2, #128, lsl #8
270 ; FP16-NEXT: bif.8b v0, v1, v2
272 %tmp0 = fptrunc <4 x float> %b to <4 x half>
273 %r = call <4 x half> @llvm.copysign.v4f16(<4 x half> %a, <4 x half> %tmp0)
277 define <4 x half> @test_copysign_v4f16_v4f64(<4 x half> %a, <4 x double> %b) #0 {
278 ; NOFP16-LABEL: test_copysign_v4f16_v4f64:
280 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 def $q0
281 ; NOFP16-NEXT: mov d3, v1[1]
282 ; NOFP16-NEXT: mov h4, v0[1]
283 ; NOFP16-NEXT: fcvt s1, d1
284 ; NOFP16-NEXT: fcvt s5, h0
285 ; NOFP16-NEXT: mov h7, v0[2]
286 ; NOFP16-NEXT: mvni.4s v6, #128, lsl #24
287 ; NOFP16-NEXT: fcvt s3, d3
288 ; NOFP16-NEXT: fcvt s4, h4
289 ; NOFP16-NEXT: bit.16b v1, v5, v6
290 ; NOFP16-NEXT: fcvt s7, h7
291 ; NOFP16-NEXT: mov h5, v0[3]
292 ; NOFP16-NEXT: bit.16b v3, v4, v6
293 ; NOFP16-NEXT: mov d4, v2[1]
294 ; NOFP16-NEXT: fcvt s2, d2
295 ; NOFP16-NEXT: fcvt h0, s1
296 ; NOFP16-NEXT: fcvt h1, s3
297 ; NOFP16-NEXT: bit.16b v2, v7, v6
298 ; NOFP16-NEXT: fcvt s3, d4
299 ; NOFP16-NEXT: fcvt s4, h5
300 ; NOFP16-NEXT: mov.h v0[1], v1[0]
301 ; NOFP16-NEXT: fcvt h1, s2
302 ; NOFP16-NEXT: mov.16b v2, v6
303 ; NOFP16-NEXT: bsl.16b v2, v4, v3
304 ; NOFP16-NEXT: mov.h v0[2], v1[0]
305 ; NOFP16-NEXT: fcvt h1, s2
306 ; NOFP16-NEXT: mov.h v0[3], v1[0]
307 ; NOFP16-NEXT: ; kill: def $d0 killed $d0 killed $q0
310 ; FP16-LABEL: test_copysign_v4f16_v4f64:
312 ; FP16-NEXT: mov d3, v1[1]
313 ; FP16-NEXT: fcvt h1, d1
314 ; FP16-NEXT: fcvt h3, d3
315 ; FP16-NEXT: mov.h v1[1], v3[0]
316 ; FP16-NEXT: fcvt h3, d2
317 ; FP16-NEXT: mov d2, v2[1]
318 ; FP16-NEXT: mov.h v1[2], v3[0]
319 ; FP16-NEXT: fcvt h2, d2
320 ; FP16-NEXT: mov.h v1[3], v2[0]
321 ; FP16-NEXT: mvni.4h v2, #128, lsl #8
322 ; FP16-NEXT: bif.8b v0, v1, v2
324 %tmp0 = fptrunc <4 x double> %b to <4 x half>
325 %r = call <4 x half> @llvm.copysign.v4f16(<4 x half> %a, <4 x half> %tmp0)
329 declare <4 x half> @llvm.copysign.v4f16(<4 x half> %a, <4 x half> %b) #0
333 define <8 x half> @test_copysign_v8f16_v8f16(<8 x half> %a, <8 x half> %b) #0 {
334 ; NOFP16-LABEL: test_copysign_v8f16_v8f16:
336 ; NOFP16-NEXT: mov h2, v1[1]
337 ; NOFP16-NEXT: mov h4, v0[1]
338 ; NOFP16-NEXT: fcvt s5, h1
339 ; NOFP16-NEXT: fcvt s6, h0
340 ; NOFP16-NEXT: mvni.4s v3, #128, lsl #24
341 ; NOFP16-NEXT: mov h7, v1[2]
342 ; NOFP16-NEXT: mov h16, v0[2]
343 ; NOFP16-NEXT: mov h17, v1[3]
344 ; NOFP16-NEXT: fcvt s2, h2
345 ; NOFP16-NEXT: fcvt s4, h4
346 ; NOFP16-NEXT: bit.16b v5, v6, v3
347 ; NOFP16-NEXT: mov h6, v0[3]
348 ; NOFP16-NEXT: fcvt s7, h7
349 ; NOFP16-NEXT: fcvt s16, h16
350 ; NOFP16-NEXT: fcvt s17, h17
351 ; NOFP16-NEXT: bif.16b v4, v2, v3
352 ; NOFP16-NEXT: fcvt h2, s5
353 ; NOFP16-NEXT: mov.16b v5, v3
354 ; NOFP16-NEXT: fcvt s6, h6
355 ; NOFP16-NEXT: bsl.16b v5, v16, v7
356 ; NOFP16-NEXT: fcvt h4, s4
357 ; NOFP16-NEXT: mov h7, v1[4]
358 ; NOFP16-NEXT: mov h16, v0[4]
359 ; NOFP16-NEXT: bif.16b v6, v17, v3
360 ; NOFP16-NEXT: mov h17, v0[5]
361 ; NOFP16-NEXT: fcvt h5, s5
362 ; NOFP16-NEXT: mov.h v2[1], v4[0]
363 ; NOFP16-NEXT: fcvt s4, h7
364 ; NOFP16-NEXT: fcvt s7, h16
365 ; NOFP16-NEXT: mov h16, v1[5]
366 ; NOFP16-NEXT: fcvt h6, s6
367 ; NOFP16-NEXT: fcvt s17, h17
368 ; NOFP16-NEXT: mov.h v2[2], v5[0]
369 ; NOFP16-NEXT: mov h5, v1[6]
370 ; NOFP16-NEXT: mov h1, v1[7]
371 ; NOFP16-NEXT: bit.16b v4, v7, v3
372 ; NOFP16-NEXT: mov h7, v0[6]
373 ; NOFP16-NEXT: fcvt s16, h16
374 ; NOFP16-NEXT: mov h0, v0[7]
375 ; NOFP16-NEXT: mov.h v2[3], v6[0]
376 ; NOFP16-NEXT: fcvt s5, h5
377 ; NOFP16-NEXT: fcvt s1, h1
378 ; NOFP16-NEXT: fcvt s6, h7
379 ; NOFP16-NEXT: mov.16b v7, v3
380 ; NOFP16-NEXT: fcvt h4, s4
381 ; NOFP16-NEXT: fcvt s0, h0
382 ; NOFP16-NEXT: bsl.16b v7, v17, v16
383 ; NOFP16-NEXT: bit.16b v5, v6, v3
384 ; NOFP16-NEXT: mov.h v2[4], v4[0]
385 ; NOFP16-NEXT: bif.16b v0, v1, v3
386 ; NOFP16-NEXT: fcvt h4, s7
387 ; NOFP16-NEXT: fcvt h0, s0
388 ; NOFP16-NEXT: mov.h v2[5], v4[0]
389 ; NOFP16-NEXT: fcvt h4, s5
390 ; NOFP16-NEXT: mov.h v2[6], v4[0]
391 ; NOFP16-NEXT: mov.h v2[7], v0[0]
392 ; NOFP16-NEXT: mov.16b v0, v2
395 ; FP16-LABEL: test_copysign_v8f16_v8f16:
397 ; FP16-NEXT: mvni.8h v2, #128, lsl #8
398 ; FP16-NEXT: bif.16b v0, v1, v2
400 %r = call <8 x half> @llvm.copysign.v8f16(<8 x half> %a, <8 x half> %b)
404 define <8 x half> @test_copysign_v8f16_v8f32(<8 x half> %a, <8 x float> %b) #0 {
405 ; NOFP16-LABEL: test_copysign_v8f16_v8f32:
407 ; NOFP16-NEXT: fcvtn v1.4h, v1.4s
408 ; NOFP16-NEXT: mov h4, v0[1]
409 ; NOFP16-NEXT: fcvt s6, h0
410 ; NOFP16-NEXT: mvni.4s v3, #128, lsl #24
411 ; NOFP16-NEXT: mov h7, v0[2]
412 ; NOFP16-NEXT: fcvtn v2.4h, v2.4s
413 ; NOFP16-NEXT: mov h5, v1[1]
414 ; NOFP16-NEXT: fcvt s16, h1
415 ; NOFP16-NEXT: fcvt s4, h4
416 ; NOFP16-NEXT: mov h17, v1[2]
417 ; NOFP16-NEXT: mov h1, v1[3]
418 ; NOFP16-NEXT: fcvt s7, h7
419 ; NOFP16-NEXT: fcvt s5, h5
420 ; NOFP16-NEXT: bif.16b v6, v16, v3
421 ; NOFP16-NEXT: mov h16, v0[3]
422 ; NOFP16-NEXT: fcvt s17, h17
423 ; NOFP16-NEXT: fcvt s18, h1
424 ; NOFP16-NEXT: bif.16b v4, v5, v3
425 ; NOFP16-NEXT: fcvt h1, s6
426 ; NOFP16-NEXT: mov.16b v6, v3
427 ; NOFP16-NEXT: mov h5, v0[4]
428 ; NOFP16-NEXT: fcvt s16, h16
429 ; NOFP16-NEXT: bsl.16b v6, v7, v17
430 ; NOFP16-NEXT: mov h7, v0[5]
431 ; NOFP16-NEXT: mov h17, v2[1]
432 ; NOFP16-NEXT: fcvt h4, s4
433 ; NOFP16-NEXT: fcvt s5, h5
434 ; NOFP16-NEXT: bif.16b v16, v18, v3
435 ; NOFP16-NEXT: fcvt h6, s6
436 ; NOFP16-NEXT: fcvt s7, h7
437 ; NOFP16-NEXT: fcvt s17, h17
438 ; NOFP16-NEXT: mov.h v1[1], v4[0]
439 ; NOFP16-NEXT: fcvt s4, h2
440 ; NOFP16-NEXT: bif.16b v7, v17, v3
441 ; NOFP16-NEXT: bit.16b v4, v5, v3
442 ; NOFP16-NEXT: fcvt h5, s16
443 ; NOFP16-NEXT: mov.h v1[2], v6[0]
444 ; NOFP16-NEXT: mov h6, v0[6]
445 ; NOFP16-NEXT: mov h16, v2[2]
446 ; NOFP16-NEXT: mov h0, v0[7]
447 ; NOFP16-NEXT: mov h2, v2[3]
448 ; NOFP16-NEXT: mov.h v1[3], v5[0]
449 ; NOFP16-NEXT: fcvt h4, s4
450 ; NOFP16-NEXT: fcvt s5, h6
451 ; NOFP16-NEXT: fcvt s6, h16
452 ; NOFP16-NEXT: fcvt s0, h0
453 ; NOFP16-NEXT: fcvt s2, h2
454 ; NOFP16-NEXT: mov.h v1[4], v4[0]
455 ; NOFP16-NEXT: fcvt h4, s7
456 ; NOFP16-NEXT: bif.16b v5, v6, v3
457 ; NOFP16-NEXT: bif.16b v0, v2, v3
458 ; NOFP16-NEXT: mov.h v1[5], v4[0]
459 ; NOFP16-NEXT: fcvt h4, s5
460 ; NOFP16-NEXT: fcvt h0, s0
461 ; NOFP16-NEXT: mov.h v1[6], v4[0]
462 ; NOFP16-NEXT: mov.h v1[7], v0[0]
463 ; NOFP16-NEXT: mov.16b v0, v1
466 ; FP16-LABEL: test_copysign_v8f16_v8f32:
468 ; FP16-NEXT: fcvtn v1.4h, v1.4s
469 ; FP16-NEXT: fcvtn2 v1.8h, v2.4s
470 ; FP16-NEXT: mvni.8h v2, #128, lsl #8
471 ; FP16-NEXT: bif.16b v0, v1, v2
473 %tmp0 = fptrunc <8 x float> %b to <8 x half>
474 %r = call <8 x half> @llvm.copysign.v8f16(<8 x half> %a, <8 x half> %tmp0)
478 declare <8 x half> @llvm.copysign.v8f16(<8 x half> %a, <8 x half> %b) #0
480 attributes #0 = { nounwind }