1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=aarch64 | FileCheck %s
4 define <4 x i16> @v4f16_to_v4i16(float, <4 x half> %a) #0 {
5 ; CHECK-LABEL: v4f16_to_v4i16:
6 ; CHECK: // %bb.0: // %entry
7 ; CHECK-NEXT: fmov d0, d1
10 %1 = bitcast <4 x half> %a to <4 x i16>
14 define <2 x i32> @v4f16_to_v2i32(float, <4 x half> %a) #0 {
15 ; CHECK-LABEL: v4f16_to_v2i32:
16 ; CHECK: // %bb.0: // %entry
17 ; CHECK-NEXT: fmov d0, d1
20 %1 = bitcast <4 x half> %a to <2 x i32>
24 define <1 x i64> @v4f16_to_v1i64(float, <4 x half> %a) #0 {
25 ; CHECK-LABEL: v4f16_to_v1i64:
26 ; CHECK: // %bb.0: // %entry
27 ; CHECK-NEXT: fmov d0, d1
30 %1 = bitcast <4 x half> %a to <1 x i64>
34 define i64 @v4f16_to_i64(float, <4 x half> %a) #0 {
35 ; CHECK-LABEL: v4f16_to_i64:
36 ; CHECK: // %bb.0: // %entry
37 ; CHECK-NEXT: fmov x0, d1
40 %1 = bitcast <4 x half> %a to i64
44 define <2 x float> @v4f16_to_v2float(float, <4 x half> %a) #0 {
45 ; CHECK-LABEL: v4f16_to_v2float:
46 ; CHECK: // %bb.0: // %entry
47 ; CHECK-NEXT: fmov d0, d1
50 %1 = bitcast <4 x half> %a to <2 x float>
54 define <1 x double> @v4f16_to_v1double(float, <4 x half> %a) #0 {
55 ; CHECK-LABEL: v4f16_to_v1double:
56 ; CHECK: // %bb.0: // %entry
57 ; CHECK-NEXT: fmov d0, d1
60 %1 = bitcast <4 x half> %a to <1 x double>
64 define double @v4f16_to_double(float, <4 x half> %a) #0 {
65 ; CHECK-LABEL: v4f16_to_double:
66 ; CHECK: // %bb.0: // %entry
67 ; CHECK-NEXT: fmov d0, d1
70 %1 = bitcast <4 x half> %a to double
75 define <4 x half> @v4i16_to_v4f16(float, <4 x i16> %a) #0 {
76 ; CHECK-LABEL: v4i16_to_v4f16:
77 ; CHECK: // %bb.0: // %entry
78 ; CHECK-NEXT: fmov d0, d1
81 %1 = bitcast <4 x i16> %a to <4 x half>
85 define <4 x half> @v2i32_to_v4f16(float, <2 x i32> %a) #0 {
86 ; CHECK-LABEL: v2i32_to_v4f16:
87 ; CHECK: // %bb.0: // %entry
88 ; CHECK-NEXT: fmov d0, d1
91 %1 = bitcast <2 x i32> %a to <4 x half>
95 define <4 x half> @v1i64_to_v4f16(float, <1 x i64> %a) #0 {
96 ; CHECK-LABEL: v1i64_to_v4f16:
97 ; CHECK: // %bb.0: // %entry
98 ; CHECK-NEXT: fmov d0, d1
101 %1 = bitcast <1 x i64> %a to <4 x half>
105 define <4 x half> @i64_to_v4f16(float, i64 %a) #0 {
106 ; CHECK-LABEL: i64_to_v4f16:
107 ; CHECK: // %bb.0: // %entry
108 ; CHECK-NEXT: fmov d0, x0
111 %1 = bitcast i64 %a to <4 x half>
115 define <4 x half> @v2float_to_v4f16(float, <2 x float> %a) #0 {
116 ; CHECK-LABEL: v2float_to_v4f16:
117 ; CHECK: // %bb.0: // %entry
118 ; CHECK-NEXT: fmov d0, d1
121 %1 = bitcast <2 x float> %a to <4 x half>
125 define <4 x half> @v1double_to_v4f16(float, <1 x double> %a) #0 {
126 ; CHECK-LABEL: v1double_to_v4f16:
127 ; CHECK: // %bb.0: // %entry
128 ; CHECK-NEXT: fmov d0, d1
131 %1 = bitcast <1 x double> %a to <4 x half>
135 define <4 x half> @double_to_v4f16(float, double %a) #0 {
136 ; CHECK-LABEL: double_to_v4f16:
137 ; CHECK: // %bb.0: // %entry
138 ; CHECK-NEXT: fmov d0, d1
141 %1 = bitcast double %a to <4 x half>
154 define <8 x i16> @v8f16_to_v8i16(float, <8 x half> %a) #0 {
155 ; CHECK-LABEL: v8f16_to_v8i16:
156 ; CHECK: // %bb.0: // %entry
157 ; CHECK-NEXT: mov v0.16b, v1.16b
160 %1 = bitcast <8 x half> %a to <8 x i16>
164 define <4 x i32> @v8f16_to_v4i32(float, <8 x half> %a) #0 {
165 ; CHECK-LABEL: v8f16_to_v4i32:
166 ; CHECK: // %bb.0: // %entry
167 ; CHECK-NEXT: mov v0.16b, v1.16b
170 %1 = bitcast <8 x half> %a to <4 x i32>
174 define <2 x i64> @v8f16_to_v2i64(float, <8 x half> %a) #0 {
175 ; CHECK-LABEL: v8f16_to_v2i64:
176 ; CHECK: // %bb.0: // %entry
177 ; CHECK-NEXT: mov v0.16b, v1.16b
180 %1 = bitcast <8 x half> %a to <2 x i64>
184 define <4 x float> @v8f16_to_v4float(float, <8 x half> %a) #0 {
185 ; CHECK-LABEL: v8f16_to_v4float:
186 ; CHECK: // %bb.0: // %entry
187 ; CHECK-NEXT: mov v0.16b, v1.16b
190 %1 = bitcast <8 x half> %a to <4 x float>
194 define <2 x double> @v8f16_to_v2double(float, <8 x half> %a) #0 {
195 ; CHECK-LABEL: v8f16_to_v2double:
196 ; CHECK: // %bb.0: // %entry
197 ; CHECK-NEXT: mov v0.16b, v1.16b
200 %1 = bitcast <8 x half> %a to <2 x double>
204 define <8 x half> @v8i16_to_v8f16(float, <8 x i16> %a) #0 {
205 ; CHECK-LABEL: v8i16_to_v8f16:
206 ; CHECK: // %bb.0: // %entry
207 ; CHECK-NEXT: mov v0.16b, v1.16b
210 %1 = bitcast <8 x i16> %a to <8 x half>
214 define <8 x half> @v4i32_to_v8f16(float, <4 x i32> %a) #0 {
215 ; CHECK-LABEL: v4i32_to_v8f16:
216 ; CHECK: // %bb.0: // %entry
217 ; CHECK-NEXT: mov v0.16b, v1.16b
220 %1 = bitcast <4 x i32> %a to <8 x half>
224 define <8 x half> @v2i64_to_v8f16(float, <2 x i64> %a) #0 {
225 ; CHECK-LABEL: v2i64_to_v8f16:
226 ; CHECK: // %bb.0: // %entry
227 ; CHECK-NEXT: mov v0.16b, v1.16b
230 %1 = bitcast <2 x i64> %a to <8 x half>
234 define <8 x half> @v4float_to_v8f16(float, <4 x float> %a) #0 {
235 ; CHECK-LABEL: v4float_to_v8f16:
236 ; CHECK: // %bb.0: // %entry
237 ; CHECK-NEXT: mov v0.16b, v1.16b
240 %1 = bitcast <4 x float> %a to <8 x half>
244 define <8 x half> @v2double_to_v8f16(float, <2 x double> %a) #0 {
245 ; CHECK-LABEL: v2double_to_v8f16:
246 ; CHECK: // %bb.0: // %entry
247 ; CHECK-NEXT: mov v0.16b, v1.16b
250 %1 = bitcast <2 x double> %a to <8 x half>