1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F 3; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX512F-32 4 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, %zmm0 9; 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> %shuffle 12} 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, %xmm0 18; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 19; 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> %shuffle 22} 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, %xmm0 28; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 29; 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> %shuffle 32} 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, %xmm0 38; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 39; 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> %shuffle 44} 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, %zmm0 51; 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> %shuffle 54} 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, %zmm0 61; 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> %shuffle 64} 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, %zmm0 71; 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> %shuffle 74} 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, %zmm0 81; 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> %shuffle 84} 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, %zmm0 91; 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> %shuffle 94} 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, %zmm0 101; 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> %shuffle 104} 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, %zmm0 111; 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> %shuffle 114} 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> %shuffle 123} 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, %zmm0 130; 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> %shuffle 133} 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, %zmm0 140; 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> %shuffle 143} 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> %shuffle 152} 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, %zmm0 160; AVX512F-NEXT: retq 161; 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, %zmm0 167; AVX512F-32-NEXT: retl 168 %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> %shuffle 170} 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, %zmm0 177; 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> %shuffle 180} 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, %zmm2 187; ALL-NEXT: vmovapd %zmm2, %zmm0 188; 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> %shuffle 191} 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, %zmm2 198; ALL-NEXT: vmovapd %zmm2, %zmm0 199; 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> %shuffle 202} 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, %zmm2 209; ALL-NEXT: vmovapd %zmm2, %zmm0 210; 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> %shuffle 213} 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, %zmm0 220; 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> %shuffle 223} 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, %zmm0 230; 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> %shuffle 233} 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, %zmm0 240; 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> %shuffle 243} 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, %zmm2 250; ALL-NEXT: vmovapd %zmm2, %zmm0 251; 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> %shuffle 254} 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, %zmm0 261; 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> %shuffle 264} 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, %zmm2 271; ALL-NEXT: vmovapd %zmm2, %zmm0 272; 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> %shuffle 275} 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> %shuffle 284} 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> %shuffle 293} 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> %shuffle 302} 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> %shuffle 311} 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> %shuffle 320} 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> %shuffle 329} 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> %shuffle 338} 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> %shuffle 347} 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> %shuffle 356} 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> %shuffle 365} 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> %shuffle 374} 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> %shuffle 383} 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> %shuffle 392} 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, %zmm0 399; 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> %shuffle 402} 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, %zmm0 409; 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> %shuffle 412} 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, %zmm0 419; 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> %shuffle 422} 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, %zmm0 429; 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> %shuffle 432} 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, %zmm0 439; 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> %shuffle 442} 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, %zmm0 449; 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> %shuffle 452} 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, %zmm0 459; 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> %shuffle 462} 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, %zmm0 469; 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> %shuffle 472} 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, %zmm0 479; 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> %shuffle 482} 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> %shuffle 491} 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> %shuffle 500} 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> %shuffle 509} 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> %shuffle 518} 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, %zmm0 525; 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> %shuffle 528} 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, %zmm0 535; 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> %shuffle 538} 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> %shuffle 547} 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> %shuffle 556} 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> %shuffle 565} 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> %shuffle 574} 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, %zmm2 581; ALL-NEXT: vmovapd %zmm2, %zmm0 582; 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> %shuffle 585} 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, %zmm0 592; 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> %shuffle 595} 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, %xmm1 601; 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> %shuffle 605} 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, %xmm0 611; 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> %1 614} 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, %xmm0 620; 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> %1 623} 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, %ymm0 629; 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> %1 632} 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, %ymm0 638; 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> %1 641} 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, %zmm0 647; 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> %shuffle 650} 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, %xmm0 656; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 657; 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> %shuffle 660} 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, %xmm0 666; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 667; 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> %shuffle 670} 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, %zmm0 677; 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> %shuffle 680} 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, %zmm0 687; 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> %shuffle 690} 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, %zmm0 697; 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> %shuffle 700} 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, %zmm0 707; 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> %shuffle 710} 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, %zmm0 717; 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> %shuffle 720} 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, %zmm0 727; 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> %shuffle 730} 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, %zmm0 737; 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> %shuffle 740} 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> %shuffle 750} 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: retq 757; 758; AVX512F-32-LABEL: shuffle_v8i64_01014545_mem: 759; AVX512F-32: # %bb.0: 760; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax 761; AVX512F-32-NEXT: vpermpd {{.*#+}} zmm0 = mem[0,1,0,1,4,5,4,5] 762; AVX512F-32-NEXT: retl 763 764 %a = load <8 x i64>, ptr %ptr 765 %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> %shuffle 767} 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, %zmm0 774; 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> %shuffle 777} 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, %zmm0 784; 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> %shuffle 787} 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, %al 793; ALL-NEXT: kmovw %eax, %k1 794; 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> %shuffle 798} 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, %zmm0 806; AVX512F-NEXT: retq 807; 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, %zmm0 813; AVX512F-32-NEXT: retl 814 %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> %shuffle 816} 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, %zmm0 823; 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> %shuffle 826} 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, %zmm2 833; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 834; 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> %shuffle 837} 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, %zmm2 844; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 845; 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> %shuffle 848} 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, %zmm2 855; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 856; 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> %shuffle 859} 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, %zmm0 866; 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> %shuffle 869} 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, %zmm0 876; 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> %shuffle 879} 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, %zmm0 886; 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> %shuffle 889} 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, %zmm2 896; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 897; 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> %shuffle 900} 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, %zmm0 907; 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> %shuffle 910} 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, %zmm2 917; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 918; 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> %shuffle 921} 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> %shuffle 930} 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> %shuffle 939} 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> %shuffle 948} 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> %shuffle 957} 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> %shuffle 966} 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> %shuffle 975} 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> %shuffle 984} 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> %shuffle 993} 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> %shuffle 1002} 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> %shuffle 1011} 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> %shuffle 1020} 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> %shuffle 1029} 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> %shuffle 1038} 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, %zmm0 1045; 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> %shuffle 1048} 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, %zmm0 1055; 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> %shuffle 1058} 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, %zmm0 1065; 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> %shuffle 1068} 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, %zmm0 1075; 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> %shuffle 1078} 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, %zmm0 1085; 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> %shuffle 1088} 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, %zmm0 1095; 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> %shuffle 1098} 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, %zmm0 1105; 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> %shuffle 1108} 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, %zmm0 1115; 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> %shuffle 1118} 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, %zmm0 1125; 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> %shuffle 1128} 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, %zmm0 1135; 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> %shuffle 1138} 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, %zmm0 1145; 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> %shuffle 1148} 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, %zmm0 1155; 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> %shuffle 1158} 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, %zmm0 1165; 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> %shuffle 1168} 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, %zmm0 1175; 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> %shuffle 1178} 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, %zmm0 1185; 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> %shuffle 1188} 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, %zmm0 1195; 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> %shuffle 1198} 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, %zmm0 1205; 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> %shuffle 1208} 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, %zmm0 1215; 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> %shuffle 1218} 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, %zmm0 1225; 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> %shuffle 1228} 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, %zmm2 1235; ALL-NEXT: vmovdqa64 %zmm2, %zmm0 1236; 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> %shuffle 1239} 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, %xmm1 1245; 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> %valign 1249} 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, %xmm1 1255; 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> %valign 1259} 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> %shuffle 1268} 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, %xmm1 1274; 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> %shuffle 1278} 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> %shuffle 1287} 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, %xmm0 1293; 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> %shuffle 1297} 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> %shuffle 1306} 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, %xmm0 1312; 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> %shuffle 1316} 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> %shuffle 1325} 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, %xmm1 1331; 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> %shuffle 1335} 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> %res 1344} 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, %zmm2 1350; ALL-NEXT: vpsllq $63, %zmm2, %zmm2 1351; ALL-NEXT: vptestmq %zmm2, %zmm2, %k1 1352; 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> zeroinitializer 1356 ret <8 x double> %res 1357} 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, %zmm2 1363; ALL-NEXT: vpsllq $63, %zmm2, %zmm2 1364; ALL-NEXT: vptestmq %zmm2, %zmm2, %k1 1365; 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> %x 1369 ret <8 x i64> %res 1370} 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: retq 1377; 1378; AVX512F-32-LABEL: test_vshuff64x2_512_mem: 1379; AVX512F-32: # %bb.0: 1380; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax 1381; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,4,5],mem[2,3,0,1] 1382; AVX512F-32-NEXT: retl 1383 %x1 = load <8 x double>,ptr%ptr,align 1 1384 %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> %res 1386} 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, %zmm1 1392; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1 1393; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1 1394; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1] 1395; AVX512F-NEXT: retq 1396; 1397; AVX512F-32-LABEL: test_vshuff64x2_512_mem_mask: 1398; AVX512F-32: # %bb.0: 1399; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1 1400; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm1 1401; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1 1402; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax 1403; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} = zmm0[0,1,4,5],mem[2,3,0,1] 1404; AVX512F-32-NEXT: retl 1405 %x1 = load <8 x double>,ptr%ptr,align 1 1406 %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> %x 1408 ret <8 x double> %res 1409} 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, %zmm1 1415; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1 1416; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1 1417; AVX512F-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1] 1418; AVX512F-NEXT: retq 1419; 1420; AVX512F-32-LABEL: test_vshuff64x2_512_mem_maskz: 1421; AVX512F-32: # %bb.0: 1422; AVX512F-32-NEXT: vpmovsxwq %xmm1, %zmm1 1423; AVX512F-32-NEXT: vpsllq $63, %zmm1, %zmm1 1424; AVX512F-32-NEXT: vptestmq %zmm1, %zmm1, %k1 1425; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax 1426; AVX512F-32-NEXT: vshuff64x2 {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,4,5],mem[2,3,0,1] 1427; AVX512F-32-NEXT: retl 1428 %x1 = load <8 x double>,ptr%ptr,align 1 1429 %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> zeroinitializer 1431 ret <8 x double> %res 1432} 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> %1 1441} 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> %1 1450} 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> %1 1459} 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> %1 1468} 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],zero 1474; 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> %shuffle 1477} 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],zero 1483; 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> %shuffle 1486} 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> %shuffle 1495} 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> %shuffle 1504} 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, %k1 1510; AVX512F-NEXT: valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0] 1511; AVX512F-NEXT: vmovdqa64 %zmm2, %zmm0 1512; AVX512F-NEXT: retq 1513; 1514; AVX512F-32-LABEL: mask_shuffle_v8i64_12345678: 1515; AVX512F-32: # %bb.0: 1516; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax 1517; AVX512F-32-NEXT: kmovw %eax, %k1 1518; AVX512F-32-NEXT: valignq {{.*#+}} zmm2 {%k1} = zmm0[1,2,3,4,5,6,7],zmm1[0] 1519; AVX512F-32-NEXT: vmovdqa64 %zmm2, %zmm0 1520; AVX512F-32-NEXT: retl 1521 %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> %passthru 1524 ret <8 x i64> %res 1525} 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, %k1 1531; AVX512F-NEXT: valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0] 1532; AVX512F-NEXT: vmovdqa64 %zmm1, %zmm0 1533; AVX512F-NEXT: retq 1534; 1535; AVX512F-32-LABEL: mask_shuffle_v8i64_12345670: 1536; AVX512F-32: # %bb.0: 1537; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax 1538; AVX512F-32-NEXT: kmovw %eax, %k1 1539; AVX512F-32-NEXT: valignq {{.*#+}} zmm1 {%k1} = zmm0[1,2,3,4,5,6,7,0] 1540; AVX512F-32-NEXT: vmovdqa64 %zmm1, %zmm0 1541; AVX512F-32-NEXT: retl 1542 %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> %passthru 1545 ret <8 x i64> %res 1546} 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, %k1 1552; AVX512F-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0] 1553; AVX512F-NEXT: retq 1554; 1555; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345678: 1556; AVX512F-32: # %bb.0: 1557; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax 1558; AVX512F-32-NEXT: kmovw %eax, %k1 1559; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7],zmm1[0] 1560; AVX512F-32-NEXT: retl 1561 %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> zeroinitializer 1564 ret <8 x i64> %res 1565} 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, %k1 1571; AVX512F-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0] 1572; AVX512F-NEXT: retq 1573; 1574; AVX512F-32-LABEL: maskz_shuffle_v8i64_12345670: 1575; AVX512F-32: # %bb.0: 1576; AVX512F-32-NEXT: movzbl {{[0-9]+}}(%esp), %eax 1577; AVX512F-32-NEXT: kmovw %eax, %k1 1578; AVX512F-32-NEXT: valignq {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2,3,4,5,6,7,0] 1579; AVX512F-32-NEXT: retl 1580 %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> zeroinitializer 1583 ret <8 x i64> %res 1584} 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, %zmm0 1590; 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> %shuffle 1593} 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, %zmm0 1599; 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> %shuffle 1602} 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, %zmm0 1608; 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> %shuffle 1611} 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, %zmm0 1617; 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> %shuffle 1620} 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, %zmm0 1626; 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> %shuffle 1629} 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, %zmm0 1635; 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> %shuffle 1638} 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, %zmm0 1644; 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> %shuffle 1647} 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, %zmm0 1653; 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> %shuffle 1656} 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, %zmm0 1662; 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> %shuffle 1665} 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, %zmm0 1671; 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> %shuffle 1674} 1675 1676define <8 x i64> @shuffle_v8i64_89234567(<8 x i64> %a, <8 x i64> %b) { 1677; ALL-LABEL: shuffle_v8i64_89234567: 1678; ALL: # %bb.0: 1679; ALL-NEXT: vinsertf32x4 $0, %xmm1, %zmm0, %zmm0 1680; ALL-NEXT: ret{{[l|q]}} 1681 %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> 1682 ret <8 x i64> %shuffle 1683} 1684 1685define <8 x i64> @shuffle_v8i64_01894567(<8 x i64> %a, <8 x i64> %b) { 1686; ALL-LABEL: shuffle_v8i64_01894567: 1687; ALL: # %bb.0: 1688; ALL-NEXT: vinsertf32x4 $1, %xmm1, %zmm0, %zmm0 1689; ALL-NEXT: ret{{[l|q]}} 1690 %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> 1691 ret <8 x i64> %shuffle 1692} 1693 1694define <8 x i64> @shuffle_v8i64_01238967(<8 x i64> %a, <8 x i64> %b) { 1695; ALL-LABEL: shuffle_v8i64_01238967: 1696; ALL: # %bb.0: 1697; ALL-NEXT: vinsertf32x4 $2, %xmm1, %zmm0, %zmm0 1698; ALL-NEXT: ret{{[l|q]}} 1699 %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> 1700 ret <8 x i64> %shuffle 1701} 1702 1703define <8 x i64> @shuffle_v8i64_01234589(<8 x i64> %a, <8 x i64> %b) { 1704; ALL-LABEL: shuffle_v8i64_01234589: 1705; ALL: # %bb.0: 1706; ALL-NEXT: vinsertf32x4 $3, %xmm1, %zmm0, %zmm0 1707; ALL-NEXT: ret{{[l|q]}} 1708 %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> 1709 ret <8 x i64> %shuffle 1710} 1711 1712define <8 x i64> @shuffle_v8i64_23uuuuuu(<8 x i64> %a0, <8 x i64> %a1) { 1713; ALL-LABEL: shuffle_v8i64_23uuuuuu: 1714; ALL: # %bb.0: 1715; ALL-NEXT: vextractf128 $1, %ymm0, %xmm0 1716; ALL-NEXT: ret{{[l|q]}} 1717 %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> 1718 ret <8 x i64> %1 1719} 1720 1721define <8 x i64> @shuffle_v8i64_45zzzzzz(<8 x i64> %a0, <8 x i64> %a1) { 1722; ALL-LABEL: shuffle_v8i64_45zzzzzz: 1723; ALL: # %bb.0: 1724; ALL-NEXT: vextractf32x4 $2, %zmm0, %xmm0 1725; ALL-NEXT: ret{{[l|q]}} 1726 %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> 1727 ret <8 x i64> %1 1728} 1729 1730define <8 x i64> @shuffle_v8i64_4567uuuu(<8 x i64> %a0, <8 x i64> %a1) { 1731; ALL-LABEL: shuffle_v8i64_4567uuuu: 1732; ALL: # %bb.0: 1733; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0 1734; ALL-NEXT: ret{{[l|q]}} 1735 %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> 1736 ret <8 x i64> %1 1737} 1738 1739define <8 x i64> @shuffle_v8i64_uu67zzzz(<8 x i64> %a0, <8 x i64> %a1) { 1740; ALL-LABEL: shuffle_v8i64_uu67zzzz: 1741; ALL: # %bb.0: 1742; ALL-NEXT: vextractf64x4 $1, %zmm0, %ymm0 1743; ALL-NEXT: ret{{[l|q]}} 1744 %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> 1745 ret <8 x i64> %1 1746} 1747 1748define <8 x double> @shuffle_v4f64_v8f64_22222222(<4 x double> %a) { 1749; ALL-LABEL: shuffle_v4f64_v8f64_22222222: 1750; ALL: # %bb.0: 1751; ALL-NEXT: vextractf128 $1, %ymm0, %xmm0 1752; ALL-NEXT: vbroadcastsd %xmm0, %zmm0 1753; ALL-NEXT: ret{{[l|q]}} 1754 %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> 1755 ret <8 x double> %shuffle 1756} 1757 1758define <8 x i64> @shuffle_v2i64_v8i64_01010101(<2 x i64> %a) { 1759; ALL-LABEL: shuffle_v2i64_v8i64_01010101: 1760; ALL: # %bb.0: 1761; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 1762; ALL-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1] 1763; ALL-NEXT: ret{{[l|q]}} 1764 %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> 1765 ret <8 x i64> %shuffle 1766} 1767 1768define <8 x double> @shuffle_v2f64_v8f64_01010101(<2 x double> %a) { 1769; ALL-LABEL: shuffle_v2f64_v8f64_01010101: 1770; ALL: # %bb.0: 1771; ALL-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0 1772; ALL-NEXT: vshuff64x2 {{.*#+}} zmm0 = zmm0[0,1,0,1,0,1,0,1] 1773; ALL-NEXT: ret{{[l|q]}} 1774 %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> 1775 ret <8 x double> %shuffle 1776} 1777 1778;FIXME: compressp 1779define <4 x double> @test_v8f64_2346 (<8 x double> %v) { 1780; ALL-LABEL: test_v8f64_2346: 1781; ALL: # %bb.0: 1782; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [2,3,4,6] 1783; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0 1784; ALL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1785; ALL-NEXT: ret{{[l|q]}} 1786 %res = shufflevector <8 x double> %v, <8 x double> poison, <4 x i32> <i32 2, i32 3, i32 4, i32 6> 1787 ret <4 x double> %res 1788} 1789 1790;FIXME: compressp 1791define <2 x double> @test_v8f64_34 (<8 x double> %v) { 1792; ALL-LABEL: test_v8f64_34: 1793; ALL: # %bb.0: 1794; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [3,4] 1795; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0 1796; ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 1797; ALL-NEXT: vzeroupper 1798; ALL-NEXT: ret{{[l|q]}} 1799 %res = shufflevector <8 x double> %v, <8 x double> poison, <2 x i32> <i32 3, i32 4> 1800 ret <2 x double> %res 1801} 1802 1803; FIXME: vpcompress 1804define <4 x i64> @test_v8i64_1257 (<8 x i64> %v) { 1805; ALL-LABEL: test_v8i64_1257: 1806; ALL: # %bb.0: 1807; ALL-NEXT: vpmovsxbq {{.*#+}} ymm1 = [1,2,5,7] 1808; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0 1809; ALL-NEXT: # kill: def $ymm0 killed $ymm0 killed $zmm0 1810; ALL-NEXT: ret{{[l|q]}} 1811 %res = shufflevector <8 x i64> %v, <8 x i64> poison, <4 x i32> <i32 1, i32 2, i32 5, i32 7> 1812 ret <4 x i64> %res 1813} 1814 1815define <2 x i64> @test_v8i64_2_5 (<8 x i64> %v) { 1816; ALL-LABEL: test_v8i64_2_5: 1817; ALL: # %bb.0: 1818; ALL-NEXT: vpmovsxbq {{.*#+}} xmm1 = [2,5] 1819; ALL-NEXT: vpermpd %zmm0, %zmm1, %zmm0 1820; ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0 1821; ALL-NEXT: vzeroupper 1822; ALL-NEXT: ret{{[l|q]}} 1823 %res = shufflevector <8 x i64> %v, <8 x i64> poison, <2 x i32> <i32 2, i32 5> 1824 ret <2 x i64> %res 1825} 1826 1827define <8 x i64> @test_v8i64_insert_zero_128(<8 x i64> %a) { 1828; ALL-LABEL: test_v8i64_insert_zero_128: 1829; ALL: # %bb.0: 1830; ALL-NEXT: vmovaps %xmm0, %xmm0 1831; ALL-NEXT: ret{{[l|q]}} 1832 %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> 1833 ret <8 x i64> %res 1834} 1835 1836define <8 x i64> @test_v8i64_insert_zero_256(<8 x i64> %a) { 1837; ALL-LABEL: test_v8i64_insert_zero_256: 1838; ALL: # %bb.0: 1839; ALL-NEXT: vmovaps %ymm0, %ymm0 1840; ALL-NEXT: ret{{[l|q]}} 1841 %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> 1842 ret <8 x i64> %res 1843} 1844