xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/fp16-vector-bitcast.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=aarch64-none-eabi | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @v4f16_to_v4i16(float, <4 x half> %a) #0 {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_v4i16:
5*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to <4 x i16>
8*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %1
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @v4f16_to_v2i32(float, <4 x half> %a) #0 {
12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_v2i32:
13*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
14*9880d681SAndroid Build Coastguard Workerentry:
15*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to <2 x i32>
16*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %1
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @v4f16_to_v1i64(float, <4 x half> %a) #0 {
20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_v1i64:
21*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to <1 x i64>
24*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %1
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerdefine i64 @v4f16_to_i64(float, <4 x half> %a) #0 {
28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_i64:
29*9880d681SAndroid Build Coastguard Worker; CHECK: fmov x0, d1
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to i64
32*9880d681SAndroid Build Coastguard Worker  ret i64 %1
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @v4f16_to_v2float(float, <4 x half> %a) #0 {
36*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_v2float:
37*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
38*9880d681SAndroid Build Coastguard Workerentry:
39*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to <2 x float>
40*9880d681SAndroid Build Coastguard Worker  ret <2 x float> %1
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine <1 x double> @v4f16_to_v1double(float, <4 x half> %a) #0 {
44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_v1double:
45*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
46*9880d681SAndroid Build Coastguard Workerentry:
47*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to <1 x double>
48*9880d681SAndroid Build Coastguard Worker  ret <1 x double> %1
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdefine double @v4f16_to_double(float, <4 x half> %a) #0 {
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4f16_to_double:
53*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
54*9880d681SAndroid Build Coastguard Workerentry:
55*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x half> %a to double
56*9880d681SAndroid Build Coastguard Worker  ret double %1
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @v4i16_to_v4f16(float, <4 x i16> %a) #0 {
61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4i16_to_v4f16:
62*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i16> %a to <4 x half>
65*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @v2i32_to_v4f16(float, <2 x i32> %a) #0 {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v2i32_to_v4f16:
70*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
71*9880d681SAndroid Build Coastguard Workerentry:
72*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i32> %a to <4 x half>
73*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
74*9880d681SAndroid Build Coastguard Worker}
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @v1i64_to_v4f16(float, <1 x i64> %a) #0 {
77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v1i64_to_v4f16:
78*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
79*9880d681SAndroid Build Coastguard Workerentry:
80*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x i64> %a to <4 x half>
81*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @i64_to_v4f16(float, i64 %a) #0 {
85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: i64_to_v4f16:
86*9880d681SAndroid Build Coastguard Worker; CHECK: fmov d0, x0
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker  %1 = bitcast i64 %a to <4 x half>
89*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @v2float_to_v4f16(float, <2 x float> %a) #0 {
93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v2float_to_v4f16:
94*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
95*9880d681SAndroid Build Coastguard Workerentry:
96*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x float> %a to <4 x half>
97*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @v1double_to_v4f16(float, <1 x double> %a) #0 {
101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v1double_to_v4f16:
102*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <1 x double> %a to <4 x half>
105*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
106*9880d681SAndroid Build Coastguard Worker}
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine <4 x half> @double_to_v4f16(float, double %a) #0 {
109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: double_to_v4f16:
110*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
111*9880d681SAndroid Build Coastguard Workerentry:
112*9880d681SAndroid Build Coastguard Worker  %1 = bitcast double %a to <4 x half>
113*9880d681SAndroid Build Coastguard Worker  ret <4 x half> %1
114*9880d681SAndroid Build Coastguard Worker}
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @v8f16_to_v8i16(float, <8 x half> %a) #0 {
126*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8f16_to_v8i16:
127*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
128*9880d681SAndroid Build Coastguard Workerentry:
129*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x half> %a to <8 x i16>
130*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %1
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @v8f16_to_v4i32(float, <8 x half> %a) #0 {
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8f16_to_v4i32:
135*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x half> %a to <4 x i32>
138*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @v8f16_to_v2i64(float, <8 x half> %a) #0 {
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8f16_to_v2i64:
143*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
144*9880d681SAndroid Build Coastguard Workerentry:
145*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x half> %a to <2 x i64>
146*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @v8f16_to_v4float(float, <8 x half> %a) #0 {
150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8f16_to_v4float:
151*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
152*9880d681SAndroid Build Coastguard Workerentry:
153*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x half> %a to <4 x float>
154*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %1
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @v8f16_to_v2double(float, <8 x half> %a) #0 {
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8f16_to_v2double:
159*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
160*9880d681SAndroid Build Coastguard Workerentry:
161*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x half> %a to <2 x double>
162*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %1
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @v8i16_to_v8f16(float, <8 x i16> %a) #0 {
166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v8i16_to_v8f16:
167*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
168*9880d681SAndroid Build Coastguard Workerentry:
169*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <8 x i16> %a to <8 x half>
170*9880d681SAndroid Build Coastguard Worker  ret <8 x half> %1
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @v4i32_to_v8f16(float, <4 x i32> %a) #0 {
174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4i32_to_v8f16:
175*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
176*9880d681SAndroid Build Coastguard Workerentry:
177*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x i32> %a to <8 x half>
178*9880d681SAndroid Build Coastguard Worker  ret <8 x half> %1
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @v2i64_to_v8f16(float, <2 x i64> %a) #0 {
182*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v2i64_to_v8f16:
183*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
184*9880d681SAndroid Build Coastguard Workerentry:
185*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x i64> %a to <8 x half>
186*9880d681SAndroid Build Coastguard Worker  ret <8 x half> %1
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @v4float_to_v8f16(float, <4 x float> %a) #0 {
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v4float_to_v8f16:
191*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
192*9880d681SAndroid Build Coastguard Workerentry:
193*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <4 x float> %a to <8 x half>
194*9880d681SAndroid Build Coastguard Worker  ret <8 x half> %1
195*9880d681SAndroid Build Coastguard Worker}
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <8 x half> @v2double_to_v8f16(float, <2 x double> %a) #0 {
198*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: v2double_to_v8f16:
199*9880d681SAndroid Build Coastguard Worker; CHECK: mov v0.16b, v1.16b
200*9880d681SAndroid Build Coastguard Workerentry:
201*9880d681SAndroid Build Coastguard Worker  %1 = bitcast <2 x double> %a to <8 x half>
202*9880d681SAndroid Build Coastguard Worker  ret <8 x half> %1
203*9880d681SAndroid Build Coastguard Worker}
204