1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by 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=+avx512cd,+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512CDVL 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512cd,-avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512CD 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @testv4i64(<4 x i64> %in) nounwind { 8*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv4i64: 9*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 10*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 11*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 12*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1 13*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm0, %xmm2, %xmm3 14*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1 15*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 16*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 17*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,1] 18*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1 19*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 20*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm5 21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm5, %xmm6, %xmm5 23*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm6, %xmm1 26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm5, %xmm1, %xmm1 27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm2, %xmm1, %xmm1 28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm0, %xmm0 29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm3 30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm3, %xmm6, %xmm3 31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm6, %xmm0 34*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0 35*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm2, %xmm0, %xmm0 36*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 37*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker; 39*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv4i64: 40*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 42*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm2 43*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 44*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 45*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0 46*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 47*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm3 48*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 49*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm4, %ymm3 50*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 51*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 52*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm4, %ymm0 53*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0 54*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 55*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 56*9880d681SAndroid Build Coastguard Worker; 57*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv4i64: 58*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 59*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 60*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubq %ymm0, %ymm1, %ymm2 61*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm2, %ymm0, %ymm0 62*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubq {{.*}}(%rip){1to4}, %ymm0, %ymm0 63*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 64*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm2, %ymm0, %ymm3 65*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 66*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm3, %ymm4, %ymm3 67*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 68*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm2, %ymm0, %ymm0 69*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm4, %ymm0 70*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm3, %ymm0, %ymm0 71*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 72*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 73*9880d681SAndroid Build Coastguard Worker; 74*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i64: 75*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 76*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 77*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubq %ymm0, %ymm1, %ymm2 78*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm0 79*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 80*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubq %ymm2, %ymm0, %ymm0 81*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 82*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm3 83*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 84*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm3, %ymm4, %ymm3 85*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 86*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm0 87*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm4, %ymm0 88*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm3, %ymm0, %ymm0 89*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 90*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 91*9880d681SAndroid Build Coastguard Worker %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %in, i1 0) 92*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %out 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @testv4i64u(<4 x i64> %in) nounwind { 96*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv4i64u: 97*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm2, %xmm1 101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm0, %xmm2, %xmm3 102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1 103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,1] 106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1 107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm5 109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm5, %xmm6, %xmm5 111*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm6, %xmm1 114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm5, %xmm1, %xmm1 115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm2, %xmm1, %xmm1 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm0, %xmm0 117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm3 118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm3, %xmm6, %xmm3 119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 120*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm6, %xmm0 122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0 123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm2, %xmm0, %xmm0 124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 126*9880d681SAndroid Build Coastguard Worker; 127*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv4i64u: 128*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm0, %ymm1, %ymm2 131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2 133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0 134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm3 136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm4, %ymm3 138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm4, %ymm0 141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0 142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 144*9880d681SAndroid Build Coastguard Worker; 145*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv4i64u: 146*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 147*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 148*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubq %ymm0, %ymm1, %ymm1 149*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 150*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vplzcntq %ymm0, %ymm0 151*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpbroadcastq {{.*}}(%rip), %ymm1 152*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubq %ymm0, %ymm1, %ymm0 153*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 154*9880d681SAndroid Build Coastguard Worker; 155*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i64u: 156*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 157*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 158*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubq %ymm0, %ymm1, %ymm1 159*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 160*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vplzcntq %zmm0, %zmm0 161*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpbroadcastq {{.*}}(%rip), %ymm1 162*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubq %ymm0, %ymm1, %ymm0 163*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 164*9880d681SAndroid Build Coastguard Worker %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %in, i1 -1) 165*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %out 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @testv8i32(<8 x i32> %in) nounwind { 169*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv8i32: 170*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm2, %xmm1, %xmm2 174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm0, %xmm1, %xmm3 175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm2, %ymm0, %ymm0 177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,1,1,1] 179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm2, %xmm2 180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm5 182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm5, %xmm6, %xmm5 184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2 185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm6, %xmm2 187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm5, %xmm2, %xmm2 188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm1[2],xmm2[3],xmm1[3] 189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm5, %xmm5 190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm2, %xmm2 192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm0, %xmm0 194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm3 195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm3, %xmm6, %xmm3 196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm6, %xmm0 199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0 200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm3 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] 201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm3, %xmm3 202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm0, %xmm0 204*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 205*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 207*9880d681SAndroid Build Coastguard Worker; 208*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv8i32: 209*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm0, %ymm1, %ymm2 212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm2, %ymm0, %ymm0 215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm3 217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm4, %ymm3 219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm4, %ymm0 222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0 223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 229*9880d681SAndroid Build Coastguard Worker; 230*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv8i32: 231*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 232*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 233*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubd %ymm0, %ymm1, %ymm2 234*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandd %ymm2, %ymm0, %ymm0 235*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubd {{.*}}(%rip){1to8}, %ymm0, %ymm0 236*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 237*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm2, %ymm0, %ymm3 238*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 239*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm3, %ymm4, %ymm3 240*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 241*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm2, %ymm0, %ymm0 242*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm4, %ymm0 243*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm3, %ymm0, %ymm0 244*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 245*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 246*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 247*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 248*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 249*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 250*9880d681SAndroid Build Coastguard Worker; 251*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i32: 252*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 253*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 254*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubd %ymm0, %ymm1, %ymm2 255*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm0 256*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 257*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubd %ymm2, %ymm0, %ymm0 258*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 259*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm3 260*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 261*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm3, %ymm4, %ymm3 262*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 263*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm2, %ymm0, %ymm0 264*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm4, %ymm0 265*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm3, %ymm0, %ymm0 266*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 267*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 268*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 269*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 270*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 271*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 272*9880d681SAndroid Build Coastguard Worker %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %in, i1 0) 273*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %out 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @testv8i32u(<8 x i32> %in) nounwind { 277*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv8i32u: 278*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm2, %xmm1, %xmm2 282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm0, %xmm1, %xmm3 283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2 284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm2, %ymm0, %ymm0 285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [1,1,1,1] 287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm2, %xmm2 288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm5 290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm5, %xmm6, %xmm5 292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2 293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm6, %xmm2 295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm5, %xmm2, %xmm2 296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm1[2],xmm2[3],xmm1[3] 297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm5, %xmm5 298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm2, %xmm2 300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm5, %xmm2, %xmm2 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm0, %xmm0 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm3 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm3, %xmm6, %xmm3 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm6, %xmm0 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm3, %xmm0, %xmm0 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckhdq {{.*#+}} xmm3 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] 309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm3, %xmm3 310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsadbw %xmm1, %xmm0, %xmm0 312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0 314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 315*9880d681SAndroid Build Coastguard Worker; 316*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv8i32u: 317*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm0, %ymm1, %ymm2 320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpbroadcastd {{.*}}(%rip), %ymm2 322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm2, %ymm0, %ymm0 323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm3 325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm4, %ymm3 327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm4, %ymm0 330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm3, %ymm0, %ymm0 331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7] 332*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm2, %ymm2 333*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5] 334*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsadbw %ymm1, %ymm0, %ymm0 335*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpackuswb %ymm2, %ymm0, %ymm0 336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 337*9880d681SAndroid Build Coastguard Worker; 338*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv8i32u: 339*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 340*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 341*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubd %ymm0, %ymm1, %ymm1 342*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandd %ymm1, %ymm0, %ymm0 343*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vplzcntd %ymm0, %ymm0 344*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpbroadcastd {{.*}}(%rip), %ymm1 345*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubd %ymm0, %ymm1, %ymm0 346*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 347*9880d681SAndroid Build Coastguard Worker; 348*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i32u: 349*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 350*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 351*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubd %ymm0, %ymm1, %ymm1 352*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 353*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vplzcntd %zmm0, %zmm0 354*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpbroadcastd {{.*}}(%rip), %ymm1 355*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubd %ymm0, %ymm1, %ymm0 356*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 357*9880d681SAndroid Build Coastguard Worker %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %in, i1 -1) 358*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %out 359*9880d681SAndroid Build Coastguard Worker} 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @testv16i16(<16 x i16> %in) nounwind { 362*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv16i16: 363*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 365*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 366*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm2, %xmm1 367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm0, %xmm2, %xmm2 368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1] 371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2 372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm4 374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 375*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4 376*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2 377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm5, %xmm2 379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm2, %xmm2 380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0 385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm1 386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm1 387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm5, %xmm0 390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0 391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 396*9880d681SAndroid Build Coastguard Worker; 397*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv16i16: 398*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw %ymm0, %ymm1, %ymm1 401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 406*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 409*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 411*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 412*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 415*9880d681SAndroid Build Coastguard Worker; 416*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv16i16: 417*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 418*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 419*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubw %ymm0, %ymm1, %ymm1 420*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 421*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 422*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 423*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm2 424*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 425*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 426*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 427*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 428*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 429*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 430*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsllw $8, %ymm0, %ymm1 431*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm0, %ymm1, %ymm0 432*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $8, %ymm0, %ymm0 433*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 434*9880d681SAndroid Build Coastguard Worker; 435*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv16i16: 436*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 437*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 438*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubw %ymm0, %ymm1, %ymm1 439*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 440*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 441*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 442*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm2 443*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 444*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm2, %ymm3, %ymm2 445*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 446*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 447*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm3, %ymm0 448*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm2, %ymm0, %ymm0 449*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsllw $8, %ymm0, %ymm1 450*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm0, %ymm1, %ymm0 451*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $8, %ymm0, %ymm0 452*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 453*9880d681SAndroid Build Coastguard Worker %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %in, i1 0) 454*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %out 455*9880d681SAndroid Build Coastguard Worker} 456*9880d681SAndroid Build Coastguard Worker 457*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @testv16i16u(<16 x i16> %in) nounwind { 458*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv16i16u: 459*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm2, %xmm1 463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm0, %xmm2, %xmm2 464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 466*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1] 467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2 468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm4 470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4 472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm2, %xmm2 473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm5, %xmm2 475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm2, %xmm2 476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm2, %xmm4 477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm4, %xmm2 478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm2, %xmm2 479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0 481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm1 482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm1 483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm5, %xmm0 486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm1, %xmm0, %xmm0 487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllw $8, %xmm0, %xmm1 488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm0, %xmm1, %xmm0 489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $8, %xmm0, %xmm0 490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 492*9880d681SAndroid Build Coastguard Worker; 493*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv16i16u: 494*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 495*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw %ymm0, %ymm1, %ymm1 497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllw $8, %ymm0, %ymm1 508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm0, %ymm1, %ymm0 509*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0 510*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 511*9880d681SAndroid Build Coastguard Worker; 512*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv16i16u: 513*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 514*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 515*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubw %ymm0, %ymm1, %ymm1 516*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 517*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 518*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 519*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm2 520*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 521*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 522*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 523*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 524*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 525*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 526*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsllw $8, %ymm0, %ymm1 527*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm0, %ymm1, %ymm0 528*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $8, %ymm0, %ymm0 529*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 530*9880d681SAndroid Build Coastguard Worker; 531*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv16i16u: 532*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 533*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 534*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubw %ymm0, %ymm1, %ymm1 535*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 536*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 537*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 538*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm2 539*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 540*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm2, %ymm3, %ymm2 541*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 542*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 543*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm3, %ymm0 544*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm2, %ymm0, %ymm0 545*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsllw $8, %ymm0, %ymm1 546*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm0, %ymm1, %ymm0 547*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $8, %ymm0, %ymm0 548*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 549*9880d681SAndroid Build Coastguard Worker %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %in, i1 -1) 550*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %out 551*9880d681SAndroid Build Coastguard Worker} 552*9880d681SAndroid Build Coastguard Worker 553*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @testv32i8(<32 x i8> %in) nounwind { 554*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv32i8: 555*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1 559*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm0, %xmm2, %xmm2 560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm1 565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm4 567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4 569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm1 572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm1, %xmm1 573*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm0 574*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm2 575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm5, %xmm2 576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm5, %xmm0 579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm0 580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 582*9880d681SAndroid Build Coastguard Worker; 583*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv32i8: 584*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1 587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 598*9880d681SAndroid Build Coastguard Worker; 599*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv32i8: 600*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 601*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 602*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubb %ymm0, %ymm1, %ymm1 603*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 604*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 605*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 606*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm2 607*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 608*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 609*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 610*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 611*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 612*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 613*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 614*9880d681SAndroid Build Coastguard Worker; 615*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv32i8: 616*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 617*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 618*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubb %ymm0, %ymm1, %ymm1 619*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 620*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 621*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 622*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm2 623*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 624*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm2, %ymm3, %ymm2 625*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 626*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 627*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm3, %ymm0 628*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm2, %ymm0, %ymm0 629*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 630*9880d681SAndroid Build Coastguard Worker %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 0) 631*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %out 632*9880d681SAndroid Build Coastguard Worker} 633*9880d681SAndroid Build Coastguard Worker 634*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @testv32i8u(<32 x i8> %in) nounwind { 635*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv32i8u: 636*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2 639*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm1, %xmm2, %xmm1 640*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm0, %xmm2, %xmm2 641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1 642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1] 645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm1 646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm4 648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm4, %xmm5, %xmm4 650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm1, %xmm1 651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm1 653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm4, %xmm1, %xmm1 654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm0 655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm2 656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm5, %xmm2 657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlw $4, %xmm0, %xmm0 658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm0, %xmm5, %xmm0 660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddb %xmm2, %xmm0, %xmm0 661*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 662*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 663*9880d681SAndroid Build Coastguard Worker; 664*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv32i8u: 665*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb %ymm0, %ymm1, %ymm1 668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm2 672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm3, %ymm2 674*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm0 675*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 676*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm0 677*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddb %ymm2, %ymm0, %ymm0 678*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 679*9880d681SAndroid Build Coastguard Worker; 680*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv32i8u: 681*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 682*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpxord %ymm1, %ymm1, %ymm1 683*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubb %ymm0, %ymm1, %ymm1 684*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 685*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 686*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 687*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm2 688*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 689*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm2, %ymm3, %ymm2 690*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpsrlw $4, %ymm0, %ymm0 691*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpandq %ymm1, %ymm0, %ymm0 692*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpshufb %ymm0, %ymm3, %ymm0 693*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vpaddb %ymm2, %ymm0, %ymm0 694*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 695*9880d681SAndroid Build Coastguard Worker; 696*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv32i8u: 697*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 698*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpxor %ymm1, %ymm1, %ymm1 699*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubb %ymm0, %ymm1, %ymm1 700*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 701*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsubb {{.*}}(%rip), %ymm0, %ymm0 702*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 703*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm2 704*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4] 705*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm2, %ymm3, %ymm2 706*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpsrlw $4, %ymm0, %ymm0 707*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpand %ymm1, %ymm0, %ymm0 708*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpshufb %ymm0, %ymm3, %ymm0 709*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vpaddb %ymm2, %ymm0, %ymm0 710*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 711*9880d681SAndroid Build Coastguard Worker %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 -1) 712*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %out 713*9880d681SAndroid Build Coastguard Worker} 714*9880d681SAndroid Build Coastguard Worker 715*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @foldv4i64() nounwind { 716*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv4i64: 717*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 720*9880d681SAndroid Build Coastguard Worker; 721*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv4i64: 722*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 725*9880d681SAndroid Build Coastguard Worker; 726*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv4i64: 727*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 728*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,64,0] 729*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 730*9880d681SAndroid Build Coastguard Worker; 731*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i64: 732*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 733*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 734*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 735*9880d681SAndroid Build Coastguard Worker %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> <i64 256, i64 -1, i64 0, i64 255>, i1 0) 736*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %out 737*9880d681SAndroid Build Coastguard Worker} 738*9880d681SAndroid Build Coastguard Worker 739*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @foldv4i64u() nounwind { 740*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv4i64u: 741*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 744*9880d681SAndroid Build Coastguard Worker; 745*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv4i64u: 746*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 749*9880d681SAndroid Build Coastguard Worker; 750*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv4i64u: 751*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 752*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,64,0] 753*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 754*9880d681SAndroid Build Coastguard Worker; 755*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i64u: 756*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 757*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,64,0] 758*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 759*9880d681SAndroid Build Coastguard Worker %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> <i64 256, i64 -1, i64 0, i64 255>, i1 -1) 760*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %out 761*9880d681SAndroid Build Coastguard Worker} 762*9880d681SAndroid Build Coastguard Worker 763*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @foldv8i32() nounwind { 764*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv8i32: 765*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 768*9880d681SAndroid Build Coastguard Worker; 769*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv8i32: 770*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 773*9880d681SAndroid Build Coastguard Worker; 774*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv8i32: 775*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 776*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa32 {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 777*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 778*9880d681SAndroid Build Coastguard Worker; 779*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i32: 780*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 781*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 782*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 783*9880d681SAndroid Build Coastguard Worker %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> <i32 256, i32 -1, i32 0, i32 255, i32 -65536, i32 7, i32 24, i32 88>, i1 0) 784*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %out 785*9880d681SAndroid Build Coastguard Worker} 786*9880d681SAndroid Build Coastguard Worker 787*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @foldv8i32u() nounwind { 788*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv8i32u: 789*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 790*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 791*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 792*9880d681SAndroid Build Coastguard Worker; 793*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv8i32u: 794*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 797*9880d681SAndroid Build Coastguard Worker; 798*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv8i32u: 799*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 800*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa32 {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 801*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 802*9880d681SAndroid Build Coastguard Worker; 803*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i32u: 804*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 805*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3] 806*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 807*9880d681SAndroid Build Coastguard Worker %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> <i32 256, i32 -1, i32 0, i32 255, i32 -65536, i32 7, i32 24, i32 88>, i1 -1) 808*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %out 809*9880d681SAndroid Build Coastguard Worker} 810*9880d681SAndroid Build Coastguard Worker 811*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @foldv16i16() nounwind { 812*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv16i16: 813*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 814*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 815*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 816*9880d681SAndroid Build Coastguard Worker; 817*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv16i16: 818*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 821*9880d681SAndroid Build Coastguard Worker; 822*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv16i16: 823*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 824*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 825*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 826*9880d681SAndroid Build Coastguard Worker; 827*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i16: 828*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 829*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 830*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 831*9880d681SAndroid Build Coastguard Worker %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88, i16 -2, i16 254, i16 1, i16 2, i16 4, i16 8, i16 16, i16 32>, i1 0) 832*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %out 833*9880d681SAndroid Build Coastguard Worker} 834*9880d681SAndroid Build Coastguard Worker 835*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @foldv16i16u() nounwind { 836*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv16i16u: 837*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 840*9880d681SAndroid Build Coastguard Worker; 841*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv16i16u: 842*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 843*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 845*9880d681SAndroid Build Coastguard Worker; 846*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv16i16u: 847*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 848*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 849*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 850*9880d681SAndroid Build Coastguard Worker; 851*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i16u: 852*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 853*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5] 854*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 855*9880d681SAndroid Build Coastguard Worker %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88, i16 -2, i16 254, i16 1, i16 2, i16 4, i16 8, i16 16, i16 32>, i1 -1) 856*9880d681SAndroid Build Coastguard Worker ret <16 x i16> %out 857*9880d681SAndroid Build Coastguard Worker} 858*9880d681SAndroid Build Coastguard Worker 859*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @foldv32i8() nounwind { 860*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv32i8: 861*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 864*9880d681SAndroid Build Coastguard Worker; 865*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv32i8: 866*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 867*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 868*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 869*9880d681SAndroid Build Coastguard Worker; 870*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv32i8: 871*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 872*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 873*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 874*9880d681SAndroid Build Coastguard Worker; 875*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv32i8: 876*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 877*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 878*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 879*9880d681SAndroid Build Coastguard Worker %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 256, i8 -256, i8 -128, i8 -64, i8 -32, i8 -16, i8 -8, i8 -4, i8 -2, i8 -1, i8 3, i8 5, i8 7, i8 127>, i1 0) 880*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %out 881*9880d681SAndroid Build Coastguard Worker} 882*9880d681SAndroid Build Coastguard Worker 883*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @foldv32i8u() nounwind { 884*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv32i8u: 885*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 888*9880d681SAndroid Build Coastguard Worker; 889*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv32i8u: 890*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 893*9880d681SAndroid Build Coastguard Worker; 894*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv32i8u: 895*9880d681SAndroid Build Coastguard Worker; AVX512CDVL: # BB#0: 896*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: vmovdqa64 {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 897*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT: retq 898*9880d681SAndroid Build Coastguard Worker; 899*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv32i8u: 900*9880d681SAndroid Build Coastguard Worker; AVX512CD: # BB#0: 901*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0] 902*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT: retq 903*9880d681SAndroid Build Coastguard Worker %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 256, i8 -256, i8 -128, i8 -64, i8 -32, i8 -16, i8 -8, i8 -4, i8 -2, i8 -1, i8 3, i8 5, i8 7, i8 127>, i1 -1) 904*9880d681SAndroid Build Coastguard Worker ret <32 x i8> %out 905*9880d681SAndroid Build Coastguard Worker} 906*9880d681SAndroid Build Coastguard Worker 907*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1) 908*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1) 909*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1) 910*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1) 911