1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX1 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX2 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=knl -mattr=+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0000(<4 x double> %a, <4 x double> %b) { 9*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0000: 10*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 11*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 12*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 13*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 14*9880d681SAndroid Build Coastguard Worker; 15*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0000: 16*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 17*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0 18*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 19*9880d681SAndroid Build Coastguard Worker; 20*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0000: 21*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 22*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vbroadcastsd %xmm0, %ymm0 23*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 24*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 25*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0001(<4 x double> %a, <4 x double> %b) { 29*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0001: 30*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm1 = xmm0[0,0] 32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 34*9880d681SAndroid Build Coastguard Worker; 35*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0001: 36*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 37*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1] 38*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 39*9880d681SAndroid Build Coastguard Worker; 40*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0001: 41*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 42*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,0,1] 43*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 44*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1> 45*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0020(<4 x double> %a, <4 x double> %b) { 49*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0020: 50*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 51*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 52*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0] 53*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 54*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 55*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 56*9880d681SAndroid Build Coastguard Worker; 57*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0020: 58*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 59*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0] 60*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker; 62*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0020: 63*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 64*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0] 65*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0> 67*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0300(<4 x double> %a, <4 x double> %b) { 71*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0300: 72*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 73*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1] 74*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[0,1,2,2] 75*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] 76*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0300: 79*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0] 81*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 82*9880d681SAndroid Build Coastguard Worker; 83*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0300: 84*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 85*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,3,0,0] 86*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 87*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0> 88*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1000(<4 x double> %a, <4 x double> %b) { 92*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_1000: 93*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm0[1,0] 95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 98*9880d681SAndroid Build Coastguard Worker; 99*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_1000: 100*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0] 102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 103*9880d681SAndroid Build Coastguard Worker; 104*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_1000: 105*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 106*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[1,0,0,0] 107*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 108*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0> 109*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_2200(<4 x double> %a, <4 x double> %b) { 113*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_2200: 114*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] 117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 118*9880d681SAndroid Build Coastguard Worker; 119*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_2200: 120*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0] 122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 123*9880d681SAndroid Build Coastguard Worker; 124*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_2200: 125*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 126*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,0,0] 127*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 128*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0> 129*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3330(<4 x double> %a, <4 x double> %b) { 133*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3330: 134*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1] 136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3] 137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,2] 138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 139*9880d681SAndroid Build Coastguard Worker; 140*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3330: 141*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0] 143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 144*9880d681SAndroid Build Coastguard Worker; 145*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3330: 146*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 147*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,0] 148*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 149*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0> 150*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3210(<4 x double> %a, <4 x double> %b) { 154*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3210: 155*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] 158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 159*9880d681SAndroid Build Coastguard Worker; 160*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3210: 161*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0] 163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 164*9880d681SAndroid Build Coastguard Worker; 165*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3210: 166*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 167*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,2,1,0] 168*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 169*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0> 170*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0023(<4 x double> %a, <4 x double> %b) { 174*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0023: 175*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 176*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,0,2,3] 177*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 3> 180*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) { 184*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0022: 185*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 186*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] 187*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 188*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 189*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 190*9880d681SAndroid Build Coastguard Worker} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64mem_0022(<4 x double>* %ptr, <4 x double> %b) { 193*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64mem_0022: 194*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 195*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovddup {{.*#+}} ymm0 = mem[0,0,2,2] 196*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 197*9880d681SAndroid Build Coastguard Worker %a = load <4 x double>, <4 x double>* %ptr 198*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 199*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 200*9880d681SAndroid Build Coastguard Worker} 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1032(<4 x double> %a, <4 x double> %b) { 203*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1032: 204*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 205*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 206*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 207*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 3, i32 2> 208*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 209*9880d681SAndroid Build Coastguard Worker} 210*9880d681SAndroid Build Coastguard Worker 211*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1133(<4 x double> %a, <4 x double> %b) { 212*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1133: 213*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 214*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3] 215*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 216*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 217*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1023(<4 x double> %a, <4 x double> %b) { 221*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1023: 222*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 223*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,3] 224*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 225*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 3> 226*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1022(<4 x double> %a, <4 x double> %b) { 230*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1022: 231*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 232*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,2,2] 233*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 234*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 2, i32 2> 235*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0423(<4 x double> %a, <4 x double> %b) { 239*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0423: 240*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 241*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovddup {{.*#+}} xmm1 = xmm1[0,0] 242*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3] 243*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 244*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 3> 245*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0462(<4 x double> %a, <4 x double> %b) { 249*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0462: 250*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 251*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2] 252*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] 253*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2],ymm0[3] 254*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 255*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 6, i32 2> 256*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0426(<4 x double> %a, <4 x double> %b) { 260*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0426: 261*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 264*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 2, i32 6> 265*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1537(<4 x double> %a, <4 x double> %b) { 269*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1537: 270*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 271*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] 272*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 273*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 3, i32 7> 274*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4062(<4 x double> %a, <4 x double> %b) { 278*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_4062: 279*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 280*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 281*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 282*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2> 283*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5173(<4 x double> %a, <4 x double> %b) { 287*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_5173: 288*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 289*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[3],ymm0[3] 290*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 291*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 7, i32 3> 292*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) { 296*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_5163: 297*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 298*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vshufpd {{.*#+}} ymm0 = ymm1[1],ymm0[1],ymm1[2],ymm0[3] 299*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 300*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3> 301*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0527(<4 x double> %a, <4 x double> %b) { 305*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0527: 306*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 307*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3] 308*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 309*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 5, i32 2, i32 7> 310*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 311*9880d681SAndroid Build Coastguard Worker} 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4163(<4 x double> %a, <4 x double> %b) { 314*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_4163: 315*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 316*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3] 317*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 318*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 1, i32 6, i32 3> 319*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 320*9880d681SAndroid Build Coastguard Worker} 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0145(<4 x double> %a, <4 x double> %b) { 323*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0145: 324*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 327*9880d681SAndroid Build Coastguard Worker; 328*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0145: 329*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 332*9880d681SAndroid Build Coastguard Worker; 333*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0145: 334*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 335*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinsertf32x4 $1, %xmm1, %ymm0, %ymm0 336*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 337*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5> 338*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_4501(<4 x double> %a, <4 x double> %b) { 342*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_4501: 343*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 344*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 345*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 346*9880d681SAndroid Build Coastguard Worker; 347*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_4501: 348*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 349*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 351*9880d681SAndroid Build Coastguard Worker; 352*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_4501: 353*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 354*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinsertf32x4 $1, %xmm0, %ymm1, %ymm0 355*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 356*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1> 357*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 358*9880d681SAndroid Build Coastguard Worker} 359*9880d681SAndroid Build Coastguard Worker 360*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0167(<4 x double> %a, <4 x double> %b) { 361*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_0167: 362*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 363*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] 364*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 365*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 1, i32 6, i32 7> 366*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 367*9880d681SAndroid Build Coastguard Worker} 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1054(<4 x double> %a, <4 x double> %b) { 370*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_1054: 371*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 375*9880d681SAndroid Build Coastguard Worker; 376*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_1054: 377*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 381*9880d681SAndroid Build Coastguard Worker; 382*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_1054: 383*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 384*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinsertf32x4 $1, %xmm1, %ymm0, %ymm0 385*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 386*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 387*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4> 388*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 389*9880d681SAndroid Build Coastguard Worker} 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3254(<4 x double> %a, <4 x double> %b) { 392*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3254: 393*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 397*9880d681SAndroid Build Coastguard Worker; 398*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3254: 399*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 403*9880d681SAndroid Build Coastguard Worker; 404*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3254: 405*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 406*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 407*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 408*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 409*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4> 410*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 411*9880d681SAndroid Build Coastguard Worker} 412*9880d681SAndroid Build Coastguard Worker 413*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3276(<4 x double> %a, <4 x double> %b) { 414*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3276: 415*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 419*9880d681SAndroid Build Coastguard Worker; 420*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3276: 421*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 425*9880d681SAndroid Build Coastguard Worker; 426*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3276: 427*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 428*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 429*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 430*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 431*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6> 432*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 433*9880d681SAndroid Build Coastguard Worker} 434*9880d681SAndroid Build Coastguard Worker 435*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_1076(<4 x double> %a, <4 x double> %b) { 436*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_1076: 437*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 438*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] 439*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 440*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 441*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6> 442*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 443*9880d681SAndroid Build Coastguard Worker} 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0415(<4 x double> %a, <4 x double> %b) { 446*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_0415: 447*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1] 449*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 450*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 451*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 452*9880d681SAndroid Build Coastguard Worker; 453*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_0415: 454*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 455*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1] 456*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3] 457*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3] 458*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 459*9880d681SAndroid Build Coastguard Worker; 460*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_0415: 461*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 462*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm1 = ymm1[0,0,2,1] 463*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[0,1,1,3] 464*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3] 465*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 466*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 467*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 468*9880d681SAndroid Build Coastguard Worker} 469*9880d681SAndroid Build Coastguard Worker 470*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_u062(<4 x double> %a, <4 x double> %b) { 471*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_u062: 472*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 473*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 474*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 475*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 undef, i32 0, i32 6, i32 2> 476*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 477*9880d681SAndroid Build Coastguard Worker} 478*9880d681SAndroid Build Coastguard Worker 479*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_15uu(<4 x double> %a, <4 x double> %b) { 480*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_15uu: 481*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 482*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 483*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 484*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 5, i32 undef, i32 undef> 485*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 486*9880d681SAndroid Build Coastguard Worker} 487*9880d681SAndroid Build Coastguard Worker 488*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_11uu(<4 x double> %a, <4 x double> %b) { 489*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4f64_11uu: 490*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 491*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,1] 492*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 493*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 1, i32 1, i32 undef, i32 undef> 494*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 495*9880d681SAndroid Build Coastguard Worker} 496*9880d681SAndroid Build Coastguard Worker 497*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_22uu(<4 x double> %a, <4 x double> %b) { 498*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_22uu: 499*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 503*9880d681SAndroid Build Coastguard Worker; 504*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_22uu: 505*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,3] 507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 508*9880d681SAndroid Build Coastguard Worker; 509*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_22uu: 510*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 511*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[2,2,2,3] 512*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 513*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 2, i32 2, i32 undef, i32 undef> 514*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 515*9880d681SAndroid Build Coastguard Worker} 516*9880d681SAndroid Build Coastguard Worker 517*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_3333(<4 x double> %a, <4 x double> %b) { 518*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4f64_3333: 519*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3] 521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3] 522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 523*9880d681SAndroid Build Coastguard Worker; 524*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4f64_3333: 525*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3] 527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 528*9880d681SAndroid Build Coastguard Worker; 529*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4f64_3333: 530*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 531*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,3,3,3] 532*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 533*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 534*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0000(<4 x i64> %a, <4 x i64> %b) { 538*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0000: 539*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 543*9880d681SAndroid Build Coastguard Worker; 544*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0000: 545*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0 547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 548*9880d681SAndroid Build Coastguard Worker; 549*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0000: 550*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 551*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq %xmm0, %ymm0 552*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 553*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 554*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 555*9880d681SAndroid Build Coastguard Worker} 556*9880d681SAndroid Build Coastguard Worker 557*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0001(<4 x i64> %a, <4 x i64> %b) { 558*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0001: 559*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[0,1,0,1] 561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 563*9880d681SAndroid Build Coastguard Worker; 564*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0001: 565*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1] 567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 568*9880d681SAndroid Build Coastguard Worker; 569*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0001: 570*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 571*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,0,1] 572*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 573*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 0, i32 1> 574*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 575*9880d681SAndroid Build Coastguard Worker} 576*9880d681SAndroid Build Coastguard Worker 577*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0020(<4 x i64> %a, <4 x i64> %b) { 578*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0020: 579*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0] 582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 585*9880d681SAndroid Build Coastguard Worker; 586*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0020: 587*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,2,0] 589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 590*9880d681SAndroid Build Coastguard Worker; 591*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0020: 592*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 593*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,2,0] 594*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 595*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 0> 596*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 597*9880d681SAndroid Build Coastguard Worker} 598*9880d681SAndroid Build Coastguard Worker 599*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0112(<4 x i64> %a, <4 x i64> %b) { 600*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0112: 601*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vshufpd {{.*#+}} xmm1 = xmm0[1],xmm1[0] 604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 606*9880d681SAndroid Build Coastguard Worker; 607*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0112: 608*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2] 610*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 611*9880d681SAndroid Build Coastguard Worker; 612*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0112: 613*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 614*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2] 615*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 616*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 1, i32 2> 617*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 618*9880d681SAndroid Build Coastguard Worker} 619*9880d681SAndroid Build Coastguard Worker 620*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0300(<4 x i64> %a, <4 x i64> %b) { 621*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0300: 622*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1] 624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm1 = ymm1[0,1,2,2] 625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] 626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 627*9880d681SAndroid Build Coastguard Worker; 628*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0300: 629*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 630*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,0,0] 631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 632*9880d681SAndroid Build Coastguard Worker; 633*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0300: 634*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 635*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,0,0] 636*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 637*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 3, i32 0, i32 0> 638*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 639*9880d681SAndroid Build Coastguard Worker} 640*9880d681SAndroid Build Coastguard Worker 641*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1000(<4 x i64> %a, <4 x i64> %b) { 642*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1000: 643*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 648*9880d681SAndroid Build Coastguard Worker; 649*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1000: 650*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0] 652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 653*9880d681SAndroid Build Coastguard Worker; 654*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1000: 655*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 656*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,0,0,0] 657*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 658*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 0, i32 0> 659*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 660*9880d681SAndroid Build Coastguard Worker} 661*9880d681SAndroid Build Coastguard Worker 662*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_2200(<4 x i64> %a, <4 x i64> %b) { 663*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_2200: 664*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 665*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2] 666*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] 667*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 668*9880d681SAndroid Build Coastguard Worker; 669*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_2200: 670*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0] 672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 673*9880d681SAndroid Build Coastguard Worker; 674*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_2200: 675*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 676*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,0,0] 677*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 678*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 0, i32 0> 679*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 680*9880d681SAndroid Build Coastguard Worker} 681*9880d681SAndroid Build Coastguard Worker 682*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3330(<4 x i64> %a, <4 x i64> %b) { 683*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3330: 684*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 685*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm1 = ymm0[2,3,0,1] 686*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3] 687*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,2] 688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 689*9880d681SAndroid Build Coastguard Worker; 690*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3330: 691*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 692*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,3,3,0] 693*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 694*9880d681SAndroid Build Coastguard Worker; 695*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3330: 696*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 697*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,3,3,0] 698*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 699*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 0> 700*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 701*9880d681SAndroid Build Coastguard Worker} 702*9880d681SAndroid Build Coastguard Worker 703*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3210(<4 x i64> %a, <4 x i64> %b) { 704*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3210: 705*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1] 708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 709*9880d681SAndroid Build Coastguard Worker; 710*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3210: 711*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 712*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0] 713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 714*9880d681SAndroid Build Coastguard Worker; 715*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3210: 716*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 717*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,2,1,0] 718*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 719*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 1, i32 0> 720*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 721*9880d681SAndroid Build Coastguard Worker} 722*9880d681SAndroid Build Coastguard Worker 723*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0124(<4 x i64> %a, <4 x i64> %b) { 724*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0124: 725*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm1 = xmm1[0,0] 727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3] 729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 730*9880d681SAndroid Build Coastguard Worker; 731*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0124: 732*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 733*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq %xmm1, %ymm1 734*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7] 735*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 736*9880d681SAndroid Build Coastguard Worker; 737*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0124: 738*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 739*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq %xmm1, %ymm1 740*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7] 741*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 742*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 4> 743*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 744*9880d681SAndroid Build Coastguard Worker} 745*9880d681SAndroid Build Coastguard Worker 746*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0142(<4 x i64> %a, <4 x i64> %b) { 747*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0142: 748*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[0,1,2,2] 751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3] 752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 753*9880d681SAndroid Build Coastguard Worker; 754*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0142: 755*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 756*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm1 757*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,2,2] 758*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7] 759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 760*9880d681SAndroid Build Coastguard Worker; 761*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0142: 762*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 763*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm1 764*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,2,2] 765*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7] 766*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 767*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2> 768*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 769*9880d681SAndroid Build Coastguard Worker} 770*9880d681SAndroid Build Coastguard Worker 771*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0412(<4 x i64> %a, <4 x i64> %b) { 772*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0412: 773*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1],xmm2[0] 776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm1 = xmm1[0,0] 778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2,3] 779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 780*9880d681SAndroid Build Coastguard Worker; 781*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0412: 782*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq %xmm1, %xmm1 784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2] 785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7] 786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 787*9880d681SAndroid Build Coastguard Worker; 788*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0412: 789*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 790*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq %xmm1, %xmm1 791*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,2] 792*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7] 793*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 794*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 2> 795*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 796*9880d681SAndroid Build Coastguard Worker} 797*9880d681SAndroid Build Coastguard Worker 798*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4012(<4 x i64> %a, <4 x i64> %b) { 799*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4012: 800*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 801*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 802*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1],xmm2[0] 803*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 804*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 805*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0],ymm0[1,2,3] 806*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 807*9880d681SAndroid Build Coastguard Worker; 808*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4012: 809*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,1,2] 811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7] 812*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 813*9880d681SAndroid Build Coastguard Worker; 814*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4012: 815*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 816*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,1,2] 817*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5,6,7] 818*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 819*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 2> 820*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 821*9880d681SAndroid Build Coastguard Worker} 822*9880d681SAndroid Build Coastguard Worker 823*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0145(<4 x i64> %a, <4 x i64> %b) { 824*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0145: 825*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 826*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 827*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 828*9880d681SAndroid Build Coastguard Worker; 829*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0145: 830*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 831*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 832*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 833*9880d681SAndroid Build Coastguard Worker; 834*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0145: 835*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 836*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 837*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 838*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 5> 839*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 840*9880d681SAndroid Build Coastguard Worker} 841*9880d681SAndroid Build Coastguard Worker 842*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0451(<4 x i64> %a, <4 x i64> %b) { 843*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0451: 844*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 845*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} xmm2 = xmm1[1],xmm0[1] 846*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 847*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 848*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 849*9880d681SAndroid Build Coastguard Worker; 850*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0451: 851*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 852*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,1,3] 853*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,2,1] 854*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5],ymm0[6,7] 855*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 856*9880d681SAndroid Build Coastguard Worker; 857*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0451: 858*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 859*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,1,3] 860*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,2,1] 861*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3,4,5],ymm0[6,7] 862*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 863*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1> 864*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 865*9880d681SAndroid Build Coastguard Worker} 866*9880d681SAndroid Build Coastguard Worker 867*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4501(<4 x i64> %a, <4 x i64> %b) { 868*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4501: 869*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 872*9880d681SAndroid Build Coastguard Worker; 873*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4501: 874*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 875*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 876*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 877*9880d681SAndroid Build Coastguard Worker; 878*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4501: 879*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 880*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm0, %ymm1, %ymm0 881*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 882*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 5, i32 0, i32 1> 883*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 884*9880d681SAndroid Build Coastguard Worker} 885*9880d681SAndroid Build Coastguard Worker 886*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_4015(<4 x i64> %a, <4 x i64> %b) { 887*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_4015: 888*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1] 890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm1[0],xmm0[0] 891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 893*9880d681SAndroid Build Coastguard Worker; 894*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_4015: 895*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,1,2,1] 897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,1,3] 898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7] 899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 900*9880d681SAndroid Build Coastguard Worker; 901*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_4015: 902*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 903*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,1,2,1] 904*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,0,1,3] 905*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7] 906*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 907*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 1, i32 5> 908*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 909*9880d681SAndroid Build Coastguard Worker} 910*9880d681SAndroid Build Coastguard Worker 911*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_2u35(<4 x i64> %a, <4 x i64> %b) { 912*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_2u35: 913*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 914*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 915*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} xmm1 = xmm0[1],xmm1[1] 916*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 917*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 918*9880d681SAndroid Build Coastguard Worker; 919*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_2u35: 920*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 921*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7] 922*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,1,3,1] 923*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 924*9880d681SAndroid Build Coastguard Worker; 925*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_2u35: 926*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 927*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7] 928*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,1,3,1] 929*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 930*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 undef, i32 3, i32 5> 931*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 932*9880d681SAndroid Build Coastguard Worker} 933*9880d681SAndroid Build Coastguard Worker 934*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1251(<4 x i64> %a, <4 x i64> %b) { 935*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1251: 936*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 937*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,0,1] 938*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm2[0],ymm0[2],ymm2[3] 939*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0] 940*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1 941*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2],ymm0[3] 942*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 943*9880d681SAndroid Build Coastguard Worker; 944*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1251: 945*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,1,1,3] 947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,2,2,1] 948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7] 949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 950*9880d681SAndroid Build Coastguard Worker; 951*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1251: 952*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 953*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,1,1,3] 954*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[1,2,2,1] 955*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7] 956*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 957*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 2, i32 5, i32 1> 958*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 959*9880d681SAndroid Build Coastguard Worker} 960*9880d681SAndroid Build Coastguard Worker 961*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1054(<4 x i64> %a, <4 x i64> %b) { 962*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1054: 963*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 964*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 965*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 966*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 967*9880d681SAndroid Build Coastguard Worker; 968*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1054: 969*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 970*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 971*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 972*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 973*9880d681SAndroid Build Coastguard Worker; 974*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1054: 975*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 976*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 977*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 978*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 979*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 5, i32 4> 980*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 981*9880d681SAndroid Build Coastguard Worker} 982*9880d681SAndroid Build Coastguard Worker 983*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3254(<4 x i64> %a, <4 x i64> %b) { 984*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3254: 985*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 989*9880d681SAndroid Build Coastguard Worker; 990*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3254: 991*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 992*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 993*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 994*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 995*9880d681SAndroid Build Coastguard Worker; 996*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3254: 997*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 998*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[0,1] 999*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 1000*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1001*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 5, i32 4> 1002*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1003*9880d681SAndroid Build Coastguard Worker} 1004*9880d681SAndroid Build Coastguard Worker 1005*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3276(<4 x i64> %a, <4 x i64> %b) { 1006*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3276: 1007*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 1009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 1010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1011*9880d681SAndroid Build Coastguard Worker; 1012*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3276: 1013*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1014*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 1015*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 1016*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1017*9880d681SAndroid Build Coastguard Worker; 1018*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3276: 1019*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1020*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3] 1021*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 1022*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1023*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 2, i32 7, i32 6> 1024*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1025*9880d681SAndroid Build Coastguard Worker} 1026*9880d681SAndroid Build Coastguard Worker 1027*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_1076(<4 x i64> %a, <4 x i64> %b) { 1028*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_1076: 1029*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] 1031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,0,3,2] 1032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1033*9880d681SAndroid Build Coastguard Worker; 1034*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_1076: 1035*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1036*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] 1037*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 1038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1039*9880d681SAndroid Build Coastguard Worker; 1040*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_1076: 1041*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1042*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] 1043*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[2,3,0,1,6,7,4,5] 1044*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1045*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 0, i32 7, i32 6> 1046*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1047*9880d681SAndroid Build Coastguard Worker} 1048*9880d681SAndroid Build Coastguard Worker 1049*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_0415(<4 x i64> %a, <4 x i64> %b) { 1050*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_0415: 1051*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} xmm2 = xmm0[1],xmm1[1] 1053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 1055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1056*9880d681SAndroid Build Coastguard Worker; 1057*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_0415: 1058*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1] 1060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3] 1061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7] 1062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1063*9880d681SAndroid Build Coastguard Worker; 1064*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_0415: 1065*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1066*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,0,2,1] 1067*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,1,1,3] 1068*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7] 1069*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1070*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 0, i32 4, i32 1, i32 5> 1071*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1072*9880d681SAndroid Build Coastguard Worker} 1073*9880d681SAndroid Build Coastguard Worker 1074*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_z4z6(<4 x i64> %a) { 1075*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_z4z6: 1076*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1080*9880d681SAndroid Build Coastguard Worker; 1081*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_z4z6: 1082*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1083*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23] 1084*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1085*9880d681SAndroid Build Coastguard Worker; 1086*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_z4z6: 1087*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1088*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpslldq {{.*#+}} ymm0 = zero,zero,zero,zero,zero,zero,zero,zero,ymm0[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,18,19,20,21,22,23] 1089*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1090*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 0, i32 4, i32 0, i32 6> 1091*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1092*9880d681SAndroid Build Coastguard Worker} 1093*9880d681SAndroid Build Coastguard Worker 1094*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_5zuz(<4 x i64> %a) { 1095*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_5zuz: 1096*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 1098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3] 1099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1100*9880d681SAndroid Build Coastguard Worker; 1101*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_5zuz: 1102*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero 1104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1105*9880d681SAndroid Build Coastguard Worker; 1106*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_5zuz: 1107*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1108*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpsrldq {{.*#+}} ymm0 = ymm0[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[24,25,26,27,28,29,30,31],zero,zero,zero,zero,zero,zero,zero,zero 1109*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1110*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> zeroinitializer, <4 x i64> %a, <4 x i32> <i32 5, i32 0, i32 undef, i32 0> 1111*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1112*9880d681SAndroid Build Coastguard Worker} 1113*9880d681SAndroid Build Coastguard Worker 1114*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_40u2(<4 x i64> %a, <4 x i64> %b) { 1115*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_40u2: 1116*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 1118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1119*9880d681SAndroid Build Coastguard Worker; 1120*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_40u2: 1121*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 1123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1124*9880d681SAndroid Build Coastguard Worker; 1125*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_40u2: 1126*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1127*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[2],ymm0[2] 1128*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1129*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 4, i32 0, i32 undef, i32 2> 1130*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1131*9880d681SAndroid Build Coastguard Worker} 1132*9880d681SAndroid Build Coastguard Worker 1133*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_15uu(<4 x i64> %a, <4 x i64> %b) { 1134*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4i64_15uu: 1135*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1136*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpunpckhqdq {{.*#+}} xmm0 = xmm0[1],xmm1[1] 1137*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1138*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 5, i32 undef, i32 undef> 1139*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1140*9880d681SAndroid Build Coastguard Worker} 1141*9880d681SAndroid Build Coastguard Worker 1142*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_11uu(<4 x i64> %a, <4 x i64> %b) { 1143*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_v4i64_11uu: 1144*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1145*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] 1146*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1147*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 1, i32 undef, i32 undef> 1148*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1149*9880d681SAndroid Build Coastguard Worker} 1150*9880d681SAndroid Build Coastguard Worker 1151*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_22uu(<4 x i64> %a, <4 x i64> %b) { 1152*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_22uu: 1153*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 1156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1157*9880d681SAndroid Build Coastguard Worker; 1158*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_22uu: 1159*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,2,3] 1161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1162*9880d681SAndroid Build Coastguard Worker; 1163*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_22uu: 1164*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1165*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,2,2,3] 1166*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1167*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 2, i32 2, i32 undef, i32 undef> 1168*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1169*9880d681SAndroid Build Coastguard Worker} 1170*9880d681SAndroid Build Coastguard Worker 1171*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shuffle_v4i64_3333(<4 x i64> %a, <4 x i64> %b) { 1172*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: shuffle_v4i64_3333: 1173*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpermilpd {{.*#+}} ymm0 = ymm0[1,1,3,3] 1175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,2,3] 1176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1177*9880d681SAndroid Build Coastguard Worker; 1178*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: shuffle_v4i64_3333: 1179*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3] 1181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1182*9880d681SAndroid Build Coastguard Worker; 1183*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: shuffle_v4i64_3333: 1184*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1185*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,3,3,3] 1186*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1187*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 3, i32 3, i32 3, i32 3> 1188*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1189*9880d681SAndroid Build Coastguard Worker} 1190*9880d681SAndroid Build Coastguard Worker 1191*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @stress_test1(<4 x i64> %a, <4 x i64> %b) { 1192*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: stress_test1: 1193*9880d681SAndroid Build Coastguard Worker; ALL: retq 1194*9880d681SAndroid Build Coastguard Worker %c = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> <i32 3, i32 1, i32 1, i32 0> 1195*9880d681SAndroid Build Coastguard Worker %d = shufflevector <4 x i64> %c, <4 x i64> undef, <4 x i32> <i32 3, i32 undef, i32 2, i32 undef> 1196*9880d681SAndroid Build Coastguard Worker %e = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> <i32 3, i32 3, i32 1, i32 undef> 1197*9880d681SAndroid Build Coastguard Worker %f = shufflevector <4 x i64> %d, <4 x i64> %e, <4 x i32> <i32 5, i32 1, i32 1, i32 0> 1198*9880d681SAndroid Build Coastguard Worker 1199*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %f 1200*9880d681SAndroid Build Coastguard Worker} 1201*9880d681SAndroid Build Coastguard Worker 1202*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_reg_and_zero_v4i64(i64 %a) { 1203*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_reg_and_zero_v4i64: 1204*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1205*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq %rdi, %xmm0 1206*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1207*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x i64> undef, i64 %a, i64 0 1208*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 1209*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1210*9880d681SAndroid Build Coastguard Worker} 1211*9880d681SAndroid Build Coastguard Worker 1212*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_mem_and_zero_v4i64(i64* %ptr) { 1213*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_mem_and_zero_v4i64: 1214*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1215*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero 1216*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1217*9880d681SAndroid Build Coastguard Worker %a = load i64, i64* %ptr 1218*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x i64> undef, i64 %a, i64 0 1219*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %v, <4 x i64> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 1220*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1221*9880d681SAndroid Build Coastguard Worker} 1222*9880d681SAndroid Build Coastguard Worker 1223*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @insert_reg_and_zero_v4f64(double %a) { 1224*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_reg_and_zero_v4f64: 1225*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<def> 1227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorpd %ymm1, %ymm1, %ymm1 1228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] 1229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1230*9880d681SAndroid Build Coastguard Worker; 1231*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_reg_and_zero_v4f64: 1232*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<def> 1234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vxorpd %ymm1, %ymm1, %ymm1 1235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3] 1236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1237*9880d681SAndroid Build Coastguard Worker; 1238*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_reg_and_zero_v4f64: 1239*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1240*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vxorpd %xmm1, %xmm1, %xmm1 1241*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vmovsd {{.*#+}} xmm0 = xmm0[0],xmm1[1] 1242*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1243*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x double> undef, double %a, i32 0 1244*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 1245*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 1246*9880d681SAndroid Build Coastguard Worker} 1247*9880d681SAndroid Build Coastguard Worker 1248*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @insert_mem_and_zero_v4f64(double* %ptr) { 1249*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: insert_mem_and_zero_v4f64: 1250*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1251*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero 1252*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1253*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1254*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x double> undef, double %a, i32 0 1255*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %v, <4 x double> zeroinitializer, <4 x i32> <i32 0, i32 5, i32 6, i32 7> 1256*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 1257*9880d681SAndroid Build Coastguard Worker} 1258*9880d681SAndroid Build Coastguard Worker 1259*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64(double* %ptr) { 1260*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64: 1261*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1262*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vbroadcastsd (%rdi), %ymm0 1263*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1264*9880d681SAndroid Build Coastguard Worker %a = load double, double* %ptr 1265*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x double> undef, double %a, i32 0 1266*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x double> %v, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1267*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 1268*9880d681SAndroid Build Coastguard Worker} 1269*9880d681SAndroid Build Coastguard Worker 1270*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat_mem_v4i64(i64* %ptr) { 1271*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_mem_v4i64: 1272*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vbroadcastsd (%rdi), %ymm0 1274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1275*9880d681SAndroid Build Coastguard Worker; 1276*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_mem_v4i64: 1277*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd (%rdi), %ymm0 1279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1280*9880d681SAndroid Build Coastguard Worker; 1281*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_mem_v4i64: 1282*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1283*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq (%rdi), %ymm0 1284*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1285*9880d681SAndroid Build Coastguard Worker %a = load i64, i64* %ptr 1286*9880d681SAndroid Build Coastguard Worker %v = insertelement <4 x i64> undef, i64 %a, i64 0 1287*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i64> %v, <4 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1288*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1289*9880d681SAndroid Build Coastguard Worker} 1290*9880d681SAndroid Build Coastguard Worker 1291*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64_2(double* %p) { 1292*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64_2: 1293*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1294*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vbroadcastsd (%rdi), %ymm0 1295*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1296*9880d681SAndroid Build Coastguard Worker %1 = load double, double* %p 1297*9880d681SAndroid Build Coastguard Worker %2 = insertelement <2 x double> undef, double %1, i32 0 1298*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <2 x double> %2, <2 x double> undef, <4 x i32> zeroinitializer 1299*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 1300*9880d681SAndroid Build Coastguard Worker} 1301*9880d681SAndroid Build Coastguard Worker 1302*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_v4f64(<2 x double> %r) { 1303*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_v4f64: 1304*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] 1306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1308*9880d681SAndroid Build Coastguard Worker; 1309*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_v4f64: 1310*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0 1312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1313*9880d681SAndroid Build Coastguard Worker; 1314*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_v4f64: 1315*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1316*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vbroadcastsd %xmm0, %ymm0 1317*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1318*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x double> %r, <2 x double> undef, <4 x i32> zeroinitializer 1319*9880d681SAndroid Build Coastguard Worker ret <4 x double> %1 1320*9880d681SAndroid Build Coastguard Worker} 1321*9880d681SAndroid Build Coastguard Worker 1322*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat_mem_v4i64_from_v2i64(<2 x i64>* %ptr) { 1323*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat_mem_v4i64_from_v2i64: 1324*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vbroadcastsd (%rdi), %ymm0 1326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1327*9880d681SAndroid Build Coastguard Worker; 1328*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat_mem_v4i64_from_v2i64: 1329*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd (%rdi), %ymm0 1331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1332*9880d681SAndroid Build Coastguard Worker; 1333*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat_mem_v4i64_from_v2i64: 1334*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1335*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq (%rdi), %ymm0 1336*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1337*9880d681SAndroid Build Coastguard Worker %v = load <2 x i64>, <2 x i64>* %ptr 1338*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i64> %v, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1339*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1340*9880d681SAndroid Build Coastguard Worker} 1341*9880d681SAndroid Build Coastguard Worker 1342*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat_mem_v4f64_from_v2f64(<2 x double>* %ptr) { 1343*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: splat_mem_v4f64_from_v2f64: 1344*9880d681SAndroid Build Coastguard Worker; ALL: # BB#0: 1345*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: vbroadcastsd (%rdi), %ymm0 1346*9880d681SAndroid Build Coastguard Worker; ALL-NEXT: retq 1347*9880d681SAndroid Build Coastguard Worker %v = load <2 x double>, <2 x double>* %ptr 1348*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0> 1349*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 1350*9880d681SAndroid Build Coastguard Worker} 1351*9880d681SAndroid Build Coastguard Worker 1352*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splat128_mem_v4i64_from_v2i64(<2 x i64>* %ptr) { 1353*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat128_mem_v4i64_from_v2i64: 1354*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rdi), %xmm0 1356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1358*9880d681SAndroid Build Coastguard Worker; 1359*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat128_mem_v4i64_from_v2i64: 1360*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rdi), %xmm0 1362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1363*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1364*9880d681SAndroid Build Coastguard Worker; 1365*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat128_mem_v4i64_from_v2i64: 1366*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1367*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vmovdqa64 (%rdi), %xmm0 1368*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm0, %ymm0, %ymm0 1369*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1370*9880d681SAndroid Build Coastguard Worker %v = load <2 x i64>, <2 x i64>* %ptr 1371*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x i64> %v, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1> 1372*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle 1373*9880d681SAndroid Build Coastguard Worker} 1374*9880d681SAndroid Build Coastguard Worker 1375*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @splat128_mem_v4f64_from_v2f64(<2 x double>* %ptr) { 1376*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splat128_mem_v4f64_from_v2f64: 1377*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps (%rdi), %xmm0 1379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1381*9880d681SAndroid Build Coastguard Worker; 1382*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splat128_mem_v4f64_from_v2f64: 1383*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps (%rdi), %xmm0 1385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1387*9880d681SAndroid Build Coastguard Worker; 1388*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: splat128_mem_v4f64_from_v2f64: 1389*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1390*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vmovapd (%rdi), %xmm0 1391*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinsertf32x4 $1, %xmm0, %ymm0, %ymm0 1392*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1393*9880d681SAndroid Build Coastguard Worker %v = load <2 x double>, <2 x double>* %ptr 1394*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1> 1395*9880d681SAndroid Build Coastguard Worker ret <4 x double> %shuffle 1396*9880d681SAndroid Build Coastguard Worker} 1397*9880d681SAndroid Build Coastguard Worker 1398*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @broadcast_v4f64_0000_from_v2i64(<2 x i64> %a0) { 1399*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: broadcast_v4f64_0000_from_v2i64: 1400*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,1] 1402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 1403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1404*9880d681SAndroid Build Coastguard Worker; 1405*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: broadcast_v4f64_0000_from_v2i64: 1406*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0 1408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1409*9880d681SAndroid Build Coastguard Worker; 1410*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: broadcast_v4f64_0000_from_v2i64: 1411*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1412*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vbroadcastsd %xmm0, %ymm0 1413*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1414*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <2 x i64> %a0, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1415*9880d681SAndroid Build Coastguard Worker %2 = bitcast <4 x i64> %1 to <4 x double> 1416*9880d681SAndroid Build Coastguard Worker %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> zeroinitializer 1417*9880d681SAndroid Build Coastguard Worker ret <4 x double> %3 1418*9880d681SAndroid Build Coastguard Worker} 1419*9880d681SAndroid Build Coastguard Worker 1420*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @bitcast_v4f64_0426(<4 x double> %a, <4 x double> %b) { 1421*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: bitcast_v4f64_0426: 1422*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 1424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1425*9880d681SAndroid Build Coastguard Worker; 1426*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: bitcast_v4f64_0426: 1427*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 1429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1430*9880d681SAndroid Build Coastguard Worker; 1431*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: bitcast_v4f64_0426: 1432*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1433*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2] 1434*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1435*9880d681SAndroid Build Coastguard Worker %shuffle64 = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 4, i32 0, i32 6, i32 2> 1436*9880d681SAndroid Build Coastguard Worker %bitcast32 = bitcast <4 x double> %shuffle64 to <8 x float> 1437*9880d681SAndroid Build Coastguard Worker %shuffle32 = shufflevector <8 x float> %bitcast32, <8 x float> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> 1438*9880d681SAndroid Build Coastguard Worker %bitcast16 = bitcast <8 x float> %shuffle32 to <16 x i16> 1439*9880d681SAndroid Build Coastguard Worker %shuffle16 = shufflevector <16 x i16> %bitcast16, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 0, i32 1, i32 6, i32 7, i32 4, i32 5, i32 10, i32 11, i32 8, i32 9, i32 14, i32 15, i32 12, i32 13> 1440*9880d681SAndroid Build Coastguard Worker %bitcast64 = bitcast <16 x i16> %shuffle16 to <4 x double> 1441*9880d681SAndroid Build Coastguard Worker ret <4 x double> %bitcast64 1442*9880d681SAndroid Build Coastguard Worker} 1443*9880d681SAndroid Build Coastguard Worker 1444*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @concat_v4i64_0167(<4 x i64> %a0, <4 x i64> %a1) { 1445*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: concat_v4i64_0167: 1446*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1447*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3] 1448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1449*9880d681SAndroid Build Coastguard Worker; 1450*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: concat_v4i64_0167: 1451*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1452*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] 1453*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1454*9880d681SAndroid Build Coastguard Worker; 1455*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: concat_v4i64_0167: 1456*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1457*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] 1458*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1459*9880d681SAndroid Build Coastguard Worker %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1> 1460*9880d681SAndroid Build Coastguard Worker %a1hi = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 6, i32 7> 1461*9880d681SAndroid Build Coastguard Worker %shuffle64 = shufflevector <2 x i64> %a0lo, <2 x i64> %a1hi, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 1462*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle64 1463*9880d681SAndroid Build Coastguard Worker} 1464*9880d681SAndroid Build Coastguard Worker 1465*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @concat_v4i64_0145_bc(<4 x i64> %a0, <4 x i64> %a1) { 1466*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: concat_v4i64_0145_bc: 1467*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1470*9880d681SAndroid Build Coastguard Worker; 1471*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: concat_v4i64_0145_bc: 1472*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1475*9880d681SAndroid Build Coastguard Worker; 1476*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: concat_v4i64_0145_bc: 1477*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1478*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vinserti32x4 $1, %xmm1, %ymm0, %ymm0 1479*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1480*9880d681SAndroid Build Coastguard Worker %a0lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 0, i32 1> 1481*9880d681SAndroid Build Coastguard Worker %a1lo = shufflevector <4 x i64> %a0, <4 x i64> %a1, <2 x i32> <i32 4, i32 5> 1482*9880d681SAndroid Build Coastguard Worker %bc0lo = bitcast <2 x i64> %a0lo to <4 x i32> 1483*9880d681SAndroid Build Coastguard Worker %bc1lo = bitcast <2 x i64> %a1lo to <4 x i32> 1484*9880d681SAndroid Build Coastguard Worker %shuffle32 = shufflevector <4 x i32> %bc0lo, <4 x i32> %bc1lo, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 1485*9880d681SAndroid Build Coastguard Worker %shuffle64 = bitcast <8 x i32> %shuffle32 to <4 x i64> 1486*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %shuffle64 1487*9880d681SAndroid Build Coastguard Worker} 1488*9880d681SAndroid Build Coastguard Worker 1489*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @insert_dup_mem_v4i64(i64* %ptr) { 1490*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: insert_dup_mem_v4i64: 1491*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vbroadcastsd (%rdi), %ymm0 1493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1494*9880d681SAndroid Build Coastguard Worker; 1495*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: insert_dup_mem_v4i64: 1496*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vbroadcastsd (%rdi), %ymm0 1498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1499*9880d681SAndroid Build Coastguard Worker; 1500*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: insert_dup_mem_v4i64: 1501*9880d681SAndroid Build Coastguard Worker; AVX512VL: # BB#0: 1502*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: vpbroadcastq (%rdi), %ymm0 1503*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT: retq 1504*9880d681SAndroid Build Coastguard Worker %tmp = load i64, i64* %ptr, align 1 1505*9880d681SAndroid Build Coastguard Worker %tmp1 = insertelement <2 x i64> undef, i64 %tmp, i32 0 1506*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <2 x i64> %tmp1, <2 x i64> undef, <4 x i32> zeroinitializer 1507*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %tmp2 1508*9880d681SAndroid Build Coastguard Worker} 1509