356 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=icelake-server | FileCheck %s --check-prefixes=CHECK,CHECK-ICX,CHECK-ICX-NO-BYPASS-DELAY3; 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-DELAY4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=CHECK,CHECK-V45; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq | FileCheck %s --check-prefixes=CHECK,CHECK-AVX5126; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver4 | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER47; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=znver5 | FileCheck %s --check-prefixes=CHECK,CHECK-ZNVER48 9define <16 x float> @transform_VPERMILPSZrr(<16 x float> %a) nounwind {10; CHECK-LABEL: transform_VPERMILPSZrr:11; CHECK: # %bb.0:12; CHECK-NEXT: vshufps {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]13; CHECK-NEXT: retq14 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>15 ret <16 x float> %shufp16}17 18define <8 x float> @transform_VPERMILPSYrr(<8 x float> %a) nounwind {19; CHECK-LABEL: transform_VPERMILPSYrr:20; CHECK: # %bb.0:21; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm0[3,2,1,0,7,6,5,4]22; CHECK-NEXT: retq23 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>24 ret <8 x float> %shufp25}26 27define <4 x float> @transform_VPERMILPSrr(<4 x float> %a) nounwind {28; CHECK-LABEL: transform_VPERMILPSrr:29; CHECK: # %bb.0:30; CHECK-NEXT: vshufps {{.*#+}} xmm0 = xmm0[3,2,1,0]31; CHECK-NEXT: retq32 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>33 ret <4 x float> %shufp34}35 36define <16 x float> @transform_VPERMILPSZrrkz(<16 x float> %a, i16 %mask_int) nounwind {37; CHECK-LABEL: transform_VPERMILPSZrrkz:38; CHECK: # %bb.0:39; CHECK-NEXT: kmovd %edi, %k140; CHECK-NEXT: vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]41; CHECK-NEXT: retq42 %mask = bitcast i16 %mask_int to <16 x i1>43 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>44 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer45 ret <16 x float> %res46}47 48define <8 x float> @transform_VPERMILPSYrrkz(<8 x float> %a, i8 %mask_int) nounwind {49; CHECK-LABEL: transform_VPERMILPSYrrkz:50; CHECK: # %bb.0:51; CHECK-NEXT: kmovd %edi, %k152; CHECK-NEXT: vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[3,2,1,0,7,6,5,4]53; CHECK-NEXT: retq54 %mask = bitcast i8 %mask_int to <8 x i1>55 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>56 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer57 ret <8 x float> %res58}59 60define <4 x float> @transform_VPERMILPSrrkz(<4 x float> %a, i4 %mask_int) nounwind {61; CHECK-LABEL: transform_VPERMILPSrrkz:62; CHECK: # %bb.0:63; CHECK-NEXT: kmovd %edi, %k164; CHECK-NEXT: vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[3,2,1,0]65; CHECK-NEXT: retq66 %mask = bitcast i4 %mask_int to <4 x i1>67 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>68 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer69 ret <4 x float> %res70}71 72define <16 x float> @transform_VPERMILPSZrrk(<16 x float> %a, <16 x float> %b, i16 %mask_int) nounwind {73; CHECK-LABEL: transform_VPERMILPSZrrk:74; CHECK: # %bb.0:75; CHECK-NEXT: kmovd %edi, %k176; CHECK-NEXT: vshufps {{.*#+}} zmm1 {%k1} = zmm0[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]77; CHECK-NEXT: vmovaps %zmm1, %zmm078; CHECK-NEXT: retq79 %mask = bitcast i16 %mask_int to <16 x i1>80 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>81 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %b82 ret <16 x float> %res83}84 85define <8 x float> @transform_VPERMILPSYrrk(<8 x float> %a, <8 x float> %b, i8 %mask_int) nounwind {86; CHECK-LABEL: transform_VPERMILPSYrrk:87; CHECK: # %bb.0:88; CHECK-NEXT: kmovd %edi, %k189; CHECK-NEXT: vshufps {{.*#+}} ymm1 {%k1} = ymm0[3,2,1,0,7,6,5,4]90; CHECK-NEXT: vmovaps %ymm1, %ymm091; CHECK-NEXT: retq92 %mask = bitcast i8 %mask_int to <8 x i1>93 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>94 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %b95 ret <8 x float> %res96}97 98define <4 x float> @transform_VPERMILPSrrk(<4 x float> %a, <4 x float> %b, i4 %mask_int) nounwind {99; CHECK-LABEL: transform_VPERMILPSrrk:100; CHECK: # %bb.0:101; CHECK-NEXT: kmovd %edi, %k1102; CHECK-NEXT: vshufps {{.*#+}} xmm1 {%k1} = xmm0[3,2,1,0]103; CHECK-NEXT: vmovaps %xmm1, %xmm0104; CHECK-NEXT: retq105 %mask = bitcast i4 %mask_int to <4 x i1>106 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>107 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %b108 ret <4 x float> %res109}110 111define <16 x float> @transform_VPERMILPSZrm(ptr %ap) nounwind {112; CHECK-LABEL: transform_VPERMILPSZrm:113; CHECK: # %bb.0:114; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]115; CHECK-NEXT: retq116 %a = load <16 x float>, ptr %ap117 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>118 ret <16 x float> %shufp119}120 121define <8 x float> @transform_VPERMILPSYrm(ptr %ap) nounwind {122; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSYrm:123; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:124; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} ymm0 = mem[3,2,1,0,7,6,5,4]125; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq126;127; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSYrm:128; CHECK-ICX-BYPASS-DELAY: # %bb.0:129; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} ymm0 = mem[3,2,1,0,7,6,5,4]130; CHECK-ICX-BYPASS-DELAY-NEXT: retq131;132; CHECK-V4-LABEL: transform_VPERMILPSYrm:133; CHECK-V4: # %bb.0:134; CHECK-V4-NEXT: vpermilps {{.*#+}} ymm0 = mem[3,2,1,0,7,6,5,4]135; CHECK-V4-NEXT: retq136;137; CHECK-AVX512-LABEL: transform_VPERMILPSYrm:138; CHECK-AVX512: # %bb.0:139; CHECK-AVX512-NEXT: vpermilps {{.*#+}} ymm0 = mem[3,2,1,0,7,6,5,4]140; CHECK-AVX512-NEXT: retq141;142; CHECK-ZNVER4-LABEL: transform_VPERMILPSYrm:143; CHECK-ZNVER4: # %bb.0:144; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} ymm0 = mem[3,2,1,0,7,6,5,4]145; CHECK-ZNVER4-NEXT: retq146 %a = load <8 x float>, ptr %ap147 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>148 ret <8 x float> %shufp149}150 151define <4 x float> @transform_VPERMILPSrm(ptr %ap) nounwind {152; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSrm:153; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:154; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} xmm0 = mem[3,2,1,0]155; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq156;157; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSrm:158; CHECK-ICX-BYPASS-DELAY: # %bb.0:159; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} xmm0 = mem[3,2,1,0]160; CHECK-ICX-BYPASS-DELAY-NEXT: retq161;162; CHECK-V4-LABEL: transform_VPERMILPSrm:163; CHECK-V4: # %bb.0:164; CHECK-V4-NEXT: vpermilps {{.*#+}} xmm0 = mem[3,2,1,0]165; CHECK-V4-NEXT: retq166;167; CHECK-AVX512-LABEL: transform_VPERMILPSrm:168; CHECK-AVX512: # %bb.0:169; CHECK-AVX512-NEXT: vpermilps {{.*#+}} xmm0 = mem[3,2,1,0]170; CHECK-AVX512-NEXT: retq171;172; CHECK-ZNVER4-LABEL: transform_VPERMILPSrm:173; CHECK-ZNVER4: # %bb.0:174; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} xmm0 = mem[3,2,1,0]175; CHECK-ZNVER4-NEXT: retq176 %a = load <4 x float>, ptr %ap177 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>178 ret <4 x float> %shufp179}180 181define <16 x float> @transform_VPERMILPSZrmkz(ptr %ap, i16 %mask_int) nounwind {182; CHECK-LABEL: transform_VPERMILPSZrmkz:183; CHECK: # %bb.0:184; CHECK-NEXT: kmovd %esi, %k1185; CHECK-NEXT: vpermilps {{.*#+}} zmm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]186; CHECK-NEXT: retq187 %mask = bitcast i16 %mask_int to <16 x i1>188 %a = load <16 x float>, ptr %ap189 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>190 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> zeroinitializer191 ret <16 x float> %res192}193 194define <8 x float> @transform_VPERMILPSYrmkz(ptr %ap, i8 %mask_int) nounwind {195; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSYrmkz:196; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:197; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1198; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4]199; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq200;201; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSYrmkz:202; CHECK-ICX-BYPASS-DELAY: # %bb.0:203; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1204; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} ymm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4]205; CHECK-ICX-BYPASS-DELAY-NEXT: retq206;207; CHECK-V4-LABEL: transform_VPERMILPSYrmkz:208; CHECK-V4: # %bb.0:209; CHECK-V4-NEXT: kmovd %esi, %k1210; CHECK-V4-NEXT: vpermilps {{.*#+}} ymm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4]211; CHECK-V4-NEXT: retq212;213; CHECK-AVX512-LABEL: transform_VPERMILPSYrmkz:214; CHECK-AVX512: # %bb.0:215; CHECK-AVX512-NEXT: kmovd %esi, %k1216; CHECK-AVX512-NEXT: vpermilps {{.*#+}} ymm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4]217; CHECK-AVX512-NEXT: retq218;219; CHECK-ZNVER4-LABEL: transform_VPERMILPSYrmkz:220; CHECK-ZNVER4: # %bb.0:221; CHECK-ZNVER4-NEXT: kmovd %esi, %k1222; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} ymm0 {%k1} {z} = mem[3,2,1,0,7,6,5,4]223; CHECK-ZNVER4-NEXT: retq224 %mask = bitcast i8 %mask_int to <8 x i1>225 %a = load <8 x float>, ptr %ap226 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>227 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> zeroinitializer228 ret <8 x float> %res229}230 231define <4 x float> @transform_VPERMILPSrmkz(ptr %ap, i4 %mask_int) nounwind {232; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSrmkz:233; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:234; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1235; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = mem[3,2,1,0]236; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq237;238; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSrmkz:239; CHECK-ICX-BYPASS-DELAY: # %bb.0:240; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1241; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} xmm0 {%k1} {z} = mem[3,2,1,0]242; CHECK-ICX-BYPASS-DELAY-NEXT: retq243;244; CHECK-V4-LABEL: transform_VPERMILPSrmkz:245; CHECK-V4: # %bb.0:246; CHECK-V4-NEXT: kmovd %esi, %k1247; CHECK-V4-NEXT: vpermilps {{.*#+}} xmm0 {%k1} {z} = mem[3,2,1,0]248; CHECK-V4-NEXT: retq249;250; CHECK-AVX512-LABEL: transform_VPERMILPSrmkz:251; CHECK-AVX512: # %bb.0:252; CHECK-AVX512-NEXT: kmovd %esi, %k1253; CHECK-AVX512-NEXT: vpermilps {{.*#+}} xmm0 {%k1} {z} = mem[3,2,1,0]254; CHECK-AVX512-NEXT: retq255;256; CHECK-ZNVER4-LABEL: transform_VPERMILPSrmkz:257; CHECK-ZNVER4: # %bb.0:258; CHECK-ZNVER4-NEXT: kmovd %esi, %k1259; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} xmm0 {%k1} {z} = mem[3,2,1,0]260; CHECK-ZNVER4-NEXT: retq261 %mask = bitcast i4 %mask_int to <4 x i1>262 %a = load <4 x float>, ptr %ap263 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>264 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> zeroinitializer265 ret <4 x float> %res266}267 268define <16 x float> @transform_VPERMILPSZrmk(ptr %ap, <16 x float> %b, i16 %mask_int) nounwind {269; CHECK-LABEL: transform_VPERMILPSZrmk:270; CHECK: # %bb.0:271; CHECK-NEXT: kmovd %esi, %k1272; CHECK-NEXT: vpermilps {{.*#+}} zmm0 {%k1} = mem[3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12]273; CHECK-NEXT: retq274 %mask = bitcast i16 %mask_int to <16 x i1>275 %a = load <16 x float>, ptr %ap276 %shufp = shufflevector <16 x float> %a, <16 x float> poison, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>277 %res = select <16 x i1> %mask, <16 x float> %shufp, <16 x float> %b278 ret <16 x float> %res279}280 281define <8 x float> @transform_VPERMILPSYrmk(ptr %ap, <8 x float> %b, i8 %mask_int) nounwind {282; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSYrmk:283; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:284; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1285; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} ymm0 {%k1} = mem[3,2,1,0,7,6,5,4]286; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq287;288; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSYrmk:289; CHECK-ICX-BYPASS-DELAY: # %bb.0:290; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1291; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} ymm0 {%k1} = mem[3,2,1,0,7,6,5,4]292; CHECK-ICX-BYPASS-DELAY-NEXT: retq293;294; CHECK-V4-LABEL: transform_VPERMILPSYrmk:295; CHECK-V4: # %bb.0:296; CHECK-V4-NEXT: kmovd %esi, %k1297; CHECK-V4-NEXT: vpermilps {{.*#+}} ymm0 {%k1} = mem[3,2,1,0,7,6,5,4]298; CHECK-V4-NEXT: retq299;300; CHECK-AVX512-LABEL: transform_VPERMILPSYrmk:301; CHECK-AVX512: # %bb.0:302; CHECK-AVX512-NEXT: kmovd %esi, %k1303; CHECK-AVX512-NEXT: vpermilps {{.*#+}} ymm0 {%k1} = mem[3,2,1,0,7,6,5,4]304; CHECK-AVX512-NEXT: retq305;306; CHECK-ZNVER4-LABEL: transform_VPERMILPSYrmk:307; CHECK-ZNVER4: # %bb.0:308; CHECK-ZNVER4-NEXT: kmovd %esi, %k1309; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} ymm0 {%k1} = mem[3,2,1,0,7,6,5,4]310; CHECK-ZNVER4-NEXT: retq311 %mask = bitcast i8 %mask_int to <8 x i1>312 %a = load <8 x float>, ptr %ap313 %shufp = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>314 %res = select <8 x i1> %mask, <8 x float> %shufp, <8 x float> %b315 ret <8 x float> %res316}317 318define <4 x float> @transform_VPERMILPSrmk(ptr %ap, <4 x float> %b, i4 %mask_int) nounwind {319; CHECK-ICX-NO-BYPASS-DELAY-LABEL: transform_VPERMILPSrmk:320; CHECK-ICX-NO-BYPASS-DELAY: # %bb.0:321; CHECK-ICX-NO-BYPASS-DELAY-NEXT: kmovd %esi, %k1322; CHECK-ICX-NO-BYPASS-DELAY-NEXT: vpshufd {{.*#+}} xmm0 {%k1} = mem[3,2,1,0]323; CHECK-ICX-NO-BYPASS-DELAY-NEXT: retq324;325; CHECK-ICX-BYPASS-DELAY-LABEL: transform_VPERMILPSrmk:326; CHECK-ICX-BYPASS-DELAY: # %bb.0:327; CHECK-ICX-BYPASS-DELAY-NEXT: kmovd %esi, %k1328; CHECK-ICX-BYPASS-DELAY-NEXT: vpermilps {{.*#+}} xmm0 {%k1} = mem[3,2,1,0]329; CHECK-ICX-BYPASS-DELAY-NEXT: retq330;331; CHECK-V4-LABEL: transform_VPERMILPSrmk:332; CHECK-V4: # %bb.0:333; CHECK-V4-NEXT: kmovd %esi, %k1334; CHECK-V4-NEXT: vpermilps {{.*#+}} xmm0 {%k1} = mem[3,2,1,0]335; CHECK-V4-NEXT: retq336;337; CHECK-AVX512-LABEL: transform_VPERMILPSrmk:338; CHECK-AVX512: # %bb.0:339; CHECK-AVX512-NEXT: kmovd %esi, %k1340; CHECK-AVX512-NEXT: vpermilps {{.*#+}} xmm0 {%k1} = mem[3,2,1,0]341; CHECK-AVX512-NEXT: retq342;343; CHECK-ZNVER4-LABEL: transform_VPERMILPSrmk:344; CHECK-ZNVER4: # %bb.0:345; CHECK-ZNVER4-NEXT: kmovd %esi, %k1346; CHECK-ZNVER4-NEXT: vpermilps {{.*#+}} xmm0 {%k1} = mem[3,2,1,0]347; CHECK-ZNVER4-NEXT: retq348 %mask = bitcast i4 %mask_int to <4 x i1>349 %a = load <4 x float>, ptr %ap350 %shufp = shufflevector <4 x float> %a, <4 x float> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>351 %res = select <4 x i1> %mask, <4 x float> %shufp, <4 x float> %b352 ret <4 x float> %res353}354;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:355; CHECK-ICX: {{.*}}356