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 3; 4; Bitcasts between 128-bit vector types are no-ops since no instruction is 5; needed for the conversion. 6 7define <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 13} 14 15define <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 21} 22 23define <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 29} 30 31define <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 37} 38 39define <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 45} 46 47define <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 53} 54 55define <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 61} 62 63define <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 69} 70 71define <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 77} 78 79define <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 85} 86 87define <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 93} 94 95define <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 101} 102 103define <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 109} 110 111define <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 117} 118 119define <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 125} 126 127define <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 133} 134 135define <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 141} 142 143define <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 149} 150 151define <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 157} 158 159define <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 165} 166 167define <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 173} 174 175define <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 181} 182 183define <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 189} 190 191define <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 197} 198 199define <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 205} 206 207define <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 213} 214 215define <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 221} 222 223define <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 229} 230 231define <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 237} 238 239define <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 245} 246