1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s
3 ; Bitcasts between 512-bit vector types are no-ops since no instruction is
4 ; needed for the conversion.
6 define <8 x i64> @v16i32_to_v8i64(<16 x i32> %a) {
7 ;CHECK-LABEL: v16i32_to_v8i64:
8 ;CHECK-NEXT: .cfi_startproc
10 %1 = bitcast <16 x i32> %a to <8 x i64>
14 define <8 x i64> @v32i16_to_v8i64(<32 x i16> %a) {
15 ;CHECK-LABEL: v32i16_to_v8i64:
16 ;CHECK-NEXT: .cfi_startproc
18 %1 = bitcast <32 x i16> %a to <8 x i64>
22 define <8 x i64> @v64i8_to_v8i64(<64 x i8> %a) {
23 ;CHECK-LABEL: v64i8_to_v8i64:
24 ;CHECK-NEXT: .cfi_startproc
26 %1 = bitcast <64 x i8> %a to <8 x i64>
30 define <8 x i64> @v8f64_to_v8i64(<8 x double> %a) {
31 ;CHECK-LABEL: v8f64_to_v8i64:
32 ;CHECK-NEXT: .cfi_startproc
34 %1 = bitcast <8 x double> %a to <8 x i64>
38 define <8 x i64> @v16f32_to_v8i64(<16 x float> %a) {
39 ;CHECK-LABEL: v16f32_to_v8i64:
40 ;CHECK-NEXT: .cfi_startproc
42 %1 = bitcast <16 x float> %a to <8 x i64>
46 define <16 x i32> @v8i64_to_v16i32(<8 x i64> %a) {
47 ;CHECK-LABEL: v8i64_to_v16i32:
48 ;CHECK-NEXT: .cfi_startproc
50 %1 = bitcast <8 x i64> %a to <16 x i32>
54 define <16 x i32> @v32i16_to_v16i32(<32 x i16> %a) {
55 ;CHECK-LABEL: v32i16_to_v16i32:
56 ;CHECK-NEXT: .cfi_startproc
58 %1 = bitcast <32 x i16> %a to <16 x i32>
62 define <16 x i32> @v64i8_to_v16i32(<64 x i8> %a) {
63 ;CHECK-LABEL: v64i8_to_v16i32:
64 ;CHECK-NEXT: .cfi_startproc
66 %1 = bitcast <64 x i8> %a to <16 x i32>
70 define <16 x i32> @v8f64_to_v16i32(<8 x double> %a) {
71 ;CHECK-LABEL: v8f64_to_v16i32:
72 ;CHECK-NEXT: .cfi_startproc
74 %1 = bitcast <8 x double> %a to <16 x i32>
78 define <16 x i32> @v16f32_to_v16i32(<16 x float> %a) {
79 ;CHECK-LABEL: v16f32_to_v16i32:
80 ;CHECK-NEXT: .cfi_startproc
82 %1 = bitcast <16 x float> %a to <16 x i32>
86 define <32 x i16> @v8i64_to_v32i16(<8 x i64> %a) {
87 ;CHECK-LABEL: v8i64_to_v32i16:
88 ;CHECK-NEXT: .cfi_startproc
90 %1 = bitcast <8 x i64> %a to <32 x i16>
94 define <32 x i16> @v16i32_to_v32i16(<16 x i32> %a) {
95 ;CHECK-LABEL: v16i32_to_v32i16:
96 ;CHECK-NEXT: .cfi_startproc
98 %1 = bitcast <16 x i32> %a to <32 x i16>
102 define <32 x i16> @v64i8_to_v32i16(<64 x i8> %a) {
103 ;CHECK-LABEL: v64i8_to_v32i16:
104 ;CHECK-NEXT: .cfi_startproc
106 %1 = bitcast <64 x i8> %a to <32 x i16>
110 define <32 x i16> @v8f64_to_v32i16(<8 x double> %a) {
111 ;CHECK-LABEL: v8f64_to_v32i16:
112 ;CHECK-NEXT: .cfi_startproc
114 %1 = bitcast <8 x double> %a to <32 x i16>
118 define <32 x i16> @v16f32_to_v32i16(<16 x float> %a) {
119 ;CHECK-LABEL: v16f32_to_v32i16:
120 ;CHECK-NEXT: .cfi_startproc
122 %1 = bitcast <16 x float> %a to <32 x i16>
126 define <64 x i8> @v32i16_to_v64i8(<32 x i16> %a) {
127 ;CHECK-LABEL: v32i16_to_v64i8:
128 ;CHECK-NEXT: .cfi_startproc
130 %1 = bitcast <32 x i16> %a to <64 x i8>
134 define <64 x i8> @v8i64_to_v64i8(<8 x i64> %a) {
135 ;CHECK-LABEL: v8i64_to_v64i8:
136 ;CHECK-NEXT: .cfi_startproc
138 %1 = bitcast <8 x i64> %a to <64 x i8>
142 define <64 x i8> @v16i32_to_v64i8(<16 x i32> %a) {
143 ;CHECK-LABEL: v16i32_to_v64i8:
144 ;CHECK-NEXT: .cfi_startproc
146 %1 = bitcast <16 x i32> %a to <64 x i8>
150 define <64 x i8> @v8f64_to_v64i8(<8 x double> %a) {
151 ;CHECK-LABEL: v8f64_to_v64i8:
152 ;CHECK-NEXT: .cfi_startproc
154 %1 = bitcast <8 x double> %a to <64 x i8>
158 define <64 x i8> @v16f32_to_v64i8(<16 x float> %a) {
159 ;CHECK-LABEL: v16f32_to_v64i8:
160 ;CHECK-NEXT: .cfi_startproc
162 %1 = bitcast <16 x float> %a to <64 x i8>
166 define <16 x float> @v64i8_to_v16f32(<64 x i8> %a) {
167 ;CHECK-LABEL: v64i8_to_v16f32:
168 ;CHECK-NEXT: .cfi_startproc
170 %1 = bitcast <64 x i8> %a to <16 x float>
174 define <16 x float> @v32i16_to_v16f32(<32 x i16> %a) {
175 ;CHECK-LABEL: v32i16_to_v16f32:
176 ;CHECK-NEXT: .cfi_startproc
178 %1 = bitcast <32 x i16> %a to <16 x float>
182 define <16 x float> @v8i64_to_v16f32(<8 x i64> %a) {
183 ;CHECK-LABEL: v8i64_to_v16f32:
184 ;CHECK-NEXT: .cfi_startproc
186 %1 = bitcast <8 x i64> %a to <16 x float>
190 define <16 x float> @v16i32_to_v16f32(<16 x i32> %a) {
191 ;CHECK-LABEL: v16i32_to_v16f32:
192 ;CHECK-NEXT: .cfi_startproc
194 %1 = bitcast <16 x i32> %a to <16 x float>
198 define <16 x float> @v8f64_to_v16f32(<8 x double> %a) {
199 ;CHECK-LABEL: v8f64_to_v16f32:
200 ;CHECK-NEXT: .cfi_startproc
202 %1 = bitcast <8 x double> %a to <16 x float>
206 define <8 x double> @v16f32_to_v8f64(<16 x float> %a) {
207 ;CHECK-LABEL: v16f32_to_v8f64:
208 ;CHECK-NEXT: .cfi_startproc
210 %1 = bitcast <16 x float> %a to <8 x double>
214 define <8 x double> @v64i8_to_v8f64(<64 x i8> %a) {
215 ;CHECK-LABEL: v64i8_to_v8f64:
216 ;CHECK-NEXT: .cfi_startproc
218 %1 = bitcast <64 x i8> %a to <8 x double>
222 define <8 x double> @v32i16_to_v8f64(<32 x i16> %a) {
223 ;CHECK-LABEL: v32i16_to_v8f64:
224 ;CHECK-NEXT: .cfi_startproc
226 %1 = bitcast <32 x i16> %a to <8 x double>
230 define <8 x double> @v8i64_to_v8f64(<8 x i64> %a) {
231 ;CHECK-LABEL: v8i64_to_v8f64:
232 ;CHECK-NEXT: .cfi_startproc
234 %1 = bitcast <8 x i64> %a to <8 x double>
238 define <8 x double> @v16i32_to_v8f64(<16 x i32> %a) {
239 ;CHECK-LABEL: v16i32_to_v8f64:
240 ;CHECK-NEXT: .cfi_startproc
242 %1 = bitcast <16 x i32> %a to <8 x double>