[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / fast-isel-bitcasts.ll
blob892b517fe873c6371d980cde4922f2636a6d7bb1
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s
4 ; Bitcasts between 128-bit vector types are no-ops since no instruction is
5 ; needed for the conversion.
7 define <2 x i64> @v4i32_to_v2i64(<4 x i32> %a) {
8 ;CHECK-LABEL: v4i32_to_v2i64:
9 ;CHECK-NEXT: .cfi_startproc
10 ;CHECK-NEXT: ret
11   %1 = bitcast <4 x i32> %a to <2 x i64>
12   ret <2 x i64> %1
15 define <2 x i64> @v8i16_to_v2i64(<8 x i16> %a) {
16 ;CHECK-LABEL: v8i16_to_v2i64:
17 ;CHECK-NEXT: .cfi_startproc
18 ;CHECK-NEXT: ret
19   %1 = bitcast <8 x i16> %a to <2 x i64>
20   ret <2 x i64> %1
23 define <2 x i64> @v16i8_to_v2i64(<16 x i8> %a) {
24 ;CHECK-LABEL: v16i8_to_v2i64:
25 ;CHECK-NEXT: .cfi_startproc
26 ;CHECK-NEXT: ret
27   %1 = bitcast <16 x i8> %a to <2 x i64>
28   ret <2 x i64> %1
31 define <2 x i64> @v2f64_to_v2i64(<2 x double> %a) {
32 ;CHECK-LABEL: v2f64_to_v2i64:
33 ;CHECK-NEXT: .cfi_startproc
34 ;CHECK-NEXT: ret
35   %1 = bitcast <2 x double> %a to <2 x i64>
36   ret <2 x i64> %1
39 define <2 x i64> @v4f32_to_v2i64(<4 x float> %a) {
40 ;CHECK-LABEL: v4f32_to_v2i64:
41 ;CHECK-NEXT: .cfi_startproc
42 ;CHECK-NEXT: ret
43   %1 = bitcast <4 x float> %a to <2 x i64>
44   ret <2 x i64> %1
47 define <4 x i32> @v2i64_to_v4i32(<2 x i64> %a) {
48 ;CHECK-LABEL: v2i64_to_v4i32:
49 ;CHECK-NEXT: .cfi_startproc
50 ;CHECK-NEXT: ret
51   %1 = bitcast <2 x i64> %a to <4 x i32>
52   ret <4 x i32> %1
55 define <4 x i32> @v8i16_to_v4i32(<8 x i16> %a) {
56 ;CHECK-LABEL: v8i16_to_v4i32:
57 ;CHECK-NEXT: .cfi_startproc
58 ;CHECK-NEXT: ret
59   %1 = bitcast <8 x i16> %a to <4 x i32>
60   ret <4 x i32> %1
63 define <4 x i32> @v16i8_to_v4i32(<16 x i8> %a) {
64 ;CHECK-LABEL: v16i8_to_v4i32:
65 ;CHECK-NEXT: .cfi_startproc
66 ;CHECK-NEXT: ret
67   %1 = bitcast <16 x i8> %a to <4 x i32>
68   ret <4 x i32> %1
71 define <4 x i32> @v2f64_to_v4i32(<2 x double> %a) {
72 ;CHECK-LABEL: v2f64_to_v4i32:
73 ;CHECK-NEXT: .cfi_startproc
74 ;CHECK-NEXT: ret
75   %1 = bitcast <2 x double> %a to <4 x i32>
76   ret <4 x i32> %1
79 define <4 x i32> @v4f32_to_v4i32(<4 x float> %a) {
80 ;CHECK-LABEL: v4f32_to_v4i32:
81 ;CHECK-NEXT: .cfi_startproc
82 ;CHECK-NEXT: ret
83   %1 = bitcast <4 x float> %a to <4 x i32>
84   ret <4 x i32> %1
87 define <8 x i16> @v2i64_to_v8i16(<2 x i64> %a) {
88 ;CHECK-LABEL: v2i64_to_v8i16:
89 ;CHECK-NEXT: .cfi_startproc
90 ;CHECK-NEXT: ret
91   %1 = bitcast <2 x i64> %a to <8 x i16>
92   ret <8 x i16> %1
95 define <8 x i16> @v4i32_to_v8i16(<4 x i32> %a) {
96 ;CHECK-LABEL: v4i32_to_v8i16:
97 ;CHECK-NEXT: .cfi_startproc
98 ;CHECK-NEXT: ret
99   %1 = bitcast <4 x i32> %a to <8 x i16>
100   ret <8 x i16> %1
103 define <8 x i16> @v16i8_to_v8i16(<16 x i8> %a) {
104 ;CHECK-LABEL: v16i8_to_v8i16:
105 ;CHECK-NEXT: .cfi_startproc
106 ;CHECK-NEXT: ret
107   %1 = bitcast <16 x i8> %a to <8 x i16>
108   ret <8 x i16> %1
111 define <8 x i16> @v2f64_to_v8i16(<2 x double> %a) {
112 ;CHECK-LABEL: v2f64_to_v8i16:
113 ;CHECK-NEXT: .cfi_startproc
114 ;CHECK-NEXT: ret
115   %1 = bitcast <2 x double> %a to <8 x i16>
116   ret <8 x i16> %1
119 define <8 x i16> @v4f32_to_v8i16(<4 x float> %a) {
120 ;CHECK-LABEL: v4f32_to_v8i16:
121 ;CHECK-NEXT: .cfi_startproc
122 ;CHECK-NEXT: ret
123   %1 = bitcast <4 x float> %a to <8 x i16>
124   ret <8 x i16> %1
127 define <16 x i8> @v8i16_to_v16i8(<8 x i16> %a) {
128 ;CHECK-LABEL: v8i16_to_v16i8:
129 ;CHECK-NEXT: .cfi_startproc
130 ;CHECK-NEXT: ret
131   %1 = bitcast <8 x i16> %a to <16 x i8>
132   ret <16 x i8> %1
135 define <16 x i8> @v2i64_to_v16i8(<2 x i64> %a) {
136 ;CHECK-LABEL: v2i64_to_v16i8:
137 ;CHECK-NEXT: .cfi_startproc
138 ;CHECK-NEXT: ret
139   %1 = bitcast <2 x i64> %a to <16 x i8>
140   ret <16 x i8> %1
143 define <16 x i8> @v4i32_to_v16i8(<4 x i32> %a) {
144 ;CHECK-LABEL: v4i32_to_v16i8:
145 ;CHECK-NEXT: .cfi_startproc
146 ;CHECK-NEXT: ret
147   %1 = bitcast <4 x i32> %a to <16 x i8>
148   ret <16 x i8> %1
151 define <16 x i8> @v2f64_to_v16i8(<2 x double> %a) {
152 ;CHECK-LABEL: v2f64_to_v16i8:
153 ;CHECK-NEXT: .cfi_startproc
154 ;CHECK-NEXT: ret
155   %1 = bitcast <2 x double> %a to <16 x i8>
156   ret <16 x i8> %1
159 define <16 x i8> @v4f32_to_v16i8(<4 x float> %a) {
160 ;CHECK-LABEL: v4f32_to_v16i8:
161 ;CHECK-NEXT: .cfi_startproc
162 ;CHECK-NEXT: ret
163   %1 = bitcast <4 x float> %a to <16 x i8>
164   ret <16 x i8> %1
167 define <4 x float> @v16i8_to_v4f32(<16 x i8> %a) {
168 ;CHECK-LABEL: v16i8_to_v4f32:
169 ;CHECK-NEXT: .cfi_startproc
170 ;CHECK-NEXT: ret
171   %1 = bitcast <16 x i8> %a to <4 x float>
172   ret <4 x float> %1
175 define <4 x float> @v8i16_to_v4f32(<8 x i16> %a) {
176 ;CHECK-LABEL: v8i16_to_v4f32:
177 ;CHECK-NEXT: .cfi_startproc
178 ;CHECK-NEXT: ret
179   %1 = bitcast <8 x i16> %a to <4 x float>
180   ret <4 x float> %1
183 define <4 x float> @v2i64_to_v4f32(<2 x i64> %a) {
184 ;CHECK-LABEL: v2i64_to_v4f32:
185 ;CHECK-NEXT: .cfi_startproc
186 ;CHECK-NEXT: ret
187   %1 = bitcast <2 x i64> %a to <4 x float>
188   ret <4 x float> %1
191 define <4 x float> @v4i32_to_v4f32(<4 x i32> %a) {
192 ;CHECK-LABEL: v4i32_to_v4f32:
193 ;CHECK-NEXT: .cfi_startproc
194 ;CHECK-NEXT: ret
195   %1 = bitcast <4 x i32> %a to <4 x float>
196   ret <4 x float> %1
199 define <4 x float> @v2f64_to_v4f32(<2 x double> %a) {
200 ;CHECK-LABEL: v2f64_to_v4f32:
201 ;CHECK-NEXT: .cfi_startproc
202 ;CHECK-NEXT: ret
203   %1 = bitcast <2 x double> %a to <4 x float>
204   ret <4 x float> %1
207 define <2 x double> @v4f32_to_v2f64(<4 x float> %a) {
208 ;CHECK-LABEL: v4f32_to_v2f64:
209 ;CHECK-NEXT: .cfi_startproc
210 ;CHECK-NEXT: ret
211   %1 = bitcast <4 x float> %a to <2 x double>
212   ret <2 x double> %1
215 define <2 x double> @v16i8_to_v2f64(<16 x i8> %a) {
216 ;CHECK-LABEL: v16i8_to_v2f64:
217 ;CHECK-NEXT: .cfi_startproc
218 ;CHECK-NEXT: ret
219   %1 = bitcast <16 x i8> %a to <2 x double>
220   ret <2 x double> %1
223 define <2 x double> @v8i16_to_v2f64(<8 x i16> %a) {
224 ;CHECK-LABEL: v8i16_to_v2f64:
225 ;CHECK-NEXT: .cfi_startproc
226 ;CHECK-NEXT: ret
227   %1 = bitcast <8 x i16> %a to <2 x double>
228   ret <2 x double> %1
231 define <2 x double> @v2i64_to_v2f64(<2 x i64> %a) {
232 ;CHECK-LABEL: v2i64_to_v2f64:
233 ;CHECK-NEXT: .cfi_startproc
234 ;CHECK-NEXT: ret
235   %1 = bitcast <2 x i64> %a to <2 x double>
236   ret <2 x double> %1
239 define <2 x double> @v4i32_to_v2f64(<4 x i32> %a) {
240 ;CHECK-LABEL: v4i32_to_v2f64:
241 ;CHECK-NEXT: .cfi_startproc
242 ;CHECK-NEXT: ret
243   %1 = bitcast <4 x i32> %a to <2 x double>
244   ret <2 x double> %1