1889 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F3; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-324 5define <8 x double> @shuffle_v8f64_00000000(<8 x double> %a, <8 x double> %b) {6; ALL-LABEL: shuffle_v8f64_00000000:7; ALL: # %bb.0:8; ALL-NEXT: vbroadcastsd %xmm0, %zmm09; ALL-NEXT: ret{{[l|q]}}10 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>11 ret <8 x double> %shuffle12}13 14define <8 x double> @shuffle_v8f64_22222222(<8 x double> %a, <8 x double> %b) {15; ALL-LABEL: shuffle_v8f64_22222222:16; ALL: # %bb.0:17; ALL-NEXT: vextractf128 $1, %ymm0, %xmm018; ALL-NEXT: vbroadcastsd %xmm0, %zmm019; ALL-NEXT: ret{{[l|q]}}20 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>21 ret <8 x double> %shuffle22}23 24define <8 x double> @shuffle_v8f64_44444444(<8 x double> %a, <8 x double> %b) {25; ALL-LABEL: shuffle_v8f64_44444444:26; ALL: # %bb.0:27; ALL-NEXT: vextractf32x4 $2, %zmm0, %xmm028; ALL-NEXT: vbroadcastsd %xmm0, %zmm029; ALL-NEXT: ret{{[l|q]}}30 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>31 ret <8 x double> %shuffle32}33 34define <8 x double> @shuffle_v8f64_44444444_bc(<8 x i64> %a, <8 x i64> %b) {35; ALL-LABEL: shuffle_v8f64_44444444_bc:36; ALL: # %bb.0:37; ALL-NEXT: vextractf32x4 $2, %zmm0, %xmm038; ALL-NEXT: vbroadcastsd %xmm0, %zmm039; ALL-NEXT: ret{{[l|q]}}40 %tmp0 = bitcast <8 x i64> %a to <8 x double>41 %tmp1 = bitcast <8 x i64> %b to <8 x double>42 %shuffle = shufflevector <8 x double> %tmp0, <8 x double> %tmp1, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>43 ret <8 x double> %shuffle44}45 46define <8 x double> @shuffle_v8f64_00000010(<8 x double> %a, <8 x double> %b) {47; ALL-LABEL: shuffle_v8f64_00000010:48; ALL: # %bb.0:49; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]50; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm051; ALL-NEXT: ret{{[l|q]}}52 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>53 ret <8 x double> %shuffle54}55 56define <8 x double> @shuffle_v8f64_00000200(<8 x double> %a, <8 x double> %b) {57; ALL-LABEL: shuffle_v8f64_00000200:58; ALL: # %bb.0:59; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]60; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm061; ALL-NEXT: ret{{[l|q]}}62 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>63 ret <8 x double> %shuffle64}65 66define <8 x double> @shuffle_v8f64_00003000(<8 x double> %a, <8 x double> %b) {67; ALL-LABEL: shuffle_v8f64_00003000:68; ALL: # %bb.0:69; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]70; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm071; ALL-NEXT: ret{{[l|q]}}72 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>73 ret <8 x double> %shuffle74}75 76define <8 x double> @shuffle_v8f64_00040000(<8 x double> %a, <8 x double> %b) {77; ALL-LABEL: shuffle_v8f64_00040000:78; ALL: # %bb.0:79; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,0,4]80; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm081; ALL-NEXT: ret{{[l|q]}}82 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>83 ret <8 x double> %shuffle84}85 86define <8 x double> @shuffle_v8f64_00500000(<8 x double> %a, <8 x double> %b) {87; ALL-LABEL: shuffle_v8f64_00500000:88; ALL: # %bb.0:89; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,5,0]90; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm091; ALL-NEXT: ret{{[l|q]}}92 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>93 ret <8 x double> %shuffle94}95 96define <8 x double> @shuffle_v8f64_06000000(<8 x double> %a, <8 x double> %b) {97; ALL-LABEL: shuffle_v8f64_06000000:98; ALL: # %bb.0:99; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [0,6]100; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0101; ALL-NEXT: ret{{[l|q]}}102 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>103 ret <8 x double> %shuffle104}105 106define <8 x double> @shuffle_v8f64_70000000(<8 x double> %a, <8 x double> %b) {107; ALL-LABEL: shuffle_v8f64_70000000:108; ALL: # %bb.0:109; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,0]110; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0111; ALL-NEXT: ret{{[l|q]}}112 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>113 ret <8 x double> %shuffle114}115 116define <8 x double> @shuffle_v8f64_01014545(<8 x double> %a, <8 x double> %b) {117; ALL-LABEL: shuffle_v8f64_01014545:118; ALL: # %bb.0:119; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]120; ALL-NEXT: ret{{[l|q]}}121 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>122 ret <8 x double> %shuffle123}124 125define <8 x double> @shuffle_v8f64_00112233(<8 x double> %a, <8 x double> %b) {126; ALL-LABEL: shuffle_v8f64_00112233:127; ALL: # %bb.0:128; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]129; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0130; ALL-NEXT: ret{{[l|q]}}131 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>132 ret <8 x double> %shuffle133}134 135define <8 x double> @shuffle_v8f64_00001111(<8 x double> %a, <8 x double> %b) {136; ALL-LABEL: shuffle_v8f64_00001111:137; ALL: # %bb.0:138; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]139; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0140; ALL-NEXT: ret{{[l|q]}}141 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>142 ret <8 x double> %shuffle143}144 145define <8 x double> @shuffle_v8f64_81a3c5e7(<8 x double> %a, <8 x double> %b) {146; ALL-LABEL: shuffle_v8f64_81a3c5e7:147; ALL: # %bb.0:148; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm1[0],zmm0[1],zmm1[2],zmm0[3],zmm1[4],zmm0[5],zmm1[6],zmm0[7]149; ALL-NEXT: ret{{[l|q]}}150 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>151 ret <8 x double> %shuffle152}153 154define <8 x double> @shuffle_v8f64_08080808(<8 x double> %a, <8 x double> %b) {155; AVX512F-LABEL: shuffle_v8f64_08080808:156; AVX512F: # %bb.0:157; AVX512F-NEXT: vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]158; AVX512F-NEXT: # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]159; AVX512F-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0160; AVX512F-NEXT: retq161;162; AVX512F-32-LABEL: shuffle_v8f64_08080808:163; AVX512F-32: # %bb.0:164; AVX512F-32-NEXT: vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]165; AVX512F-32-NEXT: # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]166; AVX512F-32-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0167; AVX512F-32-NEXT: retl168 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>169 ret <8 x double> %shuffle170}171 172define <8 x double> @shuffle_v8f64_08084c4c(<8 x double> %a, <8 x double> %b) {173; ALL-LABEL: shuffle_v8f64_08084c4c:174; ALL: # %bb.0:175; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]176; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0177; ALL-NEXT: ret{{[l|q]}}178 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>179 ret <8 x double> %shuffle180}181 182define <8 x double> @shuffle_v8f64_8823cc67(<8 x double> %a, <8 x double> %b) {183; ALL-LABEL: shuffle_v8f64_8823cc67:184; ALL: # %bb.0:185; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]186; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2187; ALL-NEXT: vmovapd %zmm2, %zmm0188; ALL-NEXT: ret{{[l|q]}}189 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>190 ret <8 x double> %shuffle191}192 193define <8 x double> @shuffle_v8f64_9832dc76(<8 x double> %a, <8 x double> %b) {194; ALL-LABEL: shuffle_v8f64_9832dc76:195; ALL: # %bb.0:196; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]197; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2198; ALL-NEXT: vmovapd %zmm2, %zmm0199; ALL-NEXT: ret{{[l|q]}}200 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>201 ret <8 x double> %shuffle202}203 204define <8 x double> @shuffle_v8f64_9810dc54(<8 x double> %a, <8 x double> %b) {205; ALL-LABEL: shuffle_v8f64_9810dc54:206; ALL: # %bb.0:207; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]208; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2209; ALL-NEXT: vmovapd %zmm2, %zmm0210; ALL-NEXT: ret{{[l|q]}}211 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>212 ret <8 x double> %shuffle213}214 215define <8 x double> @shuffle_v8f64_08194c5d(<8 x double> %a, <8 x double> %b) {216; ALL-LABEL: shuffle_v8f64_08194c5d:217; ALL: # %bb.0:218; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]219; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0220; ALL-NEXT: ret{{[l|q]}}221 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>222 ret <8 x double> %shuffle223}224 225define <8 x double> @shuffle_v8f64_2a3b6e7f(<8 x double> %a, <8 x double> %b) {226; ALL-LABEL: shuffle_v8f64_2a3b6e7f:227; ALL: # %bb.0:228; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]229; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0230; ALL-NEXT: ret{{[l|q]}}231 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>232 ret <8 x double> %shuffle233}234 235define <8 x double> @shuffle_v8f64_08192a3b(<8 x double> %a, <8 x double> %b) {236; ALL-LABEL: shuffle_v8f64_08192a3b:237; ALL: # %bb.0:238; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]239; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0240; ALL-NEXT: ret{{[l|q]}}241 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>242 ret <8 x double> %shuffle243}244 245define <8 x double> @shuffle_v8f64_08991abb(<8 x double> %a, <8 x double> %b) {246; ALL-LABEL: shuffle_v8f64_08991abb:247; ALL: # %bb.0:248; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]249; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2250; ALL-NEXT: vmovapd %zmm2, %zmm0251; ALL-NEXT: ret{{[l|q]}}252 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>253 ret <8 x double> %shuffle254}255 256define <8 x double> @shuffle_v8f64_091b2d3f(<8 x double> %a, <8 x double> %b) {257; ALL-LABEL: shuffle_v8f64_091b2d3f:258; ALL: # %bb.0:259; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]260; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0261; ALL-NEXT: ret{{[l|q]}}262 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>263 ret <8 x double> %shuffle264}265 266define <8 x double> @shuffle_v8f64_09ab1def(<8 x double> %a, <8 x double> %b) {267; ALL-LABEL: shuffle_v8f64_09ab1def:268; ALL: # %bb.0:269; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]270; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2271; ALL-NEXT: vmovapd %zmm2, %zmm0272; ALL-NEXT: ret{{[l|q]}}273 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>274 ret <8 x double> %shuffle275}276 277define <8 x double> @shuffle_v8f64_00014445(<8 x double> %a, <8 x double> %b) {278; ALL-LABEL: shuffle_v8f64_00014445:279; ALL: # %bb.0:280; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]281; ALL-NEXT: ret{{[l|q]}}282 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>283 ret <8 x double> %shuffle284}285 286define <8 x double> @shuffle_v8f64_00204464(<8 x double> %a, <8 x double> %b) {287; ALL-LABEL: shuffle_v8f64_00204464:288; ALL: # %bb.0:289; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]290; ALL-NEXT: ret{{[l|q]}}291 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>292 ret <8 x double> %shuffle293}294 295define <8 x double> @shuffle_v8f64_03004744(<8 x double> %a, <8 x double> %b) {296; ALL-LABEL: shuffle_v8f64_03004744:297; ALL: # %bb.0:298; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]299; ALL-NEXT: ret{{[l|q]}}300 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>301 ret <8 x double> %shuffle302}303 304define <8 x double> @shuffle_v8f64_10005444(<8 x double> %a, <8 x double> %b) {305; ALL-LABEL: shuffle_v8f64_10005444:306; ALL: # %bb.0:307; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]308; ALL-NEXT: ret{{[l|q]}}309 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>310 ret <8 x double> %shuffle311}312 313define <8 x double> @shuffle_v8f64_22006644(<8 x double> %a, <8 x double> %b) {314; ALL-LABEL: shuffle_v8f64_22006644:315; ALL: # %bb.0:316; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]317; ALL-NEXT: ret{{[l|q]}}318 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>319 ret <8 x double> %shuffle320}321 322define <8 x double> @shuffle_v8f64_33307774(<8 x double> %a, <8 x double> %b) {323; ALL-LABEL: shuffle_v8f64_33307774:324; ALL: # %bb.0:325; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]326; ALL-NEXT: ret{{[l|q]}}327 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>328 ret <8 x double> %shuffle329}330 331define <8 x double> @shuffle_v8f64_32107654(<8 x double> %a, <8 x double> %b) {332; ALL-LABEL: shuffle_v8f64_32107654:333; ALL: # %bb.0:334; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]335; ALL-NEXT: ret{{[l|q]}}336 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>337 ret <8 x double> %shuffle338}339 340define <8 x double> @shuffle_v8f64_00234467(<8 x double> %a, <8 x double> %b) {341; ALL-LABEL: shuffle_v8f64_00234467:342; ALL: # %bb.0:343; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]344; ALL-NEXT: ret{{[l|q]}}345 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>346 ret <8 x double> %shuffle347}348 349define <8 x double> @shuffle_v8f64_00224466(<8 x double> %a, <8 x double> %b) {350; ALL-LABEL: shuffle_v8f64_00224466:351; ALL: # %bb.0:352; ALL-NEXT: vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]353; ALL-NEXT: ret{{[l|q]}}354 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>355 ret <8 x double> %shuffle356}357 358define <8 x double> @shuffle_v8f64_10325476(<8 x double> %a, <8 x double> %b) {359; ALL-LABEL: shuffle_v8f64_10325476:360; ALL: # %bb.0:361; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]362; ALL-NEXT: ret{{[l|q]}}363 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>364 ret <8 x double> %shuffle365}366 367define <8 x double> @shuffle_v8f64_11335577(<8 x double> %a, <8 x double> %b) {368; ALL-LABEL: shuffle_v8f64_11335577:369; ALL: # %bb.0:370; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7]371; ALL-NEXT: ret{{[l|q]}}372 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>373 ret <8 x double> %shuffle374}375 376define <8 x double> @shuffle_v8f64_10235467(<8 x double> %a, <8 x double> %b) {377; ALL-LABEL: shuffle_v8f64_10235467:378; ALL: # %bb.0:379; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]380; ALL-NEXT: ret{{[l|q]}}381 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>382 ret <8 x double> %shuffle383}384 385define <8 x double> @shuffle_v8f64_10225466(<8 x double> %a, <8 x double> %b) {386; ALL-LABEL: shuffle_v8f64_10225466:387; ALL: # %bb.0:388; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]389; ALL-NEXT: ret{{[l|q]}}390 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>391 ret <8 x double> %shuffle392}393 394define <8 x double> @shuffle_v8f64_00015444(<8 x double> %a, <8 x double> %b) {395; ALL-LABEL: shuffle_v8f64_00015444:396; ALL: # %bb.0:397; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]398; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0399; ALL-NEXT: ret{{[l|q]}}400 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>401 ret <8 x double> %shuffle402}403 404define <8 x double> @shuffle_v8f64_00204644(<8 x double> %a, <8 x double> %b) {405; ALL-LABEL: shuffle_v8f64_00204644:406; ALL: # %bb.0:407; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]408; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0409; ALL-NEXT: ret{{[l|q]}}410 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>411 ret <8 x double> %shuffle412}413 414define <8 x double> @shuffle_v8f64_03004474(<8 x double> %a, <8 x double> %b) {415; ALL-LABEL: shuffle_v8f64_03004474:416; ALL: # %bb.0:417; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]418; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0419; ALL-NEXT: ret{{[l|q]}}420 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>421 ret <8 x double> %shuffle422}423 424define <8 x double> @shuffle_v8f64_10004444(<8 x double> %a, <8 x double> %b) {425; ALL-LABEL: shuffle_v8f64_10004444:426; ALL: # %bb.0:427; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]428; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0429; ALL-NEXT: ret{{[l|q]}}430 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>431 ret <8 x double> %shuffle432}433 434define <8 x double> @shuffle_v8f64_22006446(<8 x double> %a, <8 x double> %b) {435; ALL-LABEL: shuffle_v8f64_22006446:436; ALL: # %bb.0:437; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]438; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0439; ALL-NEXT: ret{{[l|q]}}440 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>441 ret <8 x double> %shuffle442}443 444define <8 x double> @shuffle_v8f64_33307474(<8 x double> %a, <8 x double> %b) {445; ALL-LABEL: shuffle_v8f64_33307474:446; ALL: # %bb.0:447; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]448; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0449; ALL-NEXT: ret{{[l|q]}}450 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>451 ret <8 x double> %shuffle452}453 454define <8 x double> @shuffle_v8f64_32104567(<8 x double> %a, <8 x double> %b) {455; ALL-LABEL: shuffle_v8f64_32104567:456; ALL: # %bb.0:457; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]458; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0459; ALL-NEXT: ret{{[l|q]}}460 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>461 ret <8 x double> %shuffle462}463 464define <8 x double> @shuffle_v8f64_00236744(<8 x double> %a, <8 x double> %b) {465; ALL-LABEL: shuffle_v8f64_00236744:466; ALL: # %bb.0:467; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]468; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0469; ALL-NEXT: ret{{[l|q]}}470 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>471 ret <8 x double> %shuffle472}473 474define <8 x double> @shuffle_v8f64_00226644(<8 x double> %a, <8 x double> %b) {475; ALL-LABEL: shuffle_v8f64_00226644:476; ALL: # %bb.0:477; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]478; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0479; ALL-NEXT: ret{{[l|q]}}480 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>481 ret <8 x double> %shuffle482}483 484define <8 x double> @shuffle_v8f64_10324567(<8 x double> %a, <8 x double> %b) {485; ALL-LABEL: shuffle_v8f64_10324567:486; ALL: # %bb.0:487; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,7]488; ALL-NEXT: ret{{[l|q]}}489 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>490 ret <8 x double> %shuffle491}492 493define <8 x double> @shuffle_v8f64_11334567(<8 x double> %a, <8 x double> %b) {494; ALL-LABEL: shuffle_v8f64_11334567:495; ALL: # %bb.0:496; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,5,6,7]497; ALL-NEXT: ret{{[l|q]}}498 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>499 ret <8 x double> %shuffle500}501 502define <8 x double> @shuffle_v8f64_01235467(<8 x double> %a, <8 x double> %b) {503; ALL-LABEL: shuffle_v8f64_01235467:504; ALL: # %bb.0:505; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,7]506; ALL-NEXT: ret{{[l|q]}}507 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>508 ret <8 x double> %shuffle509}510 511define <8 x double> @shuffle_v8f64_01235466(<8 x double> %a, <8 x double> %b) {512; ALL-LABEL: shuffle_v8f64_01235466:513; ALL: # %bb.0:514; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0,1,2,3,5,4,6,6]515; ALL-NEXT: ret{{[l|q]}}516 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>517 ret <8 x double> %shuffle518}519 520define <8 x double> @shuffle_v8f64_002u6u44(<8 x double> %a, <8 x double> %b) {521; ALL-LABEL: shuffle_v8f64_002u6u44:522; ALL: # %bb.0:523; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,6,0,4,4]524; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0525; ALL-NEXT: ret{{[l|q]}}526 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>527 ret <8 x double> %shuffle528}529 530define <8 x double> @shuffle_v8f64_00uu66uu(<8 x double> %a, <8 x double> %b) {531; ALL-LABEL: shuffle_v8f64_00uu66uu:532; ALL: # %bb.0:533; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,6,6,0,0]534; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0535; ALL-NEXT: ret{{[l|q]}}536 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>537 ret <8 x double> %shuffle538}539 540define <8 x double> @shuffle_v8f64_103245uu(<8 x double> %a, <8 x double> %b) {541; ALL-LABEL: shuffle_v8f64_103245uu:542; ALL: # %bb.0:543; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,4,5,6,6]544; ALL-NEXT: ret{{[l|q]}}545 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 poison, i32 poison>546 ret <8 x double> %shuffle547}548 549define <8 x double> @shuffle_v8f64_1133uu67(<8 x double> %a, <8 x double> %b) {550; ALL-LABEL: shuffle_v8f64_1133uu67:551; ALL: # %bb.0:552; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,1,3,3,4,4,6,7]553; ALL-NEXT: ret{{[l|q]}}554 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>555 ret <8 x double> %shuffle556}557 558define <8 x double> @shuffle_v8f64_0uu354uu(<8 x double> %a, <8 x double> %b) {559; ALL-LABEL: shuffle_v8f64_0uu354uu:560; ALL: # %bb.0:561; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,5,4,6,6]562; ALL-NEXT: ret{{[l|q]}}563 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>564 ret <8 x double> %shuffle565}566 567define <8 x double> @shuffle_v8f64_uuu3uu66(<8 x double> %a, <8 x double> %b) {568; ALL-LABEL: shuffle_v8f64_uuu3uu66:569; ALL: # %bb.0:570; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,6]571; ALL-NEXT: ret{{[l|q]}}572 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>573 ret <8 x double> %shuffle574}575 576define <8 x double> @shuffle_v8f64_c348cda0(<8 x double> %a, <8 x double> %b) {577; ALL-LABEL: shuffle_v8f64_c348cda0:578; ALL: # %bb.0:579; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [4,11,12,0,4,5,2,8]580; ALL-NEXT: vpermi2pd %zmm0, %zmm1, %zmm2581; ALL-NEXT: vmovapd %zmm2, %zmm0582; ALL-NEXT: ret{{[l|q]}}583 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 12, i32 3, i32 4, i32 8, i32 12, i32 13, i32 10, i32 0>584 ret <8 x double> %shuffle585}586 587define <8 x double> @shuffle_v8f64_f511235a(<8 x double> %a, <8 x double> %b) {588; ALL-LABEL: shuffle_v8f64_f511235a:589; ALL: # %bb.0:590; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [15,5,1,1,2,3,5,10]591; ALL-NEXT: vpermt2pd %zmm1, %zmm2, %zmm0592; ALL-NEXT: ret{{[l|q]}}593 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 15, i32 5, i32 1, i32 1, i32 2, i32 3, i32 5, i32 10>594 ret <8 x double> %shuffle595}596 597define <8 x double> @shuffle_v8f64_1z2z5z6z(<8 x double> %a, <8 x double> %b) {598; ALL-LABEL: shuffle_v8f64_1z2z5z6z:599; ALL: # %bb.0:600; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm1601; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[2],zmm1[3],zmm0[5],zmm1[5],zmm0[6],zmm1[7]602; ALL-NEXT: ret{{[l|q]}}603 %shuffle = shufflevector <8 x double> %a, <8 x double> <double 0.000000e+00, double poison, double poison, double poison, double poison, double poison, double poison, double poison>, <8 x i32> <i32 1, i32 8, i32 2, i32 8, i32 5, i32 8, i32 6, i32 8>604 ret <8 x double> %shuffle605}606 607define <8 x double> @shuffle_v8f64_23uuuuuu(<8 x double> %a0, <8 x double> %a1) {608; ALL-LABEL: shuffle_v8f64_23uuuuuu:609; ALL: # %bb.0:610; ALL-NEXT: vextractf128 $1, %ymm0, %xmm0611; ALL-NEXT: ret{{[l|q]}}612 %1 = shufflevector <8 x double> %a0, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>613 ret <8 x double> %1614}615 616define <8 x double> @shuffle_v8f64_67zzzzzz(<8 x double> %a0, <8 x double> %a1) {617; ALL-LABEL: shuffle_v8f64_67zzzzzz:618; ALL: # %bb.0:619; ALL-NEXT: vextractf32x4 $3, %zmm0, %xmm0620; ALL-NEXT: ret{{[l|q]}}621 %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>622 ret <8 x double> %1623}624 625define <8 x double> @shuffle_v8f64_4567uuuu(<8 x double> %a0, <8 x double> %a1) {626; ALL-LABEL: shuffle_v8f64_4567uuuu:627; ALL: # %bb.0:628; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0629; ALL-NEXT: ret{{[l|q]}}630 %1 = shufflevector <8 x double> %a0, <8 x double> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>631 ret <8 x double> %1632}633 634define <8 x double> @shuffle_v8f64_4567zzzz(<8 x double> %a0, <8 x double> %a1) {635; ALL-LABEL: shuffle_v8f64_4567zzzz:636; ALL: # %bb.0:637; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0638; ALL-NEXT: ret{{[l|q]}}639 %1 = shufflevector <8 x double> %a0, <8 x double> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>640 ret <8 x double> %1641}642 643define <8 x i64> @shuffle_v8i64_00000000(<8 x i64> %a, <8 x i64> %b) {644; ALL-LABEL: shuffle_v8i64_00000000:645; ALL: # %bb.0:646; ALL-NEXT: vbroadcastsd %xmm0, %zmm0647; ALL-NEXT: ret{{[l|q]}}648 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>649 ret <8 x i64> %shuffle650}651 652define <8 x i64> @shuffle_v8i64_44444444(<8 x i64> %a, <8 x i64> %b) {653; ALL-LABEL: shuffle_v8i64_44444444:654; ALL: # %bb.0:655; ALL-NEXT: vextractf32x4 $2, %zmm0, %xmm0656; ALL-NEXT: vbroadcastsd %xmm0, %zmm0657; ALL-NEXT: ret{{[l|q]}}658 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4>659 ret <8 x i64> %shuffle660}661 662define <8 x i64> @shuffle_v8i64_66666666(<8 x i64> %a, <8 x i64> %b) {663; ALL-LABEL: shuffle_v8i64_66666666:664; ALL: # %bb.0:665; ALL-NEXT: vextractf32x4 $3, %zmm0, %xmm0666; ALL-NEXT: vbroadcastsd %xmm0, %zmm0667; ALL-NEXT: ret{{[l|q]}}668 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6>669 ret <8 x i64> %shuffle670}671 672define <8 x i64> @shuffle_v8i64_00000010(<8 x i64> %a, <8 x i64> %b) {673; ALL-LABEL: shuffle_v8i64_00000010:674; ALL: # %bb.0:675; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,0,1,0]676; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0677; ALL-NEXT: ret{{[l|q]}}678 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>679 ret <8 x i64> %shuffle680}681 682define <8 x i64> @shuffle_v8i64_00000200(<8 x i64> %a, <8 x i64> %b) {683; ALL-LABEL: shuffle_v8i64_00000200:684; ALL: # %bb.0:685; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,0,2,0,0]686; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0687; ALL-NEXT: ret{{[l|q]}}688 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>689 ret <8 x i64> %shuffle690}691 692define <8 x i64> @shuffle_v8i64_00003000(<8 x i64> %a, <8 x i64> %b) {693; ALL-LABEL: shuffle_v8i64_00003000:694; ALL: # %bb.0:695; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,3,0,0,0]696; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0697; ALL-NEXT: ret{{[l|q]}}698 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>699 ret <8 x i64> %shuffle700}701 702define <8 x i64> @shuffle_v8i64_00040000(<8 x i64> %a, <8 x i64> %b) {703; ALL-LABEL: shuffle_v8i64_00040000:704; ALL: # %bb.0:705; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,0,4]706; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0707; ALL-NEXT: ret{{[l|q]}}708 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>709 ret <8 x i64> %shuffle710}711 712define <8 x i64> @shuffle_v8i64_00500000(<8 x i64> %a, <8 x i64> %b) {713; ALL-LABEL: shuffle_v8i64_00500000:714; ALL: # %bb.0:715; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [0,0,5,0]716; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0717; ALL-NEXT: ret{{[l|q]}}718 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>719 ret <8 x i64> %shuffle720}721 722define <8 x i64> @shuffle_v8i64_06000000(<8 x i64> %a, <8 x i64> %b) {723; ALL-LABEL: shuffle_v8i64_06000000:724; ALL: # %bb.0:725; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [0,6]726; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0727; ALL-NEXT: ret{{[l|q]}}728 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>729 ret <8 x i64> %shuffle730}731 732define <8 x i64> @shuffle_v8i64_70000000(<8 x i64> %a, <8 x i64> %b) {733; ALL-LABEL: shuffle_v8i64_70000000:734; ALL: # %bb.0:735; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [7,0]736; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0737; ALL-NEXT: ret{{[l|q]}}738 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>739 ret <8 x i64> %shuffle740}741 742define <8 x i64> @shuffle_v8i64_01014545(<8 x i64> %a, <8 x i64> %b) {743; ALL-LABEL: shuffle_v8i64_01014545:744; ALL: # %bb.0:745; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5]746; ALL-NEXT: ret{{[l|q]}}747 748 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>749 ret <8 x i64> %shuffle750}751 752define <8 x i64> @shuffle_v8i64_01014545_mem(ptr %ptr, <8 x i64> %b) {753; AVX512F-LABEL: shuffle_v8i64_01014545_mem:754; AVX512F: # %bb.0:755; AVX512F-NEXT: vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]756; AVX512F-NEXT: retq757;758; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem:759; AVX512F-32: # %bb.0:760; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax761; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5]762; AVX512F-32-NEXT: retl763 764 %a = load <8 x i64>, ptr %ptr765 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 4, i32 5>766 ret <8 x i64> %shuffle767}768 769define <8 x i64> @shuffle_v8i64_00112233(<8 x i64> %a, <8 x i64> %b) {770; ALL-LABEL: shuffle_v8i64_00112233:771; ALL: # %bb.0:772; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,1,1,2,2,3,3]773; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0774; ALL-NEXT: ret{{[l|q]}}775 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3>776 ret <8 x i64> %shuffle777}778 779define <8 x i64> @shuffle_v8i64_00001111(<8 x i64> %a, <8 x i64> %b) {780; ALL-LABEL: shuffle_v8i64_00001111:781; ALL: # %bb.0:782; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,1,1,1,1]783; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0784; ALL-NEXT: ret{{[l|q]}}785 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>786 ret <8 x i64> %shuffle787}788 789define <8 x i64> @shuffle_v8i64_81a3c5e7(<8 x i64> %a, <8 x i64> %b) {790; ALL-LABEL: shuffle_v8i64_81a3c5e7:791; ALL: # %bb.0:792; ALL-NEXT: movb $-86, %al793; ALL-NEXT: kmovw %eax, %k1794; ALL-NEXT: vpblendmq %zmm0, %zmm1, %zmm0 {%k1}795; ALL-NEXT: ret{{[l|q]}}796 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>797 ret <8 x i64> %shuffle798}799 800define <8 x i64> @shuffle_v8i64_08080808(<8 x i64> %a, <8 x i64> %b) {801; AVX512F-LABEL: shuffle_v8i64_08080808:802; AVX512F: # %bb.0:803; AVX512F-NEXT: vbroadcasti32x4 {{.*#+}} zmm2 = [0,8,0,8,0,8,0,8]804; AVX512F-NEXT: # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]805; AVX512F-NEXT: vpermt2q %zmm1, %zmm2, %zmm0806; AVX512F-NEXT: retq807;808; AVX512F-32-LABEL: shuffle_v8i64_08080808:809; AVX512F-32: # %bb.0:810; AVX512F-32-NEXT: vbroadcasti32x4 {{.*#+}} zmm2 = [0,0,8,0,0,0,8,0,0,0,8,0,0,0,8,0]811; AVX512F-32-NEXT: # zmm2 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]812; AVX512F-32-NEXT: vpermt2q %zmm1, %zmm2, %zmm0813; AVX512F-32-NEXT: retl814 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 0, i32 8, i32 0, i32 8>815 ret <8 x i64> %shuffle816}817 818define <8 x i64> @shuffle_v8i64_08084c4c(<8 x i64> %a, <8 x i64> %b) {819; ALL-LABEL: shuffle_v8i64_08084c4c:820; ALL: # %bb.0:821; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,0,8,4,12,4,12]822; ALL-NEXT: vpermt2q %zmm1, %zmm2, %zmm0823; ALL-NEXT: ret{{[l|q]}}824 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 0, i32 8, i32 4, i32 12, i32 4, i32 12>825 ret <8 x i64> %shuffle826}827 828define <8 x i64> @shuffle_v8i64_8823cc67(<8 x i64> %a, <8 x i64> %b) {829; ALL-LABEL: shuffle_v8i64_8823cc67:830; ALL: # %bb.0:831; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,0,10,11,4,4,14,15]832; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm2833; ALL-NEXT: vmovdqa64 %zmm2, %zmm0834; ALL-NEXT: ret{{[l|q]}}835 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 8, i32 2, i32 3, i32 12, i32 12, i32 6, i32 7>836 ret <8 x i64> %shuffle837}838 839define <8 x i64> @shuffle_v8i64_9832dc76(<8 x i64> %a, <8 x i64> %b) {840; ALL-LABEL: shuffle_v8i64_9832dc76:841; ALL: # %bb.0:842; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [1,0,11,10,5,4,15,14]843; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm2844; ALL-NEXT: vmovdqa64 %zmm2, %zmm0845; ALL-NEXT: ret{{[l|q]}}846 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 3, i32 2, i32 13, i32 12, i32 7, i32 6>847 ret <8 x i64> %shuffle848}849 850define <8 x i64> @shuffle_v8i64_9810dc54(<8 x i64> %a, <8 x i64> %b) {851; ALL-LABEL: shuffle_v8i64_9810dc54:852; ALL: # %bb.0:853; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [1,0,9,8,5,4,13,12]854; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm2855; ALL-NEXT: vmovdqa64 %zmm2, %zmm0856; ALL-NEXT: ret{{[l|q]}}857 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 9, i32 8, i32 1, i32 0, i32 13, i32 12, i32 5, i32 4>858 ret <8 x i64> %shuffle859}860 861define <8 x i64> @shuffle_v8i64_08194c5d(<8 x i64> %a, <8 x i64> %b) {862; ALL-LABEL: shuffle_v8i64_08194c5d:863; ALL: # %bb.0:864; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,4,12,5,13]865; ALL-NEXT: vpermt2q %zmm1, %zmm2, %zmm0866; ALL-NEXT: ret{{[l|q]}}867 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>868 ret <8 x i64> %shuffle869}870 871define <8 x i64> @shuffle_v8i64_2a3b6e7f(<8 x i64> %a, <8 x i64> %b) {872; ALL-LABEL: shuffle_v8i64_2a3b6e7f:873; ALL: # %bb.0:874; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [2,10,3,11,6,14,7,15]875; ALL-NEXT: vpermt2q %zmm1, %zmm2, %zmm0876; ALL-NEXT: ret{{[l|q]}}877 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>878 ret <8 x i64> %shuffle879}880 881define <8 x i64> @shuffle_v8i64_08192a3b(<8 x i64> %a, <8 x i64> %b) {882; ALL-LABEL: shuffle_v8i64_08192a3b:883; ALL: # %bb.0:884; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,8,1,9,2,10,3,11]885; ALL-NEXT: vpermt2q %zmm1, %zmm2, %zmm0886; ALL-NEXT: ret{{[l|q]}}887 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>888 ret <8 x i64> %shuffle889}890 891define <8 x i64> @shuffle_v8i64_08991abb(<8 x i64> %a, <8 x i64> %b) {892; ALL-LABEL: shuffle_v8i64_08991abb:893; ALL: # %bb.0:894; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [8,0,1,1,9,2,3,3]895; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm2896; ALL-NEXT: vmovdqa64 %zmm2, %zmm0897; ALL-NEXT: ret{{[l|q]}}898 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 8, i32 9, i32 9, i32 1, i32 10, i32 11, i32 11>899 ret <8 x i64> %shuffle900}901 902define <8 x i64> @shuffle_v8i64_091b2d3f(<8 x i64> %a, <8 x i64> %b) {903; ALL-LABEL: shuffle_v8i64_091b2d3f:904; ALL: # %bb.0:905; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [0,9,1,11,2,13,3,15]906; ALL-NEXT: vpermt2q %zmm1, %zmm2, %zmm0907; ALL-NEXT: ret{{[l|q]}}908 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 1, i32 11, i32 2, i32 13, i32 3, i32 15>909 ret <8 x i64> %shuffle910}911 912define <8 x i64> @shuffle_v8i64_09ab1def(<8 x i64> %a, <8 x i64> %b) {913; ALL-LABEL: shuffle_v8i64_09ab1def:914; ALL: # %bb.0:915; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [8,1,2,3,9,5,6,7]916; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm2917; ALL-NEXT: vmovdqa64 %zmm2, %zmm0918; ALL-NEXT: ret{{[l|q]}}919 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 9, i32 10, i32 11, i32 1, i32 13, i32 14, i32 15>920 ret <8 x i64> %shuffle921}922 923define <8 x i64> @shuffle_v8i64_00014445(<8 x i64> %a, <8 x i64> %b) {924; ALL-LABEL: shuffle_v8i64_00014445:925; ALL: # %bb.0:926; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,0,1,4,4,4,5]927; ALL-NEXT: ret{{[l|q]}}928 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 4, i32 4, i32 4, i32 5>929 ret <8 x i64> %shuffle930}931 932define <8 x i64> @shuffle_v8i64_00204464(<8 x i64> %a, <8 x i64> %b) {933; ALL-LABEL: shuffle_v8i64_00204464:934; ALL: # %bb.0:935; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,0,4,4,6,4]936; ALL-NEXT: ret{{[l|q]}}937 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 4, i32 6, i32 4>938 ret <8 x i64> %shuffle939}940 941define <8 x i64> @shuffle_v8i64_03004744(<8 x i64> %a, <8 x i64> %b) {942; ALL-LABEL: shuffle_v8i64_03004744:943; ALL: # %bb.0:944; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,3,0,0,4,7,4,4]945; ALL-NEXT: ret{{[l|q]}}946 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 7, i32 4, i32 4>947 ret <8 x i64> %shuffle948}949 950define <8 x i64> @shuffle_v8i64_10005444(<8 x i64> %a, <8 x i64> %b) {951; ALL-LABEL: shuffle_v8i64_10005444:952; ALL: # %bb.0:953; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,0,0,5,4,4,4]954; ALL-NEXT: ret{{[l|q]}}955 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 5, i32 4, i32 4, i32 4>956 ret <8 x i64> %shuffle957}958 959define <8 x i64> @shuffle_v8i64_22006644(<8 x i64> %a, <8 x i64> %b) {960; ALL-LABEL: shuffle_v8i64_22006644:961; ALL: # %bb.0:962; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[2,2,0,0,6,6,4,4]963; ALL-NEXT: ret{{[l|q]}}964 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 6, i32 4, i32 4>965 ret <8 x i64> %shuffle966}967 968define <8 x i64> @shuffle_v8i64_33307774(<8 x i64> %a, <8 x i64> %b) {969; ALL-LABEL: shuffle_v8i64_33307774:970; ALL: # %bb.0:971; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,3,3,0,7,7,7,4]972; ALL-NEXT: ret{{[l|q]}}973 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 7, i32 7, i32 4>974 ret <8 x i64> %shuffle975}976 977define <8 x i64> @shuffle_v8i64_32107654(<8 x i64> %a, <8 x i64> %b) {978; ALL-LABEL: shuffle_v8i64_32107654:979; ALL: # %bb.0:980; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[3,2,1,0,7,6,5,4]981; ALL-NEXT: ret{{[l|q]}}982 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>983 ret <8 x i64> %shuffle984}985 986define <8 x i64> @shuffle_v8i64_00234467(<8 x i64> %a, <8 x i64> %b) {987; ALL-LABEL: shuffle_v8i64_00234467:988; ALL: # %bb.0:989; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[0,0,2,3,4,4,6,7]990; ALL-NEXT: ret{{[l|q]}}991 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 4, i32 6, i32 7>992 ret <8 x i64> %shuffle993}994 995define <8 x i64> @shuffle_v8i64_00224466(<8 x i64> %a, <8 x i64> %b) {996; ALL-LABEL: shuffle_v8i64_00224466:997; ALL: # %bb.0:998; ALL-NEXT: vshufps {{.*#+}} zmm0 = zmm0[0,1,0,1,4,5,4,5,8,9,8,9,12,13,12,13]999; ALL-NEXT: ret{{[l|q]}}1000 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1001 ret <8 x i64> %shuffle1002}1003 1004define <8 x i64> @shuffle_v8i64_10325476(<8 x i64> %a, <8 x i64> %b) {1005; ALL-LABEL: shuffle_v8i64_10325476:1006; ALL: # %bb.0:1007; ALL-NEXT: vshufps {{.*#+}} zmm0 = zmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13]1008; ALL-NEXT: ret{{[l|q]}}1009 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>1010 ret <8 x i64> %shuffle1011}1012 1013define <8 x i64> @shuffle_v8i64_11335577(<8 x i64> %a, <8 x i64> %b) {1014; ALL-LABEL: shuffle_v8i64_11335577:1015; ALL: # %bb.0:1016; ALL-NEXT: vshufps {{.*#+}} zmm0 = zmm0[2,3,2,3,6,7,6,7,10,11,10,11,14,15,14,15]1017; ALL-NEXT: ret{{[l|q]}}1018 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>1019 ret <8 x i64> %shuffle1020}1021 1022define <8 x i64> @shuffle_v8i64_10235467(<8 x i64> %a, <8 x i64> %b) {1023; ALL-LABEL: shuffle_v8i64_10235467:1024; ALL: # %bb.0:1025; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,3,5,4,6,7]1026; ALL-NEXT: ret{{[l|q]}}1027 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>1028 ret <8 x i64> %shuffle1029}1030 1031define <8 x i64> @shuffle_v8i64_10225466(<8 x i64> %a, <8 x i64> %b) {1032; ALL-LABEL: shuffle_v8i64_10225466:1033; ALL: # %bb.0:1034; ALL-NEXT: vpermpd {{.*#+}} zmm0 = zmm0[1,0,2,2,5,4,6,6]1035; ALL-NEXT: ret{{[l|q]}}1036 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 2, i32 2, i32 5, i32 4, i32 6, i32 6>1037 ret <8 x i64> %shuffle1038}1039 1040define <8 x i64> @shuffle_v8i64_00015444(<8 x i64> %a, <8 x i64> %b) {1041; ALL-LABEL: shuffle_v8i64_00015444:1042; ALL: # %bb.0:1043; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,1,5,4,4,4]1044; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01045; ALL-NEXT: ret{{[l|q]}}1046 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 1, i32 5, i32 4, i32 4, i32 4>1047 ret <8 x i64> %shuffle1048}1049 1050define <8 x i64> @shuffle_v8i64_00204644(<8 x i64> %a, <8 x i64> %b) {1051; ALL-LABEL: shuffle_v8i64_00204644:1052; ALL: # %bb.0:1053; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,4,6,4,4]1054; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01055; ALL-NEXT: ret{{[l|q]}}1056 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 0, i32 4, i32 6, i32 4, i32 4>1057 ret <8 x i64> %shuffle1058}1059 1060define <8 x i64> @shuffle_v8i64_03004474(<8 x i64> %a, <8 x i64> %b) {1061; ALL-LABEL: shuffle_v8i64_03004474:1062; ALL: # %bb.0:1063; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,3,0,0,4,4,7,4]1064; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01065; ALL-NEXT: ret{{[l|q]}}1066 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 4, i32 7, i32 4>1067 ret <8 x i64> %shuffle1068}1069 1070define <8 x i64> @shuffle_v8i64_10004444(<8 x i64> %a, <8 x i64> %b) {1071; ALL-LABEL: shuffle_v8i64_10004444:1072; ALL: # %bb.0:1073; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,0,0,0,4,4,4,4]1074; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01075; ALL-NEXT: ret{{[l|q]}}1076 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4>1077 ret <8 x i64> %shuffle1078}1079 1080define <8 x i64> @shuffle_v8i64_22006446(<8 x i64> %a, <8 x i64> %b) {1081; ALL-LABEL: shuffle_v8i64_22006446:1082; ALL: # %bb.0:1083; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [2,2,0,0,6,4,4,6]1084; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01085; ALL-NEXT: ret{{[l|q]}}1086 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 2, i32 2, i32 0, i32 0, i32 6, i32 4, i32 4, i32 6>1087 ret <8 x i64> %shuffle1088}1089 1090define <8 x i64> @shuffle_v8i64_33307474(<8 x i64> %a, <8 x i64> %b) {1091; ALL-LABEL: shuffle_v8i64_33307474:1092; ALL: # %bb.0:1093; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [3,3,3,0,7,4,7,4]1094; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01095; ALL-NEXT: ret{{[l|q]}}1096 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 0, i32 7, i32 4, i32 7, i32 4>1097 ret <8 x i64> %shuffle1098}1099 1100define <8 x i64> @shuffle_v8i64_32104567(<8 x i64> %a, <8 x i64> %b) {1101; ALL-LABEL: shuffle_v8i64_32104567:1102; ALL: # %bb.0:1103; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [3,2,1,0,4,5,6,7]1104; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01105; ALL-NEXT: ret{{[l|q]}}1106 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7>1107 ret <8 x i64> %shuffle1108}1109 1110define <8 x i64> @shuffle_v8i64_00236744(<8 x i64> %a, <8 x i64> %b) {1111; ALL-LABEL: shuffle_v8i64_00236744:1112; ALL: # %bb.0:1113; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,3,6,7,4,4]1114; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01115; ALL-NEXT: ret{{[l|q]}}1116 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 6, i32 7, i32 4, i32 4>1117 ret <8 x i64> %shuffle1118}1119 1120define <8 x i64> @shuffle_v8i64_00226644(<8 x i64> %a, <8 x i64> %b) {1121; ALL-LABEL: shuffle_v8i64_00226644:1122; ALL: # %bb.0:1123; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,2,6,6,4,4]1124; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01125; ALL-NEXT: ret{{[l|q]}}1126 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 6, i32 6, i32 4, i32 4>1127 ret <8 x i64> %shuffle1128}1129 1130define <8 x i64> @shuffle_v8i64_10324567(<8 x i64> %a, <8 x i64> %b) {1131; ALL-LABEL: shuffle_v8i64_10324567:1132; ALL: # %bb.0:1133; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,0,3,2,4,5,6,7]1134; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01135; ALL-NEXT: ret{{[l|q]}}1136 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>1137 ret <8 x i64> %shuffle1138}1139 1140define <8 x i64> @shuffle_v8i64_11334567(<8 x i64> %a, <8 x i64> %b) {1141; ALL-LABEL: shuffle_v8i64_11334567:1142; ALL: # %bb.0:1143; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,1,3,3,4,5,6,7]1144; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01145; ALL-NEXT: ret{{[l|q]}}1146 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7>1147 ret <8 x i64> %shuffle1148}1149 1150define <8 x i64> @shuffle_v8i64_01235467(<8 x i64> %a, <8 x i64> %b) {1151; ALL-LABEL: shuffle_v8i64_01235467:1152; ALL: # %bb.0:1153; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,1,2,3,5,4,6,7]1154; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01155; ALL-NEXT: ret{{[l|q]}}1156 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 7>1157 ret <8 x i64> %shuffle1158}1159 1160define <8 x i64> @shuffle_v8i64_01235466(<8 x i64> %a, <8 x i64> %b) {1161; ALL-LABEL: shuffle_v8i64_01235466:1162; ALL: # %bb.0:1163; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,1,2,3,5,4,6,6]1164; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01165; ALL-NEXT: ret{{[l|q]}}1166 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 6, i32 6>1167 ret <8 x i64> %shuffle1168}1169 1170define <8 x i64> @shuffle_v8i64_002u6u44(<8 x i64> %a, <8 x i64> %b) {1171; ALL-LABEL: shuffle_v8i64_002u6u44:1172; ALL: # %bb.0:1173; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,2,0,6,0,4,4]1174; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01175; ALL-NEXT: ret{{[l|q]}}1176 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 poison, i32 6, i32 poison, i32 4, i32 4>1177 ret <8 x i64> %shuffle1178}1179 1180define <8 x i64> @shuffle_v8i64_00uu66uu(<8 x i64> %a, <8 x i64> %b) {1181; ALL-LABEL: shuffle_v8i64_00uu66uu:1182; ALL: # %bb.0:1183; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,0,6,6,0,0]1184; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01185; ALL-NEXT: ret{{[l|q]}}1186 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 0, i32 poison, i32 poison, i32 6, i32 6, i32 poison, i32 poison>1187 ret <8 x i64> %shuffle1188}1189 1190define <8 x i64> @shuffle_v8i64_103245uu(<8 x i64> %a, <8 x i64> %b) {1191; ALL-LABEL: shuffle_v8i64_103245uu:1192; ALL: # %bb.0:1193; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,0,3,2,4,5,0,0]1194; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01195; ALL-NEXT: ret{{[l|q]}}1196 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 4, i32 5, i32 poison, i32 poison>1197 ret <8 x i64> %shuffle1198}1199 1200define <8 x i64> @shuffle_v8i64_1133uu67(<8 x i64> %a, <8 x i64> %b) {1201; ALL-LABEL: shuffle_v8i64_1133uu67:1202; ALL: # %bb.0:1203; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [1,1,3,3,0,0,6,7]1204; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01205; ALL-NEXT: ret{{[l|q]}}1206 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 poison, i32 poison, i32 6, i32 7>1207 ret <8 x i64> %shuffle1208}1209 1210define <8 x i64> @shuffle_v8i64_0uu354uu(<8 x i64> %a, <8 x i64> %b) {1211; ALL-LABEL: shuffle_v8i64_0uu354uu:1212; ALL: # %bb.0:1213; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,3,5,4,0,0]1214; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01215; ALL-NEXT: ret{{[l|q]}}1216 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 poison, i32 poison, i32 3, i32 5, i32 4, i32 poison, i32 poison>1217 ret <8 x i64> %shuffle1218}1219 1220define <8 x i64> @shuffle_v8i64_uuu3uu66(<8 x i64> %a, <8 x i64> %b) {1221; ALL-LABEL: shuffle_v8i64_uuu3uu66:1222; ALL: # %bb.0:1223; ALL-NEXT: vpmovsxbq {{.*#+}} zmm1 = [0,0,0,3,0,0,6,6]1224; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01225; ALL-NEXT: ret{{[l|q]}}1226 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 3, i32 poison, i32 poison, i32 6, i32 6>1227 ret <8 x i64> %shuffle1228}1229 1230define <8 x i64> @shuffle_v8i64_6caa87e5(<8 x i64> %a, <8 x i64> %b) {1231; ALL-LABEL: shuffle_v8i64_6caa87e5:1232; ALL: # %bb.0:1233; ALL-NEXT: vpmovsxbq {{.*#+}} zmm2 = [14,4,2,2,0,15,6,13]1234; ALL-NEXT: vpermi2q %zmm0, %zmm1, %zmm21235; ALL-NEXT: vmovdqa64 %zmm2, %zmm01236; ALL-NEXT: ret{{[l|q]}}1237 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 6, i32 12, i32 10, i32 10, i32 8, i32 7, i32 14, i32 5>1238 ret <8 x i64> %shuffle1239}1240 1241define <8 x i64> @shuffle_v8i64_34567zzz(<8 x i64> %a, <8 x i64> %b) {1242; ALL-LABEL: shuffle_v8i64_34567zzz:1243; ALL: # %bb.0:1244; ALL-NEXT: vpxor %xmm1, %xmm1, %xmm11245; ALL-NEXT: valignq {{.*#+}} zmm0 = zmm0[3,4,5,6,7],zmm1[0,1,2]1246; ALL-NEXT: ret{{[l|q]}}1247 %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8>1248 ret <8 x i64> %valign1249}1250 1251define <8 x i64> @shuffle_v8i64_zz012345(<8 x i64> %a, <8 x i64> %b) {1252; ALL-LABEL: shuffle_v8i64_zz012345:1253; ALL: # %bb.0:1254; ALL-NEXT: vpxor %xmm1, %xmm1, %xmm11255; ALL-NEXT: valignq {{.*#+}} zmm0 = zmm1[6,7],zmm0[0,1,2,3,4,5]1256; ALL-NEXT: ret{{[l|q]}}1257 %valign = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 8, i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5>1258 ret <8 x i64> %valign1259}1260 1261define <8 x double> @shuffle_v8f64_082a4c6e(<8 x double> %a, <8 x double> %b) {1262; ALL-LABEL: shuffle_v8f64_082a4c6e:1263; ALL: # %bb.0:1264; ALL-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1265; ALL-NEXT: ret{{[l|q]}}1266 %shuffle = 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>1267 ret <8 x double> %shuffle1268}1269 1270define <8 x double> @shuffle_v8f64_0z2z4z6z(<8 x double> %a, <8 x double> %b) {1271; ALL-LABEL: shuffle_v8f64_0z2z4z6z:1272; ALL: # %bb.0:1273; ALL-NEXT: vxorpd %xmm1, %xmm1, %xmm11274; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1275; ALL-NEXT: ret{{[l|q]}}1276 %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32><i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6, i32 8>1277 ret <8 x double> %shuffle1278}1279 1280define <8 x i64> @shuffle_v8i64_082a4c6e(<8 x i64> %a, <8 x i64> %b) {1281; ALL-LABEL: shuffle_v8i64_082a4c6e:1282; ALL: # %bb.0:1283; ALL-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1284; ALL-NEXT: ret{{[l|q]}}1285 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1286 ret <8 x i64> %shuffle1287}1288 1289define <8 x i64> @shuffle_v8i64_z8zazcze(<8 x i64> %a, <8 x i64> %b) {1290; ALL-LABEL: shuffle_v8i64_z8zazcze:1291; ALL: # %bb.0:1292; ALL-NEXT: vxorps %xmm0, %xmm0, %xmm01293; ALL-NEXT: vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1294; ALL-NEXT: ret{{[l|q]}}1295 %shuffle = shufflevector <8 x i64> zeroinitializer, <8 x i64> %b, <8 x i32><i32 7, i32 8, i32 5, i32 10, i32 3, i32 12, i32 1, i32 14>1296 ret <8 x i64> %shuffle1297}1298 1299define <8 x double> @shuffle_v8f64_193b5d7f(<8 x double> %a, <8 x double> %b) {1300; ALL-LABEL: shuffle_v8f64_193b5d7f:1301; ALL: # %bb.0:1302; ALL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]1303; ALL-NEXT: ret{{[l|q]}}1304 %shuffle = 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>1305 ret <8 x double> %shuffle1306}1307 1308define <8 x double> @shuffle_v8f64_z9zbzdzf(<8 x double> %a, <8 x double> %b) {1309; ALL-LABEL: shuffle_v8f64_z9zbzdzf:1310; ALL: # %bb.0:1311; ALL-NEXT: vxorpd %xmm0, %xmm0, %xmm01312; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]1313; ALL-NEXT: ret{{[l|q]}}1314 %shuffle = shufflevector <8 x double> zeroinitializer, <8 x double> %b, <8 x i32><i32 0, i32 9, i32 0, i32 11, i32 0, i32 13, i32 0, i32 15>1315 ret <8 x double> %shuffle1316}1317 1318define <8 x i64> @shuffle_v8i64_193b5d7f(<8 x i64> %a, <8 x i64> %b) {1319; ALL-LABEL: shuffle_v8i64_193b5d7f:1320; ALL: # %bb.0:1321; ALL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]1322; ALL-NEXT: ret{{[l|q]}}1323 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32><i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>1324 ret <8 x i64> %shuffle1325}1326 1327define <8 x i64> @shuffle_v8i64_1z3z5z7z(<8 x i64> %a, <8 x i64> %b) {1328; ALL-LABEL: shuffle_v8i64_1z3z5z7z:1329; ALL: # %bb.0:1330; ALL-NEXT: vxorps %xmm1, %xmm1, %xmm11331; ALL-NEXT: vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]1332; ALL-NEXT: ret{{[l|q]}}1333 %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 15, i32 5, i32 8, i32 7, i32 15>1334 ret <8 x i64> %shuffle1335}1336 1337define <8 x double> @test_vshuff64x2_512(<8 x double> %x, <8 x double> %x1) nounwind {1338; ALL-LABEL: test_vshuff64x2_512:1339; ALL: # %bb.0:1340; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],zmm1[2,3,0,1]1341; ALL-NEXT: ret{{[l|q]}}1342 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1343 ret <8 x double> %res1344}1345 1346define <8 x double> @test_vshuff64x2_512_maskz(<8 x double> %x, <8 x double> %x1, <8 x i1> %mask) nounwind {1347; ALL-LABEL: test_vshuff64x2_512_maskz:1348; ALL: # %bb.0:1349; ALL-NEXT: vpmovsxwq %xmm2, %zmm21350; ALL-NEXT: vpsllq $63, %zmm2, %zmm21351; ALL-NEXT: vptestmq %zmm2, %zmm2, %k11352; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],zmm1[2,3,0,1]1353; ALL-NEXT: ret{{[l|q]}}1354 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1355 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer1356 ret <8 x double> %res1357}1358 1359define <8 x i64> @test_vshufi64x2_512_mask(<8 x i64> %x, <8 x i64> %x1, <8 x i1> %mask) nounwind {1360; ALL-LABEL: test_vshufi64x2_512_mask:1361; ALL: # %bb.0:1362; ALL-NEXT: vpmovsxwq %xmm2, %zmm21363; ALL-NEXT: vpsllq $63, %zmm2, %zmm21364; ALL-NEXT: vptestmq %zmm2, %zmm2, %k11365; ALL-NEXT: vshufi64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],zmm1[2,3,0,1]1366; ALL-NEXT: ret{{[l|q]}}1367 %y = shufflevector <8 x i64> %x, <8 x i64> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1368 %res = select <8 x i1> %mask, <8 x i64> %y, <8 x i64> %x1369 ret <8 x i64> %res1370}1371 1372define <8 x double> @test_vshuff64x2_512_mem(<8 x double> %x, ptr%ptr) nounwind {1373; AVX512F-LABEL: test_vshuff64x2_512_mem:1374; AVX512F: # %bb.0:1375; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]1376; AVX512F-NEXT: retq1377;1378; AVX512F-32-LABEL: test_vshuff64x2_512_mem:1379; AVX512F-32: # %bb.0:1380; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax1381; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1]1382; AVX512F-32-NEXT: retl1383 %x1 = load <8 x double>,ptr%ptr,align 11384 %res = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1385 ret <8 x double> %res1386}1387 1388define <8 x double> @test_vshuff64x2_512_mem_mask(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {1389; AVX512F-LABEL: test_vshuff64x2_512_mem_mask:1390; AVX512F: # %bb.0:1391; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm11392; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm11393; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k11394; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]1395; AVX512F-NEXT: retq1396;1397; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask:1398; AVX512F-32: # %bb.0:1399; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm11400; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm11401; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k11402; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax1403; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1]1404; AVX512F-32-NEXT: retl1405 %x1 = load <8 x double>,ptr%ptr,align 11406 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1407 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> %x1408 ret <8 x double> %res1409}1410 1411define <8 x double> @test_vshuff64x2_512_mem_maskz(<8 x double> %x, ptr%ptr, <8 x i1> %mask) nounwind {1412; AVX512F-LABEL: test_vshuff64x2_512_mem_maskz:1413; AVX512F: # %bb.0:1414; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm11415; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm11416; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k11417; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]1418; AVX512F-NEXT: retq1419;1420; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz:1421; AVX512F-32: # %bb.0:1422; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm11423; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm11424; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k11425; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax1426; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1]1427; AVX512F-32-NEXT: retl1428 %x1 = load <8 x double>,ptr%ptr,align 11429 %y = shufflevector <8 x double> %x, <8 x double> %x1, <8 x i32> <i32 0, i32 1, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9>1430 %res = select <8 x i1> %mask, <8 x double> %y, <8 x double> zeroinitializer1431 ret <8 x double> %res1432}1433 1434define <8 x double> @shuffle_v8f64_23014567(<8 x double> %a0, <8 x double> %a1) {1435; ALL-LABEL: shuffle_v8f64_23014567:1436; ALL: # %bb.0:1437; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]1438; ALL-NEXT: ret{{[l|q]}}1439 %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7>1440 ret <8 x double> %11441}1442 1443define <8 x double> @shuffle_v8f64_2301uu67(<8 x double> %a0, <8 x double> %a1) {1444; ALL-LABEL: shuffle_v8f64_2301uu67:1445; ALL: # %bb.0:1446; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[2,3,0,1,4,5,6,7]1447; ALL-NEXT: ret{{[l|q]}}1448 %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 poison, i32 poison, i32 6, i32 7>1449 ret <8 x double> %11450}1451 1452define <8 x double> @shuffle_v8f64_2301uuuu(<8 x double> %a0, <8 x double> %a1) {1453; ALL-LABEL: shuffle_v8f64_2301uuuu:1454; ALL: # %bb.0:1455; ALL-NEXT: vpermpd {{.*#+}} ymm0 = ymm1[2,3,0,1]1456; ALL-NEXT: ret{{[l|q]}}1457 %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 2, i32 3, i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison>1458 ret <8 x double> %11459}1460 1461define <8 x double> @shuffle_v8f64_uuu2301(<8 x double> %a0, <8 x double> %a1) {1462; ALL-LABEL: shuffle_v8f64_uuu2301:1463; ALL: # %bb.0:1464; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm1[0,1,2,3,2,3,0,1]1465; ALL-NEXT: ret{{[l|q]}}1466 %1 = shufflevector <8 x double> %a1, <8 x double> poison, <8 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 2, i32 3, i32 0, i32 1>1467 ret <8 x double> %11468}1469 1470define <8 x i64> @shuffle_v8i64_0zzzzzzz(<8 x i64> %a) {1471; ALL-LABEL: shuffle_v8i64_0zzzzzzz:1472; ALL: # %bb.0:1473; ALL-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero1474; ALL-NEXT: ret{{[l|q]}}1475 %shuffle = shufflevector <8 x i64> %a, <8 x i64> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1476 ret <8 x i64> %shuffle1477}1478 1479define <8 x double> @shuffle_v8f64_0zzzzzzz(<8 x double> %a) {1480; ALL-LABEL: shuffle_v8f64_0zzzzzzz:1481; ALL: # %bb.0:1482; ALL-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero1483; ALL-NEXT: ret{{[l|q]}}1484 %shuffle = shufflevector <8 x double> %a, <8 x double> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1485 ret <8 x double> %shuffle1486}1487 1488define <8 x i64> @shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b) {1489; ALL-LABEL: shuffle_v8i64_12345678:1490; ALL: # %bb.0:1491; ALL-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7],zmm1[0]1492; ALL-NEXT: ret{{[l|q]}}1493 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>1494 ret <8 x i64> %shuffle1495}1496 1497define <8 x i64> @shuffle_v8i64_12345670(<8 x i64> %a) {1498; ALL-LABEL: shuffle_v8i64_12345670:1499; ALL: # %bb.0:1500; ALL-NEXT: valignq {{.*#+}} zmm0 = zmm0[1,2,3,4,5,6,7,0]1501; ALL-NEXT: ret{{[l|q]}}1502 %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>1503 ret <8 x i64> %shuffle1504}1505 1506define <8 x i64> @mask_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, <8 x i64> %passthru, i8 %mask) {1507; AVX512F-LABEL: mask_shuffle_v8i64_12345678:1508; AVX512F: # %bb.0:1509; AVX512F-NEXT: kmovw %edi, %k11510; AVX512F-NEXT: valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]1511; AVX512F-NEXT: vmovdqa64 %zmm2, %zmm01512; AVX512F-NEXT: retq1513;1514; AVX512F-32-LABEL: mask_shuffle_v8i64_12345678:1515; AVX512F-32: # %bb.0:1516; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax1517; AVX512F-32-NEXT: kmovw %eax, %k11518; AVX512F-32-NEXT: valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0]1519; AVX512F-32-NEXT: vmovdqa64 %zmm2, %zmm01520; AVX512F-32-NEXT: retl1521 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>1522 %mask.cast = bitcast i8 %mask to <8 x i1>1523 %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru1524 ret <8 x i64> %res1525}1526 1527define <8 x i64> @mask_shuffle_v8i64_12345670(<8 x i64> %a, <8 x i64> %passthru, i8 %mask) {1528; AVX512F-LABEL: mask_shuffle_v8i64_12345670:1529; AVX512F: # %bb.0:1530; AVX512F-NEXT: kmovw %edi, %k11531; AVX512F-NEXT: valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]1532; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm01533; AVX512F-NEXT: retq1534;1535; AVX512F-32-LABEL: mask_shuffle_v8i64_12345670:1536; AVX512F-32: # %bb.0:1537; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax1538; AVX512F-32-NEXT: kmovw %eax, %k11539; AVX512F-32-NEXT: valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0]1540; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm01541; AVX512F-32-NEXT: retl1542 %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>1543 %mask.cast = bitcast i8 %mask to <8 x i1>1544 %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> %passthru1545 ret <8 x i64> %res1546}1547 1548define <8 x i64> @maskz_shuffle_v8i64_12345678(<8 x i64> %a, <8 x i64> %b, i8 %mask) {1549; AVX512F-LABEL: maskz_shuffle_v8i64_12345678:1550; AVX512F: # %bb.0:1551; AVX512F-NEXT: kmovw %edi, %k11552; AVX512F-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]1553; AVX512F-NEXT: retq1554;1555; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345678:1556; AVX512F-32: # %bb.0:1557; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax1558; AVX512F-32-NEXT: kmovw %eax, %k11559; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0]1560; AVX512F-32-NEXT: retl1561 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>1562 %mask.cast = bitcast i8 %mask to <8 x i1>1563 %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer1564 ret <8 x i64> %res1565}1566 1567define <8 x i64> @maskz_shuffle_v8i64_12345670(<8 x i64> %a, i8 %mask) {1568; AVX512F-LABEL: maskz_shuffle_v8i64_12345670:1569; AVX512F: # %bb.0:1570; AVX512F-NEXT: kmovw %edi, %k11571; AVX512F-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]1572; AVX512F-NEXT: retq1573;1574; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345670:1575; AVX512F-32: # %bb.0:1576; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax1577; AVX512F-32-NEXT: kmovw %eax, %k11578; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0]1579; AVX512F-32-NEXT: retl1580 %shuffle = shufflevector <8 x i64> %a, <8 x i64> poison, <8 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0>1581 %mask.cast = bitcast i8 %mask to <8 x i1>1582 %res = select <8 x i1> %mask.cast, <8 x i64> %shuffle, <8 x i64> zeroinitializer1583 ret <8 x i64> %res1584}1585 1586define <8 x double> @shuffle_v8f64_012389AB(<8 x double> %a, <8 x double> %b) {1587; ALL-LABEL: shuffle_v8f64_012389AB:1588; ALL: # %bb.0:1589; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm01590; ALL-NEXT: ret{{[l|q]}}1591 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>1592 ret <8 x double> %shuffle1593}1594 1595define <8 x double> @shuffle_v8f64_89AB0123(<8 x double> %a, <8 x double> %b) {1596; ALL-LABEL: shuffle_v8f64_89AB0123:1597; ALL: # %bb.0:1598; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm01599; ALL-NEXT: ret{{[l|q]}}1600 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>1601 ret <8 x double> %shuffle1602}1603 1604define <8 x double> @shuffle_v8f64_01230123(<8 x double> %a, <8 x double> %b) {1605; ALL-LABEL: shuffle_v8f64_01230123:1606; ALL: # %bb.0:1607; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm01608; ALL-NEXT: ret{{[l|q]}}1609 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1610 ret <8 x double> %shuffle1611}1612 1613define <8 x i64> @shuffle_v8i64_012389AB(<8 x i64> %a, <8 x i64> %b) {1614; ALL-LABEL: shuffle_v8i64_012389AB:1615; ALL: # %bb.0:1616; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm01617; ALL-NEXT: ret{{[l|q]}}1618 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>1619 ret <8 x i64> %shuffle1620}1621 1622define <8 x i64> @shuffle_v8i64_89AB0123(<8 x i64> %a, <8 x i64> %b) {1623; ALL-LABEL: shuffle_v8i64_89AB0123:1624; ALL: # %bb.0:1625; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm1, %zmm01626; ALL-NEXT: ret{{[l|q]}}1627 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 0, i32 1, i32 2, i32 3>1628 ret <8 x i64> %shuffle1629}1630 1631define <8 x i64> @shuffle_v8i64_01230123(<8 x i64> %a, <8 x i64> %b) {1632; ALL-LABEL: shuffle_v8i64_01230123:1633; ALL: # %bb.0:1634; ALL-NEXT: vinsertf64x4 $1, %ymm0, %zmm0, %zmm01635; ALL-NEXT: ret{{[l|q]}}1636 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1637 ret <8 x i64> %shuffle1638}1639 1640define <8 x double> @shuffle_v8f64_89234567(<8 x double> %a, <8 x double> %b) {1641; ALL-LABEL: shuffle_v8f64_89234567:1642; ALL: # %bb.0:1643; ALL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm01644; ALL-NEXT: ret{{[l|q]}}1645 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1646 ret <8 x double> %shuffle1647}1648 1649define <8 x double> @shuffle_v8f64_01894567(<8 x double> %a, <8 x double> %b) {1650; ALL-LABEL: shuffle_v8f64_01894567:1651; ALL: # %bb.0:1652; ALL-NEXT: vinsertf32x4 $1, %xmm1, %zmm0, %zmm01653; ALL-NEXT: ret{{[l|q]}}1654 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>1655 ret <8 x double> %shuffle1656}1657 1658define <8 x double> @shuffle_v8f64_01238967(<8 x double> %a, <8 x double> %b) {1659; ALL-LABEL: shuffle_v8f64_01238967:1660; ALL: # %bb.0:1661; ALL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm01662; ALL-NEXT: ret{{[l|q]}}1663 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>1664 ret <8 x double> %shuffle1665}1666 1667define <8 x double> @shuffle_v8f64_01234589(<8 x double> %a, <8 x double> %b) {1668; ALL-LABEL: shuffle_v8f64_01234589:1669; ALL: # %bb.0:1670; ALL-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm01671; ALL-NEXT: ret{{[l|q]}}1672 %shuffle = shufflevector <8 x double> %a, <8 x double> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>1673 ret <8 x double> %shuffle1674}1675 1676define <8 x double> @concat_shuffle_v8f64_v2f64_10325476(<2 x double> %a0, <2 x double> %a1, <2 x double> %a2, <2 x double> %a3) nounwind {1677; AVX512F-LABEL: concat_shuffle_v8f64_v2f64_10325476:1678; AVX512F: # %bb.0:1679; AVX512F-NEXT: # kill: def $xmm2 killed $xmm2 def $ymm21680; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm01681; AVX512F-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm21682; AVX512F-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01683; AVX512F-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm01684; AVX512F-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]1685; AVX512F-NEXT: retq1686;1687; AVX512F-32-LABEL: concat_shuffle_v8f64_v2f64_10325476:1688; AVX512F-32: # %bb.0:1689; AVX512F-32-NEXT: subl $12, %esp1690; AVX512F-32-NEXT: # kill: def $xmm2 killed $xmm2 def $ymm21691; AVX512F-32-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm01692; AVX512F-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm01693; AVX512F-32-NEXT: vinsertf128 $1, {{[0-9]+}}(%esp), %ymm2, %ymm11694; AVX512F-32-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm01695; AVX512F-32-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]1696; AVX512F-32-NEXT: addl $12, %esp1697; AVX512F-32-NEXT: retl1698 %s0 = shufflevector <2 x double> %a0, <2 x double> poison, <2 x i32> <i32 1, i32 0>1699 %s1 = shufflevector <2 x double> %a1, <2 x double> poison, <2 x i32> <i32 1, i32 0>1700 %s2 = shufflevector <2 x double> %a2, <2 x double> poison, <2 x i32> <i32 1, i32 0>1701 %s3 = shufflevector <2 x double> %a3, <2 x double> poison, <2 x i32> <i32 1, i32 0>1702 %lo = shufflevector <2 x double> %s0, <2 x double> %s1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1703 %hi = shufflevector <2 x double> %s2, <2 x double> %s3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1704 %res = shufflevector <4 x double> %lo, <4 x double> %hi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1705 ret <8 x double> %res1706}1707 1708define <8 x double> @concat_shuffle_v8f64_v4f64_10325476(<4 x double> %a0, <4 x double> %a1) nounwind {1709; ALL-LABEL: concat_shuffle_v8f64_v4f64_10325476:1710; ALL: # %bb.0:1711; ALL-NEXT: # kill: def $ymm0 killed $ymm0 def $zmm01712; ALL-NEXT: vinsertf64x4 $1, %ymm1, %zmm0, %zmm01713; ALL-NEXT: vshufpd {{.*#+}} zmm0 = zmm0[1,0,3,2,5,4,7,6]1714; ALL-NEXT: ret{{[l|q]}}1715 %lo = shufflevector <4 x double> %a0, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>1716 %hi = shufflevector <4 x double> %a1, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2>1717 %res = shufflevector <4 x double> %lo, <4 x double> %hi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1718 ret <8 x double> %res1719}1720 1721define <8 x i64> @shuffle_v8i64_89234567(<8 x i64> %a, <8 x i64> %b) {1722; ALL-LABEL: shuffle_v8i64_89234567:1723; ALL: # %bb.0:1724; ALL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm01725; ALL-NEXT: ret{{[l|q]}}1726 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 8, i32 9, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1727 ret <8 x i64> %shuffle1728}1729 1730define <8 x i64> @shuffle_v8i64_01894567(<8 x i64> %a, <8 x i64> %b) {1731; ALL-LABEL: shuffle_v8i64_01894567:1732; ALL: # %bb.0:1733; ALL-NEXT: vinsertf32x4 $1, %xmm1, %zmm0, %zmm01734; ALL-NEXT: ret{{[l|q]}}1735 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 6, i32 7>1736 ret <8 x i64> %shuffle1737}1738 1739define <8 x i64> @shuffle_v8i64_01238967(<8 x i64> %a, <8 x i64> %b) {1740; ALL-LABEL: shuffle_v8i64_01238967:1741; ALL: # %bb.0:1742; ALL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm01743; ALL-NEXT: ret{{[l|q]}}1744 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 6, i32 7>1745 ret <8 x i64> %shuffle1746}1747 1748define <8 x i64> @shuffle_v8i64_01234589(<8 x i64> %a, <8 x i64> %b) {1749; ALL-LABEL: shuffle_v8i64_01234589:1750; ALL: # %bb.0:1751; ALL-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm01752; ALL-NEXT: ret{{[l|q]}}1753 %shuffle = shufflevector <8 x i64> %a, <8 x i64> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>1754 ret <8 x i64> %shuffle1755}1756 1757define <8 x i64> @shuffle_v8i64_23uuuuuu(<8 x i64> %a0, <8 x i64> %a1) {1758; ALL-LABEL: shuffle_v8i64_23uuuuuu:1759; ALL: # %bb.0:1760; ALL-NEXT: vextractf128 $1, %ymm0, %xmm01761; ALL-NEXT: ret{{[l|q]}}1762 %1 = shufflevector <8 x i64> %a0, <8 x i64> poison, <8 x i32> <i32 2, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1763 ret <8 x i64> %11764}1765 1766define <8 x i64> @shuffle_v8i64_45zzzzzz(<8 x i64> %a0, <8 x i64> %a1) {1767; ALL-LABEL: shuffle_v8i64_45zzzzzz:1768; ALL: # %bb.0:1769; ALL-NEXT: vextractf32x4 $2, %zmm0, %xmm01770; ALL-NEXT: ret{{[l|q]}}1771 %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>1772 ret <8 x i64> %11773}1774 1775define <8 x i64> @shuffle_v8i64_4567uuuu(<8 x i64> %a0, <8 x i64> %a1) {1776; ALL-LABEL: shuffle_v8i64_4567uuuu:1777; ALL: # %bb.0:1778; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm01779; ALL-NEXT: ret{{[l|q]}}1780 %1 = shufflevector <8 x i64> %a0, <8 x i64> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>1781 ret <8 x i64> %11782}1783 1784define <8 x i64> @shuffle_v8i64_uu67zzzz(<8 x i64> %a0, <8 x i64> %a1) {1785; ALL-LABEL: shuffle_v8i64_uu67zzzz:1786; ALL: # %bb.0:1787; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm01788; ALL-NEXT: ret{{[l|q]}}1789 %1 = shufflevector <8 x i64> %a0, <8 x i64> zeroinitializer, <8 x i32> <i32 poison, i32 poison, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8>1790 ret <8 x i64> %11791}1792 1793define <8 x double> @shuffle_v4f64_v8f64_22222222(<4 x double> %a) {1794; ALL-LABEL: shuffle_v4f64_v8f64_22222222:1795; ALL: # %bb.0:1796; ALL-NEXT: vextractf128 $1, %ymm0, %xmm01797; ALL-NEXT: vbroadcastsd %xmm0, %zmm01798; ALL-NEXT: ret{{[l|q]}}1799 %shuffle = shufflevector <4 x double> %a, <4 x double> poison, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>1800 ret <8 x double> %shuffle1801}1802 1803define <8 x i64> @shuffle_v2i64_v8i64_01010101(<2 x i64> %a) {1804; ALL-LABEL: shuffle_v2i64_v8i64_01010101:1805; ALL: # %bb.0:1806; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01807; ALL-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]1808; ALL-NEXT: ret{{[l|q]}}1809 %shuffle = shufflevector <2 x i64> %a, <2 x i64> poison, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1810 ret <8 x i64> %shuffle1811}1812 1813define <8 x double> @shuffle_v2f64_v8f64_01010101(<2 x double> %a) {1814; ALL-LABEL: shuffle_v2f64_v8f64_01010101:1815; ALL: # %bb.0:1816; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm01817; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1]1818; ALL-NEXT: ret{{[l|q]}}1819 %shuffle = shufflevector <2 x double> %a, <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1820 ret <8 x double> %shuffle1821}1822 1823;FIXME: compressp1824define <4 x double> @test_v8f64_2346 (<8 x double> %v) {1825; ALL-LABEL: test_v8f64_2346:1826; ALL: # %bb.0:1827; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [2,3,4,6]1828; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01829; ALL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01830; ALL-NEXT: ret{{[l|q]}}1831 %res = shufflevector <8 x double> %v, <8 x double> poison, <4 x i32> <i32 2, i32 3, i32 4, i32 6>1832 ret <4 x double> %res1833}1834 1835;FIXME: compressp1836define <2 x double> @test_v8f64_34 (<8 x double> %v) {1837; ALL-LABEL: test_v8f64_34:1838; ALL: # %bb.0:1839; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [3,4]1840; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01841; ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01842; ALL-NEXT: vzeroupper1843; ALL-NEXT: ret{{[l|q]}}1844 %res = shufflevector <8 x double> %v, <8 x double> poison, <2 x i32> <i32 3, i32 4>1845 ret <2 x double> %res1846}1847 1848; FIXME: vpcompress1849define <4 x i64> @test_v8i64_1257 (<8 x i64> %v) {1850; ALL-LABEL: test_v8i64_1257:1851; ALL: # %bb.0:1852; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [1,2,5,7]1853; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01854; ALL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm01855; ALL-NEXT: ret{{[l|q]}}1856 %res = shufflevector <8 x i64> %v, <8 x i64> poison, <4 x i32> <i32 1, i32 2, i32 5, i32 7>1857 ret <4 x i64> %res1858}1859 1860define <2 x i64> @test_v8i64_2_5 (<8 x i64> %v) {1861; ALL-LABEL: test_v8i64_2_5:1862; ALL: # %bb.0:1863; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [2,5]1864; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm01865; ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm01866; ALL-NEXT: vzeroupper1867; ALL-NEXT: ret{{[l|q]}}1868 %res = shufflevector <8 x i64> %v, <8 x i64> poison, <2 x i32> <i32 2, i32 5>1869 ret <2 x i64> %res1870}1871 1872define <8 x i64> @test_v8i64_insert_zero_128(<8 x i64> %a) {1873; ALL-LABEL: test_v8i64_insert_zero_128:1874; ALL: # %bb.0:1875; ALL-NEXT: vmovaps %xmm0, %xmm01876; ALL-NEXT: ret{{[l|q]}}1877 %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 poison, i64 poison, i64 poison, i64 poison>, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 8, i32 9, i32 8, i32 9>1878 ret <8 x i64> %res1879}1880 1881define <8 x i64> @test_v8i64_insert_zero_256(<8 x i64> %a) {1882; ALL-LABEL: test_v8i64_insert_zero_256:1883; ALL: # %bb.0:1884; ALL-NEXT: vmovaps %ymm0, %ymm01885; ALL-NEXT: ret{{[l|q]}}1886 %res = shufflevector <8 x i64> %a, <8 x i64> <i64 0, i64 0, i64 0, i64 0, i64 poison, i64 poison, i64 poison, i64 poison>, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 8, i32 9>1887 ret <8 x i64> %res1888}1889