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 -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; Variable Rotates 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @var_rotate_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind { 12*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_rotate_v4i64: 13*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 14*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [64,64] 15*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm3 16*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 17*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm4, %xmm2, %xmm2 18*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 19*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq %xmm4, %xmm5, %xmm6 20*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm4 = xmm4[2,3,0,1] 21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq %xmm4, %xmm5, %xmm4 22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm4 = xmm6[0,1,2,3],xmm4[4,5,6,7] 23*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm6 24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1] 25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq %xmm1, %xmm0, %xmm1 26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm6[0,1,2,3],xmm1[4,5,6,7] 27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm2, %xmm5, %xmm4 29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[2,3,0,1] 30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm2, %xmm5, %xmm2 31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7] 32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm3, %xmm0, %xmm4 33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[2,3,0,1] 34*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq %xmm3, %xmm0, %xmm0 35*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm4[0,1,2,3],xmm0[4,5,6,7] 36*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 37*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 38*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 39*9880d681SAndroid Build Coastguard Worker; 40*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_rotate_v4i64: 41*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 42*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 43*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm1, %ymm2, %ymm2 44*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvq %ymm1, %ymm0, %ymm1 45*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq %ymm2, %ymm0, %ymm0 46*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 47*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 48*9880d681SAndroid Build Coastguard Worker; 49*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_rotate_v4i64: 50*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 51*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 52*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 53*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq %xmm2, %xmm3, %xmm2 54*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq %xmm1, %xmm0, %xmm0 55*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 56*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 57*9880d681SAndroid Build Coastguard Worker; 58*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_rotate_v4i64: 59*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 60*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 61*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 62*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq %xmm2, %xmm3, %xmm2 63*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq %xmm1, %xmm0, %xmm0 64*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 65*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker %b64 = sub <4 x i64> <i64 64, i64 64, i64 64, i64 64>, %b 67*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %a, %b 68*9880d681SAndroid Build Coastguard Worker %lshr = lshr <4 x i64> %a, %b64 69*9880d681SAndroid Build Coastguard Worker %or = or <4 x i64> %shl, %lshr 70*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %or 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @var_rotate_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind { 74*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_rotate_v8i32: 75*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 76*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32,32,32,32] 77*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm1, %xmm3, %xmm2 78*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 79*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm4, %xmm3, %xmm3 80*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $23, %xmm4, %xmm4 81*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [1065353216,1065353216,1065353216,1065353216] 82*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm5, %xmm4, %xmm4 83*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvttps2dq %xmm4, %xmm4 84*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6 85*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm6, %xmm4, %xmm4 86*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $23, %xmm1, %xmm1 87*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm5, %xmm1, %xmm1 88*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vcvttps2dq %xmm1, %xmm1 89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm0, %xmm1, %xmm1 90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1 91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrldq {{.*#+}} xmm4 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm4, %xmm6, %xmm4 93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm5 94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm5, %xmm6, %xmm5 95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7] 96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5 97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm7 = xmm3[2],xmm5[2],xmm3[3],xmm5[3] 98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm7, %xmm6, %xmm7 99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero 100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm3, %xmm6, %xmm3 101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm7[4,5,6,7] 102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0,1],xmm4[2,3],xmm3[4,5],xmm4[6,7] 103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrldq {{.*#+}} xmm4 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm4, %xmm0, %xmm4 105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm6 106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm6, %xmm0, %xmm6 107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm4 = xmm6[0,1,2,3],xmm4[4,5,6,7] 108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm5[2],xmm2[3],xmm5[3] 109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm5, %xmm0, %xmm5 110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovzxdq {{.*#+}} xmm2 = xmm2[0],zero,xmm2[1],zero 111*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld %xmm2, %xmm0, %xmm0 112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm5[4,5,6,7] 113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3],xmm0[4,5],xmm4[6,7] 114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0 115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 117*9880d681SAndroid Build Coastguard Worker; 118*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_rotate_v8i32: 119*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm1, %ymm2, %ymm2 122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvd %ymm1, %ymm0, %ymm1 123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd %ymm2, %ymm0, %ymm0 124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker; 127*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_rotate_v8i32: 128*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 129*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 130*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 131*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd %xmm2, %xmm3, %xmm2 132*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd %xmm1, %xmm0, %xmm0 133*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 134*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_rotate_v8i32: 137*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 138*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 139*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 140*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd %xmm2, %xmm3, %xmm2 141*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd %xmm1, %xmm0, %xmm0 142*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 143*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 144*9880d681SAndroid Build Coastguard Worker %b32 = sub <8 x i32> <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>, %b 145*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %a, %b 146*9880d681SAndroid Build Coastguard Worker %lshr = lshr <8 x i32> %a, %b32 147*9880d681SAndroid Build Coastguard Worker %or = or <8 x i32> %shl, %lshr 148*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %or 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @var_rotate_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind { 152*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_rotate_v16i16: 153*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [16,16,16,16,16,16,16,16] 155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm3, %xmm2 156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm4, %xmm3, %xmm3 158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm4, %xmm5 159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm4, %xmm4 160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm5, %xmm4, %xmm5 161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm5, %xmm5, %xmm6 162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4 163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm4, %xmm7 164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm7, %xmm4, %xmm5 165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm5, %xmm7 166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm5, %xmm5 167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm5, %xmm7 168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm6 169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm5, %xmm5 170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $1, %xmm5, %xmm7 171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm6 172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm5, %xmm5 173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm1, %xmm6 174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm1 175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm6, %xmm1, %xmm1 176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm1, %xmm6 177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm0, %xmm7 178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm7, %xmm0, %xmm1 179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm7 180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm1, %xmm1 181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm1, %xmm7 182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm6 183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm1, %xmm1 184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $1, %xmm1, %xmm7 185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm6, %xmm6, %xmm6 186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm6, %xmm7, %xmm1, %xmm1 187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm1, %ymm1 188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm3, %xmm5 189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm3, %xmm3 190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm5, %xmm3, %xmm3 191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm3, %xmm3, %xmm5 192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm4, %xmm6 193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm6, %xmm4, %xmm3 194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm3, %xmm4 195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm3, %xmm3 196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm3, %xmm4 197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm5, %xmm5, %xmm5 198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm3, %xmm3 199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm3, %xmm4 200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm5, %xmm5, %xmm5 201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm4, %xmm3, %xmm3 202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $12, %xmm2, %xmm4 203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm2, %xmm2 204*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpor %xmm4, %xmm2, %xmm2 205*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm2, %xmm2, %xmm4 206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm5 207*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm5, %xmm0, %xmm0 208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm2 209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm0, %xmm0 210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm2 211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm4 212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm0, %xmm0 213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm2 214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm4, %xmm4, %xmm4 215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm0, %xmm0 216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0 217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 219*9880d681SAndroid Build Coastguard Worker; 220*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_rotate_v16i16: 221*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16] 223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw %ymm1, %ymm2, %ymm2 224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm3, %ymm3, %ymm3 225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm3[4],ymm1[5],ymm3[5],ymm1[6],ymm3[6],ymm1[7],ymm3[7],ymm1[12],ymm3[12],ymm1[13],ymm3[13],ymm1[14],ymm3[14],ymm1[15],ymm3[15] 226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm3[4],ymm0[4],ymm3[5],ymm0[5],ymm3[6],ymm0[6],ymm3[7],ymm0[7],ymm3[12],ymm0[12],ymm3[13],ymm0[13],ymm3[14],ymm0[14],ymm3[15],ymm0[15] 227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvd %ymm4, %ymm5, %ymm4 228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm4, %ymm4 229*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[8],ymm3[8],ymm1[9],ymm3[9],ymm1[10],ymm3[10],ymm1[11],ymm3[11] 230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm3[0],ymm0[0],ymm3[1],ymm0[1],ymm3[2],ymm0[2],ymm3[3],ymm0[3],ymm3[8],ymm0[8],ymm3[9],ymm0[9],ymm3[10],ymm0[10],ymm3[11],ymm0[11] 231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvd %ymm1, %ymm0, %ymm1 232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm1, %ymm1 233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackusdw %ymm4, %ymm1, %ymm1 234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15] 235*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd %ymm4, %ymm5, %ymm4 236*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm4, %ymm4 237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11] 238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd %ymm2, %ymm0, %ymm0 239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0 240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackusdw %ymm4, %ymm0, %ymm0 241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 243*9880d681SAndroid Build Coastguard Worker; 244*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_rotate_v16i16: 245*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 246*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 247*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 248*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw %xmm2, %xmm3, %xmm2 249*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw %xmm1, %xmm0, %xmm0 250*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 251*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 252*9880d681SAndroid Build Coastguard Worker; 253*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_rotate_v16i16: 254*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 255*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 256*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 257*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw %xmm2, %xmm3, %xmm2 258*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw %xmm1, %xmm0, %xmm0 259*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 260*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 261*9880d681SAndroid Build Coastguard Worker %b16 = sub <16 x i16> <i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16>, %b 262*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %a, %b 263*9880d681SAndroid Build Coastguard Worker %lshr = lshr <16 x i16> %a, %b16 264*9880d681SAndroid Build Coastguard Worker %or = or <16 x i16> %shl, %lshr 265*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %or 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @var_rotate_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind { 269*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: var_rotate_v32i8: 270*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm1, %xmm3, %xmm8 273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4 274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm4, %xmm3, %xmm9 275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5 276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm5, %xmm6 277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm6, %xmm6 279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm4, %xmm4 280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm5, %xmm6 281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm6, %xmm2 282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252] 283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm6, %xmm2 286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm6 287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm2, %xmm2 289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm0, %xmm4 290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm4, %xmm4 291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm1, %xmm1 292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm0, %xmm4 293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm4, %xmm6 294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm6, %xmm3 295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1 296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm3, %xmm4, %xmm3 297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm3, %xmm3, %xmm4 298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm1, %xmm1, %xmm1 299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm1, %xmm4, %xmm3, %xmm1 300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm5, %xmm2 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm9, %xmm4 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm5, %xmm2 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm2, %xmm5 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63] 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm5, %xmm5 309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm2, %xmm2 311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm2, %xmm5 312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127] 313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm5, %xmm5 314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm2, %xmm2 316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm4 317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm3 318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm8, %xmm4 319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm3, %xmm0, %xmm0 320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm3 321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3 322*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 323*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm3, %xmm0, %xmm0 324*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm3 325*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3 326*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm4 327*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm3, %xmm0, %xmm0 328*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 329*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 330*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 331*9880d681SAndroid Build Coastguard Worker; 332*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: var_rotate_v32i8: 333*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 334*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8] 335*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %ymm1, %ymm2, %ymm2 336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1 337*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $4, %ymm0, %ymm3 338*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 339*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm0, %ymm3 340*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $2, %ymm3, %ymm4 341*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm4, %ymm4 342*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1 343*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm4, %ymm3, %ymm3 344*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm4 345*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1 346*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm4, %ymm3, %ymm1 347*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm2, %ymm2 348*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm3 349*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4 350*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm4, %ymm4 351*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm4, %ymm0, %ymm0 352*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $2, %ymm0, %ymm2 353*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm0, %ymm0 355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $1, %ymm0, %ymm2 356*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 357*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm3, %ymm3 358*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm3, %ymm2, %ymm0, %ymm0 359*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 360*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 361*9880d681SAndroid Build Coastguard Worker; 362*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: var_rotate_v32i8: 363*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 364*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 365*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 366*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb %xmm2, %xmm3, %xmm2 367*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb %xmm1, %xmm0, %xmm0 368*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 369*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 370*9880d681SAndroid Build Coastguard Worker; 371*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: var_rotate_v32i8: 372*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 373*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm1, %xmm2 374*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm3 375*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb %xmm2, %xmm3, %xmm2 376*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb %xmm1, %xmm0, %xmm0 377*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 378*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 379*9880d681SAndroid Build Coastguard Worker %b8 = sub <32 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>, %b 380*9880d681SAndroid Build Coastguard Worker %shl = shl <32 x i8> %a, %b 381*9880d681SAndroid Build Coastguard Worker %lshr = lshr <32 x i8> %a, %b8 382*9880d681SAndroid Build Coastguard Worker %or = or <32 x i8> %shl, %lshr 383*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %or 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker; 387*9880d681SAndroid Build Coastguard Worker; Constant Rotates 388*9880d681SAndroid Build Coastguard Worker; 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @constant_rotate_v4i64(<4 x i64> %a) nounwind { 391*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_rotate_v4i64: 392*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $60, %xmm1, %xmm2 395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $50, %xmm1, %xmm3 396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7] 397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $14, %xmm0, %xmm3 398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $4, %xmm0, %xmm4 399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7] 400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $2, %xmm1, %xmm3 402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $14, %xmm1, %xmm1 403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7] 404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $50, %xmm0, %xmm3 405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $60, %xmm0, %xmm0 406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm3[4,5,6,7] 407*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 408*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm2, %ymm0 409*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 410*9880d681SAndroid Build Coastguard Worker; 411*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_rotate_v4i64: 412*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvq {{.*}}(%rip), %ymm0, %ymm1 414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvq {{.*}}(%rip), %ymm0, %ymm0 415*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 416*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 417*9880d681SAndroid Build Coastguard Worker; 418*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_rotate_v4i64: 419*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 420*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlq {{.*}}(%rip), %xmm0, %xmm1 421*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 422*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlq {{.*}}(%rip), %xmm2, %xmm3 423*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 424*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 425*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq {{.*}}(%rip), %xmm3, %xmm4 426*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlq %xmm4, %xmm2, %xmm2 427*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubq {{.*}}(%rip), %xmm3, %xmm3 428*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlq %xmm3, %xmm0, %xmm0 429*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 430*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 431*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 432*9880d681SAndroid Build Coastguard Worker; 433*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_rotate_v4i64: 434*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 435*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsllvq {{.*}}(%rip), %ymm0, %ymm1 436*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlvq {{.*}}(%rip), %ymm0, %ymm0 437*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 438*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 439*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %a, <i64 4, i64 14, i64 50, i64 60> 440*9880d681SAndroid Build Coastguard Worker %lshr = lshr <4 x i64> %a, <i64 60, i64 50, i64 14, i64 2> 441*9880d681SAndroid Build Coastguard Worker %or = or <4 x i64> %shl, %lshr 442*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %or 443*9880d681SAndroid Build Coastguard Worker} 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @constant_rotate_v8i32(<8 x i32> %a) nounwind { 446*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_rotate_v8i32: 447*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 448*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm1 449*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 450*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm2, %xmm3 451*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 452*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $21, %xmm2, %xmm3 453*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $23, %xmm2, %xmm4 454*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7] 455*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $22, %xmm2, %xmm4 456*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $24, %xmm2, %xmm2 457*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm4[4,5,6,7] 458*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm3[2,3],xmm2[4,5],xmm3[6,7] 459*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $25, %xmm0, %xmm3 460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $27, %xmm0, %xmm4 461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7] 462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $26, %xmm0, %xmm4 463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $28, %xmm0, %xmm0 464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7] 465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7] 466*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 469*9880d681SAndroid Build Coastguard Worker; 470*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_rotate_v8i32: 471*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 472*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllvd {{.*}}(%rip), %ymm0, %ymm1 473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd {{.*}}(%rip), %ymm0, %ymm0 474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 475*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 476*9880d681SAndroid Build Coastguard Worker; 477*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_rotate_v8i32: 478*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 479*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm0, %xmm1 480*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 481*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm2, %xmm3 482*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 483*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm0, %xmm0 484*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshld {{.*}}(%rip), %xmm2, %xmm2 485*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 486*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 487*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 488*9880d681SAndroid Build Coastguard Worker; 489*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_rotate_v8i32: 490*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 491*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsllvd {{.*}}(%rip), %ymm0, %ymm1 492*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsrlvd {{.*}}(%rip), %ymm0, %ymm0 493*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 494*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 495*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11> 496*9880d681SAndroid Build Coastguard Worker %lshr = lshr <8 x i32> %a, <i32 28, i32 27, i32 26, i32 25, i32 24, i32 23, i32 22, i32 21> 497*9880d681SAndroid Build Coastguard Worker %or = or <8 x i32> %shl, %lshr 498*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %or 499*9880d681SAndroid Build Coastguard Worker} 500*9880d681SAndroid Build Coastguard Worker 501*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @constant_rotate_v16i16(<16 x i16> %a) nounwind { 502*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_rotate_v16i16: 503*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 504*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm1 505*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 506*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm2, %xmm3 507*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 508*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm3 509*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0],xmm2[1,2,3,4,5,6,7] 510*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm3 511*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3,4],xmm2[5,6,7] 512*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm2, %xmm3 513*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2],xmm2[3,4],xmm3[5,6],xmm2[7] 514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm2, %xmm3 515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1],xmm2[2],xmm3[3],xmm2[4],xmm3[5],xmm2[6],xmm3[7] 516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm3 517*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3,4,5,6,7] 518*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm3 519*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3,4],xmm0[5,6,7] 520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm3 521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2],xmm0[3,4],xmm3[5,6],xmm0[7] 522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm3 523*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1],xmm0[2],xmm3[3],xmm0[4],xmm3[5],xmm0[6],xmm3[7] 524*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 525*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 527*9880d681SAndroid Build Coastguard Worker; 528*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_rotate_v16i16: 529*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 530*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm1 531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2 532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1] 533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm4 = ymm3[4],ymm2[4],ymm3[5],ymm2[5],ymm3[6],ymm2[6],ymm3[7],ymm2[7],ymm3[12],ymm2[12],ymm3[13],ymm2[13],ymm3[14],ymm2[14],ymm3[15],ymm2[15] 534*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhwd {{.*#+}} ymm5 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15] 535*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd %ymm4, %ymm5, %ymm4 536*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm4, %ymm4 537*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm3 = ymm3[0],ymm2[0],ymm3[1],ymm2[1],ymm3[2],ymm2[2],ymm3[3],ymm2[3],ymm3[8],ymm2[8],ymm3[9],ymm2[9],ymm3[10],ymm2[10],ymm3[11],ymm2[11] 538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11] 539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlvd %ymm3, %ymm0, %ymm0 540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0 541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackusdw %ymm4, %ymm0, %ymm0 542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 544*9880d681SAndroid Build Coastguard Worker; 545*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_rotate_v16i16: 546*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 547*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlw {{.*}}(%rip), %xmm0, %xmm1 548*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 549*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlw {{.*}}(%rip), %xmm2, %xmm3 550*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 551*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 552*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw {{.*}}(%rip), %xmm3, %xmm4 553*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlw %xmm4, %xmm2, %xmm2 554*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubw {{.*}}(%rip), %xmm3, %xmm3 555*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlw %xmm3, %xmm0, %xmm0 556*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 557*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 558*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 559*9880d681SAndroid Build Coastguard Worker; 560*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_rotate_v16i16: 561*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 562*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm1 563*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2 564*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw {{.*}}(%rip), %xmm2, %xmm3 565*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm4 566*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlw %xmm3, %xmm4, %xmm3 567*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubw {{.*}}(%rip), %xmm2, %xmm2 568*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlw %xmm2, %xmm0, %xmm0 569*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0 570*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 571*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 572*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15> 573*9880d681SAndroid Build Coastguard Worker %lshr = lshr <16 x i16> %a, <i16 16, i16 15, i16 14, i16 13, i16 12, i16 11, i16 10, i16 9, i16 8, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1> 574*9880d681SAndroid Build Coastguard Worker %or = or <16 x i16> %shl, %lshr 575*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %or 576*9880d681SAndroid Build Coastguard Worker} 577*9880d681SAndroid Build Coastguard Worker 578*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @constant_rotate_v32i8(<32 x i8> %a) nounwind { 579*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: constant_rotate_v32i8: 580*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm2 583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm8, %xmm2, %xmm2 585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1] 586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm4, %xmm4 587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm2, %xmm1, %xmm2 588*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm2, %xmm5 589*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252] 590*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm5, %xmm5 591*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm7 592*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm5, %xmm2, %xmm2 593*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm2, %xmm5 594*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm3 595*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm2, %xmm2 596*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm0, %xmm5 597*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm8, %xmm5, %xmm5 598*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm0, %xmm4 599*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $2, %xmm4, %xmm5 600*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm5, %xmm5 601*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm5, %xmm4, %xmm4 602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm4, %xmm5 603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm3, %xmm5, %xmm4, %xmm3 604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm9 605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm3 606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm8 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm8, %xmm3, %xmm3 608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7] 609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm5, %xmm5 610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm1, %xmm1 611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm1, %xmm3 612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63] 613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3 614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm5, %xmm5, %xmm7 615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm3, %xmm1, %xmm1 616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm1, %xmm3 617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127] 618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm7, %xmm7, %xmm2 620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm3, %xmm1, %xmm1 621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm3 622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm8, %xmm3, %xmm3 623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm5, %xmm3, %xmm0, %xmm0 624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $2, %xmm0, %xmm3 625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3 626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm7, %xmm3, %xmm0, %xmm0 627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $1, %xmm0, %xmm3 628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendvb %xmm2, %xmm3, %xmm0, %xmm0 630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm9, %ymm0 632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 633*9880d681SAndroid Build Coastguard Worker; 634*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: constant_rotate_v32i8: 635*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1] 637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm1, %ymm1 638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $4, %ymm0, %ymm2 639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm2 641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $2, %ymm2, %ymm3 642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1 644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm2, %ymm2 645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm3 646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm1, %ymm1, %ymm1 647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm1, %ymm3, %ymm2, %ymm1 648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7] 649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm2, %ymm2 650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm3 651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm3, %ymm0, %ymm0 653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $2, %ymm0, %ymm3 654*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 655*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm2 656*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm3, %ymm0, %ymm0 657*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $1, %ymm0, %ymm3 658*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 659*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm2, %ymm2 660*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendvb %ymm2, %ymm3, %ymm0, %ymm0 661*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 662*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 663*9880d681SAndroid Build Coastguard Worker; 664*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: constant_rotate_v32i8: 665*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 666*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1] 667*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 668*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlb %xmm1, %xmm2, %xmm3 669*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlb %xmm1, %xmm0, %xmm1 670*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 671*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 672*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpsubb {{.*}}(%rip), %xmm3, %xmm3 673*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlb %xmm3, %xmm2, %xmm2 674*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vpshlb %xmm3, %xmm0, %xmm0 675*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 676*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 677*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 678*9880d681SAndroid Build Coastguard Worker; 679*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: constant_rotate_v32i8: 680*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 681*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1] 682*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm2 683*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlb %xmm1, %xmm2, %xmm3 684*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlb %xmm1, %xmm0, %xmm1 685*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1 686*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3 687*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpsubb {{.*}}(%rip), %xmm3, %xmm3 688*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlb %xmm3, %xmm2, %xmm2 689*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpshlb %xmm3, %xmm0, %xmm0 690*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0 691*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 692*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 693*9880d681SAndroid Build Coastguard Worker %shl = shl <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1> 694*9880d681SAndroid Build Coastguard Worker %lshr = lshr <32 x i8> %a, <i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7> 695*9880d681SAndroid Build Coastguard Worker %or = or <32 x i8> %shl, %lshr 696*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %or 697*9880d681SAndroid Build Coastguard Worker} 698*9880d681SAndroid Build Coastguard Worker 699*9880d681SAndroid Build Coastguard Worker; 700*9880d681SAndroid Build Coastguard Worker; Uniform Constant Rotates 701*9880d681SAndroid Build Coastguard Worker; 702*9880d681SAndroid Build Coastguard Worker 703*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatconstant_rotate_v4i64(<4 x i64> %a) nounwind { 704*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_v4i64: 705*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $14, %xmm0, %xmm1 707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $14, %xmm2, %xmm3 709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $50, %xmm0, %xmm0 711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $50, %xmm2, %xmm2 712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 715*9880d681SAndroid Build Coastguard Worker; 716*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_v4i64: 717*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 718*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $14, %ymm0, %ymm1 719*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $50, %ymm0, %ymm0 720*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 721*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 722*9880d681SAndroid Build Coastguard Worker; 723*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_v4i64: 724*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 725*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq $14, %xmm0, %xmm1 726*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 727*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq $14, %xmm0, %xmm0 728*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 729*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 730*9880d681SAndroid Build Coastguard Worker; 731*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_v4i64: 732*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 733*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq $14, %xmm0, %xmm1 734*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 735*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq $14, %xmm0, %xmm0 736*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 737*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 738*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %a, <i64 14, i64 14, i64 14, i64 14> 739*9880d681SAndroid Build Coastguard Worker %lshr = lshr <4 x i64> %a, <i64 50, i64 50, i64 50, i64 50> 740*9880d681SAndroid Build Coastguard Worker %or = or <4 x i64> %shl, %lshr 741*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %or 742*9880d681SAndroid Build Coastguard Worker} 743*9880d681SAndroid Build Coastguard Worker 744*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatconstant_rotate_v8i32(<8 x i32> %a) nounwind { 745*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_v8i32: 746*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $4, %xmm0, %xmm1 748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $4, %xmm2, %xmm3 750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $28, %xmm0, %xmm0 752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $28, %xmm2, %xmm2 753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 756*9880d681SAndroid Build Coastguard Worker; 757*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_v8i32: 758*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 759*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpslld $4, %ymm0, %ymm1 760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $28, %ymm0, %ymm0 761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 763*9880d681SAndroid Build Coastguard Worker; 764*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_v8i32: 765*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 766*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd $4, %xmm0, %xmm1 767*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 768*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd $4, %xmm0, %xmm0 769*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 770*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 771*9880d681SAndroid Build Coastguard Worker; 772*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_v8i32: 773*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 774*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd $4, %xmm0, %xmm1 775*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 776*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd $4, %xmm0, %xmm0 777*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 778*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 779*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 780*9880d681SAndroid Build Coastguard Worker %lshr = lshr <8 x i32> %a, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28> 781*9880d681SAndroid Build Coastguard Worker %or = or <8 x i32> %shl, %lshr 782*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %or 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatconstant_rotate_v16i16(<16 x i16> %a) nounwind { 786*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_v16i16: 787*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 788*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $7, %xmm0, %xmm1 789*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 790*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $7, %xmm2, %xmm3 791*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 792*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $9, %xmm0, %xmm0 793*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $9, %xmm2, %xmm2 794*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 795*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 796*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 797*9880d681SAndroid Build Coastguard Worker; 798*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_v16i16: 799*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $7, %ymm0, %ymm1 801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $9, %ymm0, %ymm0 802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 804*9880d681SAndroid Build Coastguard Worker; 805*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_v16i16: 806*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 807*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw $7, %xmm0, %xmm1 808*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 809*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw $7, %xmm0, %xmm0 810*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 811*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 812*9880d681SAndroid Build Coastguard Worker; 813*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_v16i16: 814*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 815*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw $7, %xmm0, %xmm1 816*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 817*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw $7, %xmm0, %xmm0 818*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 819*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 820*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %a, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7> 821*9880d681SAndroid Build Coastguard Worker %lshr = lshr <16 x i16> %a, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9> 822*9880d681SAndroid Build Coastguard Worker %or = or <16 x i16> %shl, %lshr 823*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %or 824*9880d681SAndroid Build Coastguard Worker} 825*9880d681SAndroid Build Coastguard Worker 826*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatconstant_rotate_v32i8(<32 x i8> %a) nounwind { 827*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_v32i8: 828*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 829*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 830*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm2 831*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 832*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 833*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm0, %xmm4 834*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm3 835*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm2, %ymm0 843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 844*9880d681SAndroid Build Coastguard Worker; 845*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_v32i8: 846*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 847*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $4, %ymm0, %ymm1 848*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 849*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 850*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 851*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 852*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 853*9880d681SAndroid Build Coastguard Worker; 854*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_v32i8: 855*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 856*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb $4, %xmm0, %xmm1 857*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 858*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb $4, %xmm0, %xmm0 859*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 860*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 861*9880d681SAndroid Build Coastguard Worker; 862*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_v32i8: 863*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 864*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb $4, %xmm0, %xmm1 865*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 866*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb $4, %xmm0, %xmm0 867*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 868*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 869*9880d681SAndroid Build Coastguard Worker %shl = shl <32 x i8> %a, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 870*9880d681SAndroid Build Coastguard Worker %lshr = lshr <32 x i8> %a, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 871*9880d681SAndroid Build Coastguard Worker %or = or <32 x i8> %shl, %lshr 872*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %or 873*9880d681SAndroid Build Coastguard Worker} 874*9880d681SAndroid Build Coastguard Worker 875*9880d681SAndroid Build Coastguard Worker; 876*9880d681SAndroid Build Coastguard Worker; Masked Uniform Constant Rotates 877*9880d681SAndroid Build Coastguard Worker; 878*9880d681SAndroid Build Coastguard Worker 879*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @splatconstant_rotate_mask_v4i64(<4 x i64> %a) nounwind { 880*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_mask_v4i64: 881*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $15, %xmm0, %xmm1 883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $15, %xmm2, %xmm3 885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $49, %xmm0, %xmm0 887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $49, %xmm2, %xmm2 888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 893*9880d681SAndroid Build Coastguard Worker; 894*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_mask_v4i64: 895*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 896*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $15, %ymm0, %ymm1 897*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $49, %ymm0, %ymm0 898*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 902*9880d681SAndroid Build Coastguard Worker; 903*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_mask_v4i64: 904*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 905*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq $15, %xmm0, %xmm1 906*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 907*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotq $15, %xmm0, %xmm0 908*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 909*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 910*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 911*9880d681SAndroid Build Coastguard Worker; 912*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_mask_v4i64: 913*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 914*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq $15, %xmm0, %xmm1 915*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 916*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotq $15, %xmm0, %xmm0 917*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 918*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 919*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 920*9880d681SAndroid Build Coastguard Worker %shl = shl <4 x i64> %a, <i64 15, i64 15, i64 15, i64 15> 921*9880d681SAndroid Build Coastguard Worker %lshr = lshr <4 x i64> %a, <i64 49, i64 49, i64 49, i64 49> 922*9880d681SAndroid Build Coastguard Worker %rmask = and <4 x i64> %lshr, <i64 255, i64 127, i64 127, i64 255> 923*9880d681SAndroid Build Coastguard Worker %lmask = and <4 x i64> %shl, <i64 33, i64 65, i64 129, i64 257> 924*9880d681SAndroid Build Coastguard Worker %or = or <4 x i64> %lmask, %rmask 925*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %or 926*9880d681SAndroid Build Coastguard Worker} 927*9880d681SAndroid Build Coastguard Worker 928*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @splatconstant_rotate_mask_v8i32(<8 x i32> %a) nounwind { 929*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_mask_v8i32: 930*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 931*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $4, %xmm0, %xmm1 932*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 933*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslld $4, %xmm2, %xmm3 934*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 935*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $28, %xmm0, %xmm0 936*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrld $28, %xmm2, %xmm2 937*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 938*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 939*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 940*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 941*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 942*9880d681SAndroid Build Coastguard Worker; 943*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_mask_v8i32: 944*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 945*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpslld $4, %ymm0, %ymm1 946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrld $28, %ymm0, %ymm0 947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 951*9880d681SAndroid Build Coastguard Worker; 952*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_mask_v8i32: 953*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 954*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd $4, %xmm0, %xmm1 955*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 956*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotd $4, %xmm0, %xmm0 957*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 958*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 959*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 960*9880d681SAndroid Build Coastguard Worker; 961*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_mask_v8i32: 962*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 963*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd $4, %xmm0, %xmm1 964*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 965*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotd $4, %xmm0, %xmm0 966*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 967*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 968*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 969*9880d681SAndroid Build Coastguard Worker %shl = shl <8 x i32> %a, <i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4> 970*9880d681SAndroid Build Coastguard Worker %lshr = lshr <8 x i32> %a, <i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28> 971*9880d681SAndroid Build Coastguard Worker %rmask = and <8 x i32> %lshr, <i32 3, i32 7, i32 15, i32 31, i32 63, i32 127, i32 255, i32 511> 972*9880d681SAndroid Build Coastguard Worker %lmask = and <8 x i32> %shl, <i32 511, i32 255, i32 127, i32 63, i32 31, i32 15, i32 7, i32 3> 973*9880d681SAndroid Build Coastguard Worker %or = or <8 x i32> %lmask, %rmask 974*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %or 975*9880d681SAndroid Build Coastguard Worker} 976*9880d681SAndroid Build Coastguard Worker 977*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @splatconstant_rotate_mask_v16i16(<16 x i16> %a) nounwind { 978*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_mask_v16i16: 979*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 980*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm0, %xmm1 981*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 982*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $5, %xmm2, %xmm3 983*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm1 984*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $11, %xmm0, %xmm0 985*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $11, %xmm2, %xmm2 986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 989*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 990*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 991*9880d681SAndroid Build Coastguard Worker; 992*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_mask_v16i16: 993*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 994*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $5, %ymm0, %ymm1 995*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $11, %ymm0, %ymm0 996*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 997*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 998*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 999*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1000*9880d681SAndroid Build Coastguard Worker; 1001*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_mask_v16i16: 1002*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1003*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw $5, %xmm0, %xmm1 1004*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1005*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotw $5, %xmm0, %xmm0 1006*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1007*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1008*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1009*9880d681SAndroid Build Coastguard Worker; 1010*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_mask_v16i16: 1011*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1012*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw $5, %xmm0, %xmm1 1013*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 1014*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotw $5, %xmm0, %xmm0 1015*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 1016*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1017*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1018*9880d681SAndroid Build Coastguard Worker %shl = shl <16 x i16> %a, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5> 1019*9880d681SAndroid Build Coastguard Worker %lshr = lshr <16 x i16> %a, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11> 1020*9880d681SAndroid Build Coastguard Worker %rmask = and <16 x i16> %lshr, <i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55, i16 55> 1021*9880d681SAndroid Build Coastguard Worker %lmask = and <16 x i16> %shl, <i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33, i16 33> 1022*9880d681SAndroid Build Coastguard Worker %or = or <16 x i16> %lmask, %rmask 1023*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %or 1024*9880d681SAndroid Build Coastguard Worker} 1025*9880d681SAndroid Build Coastguard Worker 1026*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @splatconstant_rotate_mask_v32i8(<32 x i8> %a) nounwind { 1027*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: splatconstant_rotate_mask_v32i8: 1028*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 1030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm1, %xmm2 1031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240] 1032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 1033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $4, %xmm0, %xmm4 1034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm3 1035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 1036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 1037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 1039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 1040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 1041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 1042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm2, %ymm1 1044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm0, %ymm1, %ymm0 1045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1046*9880d681SAndroid Build Coastguard Worker; 1047*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: splatconstant_rotate_mask_v32i8: 1048*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1049*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $4, %ymm0, %ymm1 1050*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 1051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 1052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1053*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1054*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 1055*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm0, %ymm1, %ymm0 1056*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1057*9880d681SAndroid Build Coastguard Worker; 1058*9880d681SAndroid Build Coastguard Worker; XOPAVX1-LABEL: splatconstant_rotate_mask_v32i8: 1059*9880d681SAndroid Build Coastguard Worker; XOPAVX1: # BB#0: 1060*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb $4, %xmm0, %xmm1 1061*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1062*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vprotb $4, %xmm0, %xmm0 1063*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1064*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1065*9880d681SAndroid Build Coastguard Worker; XOPAVX1-NEXT: retq 1066*9880d681SAndroid Build Coastguard Worker; 1067*9880d681SAndroid Build Coastguard Worker; XOPAVX2-LABEL: splatconstant_rotate_mask_v32i8: 1068*9880d681SAndroid Build Coastguard Worker; XOPAVX2: # BB#0: 1069*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb $4, %xmm0, %xmm1 1070*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 1071*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vprotb $4, %xmm0, %xmm0 1072*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 1073*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 1074*9880d681SAndroid Build Coastguard Worker; XOPAVX2-NEXT: retq 1075*9880d681SAndroid Build Coastguard Worker %shl = shl <32 x i8> %a, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 1076*9880d681SAndroid Build Coastguard Worker %lshr = lshr <32 x i8> %a, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4> 1077*9880d681SAndroid Build Coastguard Worker %rmask = and <32 x i8> %lshr, <i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55, i8 55> 1078*9880d681SAndroid Build Coastguard Worker %lmask = and <32 x i8> %shl, <i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33, i8 33> 1079*9880d681SAndroid Build Coastguard Worker %or = or <32 x i8> %lmask, %rmask 1080*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %or 1081*9880d681SAndroid Build Coastguard Worker} 1082