246 lines · plain
1; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -fast-isel -fast-isel-abort=1 -asm-verbose=0 | FileCheck %s3;4; Bitcasts between 128-bit vector types are no-ops since no instruction is5; 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_startproc10;CHECK-NEXT: ret11 %1 = bitcast <4 x i32> %a to <2 x i64>12 ret <2 x i64> %113}14 15define <2 x i64> @v8i16_to_v2i64(<8 x i16> %a) {16;CHECK-LABEL: v8i16_to_v2i64:17;CHECK-NEXT: .cfi_startproc18;CHECK-NEXT: ret19 %1 = bitcast <8 x i16> %a to <2 x i64>20 ret <2 x i64> %121}22 23define <2 x i64> @v16i8_to_v2i64(<16 x i8> %a) {24;CHECK-LABEL: v16i8_to_v2i64:25;CHECK-NEXT: .cfi_startproc26;CHECK-NEXT: ret27 %1 = bitcast <16 x i8> %a to <2 x i64>28 ret <2 x i64> %129}30 31define <2 x i64> @v2f64_to_v2i64(<2 x double> %a) {32;CHECK-LABEL: v2f64_to_v2i64:33;CHECK-NEXT: .cfi_startproc34;CHECK-NEXT: ret35 %1 = bitcast <2 x double> %a to <2 x i64>36 ret <2 x i64> %137}38 39define <2 x i64> @v4f32_to_v2i64(<4 x float> %a) {40;CHECK-LABEL: v4f32_to_v2i64:41;CHECK-NEXT: .cfi_startproc42;CHECK-NEXT: ret43 %1 = bitcast <4 x float> %a to <2 x i64>44 ret <2 x i64> %145}46 47define <4 x i32> @v2i64_to_v4i32(<2 x i64> %a) {48;CHECK-LABEL: v2i64_to_v4i32:49;CHECK-NEXT: .cfi_startproc50;CHECK-NEXT: ret51 %1 = bitcast <2 x i64> %a to <4 x i32>52 ret <4 x i32> %153}54 55define <4 x i32> @v8i16_to_v4i32(<8 x i16> %a) {56;CHECK-LABEL: v8i16_to_v4i32:57;CHECK-NEXT: .cfi_startproc58;CHECK-NEXT: ret59 %1 = bitcast <8 x i16> %a to <4 x i32>60 ret <4 x i32> %161}62 63define <4 x i32> @v16i8_to_v4i32(<16 x i8> %a) {64;CHECK-LABEL: v16i8_to_v4i32:65;CHECK-NEXT: .cfi_startproc66;CHECK-NEXT: ret67 %1 = bitcast <16 x i8> %a to <4 x i32>68 ret <4 x i32> %169}70 71define <4 x i32> @v2f64_to_v4i32(<2 x double> %a) {72;CHECK-LABEL: v2f64_to_v4i32:73;CHECK-NEXT: .cfi_startproc74;CHECK-NEXT: ret75 %1 = bitcast <2 x double> %a to <4 x i32>76 ret <4 x i32> %177}78 79define <4 x i32> @v4f32_to_v4i32(<4 x float> %a) {80;CHECK-LABEL: v4f32_to_v4i32:81;CHECK-NEXT: .cfi_startproc82;CHECK-NEXT: ret83 %1 = bitcast <4 x float> %a to <4 x i32>84 ret <4 x i32> %185}86 87define <8 x i16> @v2i64_to_v8i16(<2 x i64> %a) {88;CHECK-LABEL: v2i64_to_v8i16:89;CHECK-NEXT: .cfi_startproc90;CHECK-NEXT: ret91 %1 = bitcast <2 x i64> %a to <8 x i16>92 ret <8 x i16> %193}94 95define <8 x i16> @v4i32_to_v8i16(<4 x i32> %a) {96;CHECK-LABEL: v4i32_to_v8i16:97;CHECK-NEXT: .cfi_startproc98;CHECK-NEXT: ret99 %1 = bitcast <4 x i32> %a to <8 x i16>100 ret <8 x i16> %1101}102 103define <8 x i16> @v16i8_to_v8i16(<16 x i8> %a) {104;CHECK-LABEL: v16i8_to_v8i16:105;CHECK-NEXT: .cfi_startproc106;CHECK-NEXT: ret107 %1 = bitcast <16 x i8> %a to <8 x i16>108 ret <8 x i16> %1109}110 111define <8 x i16> @v2f64_to_v8i16(<2 x double> %a) {112;CHECK-LABEL: v2f64_to_v8i16:113;CHECK-NEXT: .cfi_startproc114;CHECK-NEXT: ret115 %1 = bitcast <2 x double> %a to <8 x i16>116 ret <8 x i16> %1117}118 119define <8 x i16> @v4f32_to_v8i16(<4 x float> %a) {120;CHECK-LABEL: v4f32_to_v8i16:121;CHECK-NEXT: .cfi_startproc122;CHECK-NEXT: ret123 %1 = bitcast <4 x float> %a to <8 x i16>124 ret <8 x i16> %1125}126 127define <16 x i8> @v8i16_to_v16i8(<8 x i16> %a) {128;CHECK-LABEL: v8i16_to_v16i8:129;CHECK-NEXT: .cfi_startproc130;CHECK-NEXT: ret131 %1 = bitcast <8 x i16> %a to <16 x i8>132 ret <16 x i8> %1133}134 135define <16 x i8> @v2i64_to_v16i8(<2 x i64> %a) {136;CHECK-LABEL: v2i64_to_v16i8:137;CHECK-NEXT: .cfi_startproc138;CHECK-NEXT: ret139 %1 = bitcast <2 x i64> %a to <16 x i8>140 ret <16 x i8> %1141}142 143define <16 x i8> @v4i32_to_v16i8(<4 x i32> %a) {144;CHECK-LABEL: v4i32_to_v16i8:145;CHECK-NEXT: .cfi_startproc146;CHECK-NEXT: ret147 %1 = bitcast <4 x i32> %a to <16 x i8>148 ret <16 x i8> %1149}150 151define <16 x i8> @v2f64_to_v16i8(<2 x double> %a) {152;CHECK-LABEL: v2f64_to_v16i8:153;CHECK-NEXT: .cfi_startproc154;CHECK-NEXT: ret155 %1 = bitcast <2 x double> %a to <16 x i8>156 ret <16 x i8> %1157}158 159define <16 x i8> @v4f32_to_v16i8(<4 x float> %a) {160;CHECK-LABEL: v4f32_to_v16i8:161;CHECK-NEXT: .cfi_startproc162;CHECK-NEXT: ret163 %1 = bitcast <4 x float> %a to <16 x i8>164 ret <16 x i8> %1165}166 167define <4 x float> @v16i8_to_v4f32(<16 x i8> %a) {168;CHECK-LABEL: v16i8_to_v4f32:169;CHECK-NEXT: .cfi_startproc170;CHECK-NEXT: ret171 %1 = bitcast <16 x i8> %a to <4 x float>172 ret <4 x float> %1173}174 175define <4 x float> @v8i16_to_v4f32(<8 x i16> %a) {176;CHECK-LABEL: v8i16_to_v4f32:177;CHECK-NEXT: .cfi_startproc178;CHECK-NEXT: ret179 %1 = bitcast <8 x i16> %a to <4 x float>180 ret <4 x float> %1181}182 183define <4 x float> @v2i64_to_v4f32(<2 x i64> %a) {184;CHECK-LABEL: v2i64_to_v4f32:185;CHECK-NEXT: .cfi_startproc186;CHECK-NEXT: ret187 %1 = bitcast <2 x i64> %a to <4 x float>188 ret <4 x float> %1189}190 191define <4 x float> @v4i32_to_v4f32(<4 x i32> %a) {192;CHECK-LABEL: v4i32_to_v4f32:193;CHECK-NEXT: .cfi_startproc194;CHECK-NEXT: ret195 %1 = bitcast <4 x i32> %a to <4 x float>196 ret <4 x float> %1197}198 199define <4 x float> @v2f64_to_v4f32(<2 x double> %a) {200;CHECK-LABEL: v2f64_to_v4f32:201;CHECK-NEXT: .cfi_startproc202;CHECK-NEXT: ret203 %1 = bitcast <2 x double> %a to <4 x float>204 ret <4 x float> %1205}206 207define <2 x double> @v4f32_to_v2f64(<4 x float> %a) {208;CHECK-LABEL: v4f32_to_v2f64:209;CHECK-NEXT: .cfi_startproc210;CHECK-NEXT: ret211 %1 = bitcast <4 x float> %a to <2 x double>212 ret <2 x double> %1213}214 215define <2 x double> @v16i8_to_v2f64(<16 x i8> %a) {216;CHECK-LABEL: v16i8_to_v2f64:217;CHECK-NEXT: .cfi_startproc218;CHECK-NEXT: ret219 %1 = bitcast <16 x i8> %a to <2 x double>220 ret <2 x double> %1221}222 223define <2 x double> @v8i16_to_v2f64(<8 x i16> %a) {224;CHECK-LABEL: v8i16_to_v2f64:225;CHECK-NEXT: .cfi_startproc226;CHECK-NEXT: ret227 %1 = bitcast <8 x i16> %a to <2 x double>228 ret <2 x double> %1229}230 231define <2 x double> @v2i64_to_v2f64(<2 x i64> %a) {232;CHECK-LABEL: v2i64_to_v2f64:233;CHECK-NEXT: .cfi_startproc234;CHECK-NEXT: ret235 %1 = bitcast <2 x i64> %a to <2 x double>236 ret <2 x double> %1237}238 239define <2 x double> @v4i32_to_v2f64(<4 x i32> %a) {240;CHECK-LABEL: v4i32_to_v2f64:241;CHECK-NEXT: .cfi_startproc242;CHECK-NEXT: ret243 %1 = bitcast <4 x i32> %a to <2 x double>244 ret <2 x double> %1245}246