xref: /llvm-project/llvm/test/CodeGen/X86/fast-isel-bitcasts.ll (revision 77f62652c1f0f755c335efd9ce578891c3a552e7)
1*77f62652SAndrea Di Biagio; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s
2*77f62652SAndrea Di Biagio; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s
3*77f62652SAndrea Di Biagio;
4*77f62652SAndrea Di Biagio; Bitcasts between 128-bit vector types are no-ops since no instruction is
5*77f62652SAndrea Di Biagio; needed for the conversion.
6*77f62652SAndrea Di Biagio
7*77f62652SAndrea Di Biagiodefine <2 x i64> @v4i32_to_v2i64(<4 x i32> %a) {
8*77f62652SAndrea Di Biagio;CHECK-LABEL: v4i32_to_v2i64:
9*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
10*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
11*77f62652SAndrea Di Biagio  %1 = bitcast <4 x i32> %a to <2 x i64>
12*77f62652SAndrea Di Biagio  ret <2 x i64> %1
13*77f62652SAndrea Di Biagio}
14*77f62652SAndrea Di Biagio
15*77f62652SAndrea Di Biagiodefine <2 x i64> @v8i16_to_v2i64(<8 x i16> %a) {
16*77f62652SAndrea Di Biagio;CHECK-LABEL: v8i16_to_v2i64:
17*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
18*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
19*77f62652SAndrea Di Biagio  %1 = bitcast <8 x i16> %a to <2 x i64>
20*77f62652SAndrea Di Biagio  ret <2 x i64> %1
21*77f62652SAndrea Di Biagio}
22*77f62652SAndrea Di Biagio
23*77f62652SAndrea Di Biagiodefine <2 x i64> @v16i8_to_v2i64(<16 x i8> %a) {
24*77f62652SAndrea Di Biagio;CHECK-LABEL: v16i8_to_v2i64:
25*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
26*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
27*77f62652SAndrea Di Biagio  %1 = bitcast <16 x i8> %a to <2 x i64>
28*77f62652SAndrea Di Biagio  ret <2 x i64> %1
29*77f62652SAndrea Di Biagio}
30*77f62652SAndrea Di Biagio
31*77f62652SAndrea Di Biagiodefine <2 x i64> @v2f64_to_v2i64(<2 x double> %a) {
32*77f62652SAndrea Di Biagio;CHECK-LABEL: v2f64_to_v2i64:
33*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
34*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
35*77f62652SAndrea Di Biagio  %1 = bitcast <2 x double> %a to <2 x i64>
36*77f62652SAndrea Di Biagio  ret <2 x i64> %1
37*77f62652SAndrea Di Biagio}
38*77f62652SAndrea Di Biagio
39*77f62652SAndrea Di Biagiodefine <2 x i64> @v4f32_to_v2i64(<4 x float> %a) {
40*77f62652SAndrea Di Biagio;CHECK-LABEL: v4f32_to_v2i64:
41*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
42*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
43*77f62652SAndrea Di Biagio  %1 = bitcast <4 x float> %a to <2 x i64>
44*77f62652SAndrea Di Biagio  ret <2 x i64> %1
45*77f62652SAndrea Di Biagio}
46*77f62652SAndrea Di Biagio
47*77f62652SAndrea Di Biagiodefine <4 x i32> @v2i64_to_v4i32(<2 x i64> %a) {
48*77f62652SAndrea Di Biagio;CHECK-LABEL: v2i64_to_v4i32:
49*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
50*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
51*77f62652SAndrea Di Biagio  %1 = bitcast <2 x i64> %a to <4 x i32>
52*77f62652SAndrea Di Biagio  ret <4 x i32> %1
53*77f62652SAndrea Di Biagio}
54*77f62652SAndrea Di Biagio
55*77f62652SAndrea Di Biagiodefine <4 x i32> @v8i16_to_v4i32(<8 x i16> %a) {
56*77f62652SAndrea Di Biagio;CHECK-LABEL: v8i16_to_v4i32:
57*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
58*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
59*77f62652SAndrea Di Biagio  %1 = bitcast <8 x i16> %a to <4 x i32>
60*77f62652SAndrea Di Biagio  ret <4 x i32> %1
61*77f62652SAndrea Di Biagio}
62*77f62652SAndrea Di Biagio
63*77f62652SAndrea Di Biagiodefine <4 x i32> @v16i8_to_v4i32(<16 x i8> %a) {
64*77f62652SAndrea Di Biagio;CHECK-LABEL: v16i8_to_v4i32:
65*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
66*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
67*77f62652SAndrea Di Biagio  %1 = bitcast <16 x i8> %a to <4 x i32>
68*77f62652SAndrea Di Biagio  ret <4 x i32> %1
69*77f62652SAndrea Di Biagio}
70*77f62652SAndrea Di Biagio
71*77f62652SAndrea Di Biagiodefine <4 x i32> @v2f64_to_v4i32(<2 x double> %a) {
72*77f62652SAndrea Di Biagio;CHECK-LABEL: v2f64_to_v4i32:
73*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
74*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
75*77f62652SAndrea Di Biagio  %1 = bitcast <2 x double> %a to <4 x i32>
76*77f62652SAndrea Di Biagio  ret <4 x i32> %1
77*77f62652SAndrea Di Biagio}
78*77f62652SAndrea Di Biagio
79*77f62652SAndrea Di Biagiodefine <4 x i32> @v4f32_to_v4i32(<4 x float> %a) {
80*77f62652SAndrea Di Biagio;CHECK-LABEL: v4f32_to_v4i32:
81*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
82*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
83*77f62652SAndrea Di Biagio  %1 = bitcast <4 x float> %a to <4 x i32>
84*77f62652SAndrea Di Biagio  ret <4 x i32> %1
85*77f62652SAndrea Di Biagio}
86*77f62652SAndrea Di Biagio
87*77f62652SAndrea Di Biagiodefine <8 x i16> @v2i64_to_v8i16(<2 x i64> %a) {
88*77f62652SAndrea Di Biagio;CHECK-LABEL: v2i64_to_v8i16:
89*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
90*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
91*77f62652SAndrea Di Biagio  %1 = bitcast <2 x i64> %a to <8 x i16>
92*77f62652SAndrea Di Biagio  ret <8 x i16> %1
93*77f62652SAndrea Di Biagio}
94*77f62652SAndrea Di Biagio
95*77f62652SAndrea Di Biagiodefine <8 x i16> @v4i32_to_v8i16(<4 x i32> %a) {
96*77f62652SAndrea Di Biagio;CHECK-LABEL: v4i32_to_v8i16:
97*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
98*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
99*77f62652SAndrea Di Biagio  %1 = bitcast <4 x i32> %a to <8 x i16>
100*77f62652SAndrea Di Biagio  ret <8 x i16> %1
101*77f62652SAndrea Di Biagio}
102*77f62652SAndrea Di Biagio
103*77f62652SAndrea Di Biagiodefine <8 x i16> @v16i8_to_v8i16(<16 x i8> %a) {
104*77f62652SAndrea Di Biagio;CHECK-LABEL: v16i8_to_v8i16:
105*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
106*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
107*77f62652SAndrea Di Biagio  %1 = bitcast <16 x i8> %a to <8 x i16>
108*77f62652SAndrea Di Biagio  ret <8 x i16> %1
109*77f62652SAndrea Di Biagio}
110*77f62652SAndrea Di Biagio
111*77f62652SAndrea Di Biagiodefine <8 x i16> @v2f64_to_v8i16(<2 x double> %a) {
112*77f62652SAndrea Di Biagio;CHECK-LABEL: v2f64_to_v8i16:
113*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
114*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
115*77f62652SAndrea Di Biagio  %1 = bitcast <2 x double> %a to <8 x i16>
116*77f62652SAndrea Di Biagio  ret <8 x i16> %1
117*77f62652SAndrea Di Biagio}
118*77f62652SAndrea Di Biagio
119*77f62652SAndrea Di Biagiodefine <8 x i16> @v4f32_to_v8i16(<4 x float> %a) {
120*77f62652SAndrea Di Biagio;CHECK-LABEL: v4f32_to_v8i16:
121*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
122*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
123*77f62652SAndrea Di Biagio  %1 = bitcast <4 x float> %a to <8 x i16>
124*77f62652SAndrea Di Biagio  ret <8 x i16> %1
125*77f62652SAndrea Di Biagio}
126*77f62652SAndrea Di Biagio
127*77f62652SAndrea Di Biagiodefine <16 x i8> @v8i16_to_v16i8(<8 x i16> %a) {
128*77f62652SAndrea Di Biagio;CHECK-LABEL: v8i16_to_v16i8:
129*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
130*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
131*77f62652SAndrea Di Biagio  %1 = bitcast <8 x i16> %a to <16 x i8>
132*77f62652SAndrea Di Biagio  ret <16 x i8> %1
133*77f62652SAndrea Di Biagio}
134*77f62652SAndrea Di Biagio
135*77f62652SAndrea Di Biagiodefine <16 x i8> @v2i64_to_v16i8(<2 x i64> %a) {
136*77f62652SAndrea Di Biagio;CHECK-LABEL: v2i64_to_v16i8:
137*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
138*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
139*77f62652SAndrea Di Biagio  %1 = bitcast <2 x i64> %a to <16 x i8>
140*77f62652SAndrea Di Biagio  ret <16 x i8> %1
141*77f62652SAndrea Di Biagio}
142*77f62652SAndrea Di Biagio
143*77f62652SAndrea Di Biagiodefine <16 x i8> @v4i32_to_v16i8(<4 x i32> %a) {
144*77f62652SAndrea Di Biagio;CHECK-LABEL: v4i32_to_v16i8:
145*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
146*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
147*77f62652SAndrea Di Biagio  %1 = bitcast <4 x i32> %a to <16 x i8>
148*77f62652SAndrea Di Biagio  ret <16 x i8> %1
149*77f62652SAndrea Di Biagio}
150*77f62652SAndrea Di Biagio
151*77f62652SAndrea Di Biagiodefine <16 x i8> @v2f64_to_v16i8(<2 x double> %a) {
152*77f62652SAndrea Di Biagio;CHECK-LABEL: v2f64_to_v16i8:
153*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
154*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
155*77f62652SAndrea Di Biagio  %1 = bitcast <2 x double> %a to <16 x i8>
156*77f62652SAndrea Di Biagio  ret <16 x i8> %1
157*77f62652SAndrea Di Biagio}
158*77f62652SAndrea Di Biagio
159*77f62652SAndrea Di Biagiodefine <16 x i8> @v4f32_to_v16i8(<4 x float> %a) {
160*77f62652SAndrea Di Biagio;CHECK-LABEL: v4f32_to_v16i8:
161*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
162*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
163*77f62652SAndrea Di Biagio  %1 = bitcast <4 x float> %a to <16 x i8>
164*77f62652SAndrea Di Biagio  ret <16 x i8> %1
165*77f62652SAndrea Di Biagio}
166*77f62652SAndrea Di Biagio
167*77f62652SAndrea Di Biagiodefine <4 x float> @v16i8_to_v4f32(<16 x i8> %a) {
168*77f62652SAndrea Di Biagio;CHECK-LABEL: v16i8_to_v4f32:
169*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
170*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
171*77f62652SAndrea Di Biagio  %1 = bitcast <16 x i8> %a to <4 x float>
172*77f62652SAndrea Di Biagio  ret <4 x float> %1
173*77f62652SAndrea Di Biagio}
174*77f62652SAndrea Di Biagio
175*77f62652SAndrea Di Biagiodefine <4 x float> @v8i16_to_v4f32(<8 x i16> %a) {
176*77f62652SAndrea Di Biagio;CHECK-LABEL: v8i16_to_v4f32:
177*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
178*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
179*77f62652SAndrea Di Biagio  %1 = bitcast <8 x i16> %a to <4 x float>
180*77f62652SAndrea Di Biagio  ret <4 x float> %1
181*77f62652SAndrea Di Biagio}
182*77f62652SAndrea Di Biagio
183*77f62652SAndrea Di Biagiodefine <4 x float> @v2i64_to_v4f32(<2 x i64> %a) {
184*77f62652SAndrea Di Biagio;CHECK-LABEL: v2i64_to_v4f32:
185*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
186*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
187*77f62652SAndrea Di Biagio  %1 = bitcast <2 x i64> %a to <4 x float>
188*77f62652SAndrea Di Biagio  ret <4 x float> %1
189*77f62652SAndrea Di Biagio}
190*77f62652SAndrea Di Biagio
191*77f62652SAndrea Di Biagiodefine <4 x float> @v4i32_to_v4f32(<4 x i32> %a) {
192*77f62652SAndrea Di Biagio;CHECK-LABEL: v4i32_to_v4f32:
193*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
194*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
195*77f62652SAndrea Di Biagio  %1 = bitcast <4 x i32> %a to <4 x float>
196*77f62652SAndrea Di Biagio  ret <4 x float> %1
197*77f62652SAndrea Di Biagio}
198*77f62652SAndrea Di Biagio
199*77f62652SAndrea Di Biagiodefine <4 x float> @v2f64_to_v4f32(<2 x double> %a) {
200*77f62652SAndrea Di Biagio;CHECK-LABEL: v2f64_to_v4f32:
201*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
202*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
203*77f62652SAndrea Di Biagio  %1 = bitcast <2 x double> %a to <4 x float>
204*77f62652SAndrea Di Biagio  ret <4 x float> %1
205*77f62652SAndrea Di Biagio}
206*77f62652SAndrea Di Biagio
207*77f62652SAndrea Di Biagiodefine <2 x double> @v4f32_to_v2f64(<4 x float> %a) {
208*77f62652SAndrea Di Biagio;CHECK-LABEL: v4f32_to_v2f64:
209*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
210*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
211*77f62652SAndrea Di Biagio  %1 = bitcast <4 x float> %a to <2 x double>
212*77f62652SAndrea Di Biagio  ret <2 x double> %1
213*77f62652SAndrea Di Biagio}
214*77f62652SAndrea Di Biagio
215*77f62652SAndrea Di Biagiodefine <2 x double> @v16i8_to_v2f64(<16 x i8> %a) {
216*77f62652SAndrea Di Biagio;CHECK-LABEL: v16i8_to_v2f64:
217*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
218*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
219*77f62652SAndrea Di Biagio  %1 = bitcast <16 x i8> %a to <2 x double>
220*77f62652SAndrea Di Biagio  ret <2 x double> %1
221*77f62652SAndrea Di Biagio}
222*77f62652SAndrea Di Biagio
223*77f62652SAndrea Di Biagiodefine <2 x double> @v8i16_to_v2f64(<8 x i16> %a) {
224*77f62652SAndrea Di Biagio;CHECK-LABEL: v8i16_to_v2f64:
225*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
226*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
227*77f62652SAndrea Di Biagio  %1 = bitcast <8 x i16> %a to <2 x double>
228*77f62652SAndrea Di Biagio  ret <2 x double> %1
229*77f62652SAndrea Di Biagio}
230*77f62652SAndrea Di Biagio
231*77f62652SAndrea Di Biagiodefine <2 x double> @v2i64_to_v2f64(<2 x i64> %a) {
232*77f62652SAndrea Di Biagio;CHECK-LABEL: v2i64_to_v2f64:
233*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
234*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
235*77f62652SAndrea Di Biagio  %1 = bitcast <2 x i64> %a to <2 x double>
236*77f62652SAndrea Di Biagio  ret <2 x double> %1
237*77f62652SAndrea Di Biagio}
238*77f62652SAndrea Di Biagio
239*77f62652SAndrea Di Biagiodefine <2 x double> @v4i32_to_v2f64(<4 x i32> %a) {
240*77f62652SAndrea Di Biagio;CHECK-LABEL: v4i32_to_v2f64:
241*77f62652SAndrea Di Biagio;CHECK-NEXT: .cfi_startproc
242*77f62652SAndrea Di Biagio;CHECK-NEXT: ret
243*77f62652SAndrea Di Biagio  %1 = bitcast <4 x i32> %a to <2 x double>
244*77f62652SAndrea Di Biagio  ret <2 x double> %1
245*77f62652SAndrea Di Biagio}
246