brintos

brintos / llvm-project-archived public Read only

0
0
Text · 54.6 KiB · 96155f0 Raw
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