1157 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 | FileCheck %s --check-prefixes=CHECK,CHECK-SKX3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=icelake-server | FileCheck %s --check-prefixes=CHECK,CHECK-ICX,CHECK-ICX-NO-BYPASS-DELAY4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=icelake-server -mattr=-no-bypass-delay-shuffle | FileCheck %s --check-prefixes=CHECK,CHECK-ICX,CHECK-ICX-BYPASS-DELAY5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=CHECK,CHECK-V46; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq | FileCheck %s --check-prefixes=CHECK,CHECK-AVX5127; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver4 | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER48; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver5 | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER49 10define <16 x float> @transform_VUNPCKLPSZrr(<16 x float> %a, <16 x float> %b) nounwind {11; CHECK-LABEL: transform_VUNPCKLPSZrr:12; CHECK: # %bb.0:13; CHECK-NEXT: vunpcklps {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]14; CHECK-NEXT: retq15 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>16 ret <16 x float> %shufp17}18 19define <16 x float> @transform_VUNPCKHPSZrr(<16 x float> %a, <16 x float> %b) nounwind {20; CHECK-LABEL: transform_VUNPCKHPSZrr:21; CHECK: # %bb.0:22; CHECK-NEXT: vunpckhps {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]23; CHECK-NEXT: retq24 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>25 ret <16 x float> %shufp26}27 28define <8 x float> @transform_VUNPCKLPSYrr(<8 x float> %a, <8 x float> %b) nounwind {29; CHECK-SKX-LABEL: transform_VUNPCKLPSYrr:30; CHECK-SKX: # %bb.0:31; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]32; CHECK-SKX-NEXT: retq33;34; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrr:35; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:36; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]37; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq38;39; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrr:40; CHECK-ICX-BYPASS-DELAY: # %bb.0:41; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]42; CHECK-ICX-BYPASS-DELAY-NEXT: retq43;44; CHECK-V4-LABEL: transform_VUNPCKLPSYrr:45; CHECK-V4: # %bb.0:46; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]47; CHECK-V4-NEXT: retq48;49; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrr:50; CHECK-AVX512: # %bb.0:51; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]52; CHECK-AVX512-NEXT: retq53;54; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrr:55; CHECK-ZNVER4: # %bb.0:56; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]57; CHECK-ZNVER4-NEXT: retq58 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>59 ret <8 x float> %shufp60}61 62define <8 x float> @transform_VUNPCKHPSYrr(<8 x float> %a, <8 x float> %b) nounwind {63; CHECK-SKX-LABEL: transform_VUNPCKHPSYrr:64; CHECK-SKX: # %bb.0:65; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]66; CHECK-SKX-NEXT: retq67;68; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrr:69; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:70; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]71; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq72;73; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrr:74; CHECK-ICX-BYPASS-DELAY: # %bb.0:75; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]76; CHECK-ICX-BYPASS-DELAY-NEXT: retq77;78; CHECK-V4-LABEL: transform_VUNPCKHPSYrr:79; CHECK-V4: # %bb.0:80; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]81; CHECK-V4-NEXT: retq82;83; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrr:84; CHECK-AVX512: # %bb.0:85; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]86; CHECK-AVX512-NEXT: retq87;88; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrr:89; CHECK-ZNVER4: # %bb.0:90; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]91; CHECK-ZNVER4-NEXT: retq92 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>93 ret <8 x float> %shufp94}95 96define <4 x float> @transform_VUNPCKLPSrr(<4 x float> %a, <4 x float> %b) nounwind {97; CHECK-SKX-LABEL: transform_VUNPCKLPSrr:98; CHECK-SKX: # %bb.0:99; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]100; CHECK-SKX-NEXT: retq101;102; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrr:103; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:104; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]105; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq106;107; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrr:108; CHECK-ICX-BYPASS-DELAY: # %bb.0:109; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]110; CHECK-ICX-BYPASS-DELAY-NEXT: retq111;112; CHECK-V4-LABEL: transform_VUNPCKLPSrr:113; CHECK-V4: # %bb.0:114; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]115; CHECK-V4-NEXT: retq116;117; CHECK-AVX512-LABEL: transform_VUNPCKLPSrr:118; CHECK-AVX512: # %bb.0:119; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]120; CHECK-AVX512-NEXT: retq121;122; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrr:123; CHECK-ZNVER4: # %bb.0:124; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]125; CHECK-ZNVER4-NEXT: retq126 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>127 ret <4 x float> %shufp128}129 130define <4 x float> @transform_VUNPCKHPSrr(<4 x float> %a, <4 x float> %b) nounwind {131; CHECK-SKX-LABEL: transform_VUNPCKHPSrr:132; CHECK-SKX: # %bb.0:133; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]134; CHECK-SKX-NEXT: retq135;136; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrr:137; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:138; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]139; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq140;141; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrr:142; CHECK-ICX-BYPASS-DELAY: # %bb.0:143; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]144; CHECK-ICX-BYPASS-DELAY-NEXT: retq145;146; CHECK-V4-LABEL: transform_VUNPCKHPSrr:147; CHECK-V4: # %bb.0:148; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]149; CHECK-V4-NEXT: retq150;151; CHECK-AVX512-LABEL: transform_VUNPCKHPSrr:152; CHECK-AVX512: # %bb.0:153; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]154; CHECK-AVX512-NEXT: retq155;156; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrr:157; CHECK-ZNVER4: # %bb.0:158; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]159; CHECK-ZNVER4-NEXT: retq160 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>161 ret <4 x float> %shufp162}163 164define <16 x float> @transform_VUNPCKLPSZrrkz(<16 x float> %a, <16 x float> %b, i16 %mask_int) nounwind {165; CHECK-LABEL: transform_VUNPCKLPSZrrkz:166; CHECK: # %bb.0:167; CHECK-NEXT: kmovd %edi, %k1168; CHECK-NEXT: vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]169; CHECK-NEXT: retq170 %mask = bitcast i16 %mask_int to <16 x i1>171 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>172 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer173 ret <16 x float> %res174}175 176define <16 x float> @transform_VUNPCKHPSZrrkz(<16 x float> %a, <16 x float> %b, i16 %mask_int) nounwind {177; CHECK-LABEL: transform_VUNPCKHPSZrrkz:178; CHECK: # %bb.0:179; CHECK-NEXT: kmovd %edi, %k1180; CHECK-NEXT: vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]181; CHECK-NEXT: retq182 %mask = bitcast i16 %mask_int to <16 x i1>183 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>184 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer185 ret <16 x float> %res186}187 188define <8 x float> @transform_VUNPCKLPSYrrkz(<8 x float> %a, <8 x float> %b, i8 %mask_int) nounwind {189; CHECK-SKX-LABEL: transform_VUNPCKLPSYrrkz:190; CHECK-SKX: # %bb.0:191; CHECK-SKX-NEXT: kmovd %edi, %k1192; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]193; CHECK-SKX-NEXT: retq194;195; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrkz:196; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:197; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1198; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]199; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq200;201; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrkz:202; CHECK-ICX-BYPASS-DELAY: # %bb.0:203; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1204; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]205; CHECK-ICX-BYPASS-DELAY-NEXT: retq206;207; CHECK-V4-LABEL: transform_VUNPCKLPSYrrkz:208; CHECK-V4: # %bb.0:209; CHECK-V4-NEXT: kmovd %edi, %k1210; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]211; CHECK-V4-NEXT: retq212;213; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrrkz:214; CHECK-AVX512: # %bb.0:215; CHECK-AVX512-NEXT: kmovd %edi, %k1216; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]217; CHECK-AVX512-NEXT: retq218;219; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrrkz:220; CHECK-ZNVER4: # %bb.0:221; CHECK-ZNVER4-NEXT: kmovd %edi, %k1222; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]223; CHECK-ZNVER4-NEXT: retq224 %mask = bitcast i8 %mask_int to <8 x i1>225 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>226 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer227 ret <8 x float> %res228}229 230define <8 x float> @transform_VUNPCKHPSYrrkz(<8 x float> %a, <8 x float> %b, i8 %mask_int) nounwind {231; CHECK-SKX-LABEL: transform_VUNPCKHPSYrrkz:232; CHECK-SKX: # %bb.0:233; CHECK-SKX-NEXT: kmovd %edi, %k1234; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]235; CHECK-SKX-NEXT: retq236;237; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrkz:238; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:239; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1240; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]241; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq242;243; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrkz:244; CHECK-ICX-BYPASS-DELAY: # %bb.0:245; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1246; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]247; CHECK-ICX-BYPASS-DELAY-NEXT: retq248;249; CHECK-V4-LABEL: transform_VUNPCKHPSYrrkz:250; CHECK-V4: # %bb.0:251; CHECK-V4-NEXT: kmovd %edi, %k1252; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]253; CHECK-V4-NEXT: retq254;255; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrrkz:256; CHECK-AVX512: # %bb.0:257; CHECK-AVX512-NEXT: kmovd %edi, %k1258; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]259; CHECK-AVX512-NEXT: retq260;261; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrrkz:262; CHECK-ZNVER4: # %bb.0:263; CHECK-ZNVER4-NEXT: kmovd %edi, %k1264; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]265; CHECK-ZNVER4-NEXT: retq266 %mask = bitcast i8 %mask_int to <8 x i1>267 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>268 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer269 ret <8 x float> %res270}271 272define <4 x float> @transform_VUNPCKLPSrrkz(<4 x float> %a, <4 x float> %b, i4 %mask_int) nounwind {273; CHECK-SKX-LABEL: transform_VUNPCKLPSrrkz:274; CHECK-SKX: # %bb.0:275; CHECK-SKX-NEXT: kmovd %edi, %k1276; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]277; CHECK-SKX-NEXT: retq278;279; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrkz:280; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:281; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1282; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]283; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq284;285; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrkz:286; CHECK-ICX-BYPASS-DELAY: # %bb.0:287; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1288; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]289; CHECK-ICX-BYPASS-DELAY-NEXT: retq290;291; CHECK-V4-LABEL: transform_VUNPCKLPSrrkz:292; CHECK-V4: # %bb.0:293; CHECK-V4-NEXT: kmovd %edi, %k1294; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]295; CHECK-V4-NEXT: retq296;297; CHECK-AVX512-LABEL: transform_VUNPCKLPSrrkz:298; CHECK-AVX512: # %bb.0:299; CHECK-AVX512-NEXT: kmovd %edi, %k1300; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]301; CHECK-AVX512-NEXT: retq302;303; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrrkz:304; CHECK-ZNVER4: # %bb.0:305; CHECK-ZNVER4-NEXT: kmovd %edi, %k1306; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]307; CHECK-ZNVER4-NEXT: retq308 %mask = bitcast i4 %mask_int to <4 x i1>309 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>310 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer311 ret <4 x float> %res312}313 314define <4 x float> @transform_VUNPCKHPSrrkz(<4 x float> %a, <4 x float> %b, i4 %mask_int) nounwind {315; CHECK-SKX-LABEL: transform_VUNPCKHPSrrkz:316; CHECK-SKX: # %bb.0:317; CHECK-SKX-NEXT: kmovd %edi, %k1318; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]319; CHECK-SKX-NEXT: retq320;321; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrkz:322; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:323; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1324; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]325; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq326;327; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrkz:328; CHECK-ICX-BYPASS-DELAY: # %bb.0:329; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1330; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]331; CHECK-ICX-BYPASS-DELAY-NEXT: retq332;333; CHECK-V4-LABEL: transform_VUNPCKHPSrrkz:334; CHECK-V4: # %bb.0:335; CHECK-V4-NEXT: kmovd %edi, %k1336; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]337; CHECK-V4-NEXT: retq338;339; CHECK-AVX512-LABEL: transform_VUNPCKHPSrrkz:340; CHECK-AVX512: # %bb.0:341; CHECK-AVX512-NEXT: kmovd %edi, %k1342; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]343; CHECK-AVX512-NEXT: retq344;345; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrrkz:346; CHECK-ZNVER4: # %bb.0:347; CHECK-ZNVER4-NEXT: kmovd %edi, %k1348; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]349; CHECK-ZNVER4-NEXT: retq350 %mask = bitcast i4 %mask_int to <4 x i1>351 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>352 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer353 ret <4 x float> %res354}355 356define <16 x float> @transform_VUNPCKLPSZrrk(<16 x float> %a, <16 x float> %b, <16 x float> %c, i16 %mask_int) nounwind {357; CHECK-LABEL: transform_VUNPCKLPSZrrk:358; CHECK: # %bb.0:359; CHECK-NEXT: kmovd %edi, %k1360; CHECK-NEXT: vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]361; CHECK-NEXT: vmovaps %zmm2, %zmm0362; CHECK-NEXT: retq363 %mask = bitcast i16 %mask_int to <16 x i1>364 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>365 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c366 ret <16 x float> %res367}368 369define <16 x float> @transform_VUNPCKHPSZrrk(<16 x float> %a, <16 x float> %b, <16 x float> %c, i16 %mask_int) nounwind {370; CHECK-LABEL: transform_VUNPCKHPSZrrk:371; CHECK: # %bb.0:372; CHECK-NEXT: kmovd %edi, %k1373; CHECK-NEXT: vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]374; CHECK-NEXT: vmovaps %zmm2, %zmm0375; CHECK-NEXT: retq376 %mask = bitcast i16 %mask_int to <16 x i1>377 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>378 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c379 ret <16 x float> %res380}381 382define <8 x float> @transform_VUNPCKLPSYrrk(<8 x float> %a, <8 x float> %b, <8 x float> %c, i8 %mask_int) nounwind {383; CHECK-SKX-LABEL: transform_VUNPCKLPSYrrk:384; CHECK-SKX: # %bb.0:385; CHECK-SKX-NEXT: kmovd %edi, %k1386; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]387; CHECK-SKX-NEXT: vmovaps %ymm2, %ymm0388; CHECK-SKX-NEXT: retq389;390; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrk:391; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:392; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1393; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]394; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %ymm2, %ymm0395; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq396;397; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrrk:398; CHECK-ICX-BYPASS-DELAY: # %bb.0:399; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1400; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]401; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %ymm2, %ymm0402; CHECK-ICX-BYPASS-DELAY-NEXT: retq403;404; CHECK-V4-LABEL: transform_VUNPCKLPSYrrk:405; CHECK-V4: # %bb.0:406; CHECK-V4-NEXT: kmovd %edi, %k1407; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]408; CHECK-V4-NEXT: vmovaps %ymm2, %ymm0409; CHECK-V4-NEXT: retq410;411; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrrk:412; CHECK-AVX512: # %bb.0:413; CHECK-AVX512-NEXT: kmovd %edi, %k1414; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]415; CHECK-AVX512-NEXT: vmovaps %ymm2, %ymm0416; CHECK-AVX512-NEXT: retq417;418; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrrk:419; CHECK-ZNVER4: # %bb.0:420; CHECK-ZNVER4-NEXT: kmovd %edi, %k1421; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]422; CHECK-ZNVER4-NEXT: vmovaps %ymm2, %ymm0423; CHECK-ZNVER4-NEXT: retq424 %mask = bitcast i8 %mask_int to <8 x i1>425 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>426 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c427 ret <8 x float> %res428}429 430define <8 x float> @transform_VUNPCKHPSYrrk(<8 x float> %a, <8 x float> %b, <8 x float> %c, i8 %mask_int) nounwind {431; CHECK-SKX-LABEL: transform_VUNPCKHPSYrrk:432; CHECK-SKX: # %bb.0:433; CHECK-SKX-NEXT: kmovd %edi, %k1434; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]435; CHECK-SKX-NEXT: vmovaps %ymm2, %ymm0436; CHECK-SKX-NEXT: retq437;438; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrk:439; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:440; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1441; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]442; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %ymm2, %ymm0443; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq444;445; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrrk:446; CHECK-ICX-BYPASS-DELAY: # %bb.0:447; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1448; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]449; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %ymm2, %ymm0450; CHECK-ICX-BYPASS-DELAY-NEXT: retq451;452; CHECK-V4-LABEL: transform_VUNPCKHPSYrrk:453; CHECK-V4: # %bb.0:454; CHECK-V4-NEXT: kmovd %edi, %k1455; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]456; CHECK-V4-NEXT: vmovaps %ymm2, %ymm0457; CHECK-V4-NEXT: retq458;459; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrrk:460; CHECK-AVX512: # %bb.0:461; CHECK-AVX512-NEXT: kmovd %edi, %k1462; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]463; CHECK-AVX512-NEXT: vmovaps %ymm2, %ymm0464; CHECK-AVX512-NEXT: retq465;466; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrrk:467; CHECK-ZNVER4: # %bb.0:468; CHECK-ZNVER4-NEXT: kmovd %edi, %k1469; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]470; CHECK-ZNVER4-NEXT: vmovaps %ymm2, %ymm0471; CHECK-ZNVER4-NEXT: retq472 %mask = bitcast i8 %mask_int to <8 x i1>473 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>474 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c475 ret <8 x float> %res476}477 478define <4 x float> @transform_VUNPCKLPSrrk(<4 x float> %a, <4 x float> %b, <4 x float> %c, i4 %mask_int) nounwind {479; CHECK-SKX-LABEL: transform_VUNPCKLPSrrk:480; CHECK-SKX: # %bb.0:481; CHECK-SKX-NEXT: kmovd %edi, %k1482; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]483; CHECK-SKX-NEXT: vmovaps %xmm2, %xmm0484; CHECK-SKX-NEXT: retq485;486; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrk:487; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:488; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1489; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]490; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %xmm2, %xmm0491; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq492;493; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrrk:494; CHECK-ICX-BYPASS-DELAY: # %bb.0:495; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1496; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]497; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %xmm2, %xmm0498; CHECK-ICX-BYPASS-DELAY-NEXT: retq499;500; CHECK-V4-LABEL: transform_VUNPCKLPSrrk:501; CHECK-V4: # %bb.0:502; CHECK-V4-NEXT: kmovd %edi, %k1503; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]504; CHECK-V4-NEXT: vmovaps %xmm2, %xmm0505; CHECK-V4-NEXT: retq506;507; CHECK-AVX512-LABEL: transform_VUNPCKLPSrrk:508; CHECK-AVX512: # %bb.0:509; CHECK-AVX512-NEXT: kmovd %edi, %k1510; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]511; CHECK-AVX512-NEXT: vmovaps %xmm2, %xmm0512; CHECK-AVX512-NEXT: retq513;514; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrrk:515; CHECK-ZNVER4: # %bb.0:516; CHECK-ZNVER4-NEXT: kmovd %edi, %k1517; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]518; CHECK-ZNVER4-NEXT: vmovaps %xmm2, %xmm0519; CHECK-ZNVER4-NEXT: retq520 %mask = bitcast i4 %mask_int to <4 x i1>521 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>522 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c523 ret <4 x float> %res524}525 526define <4 x float> @transform_VUNPCKHPSrrk(<4 x float> %a, <4 x float> %b, <4 x float> %c, i4 %mask_int) nounwind {527; CHECK-SKX-LABEL: transform_VUNPCKHPSrrk:528; CHECK-SKX: # %bb.0:529; CHECK-SKX-NEXT: kmovd %edi, %k1530; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]531; CHECK-SKX-NEXT: vmovaps %xmm2, %xmm0532; CHECK-SKX-NEXT: retq533;534; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrk:535; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:536; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1537; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]538; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %xmm2, %xmm0539; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq540;541; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrrk:542; CHECK-ICX-BYPASS-DELAY: # %bb.0:543; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1544; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]545; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %xmm2, %xmm0546; CHECK-ICX-BYPASS-DELAY-NEXT: retq547;548; CHECK-V4-LABEL: transform_VUNPCKHPSrrk:549; CHECK-V4: # %bb.0:550; CHECK-V4-NEXT: kmovd %edi, %k1551; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]552; CHECK-V4-NEXT: vmovaps %xmm2, %xmm0553; CHECK-V4-NEXT: retq554;555; CHECK-AVX512-LABEL: transform_VUNPCKHPSrrk:556; CHECK-AVX512: # %bb.0:557; CHECK-AVX512-NEXT: kmovd %edi, %k1558; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]559; CHECK-AVX512-NEXT: vmovaps %xmm2, %xmm0560; CHECK-AVX512-NEXT: retq561;562; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrrk:563; CHECK-ZNVER4: # %bb.0:564; CHECK-ZNVER4-NEXT: kmovd %edi, %k1565; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]566; CHECK-ZNVER4-NEXT: vmovaps %xmm2, %xmm0567; CHECK-ZNVER4-NEXT: retq568 %mask = bitcast i4 %mask_int to <4 x i1>569 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>570 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c571 ret <4 x float> %res572}573 574define <16 x float> @transform_VUNPCKLPSZrm(<16 x float> %a, ptr %pb) nounwind {575; CHECK-LABEL: transform_VUNPCKLPSZrm:576; CHECK: # %bb.0:577; CHECK-NEXT: vunpcklps {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]578; CHECK-NEXT: retq579 %b = load <16 x float>, ptr %pb580 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>581 ret <16 x float> %shufp582}583 584define <16 x float> @transform_VUNPCKHPSZrm(<16 x float> %a, ptr %pb) nounwind {585; CHECK-LABEL: transform_VUNPCKHPSZrm:586; CHECK: # %bb.0:587; CHECK-NEXT: vunpckhps {{.*#+}} zmm0 = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]588; CHECK-NEXT: retq589 %b = load <16 x float>, ptr %pb590 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>591 ret <16 x float> %shufp592}593 594define <8 x float> @transform_VUNPCKLPSYrm(<8 x float> %a, ptr %pb) nounwind {595; CHECK-SKX-LABEL: transform_VUNPCKLPSYrm:596; CHECK-SKX: # %bb.0:597; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]598; CHECK-SKX-NEXT: retq599;600; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrm:601; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:602; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]603; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq604;605; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrm:606; CHECK-ICX-BYPASS-DELAY: # %bb.0:607; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]608; CHECK-ICX-BYPASS-DELAY-NEXT: retq609;610; CHECK-V4-LABEL: transform_VUNPCKLPSYrm:611; CHECK-V4: # %bb.0:612; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]613; CHECK-V4-NEXT: retq614;615; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrm:616; CHECK-AVX512: # %bb.0:617; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]618; CHECK-AVX512-NEXT: retq619;620; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrm:621; CHECK-ZNVER4: # %bb.0:622; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]623; CHECK-ZNVER4-NEXT: retq624 %b = load <8 x float>, ptr %pb625 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>626 ret <8 x float> %shufp627}628 629define <8 x float> @transform_VUNPCKHPSYrm(<8 x float> %a, ptr %pb) nounwind {630; CHECK-SKX-LABEL: transform_VUNPCKHPSYrm:631; CHECK-SKX: # %bb.0:632; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]633; CHECK-SKX-NEXT: retq634;635; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrm:636; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:637; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]638; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq639;640; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrm:641; CHECK-ICX-BYPASS-DELAY: # %bb.0:642; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]643; CHECK-ICX-BYPASS-DELAY-NEXT: retq644;645; CHECK-V4-LABEL: transform_VUNPCKHPSYrm:646; CHECK-V4: # %bb.0:647; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]648; CHECK-V4-NEXT: retq649;650; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrm:651; CHECK-AVX512: # %bb.0:652; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]653; CHECK-AVX512-NEXT: retq654;655; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrm:656; CHECK-ZNVER4: # %bb.0:657; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]658; CHECK-ZNVER4-NEXT: retq659 %b = load <8 x float>, ptr %pb660 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>661 ret <8 x float> %shufp662}663 664define <4 x float> @transform_VUNPCKLPSrm(<4 x float> %a, ptr %pb) nounwind {665; CHECK-SKX-LABEL: transform_VUNPCKLPSrm:666; CHECK-SKX: # %bb.0:667; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]668; CHECK-SKX-NEXT: retq669;670; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrm:671; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:672; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]673; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq674;675; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrm:676; CHECK-ICX-BYPASS-DELAY: # %bb.0:677; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]678; CHECK-ICX-BYPASS-DELAY-NEXT: retq679;680; CHECK-V4-LABEL: transform_VUNPCKLPSrm:681; CHECK-V4: # %bb.0:682; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]683; CHECK-V4-NEXT: retq684;685; CHECK-AVX512-LABEL: transform_VUNPCKLPSrm:686; CHECK-AVX512: # %bb.0:687; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]688; CHECK-AVX512-NEXT: retq689;690; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrm:691; CHECK-ZNVER4: # %bb.0:692; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]693; CHECK-ZNVER4-NEXT: retq694 %b = load <4 x float>, ptr %pb695 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>696 ret <4 x float> %shufp697}698 699define <4 x float> @transform_VUNPCKHPSrm(<4 x float> %a, ptr %pb) nounwind {700; CHECK-SKX-LABEL: transform_VUNPCKHPSrm:701; CHECK-SKX: # %bb.0:702; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]703; CHECK-SKX-NEXT: retq704;705; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrm:706; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:707; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]708; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq709;710; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrm:711; CHECK-ICX-BYPASS-DELAY: # %bb.0:712; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]713; CHECK-ICX-BYPASS-DELAY-NEXT: retq714;715; CHECK-V4-LABEL: transform_VUNPCKHPSrm:716; CHECK-V4: # %bb.0:717; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]718; CHECK-V4-NEXT: retq719;720; CHECK-AVX512-LABEL: transform_VUNPCKHPSrm:721; CHECK-AVX512: # %bb.0:722; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]723; CHECK-AVX512-NEXT: retq724;725; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrm:726; CHECK-ZNVER4: # %bb.0:727; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]728; CHECK-ZNVER4-NEXT: retq729 %b = load <4 x float>, ptr %pb730 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>731 ret <4 x float> %shufp732}733 734define <16 x float> @transform_VUNPCKLPSZrmkz(<16 x float> %a, ptr %pb, i16 %mask_int) nounwind {735; CHECK-LABEL: transform_VUNPCKLPSZrmkz:736; CHECK: # %bb.0:737; CHECK-NEXT: kmovd %esi, %k1738; CHECK-NEXT: vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]739; CHECK-NEXT: retq740 %mask = bitcast i16 %mask_int to <16 x i1>741 %b = load <16 x float>, ptr %pb742 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>743 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer744 ret <16 x float> %res745}746 747define <16 x float> @transform_VUNPCKHPSZrmkz(<16 x float> %a, ptr %pb, i16 %mask_int) nounwind {748; CHECK-LABEL: transform_VUNPCKHPSZrmkz:749; CHECK: # %bb.0:750; CHECK-NEXT: kmovd %esi, %k1751; CHECK-NEXT: vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]752; CHECK-NEXT: retq753 %mask = bitcast i16 %mask_int to <16 x i1>754 %b = load <16 x float>, ptr %pb755 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>756 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer757 ret <16 x float> %res758}759 760define <8 x float> @transform_VUNPCKLPSYrmkz(<8 x float> %a, ptr %pb, i8 %mask_int) nounwind {761; CHECK-SKX-LABEL: transform_VUNPCKLPSYrmkz:762; CHECK-SKX: # %bb.0:763; CHECK-SKX-NEXT: kmovd %esi, %k1764; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]765; CHECK-SKX-NEXT: retq766;767; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmkz:768; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:769; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1770; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]771; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq772;773; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmkz:774; CHECK-ICX-BYPASS-DELAY: # %bb.0:775; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1776; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]777; CHECK-ICX-BYPASS-DELAY-NEXT: retq778;779; CHECK-V4-LABEL: transform_VUNPCKLPSYrmkz:780; CHECK-V4: # %bb.0:781; CHECK-V4-NEXT: kmovd %esi, %k1782; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]783; CHECK-V4-NEXT: retq784;785; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrmkz:786; CHECK-AVX512: # %bb.0:787; CHECK-AVX512-NEXT: kmovd %esi, %k1788; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]789; CHECK-AVX512-NEXT: retq790;791; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrmkz:792; CHECK-ZNVER4: # %bb.0:793; CHECK-ZNVER4-NEXT: kmovd %esi, %k1794; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]795; CHECK-ZNVER4-NEXT: retq796 %mask = bitcast i8 %mask_int to <8 x i1>797 %b = load <8 x float>, ptr %pb798 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>799 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer800 ret <8 x float> %res801}802 803define <8 x float> @transform_VUNPCKHPSYrmkz(<8 x float> %a, ptr %pb, i8 %mask_int) nounwind {804; CHECK-SKX-LABEL: transform_VUNPCKHPSYrmkz:805; CHECK-SKX: # %bb.0:806; CHECK-SKX-NEXT: kmovd %esi, %k1807; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]808; CHECK-SKX-NEXT: retq809;810; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmkz:811; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:812; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1813; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]814; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq815;816; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmkz:817; CHECK-ICX-BYPASS-DELAY: # %bb.0:818; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1819; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]820; CHECK-ICX-BYPASS-DELAY-NEXT: retq821;822; CHECK-V4-LABEL: transform_VUNPCKHPSYrmkz:823; CHECK-V4: # %bb.0:824; CHECK-V4-NEXT: kmovd %esi, %k1825; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]826; CHECK-V4-NEXT: retq827;828; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrmkz:829; CHECK-AVX512: # %bb.0:830; CHECK-AVX512-NEXT: kmovd %esi, %k1831; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]832; CHECK-AVX512-NEXT: retq833;834; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrmkz:835; CHECK-ZNVER4: # %bb.0:836; CHECK-ZNVER4-NEXT: kmovd %esi, %k1837; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]838; CHECK-ZNVER4-NEXT: retq839 %mask = bitcast i8 %mask_int to <8 x i1>840 %b = load <8 x float>, ptr %pb841 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>842 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer843 ret <8 x float> %res844}845 846define <4 x float> @transform_VUNPCKLPSrmkz(<4 x float> %a, ptr %pb, i4 %mask_int) nounwind {847; CHECK-SKX-LABEL: transform_VUNPCKLPSrmkz:848; CHECK-SKX: # %bb.0:849; CHECK-SKX-NEXT: kmovd %esi, %k1850; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]851; CHECK-SKX-NEXT: retq852;853; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmkz:854; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:855; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1856; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]857; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq858;859; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmkz:860; CHECK-ICX-BYPASS-DELAY: # %bb.0:861; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1862; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]863; CHECK-ICX-BYPASS-DELAY-NEXT: retq864;865; CHECK-V4-LABEL: transform_VUNPCKLPSrmkz:866; CHECK-V4: # %bb.0:867; CHECK-V4-NEXT: kmovd %esi, %k1868; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]869; CHECK-V4-NEXT: retq870;871; CHECK-AVX512-LABEL: transform_VUNPCKLPSrmkz:872; CHECK-AVX512: # %bb.0:873; CHECK-AVX512-NEXT: kmovd %esi, %k1874; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]875; CHECK-AVX512-NEXT: retq876;877; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrmkz:878; CHECK-ZNVER4: # %bb.0:879; CHECK-ZNVER4-NEXT: kmovd %esi, %k1880; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]881; CHECK-ZNVER4-NEXT: retq882 %mask = bitcast i4 %mask_int to <4 x i1>883 %b = load <4 x float>, ptr %pb884 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>885 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer886 ret <4 x float> %res887}888 889define <4 x float> @transform_VUNPCKHPSrmkz(<4 x float> %a, ptr %pb, i4 %mask_int) nounwind {890; CHECK-SKX-LABEL: transform_VUNPCKHPSrmkz:891; CHECK-SKX: # %bb.0:892; CHECK-SKX-NEXT: kmovd %esi, %k1893; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]894; CHECK-SKX-NEXT: retq895;896; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmkz:897; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:898; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1899; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]900; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq901;902; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmkz:903; CHECK-ICX-BYPASS-DELAY: # %bb.0:904; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1905; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]906; CHECK-ICX-BYPASS-DELAY-NEXT: retq907;908; CHECK-V4-LABEL: transform_VUNPCKHPSrmkz:909; CHECK-V4: # %bb.0:910; CHECK-V4-NEXT: kmovd %esi, %k1911; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]912; CHECK-V4-NEXT: retq913;914; CHECK-AVX512-LABEL: transform_VUNPCKHPSrmkz:915; CHECK-AVX512: # %bb.0:916; CHECK-AVX512-NEXT: kmovd %esi, %k1917; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]918; CHECK-AVX512-NEXT: retq919;920; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrmkz:921; CHECK-ZNVER4: # %bb.0:922; CHECK-ZNVER4-NEXT: kmovd %esi, %k1923; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]924; CHECK-ZNVER4-NEXT: retq925 %mask = bitcast i4 %mask_int to <4 x i1>926 %b = load <4 x float>, ptr %pb927 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>928 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer929 ret <4 x float> %res930}931 932define <16 x float> @transform_VUNPCKLPSZrmk(<16 x float> %a, ptr %pb, <16 x float> %c, i16 %mask_int) nounwind {933; CHECK-LABEL: transform_VUNPCKLPSZrmk:934; CHECK: # %bb.0:935; CHECK-NEXT: kmovd %esi, %k1936; CHECK-NEXT: vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]937; CHECK-NEXT: vmovaps %zmm1, %zmm0938; CHECK-NEXT: retq939 %mask = bitcast i16 %mask_int to <16 x i1>940 %b = load <16 x float>, ptr %pb941 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>942 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c943 ret <16 x float> %res944}945 946define <16 x float> @transform_VUNPCKHPSZrmk(<16 x float> %a, ptr %pb, <16 x float> %c, i16 %mask_int) nounwind {947; CHECK-LABEL: transform_VUNPCKHPSZrmk:948; CHECK: # %bb.0:949; CHECK-NEXT: kmovd %esi, %k1950; CHECK-NEXT: vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]951; CHECK-NEXT: vmovaps %zmm1, %zmm0952; CHECK-NEXT: retq953 %mask = bitcast i16 %mask_int to <16 x i1>954 %b = load <16 x float>, ptr %pb955 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>956 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %c957 ret <16 x float> %res958}959 960define <8 x float> @transform_VUNPCKLPSYrmk(<8 x float> %a, ptr %pb, <8 x float> %c, i8 %mask_int) nounwind {961; CHECK-SKX-LABEL: transform_VUNPCKLPSYrmk:962; CHECK-SKX: # %bb.0:963; CHECK-SKX-NEXT: kmovd %esi, %k1964; CHECK-SKX-NEXT: vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]965; CHECK-SKX-NEXT: vmovaps %ymm1, %ymm0966; CHECK-SKX-NEXT: retq967;968; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmk:969; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:970; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1971; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]972; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %ymm1, %ymm0973; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq974;975; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSYrmk:976; CHECK-ICX-BYPASS-DELAY: # %bb.0:977; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1978; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]979; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %ymm1, %ymm0980; CHECK-ICX-BYPASS-DELAY-NEXT: retq981;982; CHECK-V4-LABEL: transform_VUNPCKLPSYrmk:983; CHECK-V4: # %bb.0:984; CHECK-V4-NEXT: kmovd %esi, %k1985; CHECK-V4-NEXT: vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]986; CHECK-V4-NEXT: vmovaps %ymm1, %ymm0987; CHECK-V4-NEXT: retq988;989; CHECK-AVX512-LABEL: transform_VUNPCKLPSYrmk:990; CHECK-AVX512: # %bb.0:991; CHECK-AVX512-NEXT: kmovd %esi, %k1992; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]993; CHECK-AVX512-NEXT: vmovaps %ymm1, %ymm0994; CHECK-AVX512-NEXT: retq995;996; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSYrmk:997; CHECK-ZNVER4: # %bb.0:998; CHECK-ZNVER4-NEXT: kmovd %esi, %k1999; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]1000; CHECK-ZNVER4-NEXT: vmovaps %ymm1, %ymm01001; CHECK-ZNVER4-NEXT: retq1002 %mask = bitcast i8 %mask_int to <8 x i1>1003 %b = load <8 x float>, ptr %pb1004 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>1005 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c1006 ret <8 x float> %res1007}1008 1009define <8 x float> @transform_VUNPCKHPSYrmk(<8 x float> %a, ptr %pb, <8 x float> %c, i8 %mask_int) nounwind {1010; CHECK-SKX-LABEL: transform_VUNPCKHPSYrmk:1011; CHECK-SKX: # %bb.0:1012; CHECK-SKX-NEXT: kmovd %esi, %k11013; CHECK-SKX-NEXT: vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1014; CHECK-SKX-NEXT: vmovaps %ymm1, %ymm01015; CHECK-SKX-NEXT: retq1016;1017; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmk:1018; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1019; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11020; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1021; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %ymm1, %ymm01022; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1023;1024; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSYrmk:1025; CHECK-ICX-BYPASS-DELAY: # %bb.0:1026; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11027; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1028; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %ymm1, %ymm01029; CHECK-ICX-BYPASS-DELAY-NEXT: retq1030;1031; CHECK-V4-LABEL: transform_VUNPCKHPSYrmk:1032; CHECK-V4: # %bb.0:1033; CHECK-V4-NEXT: kmovd %esi, %k11034; CHECK-V4-NEXT: vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1035; CHECK-V4-NEXT: vmovaps %ymm1, %ymm01036; CHECK-V4-NEXT: retq1037;1038; CHECK-AVX512-LABEL: transform_VUNPCKHPSYrmk:1039; CHECK-AVX512: # %bb.0:1040; CHECK-AVX512-NEXT: kmovd %esi, %k11041; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1042; CHECK-AVX512-NEXT: vmovaps %ymm1, %ymm01043; CHECK-AVX512-NEXT: retq1044;1045; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSYrmk:1046; CHECK-ZNVER4: # %bb.0:1047; CHECK-ZNVER4-NEXT: kmovd %esi, %k11048; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1049; CHECK-ZNVER4-NEXT: vmovaps %ymm1, %ymm01050; CHECK-ZNVER4-NEXT: retq1051 %mask = bitcast i8 %mask_int to <8 x i1>1052 %b = load <8 x float>, ptr %pb1053 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1054 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %c1055 ret <8 x float> %res1056}1057 1058define <4 x float> @transform_VUNPCKLPSrmk(<4 x float> %a, ptr %pb, <4 x float> %c, i4 %mask_int) nounwind {1059; CHECK-SKX-LABEL: transform_VUNPCKLPSrmk:1060; CHECK-SKX: # %bb.0:1061; CHECK-SKX-NEXT: kmovd %esi, %k11062; CHECK-SKX-NEXT: vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1063; CHECK-SKX-NEXT: vmovaps %xmm1, %xmm01064; CHECK-SKX-NEXT: retq1065;1066; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmk:1067; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1068; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11069; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckldq {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1070; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %xmm1, %xmm01071; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1072;1073; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPSrmk:1074; CHECK-ICX-BYPASS-DELAY: # %bb.0:1075; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11076; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1077; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %xmm1, %xmm01078; CHECK-ICX-BYPASS-DELAY-NEXT: retq1079;1080; CHECK-V4-LABEL: transform_VUNPCKLPSrmk:1081; CHECK-V4: # %bb.0:1082; CHECK-V4-NEXT: kmovd %esi, %k11083; CHECK-V4-NEXT: vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1084; CHECK-V4-NEXT: vmovaps %xmm1, %xmm01085; CHECK-V4-NEXT: retq1086;1087; CHECK-AVX512-LABEL: transform_VUNPCKLPSrmk:1088; CHECK-AVX512: # %bb.0:1089; CHECK-AVX512-NEXT: kmovd %esi, %k11090; CHECK-AVX512-NEXT: vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1091; CHECK-AVX512-NEXT: vmovaps %xmm1, %xmm01092; CHECK-AVX512-NEXT: retq1093;1094; CHECK-ZNVER4-LABEL: transform_VUNPCKLPSrmk:1095; CHECK-ZNVER4: # %bb.0:1096; CHECK-ZNVER4-NEXT: kmovd %esi, %k11097; CHECK-ZNVER4-NEXT: vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]1098; CHECK-ZNVER4-NEXT: vmovaps %xmm1, %xmm01099; CHECK-ZNVER4-NEXT: retq1100 %mask = bitcast i4 %mask_int to <4 x i1>1101 %b = load <4 x float>, ptr %pb1102 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5>1103 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c1104 ret <4 x float> %res1105}1106 1107define <4 x float> @transform_VUNPCKHPSrmk(<4 x float> %a, ptr %pb, <4 x float> %c, i4 %mask_int) nounwind {1108; CHECK-SKX-LABEL: transform_VUNPCKHPSrmk:1109; CHECK-SKX: # %bb.0:1110; CHECK-SKX-NEXT: kmovd %esi, %k11111; CHECK-SKX-NEXT: vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1112; CHECK-SKX-NEXT: vmovaps %xmm1, %xmm01113; CHECK-SKX-NEXT: retq1114;1115; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmk:1116; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1117; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11118; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhdq {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1119; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovaps %xmm1, %xmm01120; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1121;1122; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPSrmk:1123; CHECK-ICX-BYPASS-DELAY: # %bb.0:1124; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11125; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1126; CHECK-ICX-BYPASS-DELAY-NEXT: vmovaps %xmm1, %xmm01127; CHECK-ICX-BYPASS-DELAY-NEXT: retq1128;1129; CHECK-V4-LABEL: transform_VUNPCKHPSrmk:1130; CHECK-V4: # %bb.0:1131; CHECK-V4-NEXT: kmovd %esi, %k11132; CHECK-V4-NEXT: vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1133; CHECK-V4-NEXT: vmovaps %xmm1, %xmm01134; CHECK-V4-NEXT: retq1135;1136; CHECK-AVX512-LABEL: transform_VUNPCKHPSrmk:1137; CHECK-AVX512: # %bb.0:1138; CHECK-AVX512-NEXT: kmovd %esi, %k11139; CHECK-AVX512-NEXT: vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1140; CHECK-AVX512-NEXT: vmovaps %xmm1, %xmm01141; CHECK-AVX512-NEXT: retq1142;1143; CHECK-ZNVER4-LABEL: transform_VUNPCKHPSrmk:1144; CHECK-ZNVER4: # %bb.0:1145; CHECK-ZNVER4-NEXT: kmovd %esi, %k11146; CHECK-ZNVER4-NEXT: vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1147; CHECK-ZNVER4-NEXT: vmovaps %xmm1, %xmm01148; CHECK-ZNVER4-NEXT: retq1149 %mask = bitcast i4 %mask_int to <4 x i1>1150 %b = load <4 x float>, ptr %pb1151 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1152 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %c1153 ret <4 x float> %res1154}1155;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1156; CHECK-ICX: {{.*}}1157