1158 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 10 11define <16 x float> @transform_VUNPCKLPDZrr(<16 x float> %a, <16 x float> %b) nounwind {12; CHECK-LABEL: transform_VUNPCKLPDZrr:13; CHECK: # %bb.0:14; CHECK-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]15; CHECK-NEXT: retq16 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 4, i32 5, i32 20, i32 21, i32 8, i32 9, i32 24, i32 25, i32 12, i32 13, i32 28, i32 29>17 ret <16 x float> %shufp18}19 20define <16 x float> @transform_VUNPCKHPDZrr(<16 x float> %a, <16 x float> %b) nounwind {21; CHECK-LABEL: transform_VUNPCKHPDZrr:22; CHECK: # %bb.0:23; CHECK-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]24; CHECK-NEXT: retq25 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 3, i32 18, i32 19, i32 6, i32 7, i32 22, i32 23, i32 10, i32 11, i32 26, i32 27, i32 14, i32 15, i32 30, i32 31>26 ret <16 x float> %shufp27}28 29define <8 x float> @transform_VUNPCKLPDYrr(<8 x float> %a, <8 x float> %b) nounwind {30; CHECK-SKX-LABEL: transform_VUNPCKLPDYrr:31; CHECK-SKX: # %bb.0:32; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]33; CHECK-SKX-NEXT: retq34;35; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrr:36; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:37; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]38; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq39;40; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrr:41; CHECK-ICX-BYPASS-DELAY: # %bb.0:42; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]43; CHECK-ICX-BYPASS-DELAY-NEXT: retq44;45; CHECK-V4-LABEL: transform_VUNPCKLPDYrr:46; CHECK-V4: # %bb.0:47; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]48; CHECK-V4-NEXT: retq49;50; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrr:51; CHECK-AVX512: # %bb.0:52; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]53; CHECK-AVX512-NEXT: retq54;55; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrr:56; CHECK-ZNVER4: # %bb.0:57; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]58; CHECK-ZNVER4-NEXT: retq59 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 12, i32 13>60 ret <8 x float> %shufp61}62 63define <8 x float> @transform_VUNPCKHPDYrr(<8 x float> %a, <8 x float> %b) nounwind {64; CHECK-SKX-LABEL: transform_VUNPCKHPDYrr:65; CHECK-SKX: # %bb.0:66; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]67; CHECK-SKX-NEXT: retq68;69; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrr:70; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:71; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]72; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq73;74; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrr:75; CHECK-ICX-BYPASS-DELAY: # %bb.0:76; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]77; CHECK-ICX-BYPASS-DELAY-NEXT: retq78;79; CHECK-V4-LABEL: transform_VUNPCKHPDYrr:80; CHECK-V4: # %bb.0:81; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]82; CHECK-V4-NEXT: retq83;84; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrr:85; CHECK-AVX512: # %bb.0:86; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]87; CHECK-AVX512-NEXT: retq88;89; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrr:90; CHECK-ZNVER4: # %bb.0:91; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]92; CHECK-ZNVER4-NEXT: retq93 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 3, i32 10, i32 11, i32 6, i32 7, i32 14, i32 15>94 ret <8 x float> %shufp95}96 97define <4 x float> @transform_VUNPCKLPDrr(<4 x float> %a, <4 x float> %b) nounwind {98; CHECK-SKX-LABEL: transform_VUNPCKLPDrr:99; CHECK-SKX: # %bb.0:100; CHECK-SKX-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]101; CHECK-SKX-NEXT: retq102;103; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrr:104; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:105; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]106; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq107;108; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrr:109; CHECK-ICX-BYPASS-DELAY: # %bb.0:110; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[0],xmm1[0]111; CHECK-ICX-BYPASS-DELAY-NEXT: retq112;113; CHECK-V4-LABEL: transform_VUNPCKLPDrr:114; CHECK-V4: # %bb.0:115; CHECK-V4-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]116; CHECK-V4-NEXT: retq117;118; CHECK-AVX512-LABEL: transform_VUNPCKLPDrr:119; CHECK-AVX512: # %bb.0:120; CHECK-AVX512-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]121; CHECK-AVX512-NEXT: retq122;123; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrr:124; CHECK-ZNVER4: # %bb.0:125; CHECK-ZNVER4-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]126; CHECK-ZNVER4-NEXT: retq127 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>128 ret <4 x float> %shufp129}130 131define <4 x float> @transform_VUNPCKHPDrr(<4 x float> %a, <4 x float> %b) nounwind {132; CHECK-SKX-LABEL: transform_VUNPCKHPDrr:133; CHECK-SKX: # %bb.0:134; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]135; CHECK-SKX-NEXT: retq136;137; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrr:138; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:139; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1]140; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq141;142; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrr:143; CHECK-ICX-BYPASS-DELAY: # %bb.0:144; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]145; CHECK-ICX-BYPASS-DELAY-NEXT: retq146;147; CHECK-V4-LABEL: transform_VUNPCKHPDrr:148; CHECK-V4: # %bb.0:149; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]150; CHECK-V4-NEXT: retq151;152; CHECK-AVX512-LABEL: transform_VUNPCKHPDrr:153; CHECK-AVX512: # %bb.0:154; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]155; CHECK-AVX512-NEXT: retq156;157; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrr:158; CHECK-ZNVER4: # %bb.0:159; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]160; CHECK-ZNVER4-NEXT: retq161 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 3, i32 6, i32 7>162 ret <4 x float> %shufp163}164 165define <8 x double> @transform_VUNPCKLPDZrrkz(<8 x double> %a, <8 x double> %b, i8 %mask_int) nounwind {166; CHECK-LABEL: transform_VUNPCKLPDZrrkz:167; CHECK: # %bb.0:168; CHECK-NEXT: kmovd %edi, %k1169; CHECK-NEXT: vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]170; CHECK-NEXT: retq171 %mask = bitcast i8 %mask_int to <8 x i1>172 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>173 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> zeroinitializer174 ret <8 x double> %res175}176 177define <8 x double> @transform_VUNPCKHPDZrrkz(<8 x double> %a, <8 x double> %b, i8 %mask_int) nounwind {178; CHECK-LABEL: transform_VUNPCKHPDZrrkz:179; CHECK: # %bb.0:180; CHECK-NEXT: kmovd %edi, %k1181; CHECK-NEXT: vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]182; CHECK-NEXT: retq183 %mask = bitcast i8 %mask_int to <8 x i1>184 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>185 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> zeroinitializer186 ret <8 x double> %res187}188 189define <4 x double> @transform_VUNPCKLPDYrrkz(<4 x double> %a, <4 x double> %b, i4 %mask_int) nounwind {190; CHECK-SKX-LABEL: transform_VUNPCKLPDYrrkz:191; CHECK-SKX: # %bb.0:192; CHECK-SKX-NEXT: kmovd %edi, %k1193; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]194; CHECK-SKX-NEXT: retq195;196; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrrkz:197; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:198; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1199; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]200; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq201;202; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrrkz:203; CHECK-ICX-BYPASS-DELAY: # %bb.0:204; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1205; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]206; CHECK-ICX-BYPASS-DELAY-NEXT: retq207;208; CHECK-V4-LABEL: transform_VUNPCKLPDYrrkz:209; CHECK-V4: # %bb.0:210; CHECK-V4-NEXT: kmovd %edi, %k1211; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]212; CHECK-V4-NEXT: retq213;214; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrrkz:215; CHECK-AVX512: # %bb.0:216; CHECK-AVX512-NEXT: kmovd %edi, %k1217; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]218; CHECK-AVX512-NEXT: retq219;220; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrrkz:221; CHECK-ZNVER4: # %bb.0:222; CHECK-ZNVER4-NEXT: kmovd %edi, %k1223; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]224; CHECK-ZNVER4-NEXT: retq225 %mask = bitcast i4 %mask_int to <4 x i1>226 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>227 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> zeroinitializer228 ret <4 x double> %res229}230 231define <4 x double> @transform_VUNPCKHPDYrrkz(<4 x double> %a, <4 x double> %b, i4 %mask_int) nounwind {232; CHECK-SKX-LABEL: transform_VUNPCKHPDYrrkz:233; CHECK-SKX: # %bb.0:234; CHECK-SKX-NEXT: kmovd %edi, %k1235; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]236; CHECK-SKX-NEXT: retq237;238; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrrkz:239; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:240; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1241; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]242; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq243;244; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrrkz:245; CHECK-ICX-BYPASS-DELAY: # %bb.0:246; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1247; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]248; CHECK-ICX-BYPASS-DELAY-NEXT: retq249;250; CHECK-V4-LABEL: transform_VUNPCKHPDYrrkz:251; CHECK-V4: # %bb.0:252; CHECK-V4-NEXT: kmovd %edi, %k1253; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]254; CHECK-V4-NEXT: retq255;256; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrrkz:257; CHECK-AVX512: # %bb.0:258; CHECK-AVX512-NEXT: kmovd %edi, %k1259; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]260; CHECK-AVX512-NEXT: retq261;262; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrrkz:263; CHECK-ZNVER4: # %bb.0:264; CHECK-ZNVER4-NEXT: kmovd %edi, %k1265; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]266; CHECK-ZNVER4-NEXT: retq267 %mask = bitcast i4 %mask_int to <4 x i1>268 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>269 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> zeroinitializer270 ret <4 x double> %res271}272 273define <2 x double> @transform_VUNPCKLPDrrkz(<2 x double> %a, <2 x double> %b, i2 %mask_int) nounwind {274; CHECK-SKX-LABEL: transform_VUNPCKLPDrrkz:275; CHECK-SKX: # %bb.0:276; CHECK-SKX-NEXT: kmovd %edi, %k1277; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]278; CHECK-SKX-NEXT: retq279;280; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrrkz:281; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:282; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1283; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]284; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq285;286; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrrkz:287; CHECK-ICX-BYPASS-DELAY: # %bb.0:288; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1289; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]290; CHECK-ICX-BYPASS-DELAY-NEXT: retq291;292; CHECK-V4-LABEL: transform_VUNPCKLPDrrkz:293; CHECK-V4: # %bb.0:294; CHECK-V4-NEXT: kmovd %edi, %k1295; CHECK-V4-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]296; CHECK-V4-NEXT: retq297;298; CHECK-AVX512-LABEL: transform_VUNPCKLPDrrkz:299; CHECK-AVX512: # %bb.0:300; CHECK-AVX512-NEXT: kmovd %edi, %k1301; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]302; CHECK-AVX512-NEXT: retq303;304; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrrkz:305; CHECK-ZNVER4: # %bb.0:306; CHECK-ZNVER4-NEXT: kmovd %edi, %k1307; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]308; CHECK-ZNVER4-NEXT: retq309 %mask = bitcast i2 %mask_int to <2 x i1>310 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>311 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> zeroinitializer312 ret <2 x double> %res313}314 315define <2 x double> @transform_VUNPCKHPDrrkz(<2 x double> %a, <2 x double> %b, i2 %mask_int) nounwind {316; CHECK-SKX-LABEL: transform_VUNPCKHPDrrkz:317; CHECK-SKX: # %bb.0:318; CHECK-SKX-NEXT: kmovd %edi, %k1319; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]320; CHECK-SKX-NEXT: retq321;322; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrrkz:323; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:324; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1325; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]326; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq327;328; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrrkz:329; CHECK-ICX-BYPASS-DELAY: # %bb.0:330; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1331; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]332; CHECK-ICX-BYPASS-DELAY-NEXT: retq333;334; CHECK-V4-LABEL: transform_VUNPCKHPDrrkz:335; CHECK-V4: # %bb.0:336; CHECK-V4-NEXT: kmovd %edi, %k1337; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]338; CHECK-V4-NEXT: retq339;340; CHECK-AVX512-LABEL: transform_VUNPCKHPDrrkz:341; CHECK-AVX512: # %bb.0:342; CHECK-AVX512-NEXT: kmovd %edi, %k1343; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]344; CHECK-AVX512-NEXT: retq345;346; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrrkz:347; CHECK-ZNVER4: # %bb.0:348; CHECK-ZNVER4-NEXT: kmovd %edi, %k1349; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]350; CHECK-ZNVER4-NEXT: retq351 %mask = bitcast i2 %mask_int to <2 x i1>352 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>353 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> zeroinitializer354 ret <2 x double> %res355}356 357define <8 x double> @transform_VUNPCKLPDZrrk(<8 x double> %a, <8 x double> %b, <8 x double> %c, i8 %mask_int) nounwind {358; CHECK-LABEL: transform_VUNPCKLPDZrrk:359; CHECK: # %bb.0:360; CHECK-NEXT: kmovd %edi, %k1361; CHECK-NEXT: vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]362; CHECK-NEXT: vmovapd %zmm2, %zmm0363; CHECK-NEXT: retq364 %mask = bitcast i8 %mask_int to <8 x i1>365 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>366 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> %c367 ret <8 x double> %res368}369 370define <8 x double> @transform_VUNPCKHPDZrrk(<8 x double> %a, <8 x double> %b, <8 x double> %c, i8 %mask_int) nounwind {371; CHECK-LABEL: transform_VUNPCKHPDZrrk:372; CHECK: # %bb.0:373; CHECK-NEXT: kmovd %edi, %k1374; CHECK-NEXT: vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]375; CHECK-NEXT: vmovapd %zmm2, %zmm0376; CHECK-NEXT: retq377 %mask = bitcast i8 %mask_int to <8 x i1>378 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>379 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> %c380 ret <8 x double> %res381}382 383define <4 x double> @transform_VUNPCKLPDYrrk(<4 x double> %a, <4 x double> %b, <4 x double> %c, i4 %mask_int) nounwind {384; CHECK-SKX-LABEL: transform_VUNPCKLPDYrrk:385; CHECK-SKX: # %bb.0:386; CHECK-SKX-NEXT: kmovd %edi, %k1387; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]388; CHECK-SKX-NEXT: vmovapd %ymm2, %ymm0389; CHECK-SKX-NEXT: retq390;391; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrrk:392; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:393; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1394; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]395; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %ymm2, %ymm0396; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq397;398; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrrk:399; CHECK-ICX-BYPASS-DELAY: # %bb.0:400; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1401; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]402; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %ymm2, %ymm0403; CHECK-ICX-BYPASS-DELAY-NEXT: retq404;405; CHECK-V4-LABEL: transform_VUNPCKLPDYrrk:406; CHECK-V4: # %bb.0:407; CHECK-V4-NEXT: kmovd %edi, %k1408; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]409; CHECK-V4-NEXT: vmovapd %ymm2, %ymm0410; CHECK-V4-NEXT: retq411;412; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrrk:413; CHECK-AVX512: # %bb.0:414; CHECK-AVX512-NEXT: kmovd %edi, %k1415; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]416; CHECK-AVX512-NEXT: vmovapd %ymm2, %ymm0417; CHECK-AVX512-NEXT: retq418;419; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrrk:420; CHECK-ZNVER4: # %bb.0:421; CHECK-ZNVER4-NEXT: kmovd %edi, %k1422; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]423; CHECK-ZNVER4-NEXT: vmovapd %ymm2, %ymm0424; CHECK-ZNVER4-NEXT: retq425 %mask = bitcast i4 %mask_int to <4 x i1>426 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>427 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> %c428 ret <4 x double> %res429}430 431define <4 x double> @transform_VUNPCKHPDYrrk(<4 x double> %a, <4 x double> %b, <4 x double> %c, i4 %mask_int) nounwind {432; CHECK-SKX-LABEL: transform_VUNPCKHPDYrrk:433; CHECK-SKX: # %bb.0:434; CHECK-SKX-NEXT: kmovd %edi, %k1435; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]436; CHECK-SKX-NEXT: vmovapd %ymm2, %ymm0437; CHECK-SKX-NEXT: retq438;439; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrrk:440; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:441; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1442; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]443; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %ymm2, %ymm0444; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq445;446; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrrk:447; CHECK-ICX-BYPASS-DELAY: # %bb.0:448; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1449; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]450; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %ymm2, %ymm0451; CHECK-ICX-BYPASS-DELAY-NEXT: retq452;453; CHECK-V4-LABEL: transform_VUNPCKHPDYrrk:454; CHECK-V4: # %bb.0:455; CHECK-V4-NEXT: kmovd %edi, %k1456; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]457; CHECK-V4-NEXT: vmovapd %ymm2, %ymm0458; CHECK-V4-NEXT: retq459;460; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrrk:461; CHECK-AVX512: # %bb.0:462; CHECK-AVX512-NEXT: kmovd %edi, %k1463; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]464; CHECK-AVX512-NEXT: vmovapd %ymm2, %ymm0465; CHECK-AVX512-NEXT: retq466;467; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrrk:468; CHECK-ZNVER4: # %bb.0:469; CHECK-ZNVER4-NEXT: kmovd %edi, %k1470; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]471; CHECK-ZNVER4-NEXT: vmovapd %ymm2, %ymm0472; CHECK-ZNVER4-NEXT: retq473 %mask = bitcast i4 %mask_int to <4 x i1>474 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>475 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> %c476 ret <4 x double> %res477}478 479define <2 x double> @transform_VUNPCKLPDrrk(<2 x double> %a, <2 x double> %b, <2 x double> %c, i2 %mask_int) nounwind {480; CHECK-SKX-LABEL: transform_VUNPCKLPDrrk:481; CHECK-SKX: # %bb.0:482; CHECK-SKX-NEXT: kmovd %edi, %k1483; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]484; CHECK-SKX-NEXT: vmovapd %xmm2, %xmm0485; CHECK-SKX-NEXT: retq486;487; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrrk:488; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:489; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1490; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]491; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %xmm2, %xmm0492; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq493;494; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrrk:495; CHECK-ICX-BYPASS-DELAY: # %bb.0:496; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1497; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]498; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %xmm2, %xmm0499; CHECK-ICX-BYPASS-DELAY-NEXT: retq500;501; CHECK-V4-LABEL: transform_VUNPCKLPDrrk:502; CHECK-V4: # %bb.0:503; CHECK-V4-NEXT: kmovd %edi, %k1504; CHECK-V4-NEXT: vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]505; CHECK-V4-NEXT: vmovapd %xmm2, %xmm0506; CHECK-V4-NEXT: retq507;508; CHECK-AVX512-LABEL: transform_VUNPCKLPDrrk:509; CHECK-AVX512: # %bb.0:510; CHECK-AVX512-NEXT: kmovd %edi, %k1511; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]512; CHECK-AVX512-NEXT: vmovapd %xmm2, %xmm0513; CHECK-AVX512-NEXT: retq514;515; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrrk:516; CHECK-ZNVER4: # %bb.0:517; CHECK-ZNVER4-NEXT: kmovd %edi, %k1518; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]519; CHECK-ZNVER4-NEXT: vmovapd %xmm2, %xmm0520; CHECK-ZNVER4-NEXT: retq521 %mask = bitcast i2 %mask_int to <2 x i1>522 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>523 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> %c524 ret <2 x double> %res525}526 527define <2 x double> @transform_VUNPCKHPDrrk(<2 x double> %a, <2 x double> %b, <2 x double> %c, i2 %mask_int) nounwind {528; CHECK-SKX-LABEL: transform_VUNPCKHPDrrk:529; CHECK-SKX: # %bb.0:530; CHECK-SKX-NEXT: kmovd %edi, %k1531; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]532; CHECK-SKX-NEXT: vmovapd %xmm2, %xmm0533; CHECK-SKX-NEXT: retq534;535; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrrk:536; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:537; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %edi, %k1538; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]539; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %xmm2, %xmm0540; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq541;542; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrrk:543; CHECK-ICX-BYPASS-DELAY: # %bb.0:544; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %edi, %k1545; CHECK-ICX-BYPASS-DELAY-NEXT: vshufpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]546; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %xmm2, %xmm0547; CHECK-ICX-BYPASS-DELAY-NEXT: retq548;549; CHECK-V4-LABEL: transform_VUNPCKHPDrrk:550; CHECK-V4: # %bb.0:551; CHECK-V4-NEXT: kmovd %edi, %k1552; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]553; CHECK-V4-NEXT: vmovapd %xmm2, %xmm0554; CHECK-V4-NEXT: retq555;556; CHECK-AVX512-LABEL: transform_VUNPCKHPDrrk:557; CHECK-AVX512: # %bb.0:558; CHECK-AVX512-NEXT: kmovd %edi, %k1559; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]560; CHECK-AVX512-NEXT: vmovapd %xmm2, %xmm0561; CHECK-AVX512-NEXT: retq562;563; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrrk:564; CHECK-ZNVER4: # %bb.0:565; CHECK-ZNVER4-NEXT: kmovd %edi, %k1566; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]567; CHECK-ZNVER4-NEXT: vmovapd %xmm2, %xmm0568; CHECK-ZNVER4-NEXT: retq569 %mask = bitcast i2 %mask_int to <2 x i1>570 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>571 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> %c572 ret <2 x double> %res573}574 575define <16 x float> @transform_VUNPCKLPDZrm(<16 x float> %a, ptr %pb) nounwind {576; CHECK-LABEL: transform_VUNPCKLPDZrm:577; CHECK: # %bb.0:578; CHECK-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]579; CHECK-NEXT: retq580 %b = load <16 x float>, ptr %pb581 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 0, i32 1, i32 16, i32 17, i32 4, i32 5, i32 20, i32 21, i32 8, i32 9, i32 24, i32 25, i32 12, i32 13, i32 28, i32 29>582 ret <16 x float> %shufp583}584 585define <16 x float> @transform_VUNPCKHPDZrm(<16 x float> %a, ptr %pb) nounwind {586; CHECK-LABEL: transform_VUNPCKHPDZrm:587; CHECK: # %bb.0:588; CHECK-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]589; CHECK-NEXT: retq590 %b = load <16 x float>, ptr %pb591 %shufp = shufflevector <16 x float> %a, <16 x float> %b, <16 x i32> <i32 2, i32 3, i32 18, i32 19, i32 6, i32 7, i32 22, i32 23, i32 10, i32 11, i32 26, i32 27, i32 14, i32 15, i32 30, i32 31>592 ret <16 x float> %shufp593}594 595define <8 x float> @transform_VUNPCKLPDYrm(<8 x float> %a, ptr %pb) nounwind {596; CHECK-SKX-LABEL: transform_VUNPCKLPDYrm:597; CHECK-SKX: # %bb.0:598; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]599; CHECK-SKX-NEXT: retq600;601; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrm:602; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:603; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]604; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq605;606; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrm:607; CHECK-ICX-BYPASS-DELAY: # %bb.0:608; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]609; CHECK-ICX-BYPASS-DELAY-NEXT: retq610;611; CHECK-V4-LABEL: transform_VUNPCKLPDYrm:612; CHECK-V4: # %bb.0:613; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]614; CHECK-V4-NEXT: retq615;616; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrm:617; CHECK-AVX512: # %bb.0:618; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]619; CHECK-AVX512-NEXT: retq620;621; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrm:622; CHECK-ZNVER4: # %bb.0:623; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]624; CHECK-ZNVER4-NEXT: retq625 %b = load <8 x float>, ptr %pb626 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 12, i32 13>627 ret <8 x float> %shufp628}629 630define <8 x float> @transform_VUNPCKHPDYrm(<8 x float> %a, ptr %pb) nounwind {631; CHECK-SKX-LABEL: transform_VUNPCKHPDYrm:632; CHECK-SKX: # %bb.0:633; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]634; CHECK-SKX-NEXT: retq635;636; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrm:637; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:638; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]639; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq640;641; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrm:642; CHECK-ICX-BYPASS-DELAY: # %bb.0:643; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]644; CHECK-ICX-BYPASS-DELAY-NEXT: retq645;646; CHECK-V4-LABEL: transform_VUNPCKHPDYrm:647; CHECK-V4: # %bb.0:648; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]649; CHECK-V4-NEXT: retq650;651; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrm:652; CHECK-AVX512: # %bb.0:653; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]654; CHECK-AVX512-NEXT: retq655;656; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrm:657; CHECK-ZNVER4: # %bb.0:658; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]659; CHECK-ZNVER4-NEXT: retq660 %b = load <8 x float>, ptr %pb661 %shufp = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 2, i32 3, i32 10, i32 11, i32 6, i32 7, i32 14, i32 15>662 ret <8 x float> %shufp663}664 665define <4 x float> @transform_VUNPCKLPDrm(<4 x float> %a, ptr %pb) nounwind {666; CHECK-SKX-LABEL: transform_VUNPCKLPDrm:667; CHECK-SKX: # %bb.0:668; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]669; CHECK-SKX-NEXT: retq670;671; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrm:672; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:673; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],mem[0]674; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq675;676; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrm:677; CHECK-ICX-BYPASS-DELAY: # %bb.0:678; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]679; CHECK-ICX-BYPASS-DELAY-NEXT: retq680;681; CHECK-V4-LABEL: transform_VUNPCKLPDrm:682; CHECK-V4: # %bb.0:683; CHECK-V4-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]684; CHECK-V4-NEXT: retq685;686; CHECK-AVX512-LABEL: transform_VUNPCKLPDrm:687; CHECK-AVX512: # %bb.0:688; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]689; CHECK-AVX512-NEXT: retq690;691; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrm:692; CHECK-ZNVER4: # %bb.0:693; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]694; CHECK-ZNVER4-NEXT: retq695 %b = load <4 x float>, ptr %pb696 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5>697 ret <4 x float> %shufp698}699 700define <4 x float> @transform_VUNPCKHPDrm(<4 x float> %a, ptr %pb) nounwind {701; CHECK-SKX-LABEL: transform_VUNPCKHPDrm:702; CHECK-SKX: # %bb.0:703; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]704; CHECK-SKX-NEXT: retq705;706; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrm:707; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:708; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],mem[1]709; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq710;711; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrm:712; CHECK-ICX-BYPASS-DELAY: # %bb.0:713; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]714; CHECK-ICX-BYPASS-DELAY-NEXT: retq715;716; CHECK-V4-LABEL: transform_VUNPCKHPDrm:717; CHECK-V4: # %bb.0:718; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]719; CHECK-V4-NEXT: retq720;721; CHECK-AVX512-LABEL: transform_VUNPCKHPDrm:722; CHECK-AVX512: # %bb.0:723; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]724; CHECK-AVX512-NEXT: retq725;726; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrm:727; CHECK-ZNVER4: # %bb.0:728; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]729; CHECK-ZNVER4-NEXT: retq730 %b = load <4 x float>, ptr %pb731 %shufp = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 2, i32 3, i32 6, i32 7>732 ret <4 x float> %shufp733}734 735define <8 x double> @transform_VUNPCKLPDZrmkz(<8 x double> %a, ptr %pb, i8 %mask_int) nounwind {736; CHECK-LABEL: transform_VUNPCKLPDZrmkz:737; CHECK: # %bb.0:738; CHECK-NEXT: kmovd %esi, %k1739; CHECK-NEXT: vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]740; CHECK-NEXT: retq741 %mask = bitcast i8 %mask_int to <8 x i1>742 %b = load <8 x double>, ptr %pb743 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>744 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> zeroinitializer745 ret <8 x double> %res746}747 748define <8 x double> @transform_VUNPCKHPDZrmkz(<8 x double> %a, ptr %pb, i8 %mask_int) nounwind {749; CHECK-LABEL: transform_VUNPCKHPDZrmkz:750; CHECK: # %bb.0:751; CHECK-NEXT: kmovd %esi, %k1752; CHECK-NEXT: vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]753; CHECK-NEXT: retq754 %mask = bitcast i8 %mask_int to <8 x i1>755 %b = load <8 x double>, ptr %pb756 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>757 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> zeroinitializer758 ret <8 x double> %res759}760 761define <4 x double> @transform_VUNPCKLPDYrmkz(<4 x double> %a, ptr %pb, i4 %mask_int) nounwind {762; CHECK-SKX-LABEL: transform_VUNPCKLPDYrmkz:763; CHECK-SKX: # %bb.0:764; CHECK-SKX-NEXT: kmovd %esi, %k1765; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]766; CHECK-SKX-NEXT: retq767;768; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrmkz:769; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:770; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1771; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]772; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq773;774; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrmkz:775; CHECK-ICX-BYPASS-DELAY: # %bb.0:776; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1777; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]778; CHECK-ICX-BYPASS-DELAY-NEXT: retq779;780; CHECK-V4-LABEL: transform_VUNPCKLPDYrmkz:781; CHECK-V4: # %bb.0:782; CHECK-V4-NEXT: kmovd %esi, %k1783; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]784; CHECK-V4-NEXT: retq785;786; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrmkz:787; CHECK-AVX512: # %bb.0:788; CHECK-AVX512-NEXT: kmovd %esi, %k1789; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]790; CHECK-AVX512-NEXT: retq791;792; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrmkz:793; CHECK-ZNVER4: # %bb.0:794; CHECK-ZNVER4-NEXT: kmovd %esi, %k1795; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]796; CHECK-ZNVER4-NEXT: retq797 %mask = bitcast i4 %mask_int to <4 x i1>798 %b = load <4 x double>, ptr %pb799 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>800 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> zeroinitializer801 ret <4 x double> %res802}803 804define <4 x double> @transform_VUNPCKHPDYrmkz(<4 x double> %a, ptr %pb, i4 %mask_int) nounwind {805; CHECK-SKX-LABEL: transform_VUNPCKHPDYrmkz:806; CHECK-SKX: # %bb.0:807; CHECK-SKX-NEXT: kmovd %esi, %k1808; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]809; CHECK-SKX-NEXT: retq810;811; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrmkz:812; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:813; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1814; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]815; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq816;817; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrmkz:818; CHECK-ICX-BYPASS-DELAY: # %bb.0:819; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1820; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]821; CHECK-ICX-BYPASS-DELAY-NEXT: retq822;823; CHECK-V4-LABEL: transform_VUNPCKHPDYrmkz:824; CHECK-V4: # %bb.0:825; CHECK-V4-NEXT: kmovd %esi, %k1826; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]827; CHECK-V4-NEXT: retq828;829; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrmkz:830; CHECK-AVX512: # %bb.0:831; CHECK-AVX512-NEXT: kmovd %esi, %k1832; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]833; CHECK-AVX512-NEXT: retq834;835; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrmkz:836; CHECK-ZNVER4: # %bb.0:837; CHECK-ZNVER4-NEXT: kmovd %esi, %k1838; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]839; CHECK-ZNVER4-NEXT: retq840 %mask = bitcast i4 %mask_int to <4 x i1>841 %b = load <4 x double>, ptr %pb842 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>843 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> zeroinitializer844 ret <4 x double> %res845}846 847define <2 x double> @transform_VUNPCKLPDrmkz(<2 x double> %a, ptr %pb, i2 %mask_int) nounwind {848; CHECK-SKX-LABEL: transform_VUNPCKLPDrmkz:849; CHECK-SKX: # %bb.0:850; CHECK-SKX-NEXT: kmovd %esi, %k1851; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]852; CHECK-SKX-NEXT: retq853;854; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrmkz:855; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:856; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1857; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]858; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq859;860; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrmkz:861; CHECK-ICX-BYPASS-DELAY: # %bb.0:862; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1863; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]864; CHECK-ICX-BYPASS-DELAY-NEXT: retq865;866; CHECK-V4-LABEL: transform_VUNPCKLPDrmkz:867; CHECK-V4: # %bb.0:868; CHECK-V4-NEXT: kmovd %esi, %k1869; CHECK-V4-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]870; CHECK-V4-NEXT: retq871;872; CHECK-AVX512-LABEL: transform_VUNPCKLPDrmkz:873; CHECK-AVX512: # %bb.0:874; CHECK-AVX512-NEXT: kmovd %esi, %k1875; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]876; CHECK-AVX512-NEXT: retq877;878; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrmkz:879; CHECK-ZNVER4: # %bb.0:880; CHECK-ZNVER4-NEXT: kmovd %esi, %k1881; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]882; CHECK-ZNVER4-NEXT: retq883 %mask = bitcast i2 %mask_int to <2 x i1>884 %b = load <2 x double>, ptr %pb885 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>886 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> zeroinitializer887 ret <2 x double> %res888}889 890define <2 x double> @transform_VUNPCKHPDrmkz(<2 x double> %a, ptr %pb, i2 %mask_int) nounwind {891; CHECK-SKX-LABEL: transform_VUNPCKHPDrmkz:892; CHECK-SKX: # %bb.0:893; CHECK-SKX-NEXT: kmovd %esi, %k1894; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]895; CHECK-SKX-NEXT: retq896;897; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrmkz:898; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:899; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1900; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]901; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq902;903; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrmkz:904; CHECK-ICX-BYPASS-DELAY: # %bb.0:905; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1906; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]907; CHECK-ICX-BYPASS-DELAY-NEXT: retq908;909; CHECK-V4-LABEL: transform_VUNPCKHPDrmkz:910; CHECK-V4: # %bb.0:911; CHECK-V4-NEXT: kmovd %esi, %k1912; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]913; CHECK-V4-NEXT: retq914;915; CHECK-AVX512-LABEL: transform_VUNPCKHPDrmkz:916; CHECK-AVX512: # %bb.0:917; CHECK-AVX512-NEXT: kmovd %esi, %k1918; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]919; CHECK-AVX512-NEXT: retq920;921; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrmkz:922; CHECK-ZNVER4: # %bb.0:923; CHECK-ZNVER4-NEXT: kmovd %esi, %k1924; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]925; CHECK-ZNVER4-NEXT: retq926 %mask = bitcast i2 %mask_int to <2 x i1>927 %b = load <2 x double>, ptr %pb928 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>929 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> zeroinitializer930 ret <2 x double> %res931}932 933define <8 x double> @transform_VUNPCKLPDZrmk(<8 x double> %a, ptr %pb, <8 x double> %c, i8 %mask_int) nounwind {934; CHECK-LABEL: transform_VUNPCKLPDZrmk:935; CHECK: # %bb.0:936; CHECK-NEXT: kmovd %esi, %k1937; CHECK-NEXT: vunpcklpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]938; CHECK-NEXT: vmovapd %zmm1, %zmm0939; CHECK-NEXT: retq940 %mask = bitcast i8 %mask_int to <8 x i1>941 %b = load <8 x double>, ptr %pb942 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>943 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> %c944 ret <8 x double> %res945}946 947define <8 x double> @transform_VUNPCKHPDZrmk(<8 x double> %a, ptr %pb, <8 x double> %c, i8 %mask_int) nounwind {948; CHECK-LABEL: transform_VUNPCKHPDZrmk:949; CHECK: # %bb.0:950; CHECK-NEXT: kmovd %esi, %k1951; CHECK-NEXT: vunpckhpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]952; CHECK-NEXT: vmovapd %zmm1, %zmm0953; CHECK-NEXT: retq954 %mask = bitcast i8 %mask_int to <8 x i1>955 %b = load <8 x double>, ptr %pb956 %shufp = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>957 %res = select <8 x i1> %mask, <8 x double> %shufp, <8 x double> %c958 ret <8 x double> %res959}960 961define <4 x double> @transform_VUNPCKLPDYrmk(<4 x double> %a, ptr %pb, <4 x double> %c, i4 %mask_int) nounwind {962; CHECK-SKX-LABEL: transform_VUNPCKLPDYrmk:963; CHECK-SKX: # %bb.0:964; CHECK-SKX-NEXT: kmovd %esi, %k1965; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]966; CHECK-SKX-NEXT: vmovapd %ymm1, %ymm0967; CHECK-SKX-NEXT: retq968;969; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrmk:970; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:971; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1972; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]973; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %ymm1, %ymm0974; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq975;976; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDYrmk:977; CHECK-ICX-BYPASS-DELAY: # %bb.0:978; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1979; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]980; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %ymm1, %ymm0981; CHECK-ICX-BYPASS-DELAY-NEXT: retq982;983; CHECK-V4-LABEL: transform_VUNPCKLPDYrmk:984; CHECK-V4: # %bb.0:985; CHECK-V4-NEXT: kmovd %esi, %k1986; CHECK-V4-NEXT: vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]987; CHECK-V4-NEXT: vmovapd %ymm1, %ymm0988; CHECK-V4-NEXT: retq989;990; CHECK-AVX512-LABEL: transform_VUNPCKLPDYrmk:991; CHECK-AVX512: # %bb.0:992; CHECK-AVX512-NEXT: kmovd %esi, %k1993; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]994; CHECK-AVX512-NEXT: vmovapd %ymm1, %ymm0995; CHECK-AVX512-NEXT: retq996;997; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDYrmk:998; CHECK-ZNVER4: # %bb.0:999; CHECK-ZNVER4-NEXT: kmovd %esi, %k11000; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]1001; CHECK-ZNVER4-NEXT: vmovapd %ymm1, %ymm01002; CHECK-ZNVER4-NEXT: retq1003 %mask = bitcast i4 %mask_int to <4 x i1>1004 %b = load <4 x double>, ptr %pb1005 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1006 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> %c1007 ret <4 x double> %res1008}1009 1010define <4 x double> @transform_VUNPCKHPDYrmk(<4 x double> %a, ptr %pb, <4 x double> %c, i4 %mask_int) nounwind {1011; CHECK-SKX-LABEL: transform_VUNPCKHPDYrmk:1012; CHECK-SKX: # %bb.0:1013; CHECK-SKX-NEXT: kmovd %esi, %k11014; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1015; CHECK-SKX-NEXT: vmovapd %ymm1, %ymm01016; CHECK-SKX-NEXT: retq1017;1018; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrmk:1019; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1020; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11021; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1022; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %ymm1, %ymm01023; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1024;1025; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDYrmk:1026; CHECK-ICX-BYPASS-DELAY: # %bb.0:1027; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11028; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1029; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %ymm1, %ymm01030; CHECK-ICX-BYPASS-DELAY-NEXT: retq1031;1032; CHECK-V4-LABEL: transform_VUNPCKHPDYrmk:1033; CHECK-V4: # %bb.0:1034; CHECK-V4-NEXT: kmovd %esi, %k11035; CHECK-V4-NEXT: vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1036; CHECK-V4-NEXT: vmovapd %ymm1, %ymm01037; CHECK-V4-NEXT: retq1038;1039; CHECK-AVX512-LABEL: transform_VUNPCKHPDYrmk:1040; CHECK-AVX512: # %bb.0:1041; CHECK-AVX512-NEXT: kmovd %esi, %k11042; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1043; CHECK-AVX512-NEXT: vmovapd %ymm1, %ymm01044; CHECK-AVX512-NEXT: retq1045;1046; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDYrmk:1047; CHECK-ZNVER4: # %bb.0:1048; CHECK-ZNVER4-NEXT: kmovd %esi, %k11049; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]1050; CHECK-ZNVER4-NEXT: vmovapd %ymm1, %ymm01051; CHECK-ZNVER4-NEXT: retq1052 %mask = bitcast i4 %mask_int to <4 x i1>1053 %b = load <4 x double>, ptr %pb1054 %shufp = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7>1055 %res = select <4 x i1> %mask, <4 x double> %shufp, <4 x double> %c1056 ret <4 x double> %res1057}1058 1059define <2 x double> @transform_VUNPCKLPDrmk(<2 x double> %a, ptr %pb, <2 x double> %c, i2 %mask_int) nounwind {1060; CHECK-SKX-LABEL: transform_VUNPCKLPDrmk:1061; CHECK-SKX: # %bb.0:1062; CHECK-SKX-NEXT: kmovd %esi, %k11063; CHECK-SKX-NEXT: vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1064; CHECK-SKX-NEXT: vmovapd %xmm1, %xmm01065; CHECK-SKX-NEXT: retq1066;1067; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrmk:1068; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1069; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11070; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpcklqdq {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1071; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %xmm1, %xmm01072; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1073;1074; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKLPDrmk:1075; CHECK-ICX-BYPASS-DELAY: # %bb.0:1076; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11077; CHECK-ICX-BYPASS-DELAY-NEXT: vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1078; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %xmm1, %xmm01079; CHECK-ICX-BYPASS-DELAY-NEXT: retq1080;1081; CHECK-V4-LABEL: transform_VUNPCKLPDrmk:1082; CHECK-V4: # %bb.0:1083; CHECK-V4-NEXT: kmovd %esi, %k11084; CHECK-V4-NEXT: vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1085; CHECK-V4-NEXT: vmovapd %xmm1, %xmm01086; CHECK-V4-NEXT: retq1087;1088; CHECK-AVX512-LABEL: transform_VUNPCKLPDrmk:1089; CHECK-AVX512: # %bb.0:1090; CHECK-AVX512-NEXT: kmovd %esi, %k11091; CHECK-AVX512-NEXT: vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1092; CHECK-AVX512-NEXT: vmovapd %xmm1, %xmm01093; CHECK-AVX512-NEXT: retq1094;1095; CHECK-ZNVER4-LABEL: transform_VUNPCKLPDrmk:1096; CHECK-ZNVER4: # %bb.0:1097; CHECK-ZNVER4-NEXT: kmovd %esi, %k11098; CHECK-ZNVER4-NEXT: vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]1099; CHECK-ZNVER4-NEXT: vmovapd %xmm1, %xmm01100; CHECK-ZNVER4-NEXT: retq1101 %mask = bitcast i2 %mask_int to <2 x i1>1102 %b = load <2 x double>, ptr %pb1103 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 2>1104 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> %c1105 ret <2 x double> %res1106}1107 1108define <2 x double> @transform_VUNPCKHPDrmk(<2 x double> %a, ptr %pb, <2 x double> %c, i2 %mask_int) nounwind {1109; CHECK-SKX-LABEL: transform_VUNPCKHPDrmk:1110; CHECK-SKX: # %bb.0:1111; CHECK-SKX-NEXT: kmovd %esi, %k11112; CHECK-SKX-NEXT: vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1113; CHECK-SKX-NEXT: vmovapd %xmm1, %xmm01114; CHECK-SKX-NEXT: retq1115;1116; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrmk:1117; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:1118; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k11119; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpunpckhqdq {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1120; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vmovapd %xmm1, %xmm01121; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq1122;1123; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VUNPCKHPDrmk:1124; CHECK-ICX-BYPASS-DELAY: # %bb.0:1125; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k11126; CHECK-ICX-BYPASS-DELAY-NEXT: vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1127; CHECK-ICX-BYPASS-DELAY-NEXT: vmovapd %xmm1, %xmm01128; CHECK-ICX-BYPASS-DELAY-NEXT: retq1129;1130; CHECK-V4-LABEL: transform_VUNPCKHPDrmk:1131; CHECK-V4: # %bb.0:1132; CHECK-V4-NEXT: kmovd %esi, %k11133; CHECK-V4-NEXT: vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1134; CHECK-V4-NEXT: vmovapd %xmm1, %xmm01135; CHECK-V4-NEXT: retq1136;1137; CHECK-AVX512-LABEL: transform_VUNPCKHPDrmk:1138; CHECK-AVX512: # %bb.0:1139; CHECK-AVX512-NEXT: kmovd %esi, %k11140; CHECK-AVX512-NEXT: vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1141; CHECK-AVX512-NEXT: vmovapd %xmm1, %xmm01142; CHECK-AVX512-NEXT: retq1143;1144; CHECK-ZNVER4-LABEL: transform_VUNPCKHPDrmk:1145; CHECK-ZNVER4: # %bb.0:1146; CHECK-ZNVER4-NEXT: kmovd %esi, %k11147; CHECK-ZNVER4-NEXT: vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]1148; CHECK-ZNVER4-NEXT: vmovapd %xmm1, %xmm01149; CHECK-ZNVER4-NEXT: retq1150 %mask = bitcast i2 %mask_int to <2 x i1>1151 %b = load <2 x double>, ptr %pb1152 %shufp = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 1, i32 3>1153 %res = select <2 x i1> %mask, <2 x double> %shufp, <2 x double> %c1154 ret <2 x double> %res1155}1156;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1157; CHECK-ICX: {{.*}}1158