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=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2 3*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 4*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 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; 9*9880d681SAndroid Build Coastguard Worker; add 10*9880d681SAndroid Build Coastguard Worker; 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_add_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 13*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v4i64_4i32: 14*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm2, %xmm0 16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm3, %xmm1 17*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 18*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 19*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 20*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 21*9880d681SAndroid Build Coastguard Worker; 22*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v4i64_4i32: 23*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm2 25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm0 28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker; 34*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v4i64_4i32: 35*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm1, %ymm0, %ymm0 37*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 38*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 39*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 40*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 42*9880d681SAndroid Build Coastguard Worker; 43*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v4i64_4i32: 44*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 45*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm1, %ymm0, %ymm0 46*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 47*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 48*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 49*9880d681SAndroid Build Coastguard Worker %1 = add <4 x i64> %a0, %a1 50*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 51*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 55*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v8i64_8i16: 56*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 57*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm6, %xmm2 58*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm0 59*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm7, %xmm3 60*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm1 61*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 62*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 63*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 66*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 67*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 68*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 69*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 70*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 71*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 72*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 73*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 74*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 75*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 76*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v8i64_8i16: 79*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm4 81*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 82*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 83*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm0 84*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm2 85*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 86*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 87*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm1, %xmm1 88*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm2, %xmm1 92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7] 94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 98*9880d681SAndroid Build Coastguard Worker; 99*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v8i64_8i16: 100*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1 102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0 103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 113*9880d681SAndroid Build Coastguard Worker; 114*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v8i64_8i16: 115*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm1, %zmm0, %zmm0 117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 119*9880d681SAndroid Build Coastguard Worker %1 = add <8 x i64> %a0, %a1 120*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 121*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v8i32_8i16: 126*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm2, %xmm0 128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm3, %xmm1 129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v8i32_8i16: 137*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm2 139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm1, %xmm0, %xmm0 142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 148*9880d681SAndroid Build Coastguard Worker; 149*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v8i32_8i16: 150*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0 152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 157*9880d681SAndroid Build Coastguard Worker; 158*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v8i32_8i16: 159*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 160*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddd %ymm1, %ymm0, %ymm0 161*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 162*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 163*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 164*9880d681SAndroid Build Coastguard Worker %1 = add <8 x i32> %a0, %a1 165*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 166*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 170*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i64_v16i8: 171*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 172*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm0 173*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm1 174*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm2 175*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm3 176*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm4 177*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm5 178*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm6 179*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{[0-9]+}}(%rsp), %xmm7 180*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 181*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 182*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 183*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 186*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 190*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 191*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 192*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 193*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 194*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 195*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 197*9880d681SAndroid Build Coastguard Worker; 198*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i64_v16i8: 199*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm8 201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm4 202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm0 204*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm1, %xmm4 205*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm5 206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 207*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm1, %xmm1 208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm6, %xmm2, %xmm5 209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm6 210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm6, %xmm2, %xmm2 212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm7, %xmm3, %xmm6 213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm7 214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm7, %xmm3, %xmm3 216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3 218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm6, %xmm6 219*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm6, %xmm3 220*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 221*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm5, %xmm5 222*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm5, %xmm2 223*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 224*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm1, %xmm1 225*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm4, %xmm3 226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm0, %xmm0 228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm8, %xmm3 229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm3, %xmm0 230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 232*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 233*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 234*9880d681SAndroid Build Coastguard Worker; 235*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i64_v16i8: 236*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm5, %ymm1, %ymm1 238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm4, %ymm0, %ymm0 239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm7, %ymm3, %ymm3 240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm6, %ymm2, %ymm2 241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 243*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 244*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 245*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 246*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 247*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 251*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 258*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 259*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 262*9880d681SAndroid Build Coastguard Worker; 263*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v16i64_v16i8: 264*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 265*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm3, %zmm1, %zmm1 266*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm2, %zmm0, %zmm0 267*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 268*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 269*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 272*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i64> %a0, %a1 273*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 274*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 278*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i32_v16i8: 279*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm4, %xmm0 281*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm5, %xmm1 282*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm6, %xmm2 283*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd %xmm7, %xmm3 284*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 285*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 286*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 287*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 288*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 293*9880d681SAndroid Build Coastguard Worker; 294*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i32_v16i8: 295*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm4 297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm2, %xmm0, %xmm0 300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm3, %xmm1, %xmm2 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd %xmm3, %xmm1, %xmm1 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm2 310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 314*9880d681SAndroid Build Coastguard Worker; 315*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i32_v16i8: 316*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0 318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1 319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 330*9880d681SAndroid Build Coastguard Worker; 331*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v16i32_v16i8: 332*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddd %zmm1, %zmm0, %zmm0 334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 335*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 336*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i32> %a0, %a1 337*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 338*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 339*9880d681SAndroid Build Coastguard Worker} 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 342*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i16_v16i8: 343*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw %xmm2, %xmm0 345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw %xmm3, %xmm1 346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 351*9880d681SAndroid Build Coastguard Worker; 352*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i16_v16i8: 353*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm2 355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw %xmm1, %xmm0, %xmm0 358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 364*9880d681SAndroid Build Coastguard Worker; 365*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i16_v16i8: 366*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0 368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 375*9880d681SAndroid Build Coastguard Worker; 376*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_add_v16i16_v16i8: 377*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 378*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddw %ymm1, %ymm0, %ymm0 379*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 380*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 381*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 382*9880d681SAndroid Build Coastguard Worker; 383*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_add_v16i16_v16i8: 384*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 385*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddw %ymm1, %ymm0, %ymm0 386*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 387*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 388*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 389*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i16> %a0, %a1 390*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 391*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 392*9880d681SAndroid Build Coastguard Worker} 393*9880d681SAndroid Build Coastguard Worker 394*9880d681SAndroid Build Coastguard Worker; 395*9880d681SAndroid Build Coastguard Worker; add to constant 396*9880d681SAndroid Build Coastguard Worker; 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_add_const_v4i64_4i32(<4 x i64> %a0) nounwind { 399*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v4i64_4i32: 400*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm0, %xmm2 405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm1 406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 410*9880d681SAndroid Build Coastguard Worker; 411*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v4i64_4i32: 412*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm1 415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7] 416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm0, %xmm1 417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm0 419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 424*9880d681SAndroid Build Coastguard Worker; 425*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v4i64_4i32: 426*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 433*9880d681SAndroid Build Coastguard Worker; 434*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v4i64_4i32: 435*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 440*9880d681SAndroid Build Coastguard Worker %1 = add <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 441*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 442*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 443*9880d681SAndroid Build Coastguard Worker} 444*9880d681SAndroid Build Coastguard Worker 445*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 446*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i64_v16i16: 447*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 448*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm0 451*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] 452*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm0 453*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm2 454*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm3 455*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm1 456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm1 466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm2 468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 469*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 470*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 471*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 472*9880d681SAndroid Build Coastguard Worker; 473*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i64_v16i16: 474*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm2 477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm0, %xmm2 479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm0 481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm1, %xmm3 482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm1, %xmm1 484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7] 486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7] 487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm3, %xmm1 488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7] 489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7] 490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 494*9880d681SAndroid Build Coastguard Worker; 495*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i64_v16i16: 496*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm1, %ymm1 498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 509*9880d681SAndroid Build Coastguard Worker; 510*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i64_v16i16: 511*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq {{.*}}(%rip), %zmm0, %zmm0 513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 515*9880d681SAndroid Build Coastguard Worker %1 = add <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 516*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 517*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 518*9880d681SAndroid Build Coastguard Worker} 519*9880d681SAndroid Build Coastguard Worker 520*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 521*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i32_v16i16: 522*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm0 524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm1 525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 527*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 528*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 529*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 530*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 531*9880d681SAndroid Build Coastguard Worker; 532*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i32_v16i16: 533*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm0, %xmm1 535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm0, %xmm0 537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 543*9880d681SAndroid Build Coastguard Worker; 544*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i32_v16i16: 545*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0 547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 550*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 551*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 552*9880d681SAndroid Build Coastguard Worker; 553*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i32_v16i16: 554*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 555*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0 556*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 557*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 558*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 559*9880d681SAndroid Build Coastguard Worker %1 = add <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 560*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 561*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 562*9880d681SAndroid Build Coastguard Worker} 563*9880d681SAndroid Build Coastguard Worker 564*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 565*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i64_v16i8: 566*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm0 571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm1 572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm2 573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm3 574*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm4 575*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm5 576*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm6 577*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm7 578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 589*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 590*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 591*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 592*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 594*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 595*9880d681SAndroid Build Coastguard Worker; 596*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i64_v16i8: 597*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 598*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 599*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm4 600*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7] 601*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm8 602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm0 604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm1, %xmm5 605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm1, %xmm1 607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm2, %xmm6 608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm2, %xmm2 610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm3, %xmm7 611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm3, %xmm3 613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm7, %xmm7 616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm7, %xmm3 617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm6, %xmm6 619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm6, %xmm2 620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm3 623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm8, %xmm3 626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm3, %xmm0 627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 631*9880d681SAndroid Build Coastguard Worker; 632*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i64_v16i8: 633*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm1, %ymm1 635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm3, %ymm3 637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm2, %ymm2 638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 654*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 655*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 656*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 657*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 658*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 659*9880d681SAndroid Build Coastguard Worker; 660*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i64_v16i8: 661*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq {{.*}}(%rip), %zmm1, %zmm1 663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq {{.*}}(%rip), %zmm0, %zmm0 664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 666*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 667*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 668*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 669*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 670*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 671*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 672*9880d681SAndroid Build Coastguard Worker} 673*9880d681SAndroid Build Coastguard Worker 674*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 675*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i32_v16i8: 676*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm0 678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm1 679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm2 680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddd {{.*}}(%rip), %xmm3 681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 689*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 690*9880d681SAndroid Build Coastguard Worker; 691*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i32_v16i8: 692*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm0, %xmm2 694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm0, %xmm0 696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm1, %xmm3 697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddd {{.*}}(%rip), %xmm1, %xmm1 699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 709*9880d681SAndroid Build Coastguard Worker; 710*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i32_v16i8: 711*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 712*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd {{.*}}(%rip), %ymm0, %ymm0 713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddd {{.*}}(%rip), %ymm1, %ymm1 714*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 715*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 716*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 717*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 718*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 719*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 720*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 721*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 722*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 725*9880d681SAndroid Build Coastguard Worker; 726*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i32_v16i8: 727*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 728*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddd {{.*}}(%rip), %zmm0, %zmm0 729*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 730*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 731*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 732*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 733*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 734*9880d681SAndroid Build Coastguard Worker} 735*9880d681SAndroid Build Coastguard Worker 736*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 737*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i16_v16i8: 738*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 739*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw {{.*}}(%rip), %xmm0 740*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddw {{.*}}(%rip), %xmm1 741*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 742*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 743*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 744*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 745*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 746*9880d681SAndroid Build Coastguard Worker; 747*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i16_v16i8: 748*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw {{.*}}(%rip), %xmm0, %xmm1 750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddw {{.*}}(%rip), %xmm0, %xmm0 752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 758*9880d681SAndroid Build Coastguard Worker; 759*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i16_v16i8: 760*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddw {{.*}}(%rip), %ymm0, %ymm0 762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 769*9880d681SAndroid Build Coastguard Worker; 770*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_add_const_v16i16_v16i8: 771*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 772*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpaddw {{.*}}(%rip), %ymm0, %ymm0 773*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 774*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 775*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 776*9880d681SAndroid Build Coastguard Worker; 777*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_add_const_v16i16_v16i8: 778*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 779*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpaddw {{.*}}(%rip), %ymm0, %ymm0 780*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 781*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 782*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 783*9880d681SAndroid Build Coastguard Worker %1 = add <16 x i16> %a0, <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> 784*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 785*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 786*9880d681SAndroid Build Coastguard Worker} 787*9880d681SAndroid Build Coastguard Worker 788*9880d681SAndroid Build Coastguard Worker; 789*9880d681SAndroid Build Coastguard Worker; sub 790*9880d681SAndroid Build Coastguard Worker; 791*9880d681SAndroid Build Coastguard Worker 792*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_sub_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 793*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v4i64_4i32: 794*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 795*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm2, %xmm0 796*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm3, %xmm1 797*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 798*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 799*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 800*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 801*9880d681SAndroid Build Coastguard Worker; 802*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v4i64_4i32: 803*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 804*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm2 805*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 806*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 807*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm0 808*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 809*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 810*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 811*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 812*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 813*9880d681SAndroid Build Coastguard Worker; 814*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v4i64_4i32: 815*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm1, %ymm0, %ymm0 817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 822*9880d681SAndroid Build Coastguard Worker; 823*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v4i64_4i32: 824*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %ymm1, %ymm0, %ymm0 826*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 827*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 828*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 829*9880d681SAndroid Build Coastguard Worker %1 = sub <4 x i64> %a0, %a1 830*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 831*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 832*9880d681SAndroid Build Coastguard Worker} 833*9880d681SAndroid Build Coastguard Worker 834*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 835*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v8i64_8i16: 836*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm6, %xmm2 838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm4, %xmm0 839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm7, %xmm3 840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm5, %xmm1 841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 854*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 855*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 856*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 857*9880d681SAndroid Build Coastguard Worker; 858*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v8i64_8i16: 859*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm4 861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm0 864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm2 865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm3, %xmm1, %xmm1 868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm2, %xmm1 872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7] 874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 878*9880d681SAndroid Build Coastguard Worker; 879*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v8i64_8i16: 880*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 881*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm3, %ymm1, %ymm1 882*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0 883*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 884*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 885*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 886*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 887*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 888*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 889*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 890*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 893*9880d681SAndroid Build Coastguard Worker; 894*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v8i64_8i16: 895*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %zmm1, %zmm0, %zmm0 897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 899*9880d681SAndroid Build Coastguard Worker %1 = sub <8 x i64> %a0, %a1 900*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 901*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 902*9880d681SAndroid Build Coastguard Worker} 903*9880d681SAndroid Build Coastguard Worker 904*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 905*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v8i32_8i16: 906*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 907*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm2, %xmm0 908*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm3, %xmm1 909*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 910*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 911*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 912*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 913*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 914*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 915*9880d681SAndroid Build Coastguard Worker; 916*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v8i32_8i16: 917*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 918*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm2 919*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 920*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 921*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm1, %xmm0, %xmm0 922*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 923*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 924*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 925*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 926*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 927*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 928*9880d681SAndroid Build Coastguard Worker; 929*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v8i32_8i16: 930*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm1, %ymm0, %ymm0 932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 937*9880d681SAndroid Build Coastguard Worker; 938*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v8i32_8i16: 939*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubd %ymm1, %ymm0, %ymm0 941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 944*9880d681SAndroid Build Coastguard Worker %1 = sub <8 x i32> %a0, %a1 945*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 946*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 947*9880d681SAndroid Build Coastguard Worker} 948*9880d681SAndroid Build Coastguard Worker 949*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 950*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i64_v16i8: 951*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 952*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm0 953*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm1 954*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm2 955*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm3 956*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm4 957*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm5 958*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm6 959*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{[0-9]+}}(%rsp), %xmm7 960*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 961*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 962*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 963*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 964*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 965*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 966*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 967*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 968*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 977*9880d681SAndroid Build Coastguard Worker; 978*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i64_v16i8: 979*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 980*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm4, %xmm0, %xmm8 981*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm4 982*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 983*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm4, %xmm0, %xmm0 984*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm5, %xmm1, %xmm4 985*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm5 986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm5, %xmm1, %xmm1 988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm5 989*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm6 990*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm6, %xmm2, %xmm2 992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm7, %xmm3, %xmm6 993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm7 994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm7, %xmm3, %xmm3 996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm3, %xmm3 998*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm6, %xmm6 999*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm6, %xmm3 1000*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm2, %xmm2 1001*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm5, %xmm5 1002*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm5, %xmm2 1003*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 1004*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm1, %xmm1 1005*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm4, %xmm3 1006*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 1007*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm0, %xmm0 1008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm7, %xmm8, %xmm3 1009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm3, %xmm0 1010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 1011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 1012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1014*9880d681SAndroid Build Coastguard Worker; 1015*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i64_v16i8: 1016*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1017*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm5, %ymm1, %ymm1 1018*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm4, %ymm0, %ymm0 1019*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm7, %ymm3, %ymm3 1020*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq %ymm6, %ymm2, %ymm2 1021*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 1022*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 1023*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 1024*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 1025*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 1026*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 1027*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 1028*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 1029*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1030*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 1031*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1032*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1033*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 1034*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 1035*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1036*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 1037*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 1039*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 1040*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1041*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1042*9880d681SAndroid Build Coastguard Worker; 1043*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v16i64_v16i8: 1044*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1045*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %zmm3, %zmm1, %zmm1 1046*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq %zmm2, %zmm0, %zmm0 1047*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 1048*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 1049*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 1050*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 1051*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1052*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i64> %a0, %a1 1053*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 1054*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1055*9880d681SAndroid Build Coastguard Worker} 1056*9880d681SAndroid Build Coastguard Worker 1057*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 1058*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i32_v16i8: 1059*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1060*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm4, %xmm0 1061*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm5, %xmm1 1062*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm6, %xmm2 1063*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd %xmm7, %xmm3 1064*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 1065*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 1066*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 1067*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 1068*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 1069*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 1070*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 1071*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 1072*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1073*9880d681SAndroid Build Coastguard Worker; 1074*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i32_v16i8: 1075*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm2, %xmm0, %xmm4 1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm2, %xmm0, %xmm0 1080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm1, %xmm2 1081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 1082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd %xmm3, %xmm1, %xmm1 1084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 1085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 1086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 1087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 1088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 1089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm2 1090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 1091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 1092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1094*9880d681SAndroid Build Coastguard Worker; 1095*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i32_v16i8: 1096*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1097*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm2, %ymm0, %ymm0 1098*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd %ymm3, %ymm1, %ymm1 1099*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 1100*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 1101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 1102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 1104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 1105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1110*9880d681SAndroid Build Coastguard Worker; 1111*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v16i32_v16i8: 1112*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1113*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubd %zmm1, %zmm0, %zmm0 1114*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 1115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1116*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i32> %a0, %a1 1117*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 1118*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1119*9880d681SAndroid Build Coastguard Worker} 1120*9880d681SAndroid Build Coastguard Worker 1121*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 1122*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i16_v16i8: 1123*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1124*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubw %xmm2, %xmm0 1125*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubw %xmm3, %xmm1 1126*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 1127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 1128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 1129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 1130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1131*9880d681SAndroid Build Coastguard Worker; 1132*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i16_v16i8: 1133*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2 1135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm0 1138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 1140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 1141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1144*9880d681SAndroid Build Coastguard Worker; 1145*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i16_v16i8: 1146*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm0 1148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 1151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 1152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1155*9880d681SAndroid Build Coastguard Worker; 1156*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_sub_v16i16_v16i8: 1157*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 1158*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsubw %ymm1, %ymm0, %ymm0 1159*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 1160*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 1161*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 1162*9880d681SAndroid Build Coastguard Worker; 1163*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_sub_v16i16_v16i8: 1164*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 1165*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsubw %ymm1, %ymm0, %ymm0 1166*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 1167*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1168*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 1169*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i16> %a0, %a1 1170*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 1171*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1172*9880d681SAndroid Build Coastguard Worker} 1173*9880d681SAndroid Build Coastguard Worker 1174*9880d681SAndroid Build Coastguard Worker; 1175*9880d681SAndroid Build Coastguard Worker; sub to constant 1176*9880d681SAndroid Build Coastguard Worker; 1177*9880d681SAndroid Build Coastguard Worker 1178*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_sub_const_v4i64_4i32(<4 x i64> %a0) nounwind { 1179*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v4i64_4i32: 1180*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1181*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 1182*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 1183*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 1184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm2, %xmm0 1185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm1 1186*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 1187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 1188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1190*9880d681SAndroid Build Coastguard Worker; 1191*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v4i64_4i32: 1192*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 1194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm1 1195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7] 1196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm1, %xmm0, %xmm1 1197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm0, %xmm0 1199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 1200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 1201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 1202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1204*9880d681SAndroid Build Coastguard Worker; 1205*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v4i64_4i32: 1206*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm0, %ymm0 1208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1213*9880d681SAndroid Build Coastguard Worker; 1214*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v4i64_4i32: 1215*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq {{.*}}(%rip), %ymm0, %ymm0 1217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 1218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1220*9880d681SAndroid Build Coastguard Worker %1 = sub <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 1221*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 1222*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 1223*9880d681SAndroid Build Coastguard Worker} 1224*9880d681SAndroid Build Coastguard Worker 1225*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 1226*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i64_v16i16: 1227*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 1229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm4 1230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7] 1231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm4, %xmm0 1232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm2 1233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm3 1234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm1 1235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 1236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 1237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 1238*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1239*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 1241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 1242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 1243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 1244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm1 1245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 1246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm2 1247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 1249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1251*9880d681SAndroid Build Coastguard Worker; 1252*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i64_v16i16: 1253*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 1255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm2 1256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 1257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm2, %xmm0, %xmm2 1258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm0, %xmm0 1260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm3 1261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 1263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 1264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7] 1265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7] 1266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm3, %xmm1 1267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7] 1268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7] 1269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 1270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1273*9880d681SAndroid Build Coastguard Worker; 1274*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i64_v16i16: 1275*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm1, %ymm1 1277*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm0, %ymm0 1278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1280*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 1281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 1282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 1284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1288*9880d681SAndroid Build Coastguard Worker; 1289*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i64_v16i16: 1290*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq {{.*}}(%rip), %zmm0, %zmm0 1292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 1293*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1294*9880d681SAndroid Build Coastguard Worker %1 = sub <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 1295*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 1296*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 1297*9880d681SAndroid Build Coastguard Worker} 1298*9880d681SAndroid Build Coastguard Worker 1299*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 1300*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i32_v16i16: 1301*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm0 1303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm1 1304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 1305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 1306*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 1307*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 1308*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 1309*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1310*9880d681SAndroid Build Coastguard Worker; 1311*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i32_v16i16: 1312*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm0, %xmm1 1314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm0, %xmm0 1316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 1317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 1318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 1319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1322*9880d681SAndroid Build Coastguard Worker; 1323*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i32_v16i16: 1324*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd {{.*}}(%rip), %ymm0, %ymm0 1326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 1327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1331*9880d681SAndroid Build Coastguard Worker; 1332*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i32_v16i16: 1333*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubd {{.*}}(%rip), %ymm0, %ymm0 1335*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 1336*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1337*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1338*9880d681SAndroid Build Coastguard Worker %1 = sub <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 1339*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 1340*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 1341*9880d681SAndroid Build Coastguard Worker} 1342*9880d681SAndroid Build Coastguard Worker 1343*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 1344*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i64_v16i8: 1345*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 1347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 1348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 1349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq %xmm8, %xmm0 1350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm1 1351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm2 1352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm3 1353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm4 1354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm5 1355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm6 1356*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubq {{.*}}(%rip), %xmm7 1357*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 1359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 1360*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 1361*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 1362*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 1363*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 1364*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 1365*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 1366*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 1367*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 1368*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 1369*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 1370*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 1371*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 1372*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 1373*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1374*9880d681SAndroid Build Coastguard Worker; 1375*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i64_v16i8: 1376*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 1378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm4 1379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7] 1380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq %xmm4, %xmm0, %xmm8 1381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm0, %xmm0 1383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm5 1384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm1, %xmm1 1386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm2, %xmm6 1387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 1388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm2, %xmm2 1389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm3, %xmm7 1390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 1391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubq {{.*}}(%rip), %xmm3, %xmm3 1392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 1394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm7, %xmm7 1395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm7, %xmm3 1396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 1397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm6, %xmm6 1398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm6, %xmm2 1399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 1400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 1401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm3 1402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 1403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 1404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm8, %xmm3 1405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm3, %xmm0 1406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 1407*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 1408*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1409*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1410*9880d681SAndroid Build Coastguard Worker; 1411*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i64_v16i8: 1412*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm1, %ymm1 1414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm0, %ymm0 1415*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm3, %ymm3 1416*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubq {{.*}}(%rip), %ymm2, %ymm2 1417*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 1418*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 1419*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 1420*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 1421*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 1422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 1423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 1424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 1425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 1427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 1430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 1431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 1433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 1435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 1436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1438*9880d681SAndroid Build Coastguard Worker; 1439*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i64_v16i8: 1440*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq {{.*}}(%rip), %zmm1, %zmm1 1442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubq {{.*}}(%rip), %zmm0, %zmm0 1443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 1444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 1445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 1446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 1447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1448*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 1449*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 1450*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1451*9880d681SAndroid Build Coastguard Worker} 1452*9880d681SAndroid Build Coastguard Worker 1453*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 1454*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i32_v16i8: 1455*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm0 1457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm1 1458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm2 1459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubd {{.*}}(%rip), %xmm3 1460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 1461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 1462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 1463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 1464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 1465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 1466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 1467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 1468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1469*9880d681SAndroid Build Coastguard Worker; 1470*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i32_v16i8: 1471*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm0, %xmm2 1473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm0, %xmm0 1475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm1, %xmm3 1476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubd {{.*}}(%rip), %xmm1, %xmm1 1478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 1479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 1480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 1481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 1482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 1483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 1484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 1485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 1486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1488*9880d681SAndroid Build Coastguard Worker; 1489*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i32_v16i8: 1490*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1491*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd {{.*}}(%rip), %ymm0, %ymm0 1492*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubd {{.*}}(%rip), %ymm1, %ymm1 1493*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 1494*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 1495*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 1496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 1498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 1499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 1501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1504*9880d681SAndroid Build Coastguard Worker; 1505*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i32_v16i8: 1506*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsubd {{.*}}(%rip), %zmm0, %zmm0 1508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 1509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1510*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 1511*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 1512*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1513*9880d681SAndroid Build Coastguard Worker} 1514*9880d681SAndroid Build Coastguard Worker 1515*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 1516*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i16_v16i8: 1517*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubw {{.*}}(%rip), %xmm0 1519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psubw {{.*}}(%rip), %xmm1 1520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 1521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 1522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 1523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 1524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1525*9880d681SAndroid Build Coastguard Worker; 1526*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i16_v16i8: 1527*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw {{.*}}(%rip), %xmm0, %xmm1 1529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsubw {{.*}}(%rip), %xmm0, %xmm0 1531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 1533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 1534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1537*9880d681SAndroid Build Coastguard Worker; 1538*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i16_v16i8: 1539*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 1541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 1542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 1543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 1544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 1545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1548*9880d681SAndroid Build Coastguard Worker; 1549*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_sub_const_v16i16_v16i8: 1550*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 1551*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 1552*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 1553*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 1554*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 1555*9880d681SAndroid Build Coastguard Worker; 1556*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_sub_const_v16i16_v16i8: 1557*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 1558*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpsubw {{.*}}(%rip), %ymm0, %ymm0 1559*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 1560*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1561*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 1562*9880d681SAndroid Build Coastguard Worker %1 = sub <16 x i16> %a0, <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> 1563*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 1564*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 1565*9880d681SAndroid Build Coastguard Worker} 1566*9880d681SAndroid Build Coastguard Worker 1567*9880d681SAndroid Build Coastguard Worker; 1568*9880d681SAndroid Build Coastguard Worker; mul 1569*9880d681SAndroid Build Coastguard Worker; 1570*9880d681SAndroid Build Coastguard Worker 1571*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_mul_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 1572*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v4i64_4i32: 1573*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1574*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 1575*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm4 1576*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm5 1577*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm5 1578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm0, %xmm5 1579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm5 1580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm5 1581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 1582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm0 1583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 1584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm0 1585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm2 1586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm2 1587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm4 1588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm4 1589*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm1, %xmm4 1590*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm4 1591*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm2, %xmm4 1592*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 1593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm1 1594*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 1595*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm1 1596*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 1597*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 1598*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1600*9880d681SAndroid Build Coastguard Worker; 1601*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v4i64_4i32: 1602*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm2 1604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm3 1605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm0, %xmm3 1606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3 1607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2 1608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm3 1609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm3, %xmm3 1610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3 1611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm2, %xmm2 1612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm3 1615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm4 1616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm0, %xmm4 1617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 1618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm3, %xmm3 1619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 1620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm0 1621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 1622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0 1623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 1624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 1625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 1626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1628*9880d681SAndroid Build Coastguard Worker; 1629*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v4i64_4i32: 1630*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 1632*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm3 1633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm3, %ymm0, %ymm3 1634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm3, %ymm3 1635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm3, %ymm2, %ymm2 1636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 1637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 1638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 1639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0 1640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1645*9880d681SAndroid Build Coastguard Worker; 1646*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v4i64_4i32: 1647*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1648*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 1649*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %ymm1, %ymm3 1650*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm3, %ymm0, %ymm3 1651*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %ymm3, %ymm3 1652*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm3, %ymm2, %ymm2 1653*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %ymm0, %ymm0 1654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 1655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %ymm0, %ymm0 1656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm0, %ymm2, %ymm0 1657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 1658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1660*9880d681SAndroid Build Coastguard Worker %1 = mul <4 x i64> %a0, %a1 1661*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 1662*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 1663*9880d681SAndroid Build Coastguard Worker} 1664*9880d681SAndroid Build Coastguard Worker 1665*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 1666*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v8i64_8i16: 1667*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm8 1669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm6, %xmm8 1670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm6, %xmm9 1671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm9 1672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm9 1673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm9 1674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm9 1675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm2 1676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm6, %xmm2 1677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm2 1678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm2 1679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm8 1680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm8 1681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm4, %xmm6 1682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm6 1683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm0, %xmm6 1684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm6 1685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm6 1686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 1687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm0 1688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 1689*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm6, %xmm0 1690*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm4 1691*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm7, %xmm4 1692*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm7, %xmm6 1693*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm6 1694*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm6 1695*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm6 1696*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm6 1697*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm3 1698*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm7, %xmm3 1699*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm3 1700*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm6, %xmm3 1701*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm4 1702*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm4 1703*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm5, %xmm6 1704*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm6 1705*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm1, %xmm6 1706*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm6 1707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm6 1708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 1709*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm1 1710*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 1711*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm6, %xmm1 1712*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 1713*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 1714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 1715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1717*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 1718*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 1719*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 1720*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 1721*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 1722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 1723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 1724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 1725*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 1726*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1727*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1728*9880d681SAndroid Build Coastguard Worker; 1729*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v8i64_8i16: 1730*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm4 1732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm5 1733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm5 1734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 1735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm4 1736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm5 1737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm5, %xmm5 1738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 1739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm4 1740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 1741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm5 1743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm6 1744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm0, %xmm6 1745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm6, %xmm6 1746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm6, %xmm5, %xmm5 1747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 1748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm0 1749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 1750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm5, %xmm0 1751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm1, %xmm2 1752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm5 1753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm5 1754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 1755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm2, %xmm2 1756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm5 1757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm5, %xmm5 1758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 1759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm2, %xmm2 1760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 1761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm1, %xmm5 1763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm6 1764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm1, %xmm6 1765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm6, %xmm6 1766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm6, %xmm5, %xmm5 1767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm1 1768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm1, %xmm1 1769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1 1770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm5, %xmm1 1771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 1772*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 1773*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 1774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm2, %xmm1 1775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 1776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7] 1777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 1778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 1779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1781*9880d681SAndroid Build Coastguard Worker; 1782*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v8i64_8i16: 1783*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm4 1785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm5 1786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm5, %ymm1, %ymm5 1787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm5, %ymm5 1788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm5, %ymm4, %ymm4 1789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm1 1790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm3, %ymm1, %ymm1 1791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1 1792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm1 1793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm0, %ymm3 1794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm4 1795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm4 1796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm4, %ymm4 1797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm4, %ymm3, %ymm3 1798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 1799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm0, %ymm0 1800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 1801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm3, %ymm0 1802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 1803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 1804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 1805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 1806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 1807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 1808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1812*9880d681SAndroid Build Coastguard Worker; 1813*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v8i64_8i16: 1814*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm1, %zmm0, %zmm2 1816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm1, %zmm3 1817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm3, %zmm0, %zmm3 1818*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm3, %zmm3 1819*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm3, %zmm2, %zmm2 1820*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm0, %zmm0 1821*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm1, %zmm0, %zmm0 1822*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm0, %zmm0 1823*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm0, %zmm2, %zmm0 1824*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 1825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1826*9880d681SAndroid Build Coastguard Worker %1 = mul <8 x i64> %a0, %a1 1827*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 1828*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 1829*9880d681SAndroid Build Coastguard Worker} 1830*9880d681SAndroid Build Coastguard Worker 1831*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 1832*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v8i32_8i16: 1833*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1834*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3] 1835*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm0 1836*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 1837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 1838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm2 1839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] 1840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 1841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3] 1842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm1 1843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 1844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3] 1845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm3 1846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3] 1847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 1848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 1849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 1850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 1851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 1852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 1853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 1854*9880d681SAndroid Build Coastguard Worker; 1855*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v8i32_8i16: 1856*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 1857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm1, %xmm0, %xmm2 1858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 1859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm1, %xmm0, %xmm0 1861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 1862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 1863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 1864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 1865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 1866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 1867*9880d681SAndroid Build Coastguard Worker; 1868*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v8i32_8i16: 1869*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 1870*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld %ymm1, %ymm0, %ymm0 1871*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 1872*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 1873*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1874*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 1875*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 1876*9880d681SAndroid Build Coastguard Worker; 1877*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v8i32_8i16: 1878*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 1879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmulld %ymm1, %ymm0, %ymm0 1880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 1881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 1882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 1883*9880d681SAndroid Build Coastguard Worker %1 = mul <8 x i32> %a0, %a1 1884*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 1885*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 1886*9880d681SAndroid Build Coastguard Worker} 1887*9880d681SAndroid Build Coastguard Worker 1888*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 1889*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i64_v16i8: 1890*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 1891*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 1892*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm9 1893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 1894*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm8, %xmm10 1895*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1896*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm0, %xmm10 1897*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1898*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm9 1899*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 1900*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 1901*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm0 1902*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 1903*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm0 1904*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm8 1905*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm10, %xmm8 1906*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm10, %xmm9 1907*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm9 1908*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm1, %xmm9 1909*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm9 1910*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm9 1911*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 1912*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 1913*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm10, %xmm1 1914*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 1915*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm1 1916*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm9 1917*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 1918*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm8, %xmm10 1919*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1920*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm10 1921*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1922*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm10 1923*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1924*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm2 1925*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm2 1926*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm2 1927*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm2 1928*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm8 1929*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm8 1930*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm9, %xmm10 1931*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1932*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm10 1933*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1934*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm10 1935*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 1936*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm3 1937*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm3 1938*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm3 1939*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm3 1940*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm4, %xmm9 1941*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 1942*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm8, %xmm10 1943*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1944*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm10 1945*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1946*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm10 1947*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1948*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm4 1949*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm4 1950*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm4 1951*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm4 1952*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm5, %xmm8 1953*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm8 1954*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm9, %xmm10 1955*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1956*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm10 1957*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1958*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm10 1959*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 1960*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm5 1961*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm5 1962*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm5 1963*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm5 1964*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm6, %xmm9 1965*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 1966*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm8, %xmm10 1967*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1968*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm6, %xmm10 1969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm10 1971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm6 1973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm6 1974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm6 1975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm6 1976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm7, %xmm8 1977*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm8 1978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm9, %xmm10 1979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm10 1980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm7, %xmm10 1981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm10 1982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm8, %xmm10 1983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm7 1984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm9, %xmm7 1985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm7 1986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm10, %xmm7 1987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 1988*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 1989*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 1990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 1991*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 1992*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 1993*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 1994*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 1995*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 1996*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 1997*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 1998*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 1999*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 2000*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2001*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 2002*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 2003*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2004*9880d681SAndroid Build Coastguard Worker; 2005*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i64_v16i8: 2006*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2007*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm0, %xmm8 2008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm9 2009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm9, %xmm0, %xmm9 2010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm9, %xmm9 2011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm9, %xmm8, %xmm8 2012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm9 2013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm9, %xmm9 2014*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm9, %xmm9 2015*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm9, %xmm8, %xmm8 2016*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm10 2017*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2018*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm10, %xmm0, %xmm9 2019*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm10, %xmm4 2020*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm0, %xmm4 2021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm9, %xmm4 2023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 2024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm10, %xmm0, %xmm0 2025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm9 2027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm4 2028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm5, %xmm0 2029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 2030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0 2032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm4 2033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm4, %xmm4 2034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm10 2036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm0 2037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm0, %xmm1, %xmm5 2039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm4 2040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm4 2041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm5, %xmm4 2043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm1 2044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 2045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm1 2047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm0 2048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm6, %xmm4 2049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm4 2050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm0 2052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm4 2053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm4, %xmm4 2054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm0, %xmm5 2056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm0 2057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 2058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm0, %xmm2, %xmm4 2059*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm6 2060*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm6 2061*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm6, %xmm6 2062*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm6, %xmm4, %xmm4 2063*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm2 2064*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm0, %xmm2, %xmm0 2065*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2066*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0 2067*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm2 2068*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm7, %xmm4 2069*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm3, %xmm4 2070*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2071*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm2, %xmm2 2072*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm4 2073*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm7, %xmm4, %xmm4 2074*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2075*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm2, %xmm2 2076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm4 2077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 2078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm3, %xmm6 2079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm4, %xmm7 2080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm7, %xmm3, %xmm7 2081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm7, %xmm7 2082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm7, %xmm6, %xmm6 2083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm3 2084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm3, %xmm3 2085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3 2086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm6, %xmm3 2087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 2088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 2089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 2090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 2091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 2092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm5, %xmm3 2093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm3, %xmm0 2094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 2095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 2096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm10, %xmm2 2097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 2098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm9, %xmm2 2099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm8, %xmm3 2100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm3, %xmm2 2101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 2102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm1, %xmm0 2103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2105*9880d681SAndroid Build Coastguard Worker; 2106*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i64_v16i8: 2107*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm5, %ymm1, %ymm8 2109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm5, %ymm9 2110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm9, %ymm1, %ymm9 2111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm9, %ymm9 2112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm9, %ymm8, %ymm8 2113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm1 2114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm5, %ymm1, %ymm1 2115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1 2116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm1, %ymm8, %ymm1 2117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm5 2118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm4, %ymm8 2119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm8, %ymm0, %ymm8 2120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm8, %ymm8 2121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm8, %ymm5, %ymm5 2122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 2123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm0 2124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 2125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm5, %ymm0 2126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm7, %ymm3, %ymm4 2127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm7, %ymm5 2128*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm5, %ymm3, %ymm5 2129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm5, %ymm5 2130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm5, %ymm4, %ymm4 2131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm3 2132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm7, %ymm3, %ymm3 2133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm3, %ymm3 2134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm3, %ymm4, %ymm3 2135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm6, %ymm2, %ymm4 2136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm6, %ymm5 2137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm5, %ymm2, %ymm5 2138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm5, %ymm5 2139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm5, %ymm4, %ymm4 2140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2 2141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm6, %ymm2, %ymm2 2142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm2, %ymm2 2143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm2, %ymm4, %ymm2 2144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 2145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 2146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 2147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 2148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 2149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 2150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 2151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 2152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 2154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 2155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 2156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 2157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 2158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 2159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 2160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 2162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 2163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2165*9880d681SAndroid Build Coastguard Worker; 2166*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v16i64_v16i8: 2167*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2168*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm3, %zmm1, %zmm4 2169*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm3, %zmm5 2170*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm5, %zmm1, %zmm5 2171*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm5, %zmm5 2172*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm5, %zmm4, %zmm4 2173*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm1, %zmm1 2174*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm3, %zmm1, %zmm1 2175*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm1, %zmm1 2176*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm1, %zmm4, %zmm1 2177*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm0, %zmm3 2178*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm2, %zmm4 2179*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm4, %zmm0, %zmm4 2180*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm4, %zmm4 2181*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm4, %zmm3, %zmm3 2182*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm0, %zmm0 2183*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm0, %zmm0 2184*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm0, %zmm0 2185*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm0, %zmm3, %zmm0 2186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 2187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 2188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 2189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2191*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i64> %a0, %a1 2192*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 2193*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2194*9880d681SAndroid Build Coastguard Worker} 2195*9880d681SAndroid Build Coastguard Worker 2196*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 2197*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i32_v16i8: 2198*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm8 = xmm0[1,1,3,3] 2200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm0 2201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm4 2204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3] 2205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1] 2206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3] 2207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm1 2208*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2209*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3] 2210*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2211*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3] 2212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1] 2213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3] 2214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm6, %xmm2 2215*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] 2216*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3] 2217*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2218*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3] 2219*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1] 2220*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3] 2221*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm7, %xmm3 2222*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 2223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3] 2224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3] 2226*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1] 2227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 2228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 2229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 2230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 2231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 2232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 2233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 2235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2236*9880d681SAndroid Build Coastguard Worker; 2237*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i32_v16i8: 2238*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2239*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm2, %xmm0, %xmm4 2240*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 2241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm2, %xmm0, %xmm0 2243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm3, %xmm1, %xmm2 2244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 2245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld %xmm3, %xmm1, %xmm1 2247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 2248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm1, %xmm1 2249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm2, %xmm2 2250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 2251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm0, %xmm0 2252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm3, %xmm4, %xmm2 2253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 2254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 2255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2257*9880d681SAndroid Build Coastguard Worker; 2258*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i32_v16i8: 2259*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld %ymm2, %ymm0, %ymm0 2261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld %ymm3, %ymm1, %ymm1 2262*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 2263*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 2264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 2265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 2267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 2268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2269*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 2270*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2271*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2272*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2273*9880d681SAndroid Build Coastguard Worker; 2274*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v16i32_v16i8: 2275*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmulld %zmm1, %zmm0, %zmm0 2277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2279*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i32> %a0, %a1 2280*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 2281*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2282*9880d681SAndroid Build Coastguard Worker} 2283*9880d681SAndroid Build Coastguard Worker 2284*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 2285*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i16_v16i8: 2286*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2287*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmullw %xmm2, %xmm0 2288*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmullw %xmm3, %xmm1 2289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 2290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 2291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 2292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2294*9880d681SAndroid Build Coastguard Worker; 2295*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i16_v16i8: 2296*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm1, %xmm0, %xmm2 2298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw %xmm1, %xmm0, %xmm0 2301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0 2303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm1 2304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 2305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2307*9880d681SAndroid Build Coastguard Worker; 2308*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i16_v16i8: 2309*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw %ymm1, %ymm0, %ymm0 2311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2318*9880d681SAndroid Build Coastguard Worker; 2319*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_mul_v16i16_v16i8: 2320*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 2321*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmullw %ymm1, %ymm0, %ymm0 2322*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 2323*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 2324*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 2325*9880d681SAndroid Build Coastguard Worker; 2326*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_mul_v16i16_v16i8: 2327*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 2328*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmullw %ymm1, %ymm0, %ymm0 2329*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 2330*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2331*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 2332*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i16> %a0, %a1 2333*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 2334*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2335*9880d681SAndroid Build Coastguard Worker} 2336*9880d681SAndroid Build Coastguard Worker 2337*9880d681SAndroid Build Coastguard Worker; 2338*9880d681SAndroid Build Coastguard Worker; mul to constant 2339*9880d681SAndroid Build Coastguard Worker; 2340*9880d681SAndroid Build Coastguard Worker 2341*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_mul_const_v4i64_4i32(<4 x i64> %a0) nounwind { 2342*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v4i64_4i32: 2343*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 2345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 2346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 2347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm3 2348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm3 2349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 2350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm0 2351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 2352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm3, %xmm0 2353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [2,3] 2354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm3 2355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm3 2356*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 2357*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm1 2358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 2359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm3, %xmm1 2360*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2361*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2362*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2363*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2364*9880d681SAndroid Build Coastguard Worker; 2365*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v4i64_4i32: 2366*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 2368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm1 2369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7] 2370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm2 2371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm3 2372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm3, %xmm1 2373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1 2374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm2, %xmm1 2375*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2376*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [2,3] 2377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm3 2378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 2379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm0 2380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm3, %xmm0 2382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2] 2383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7] 2385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2387*9880d681SAndroid Build Coastguard Worker; 2388*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v4i64_4i32: 2389*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3] 2391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 2392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 2393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 2394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 2395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0 2396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 2397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 2398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2401*9880d681SAndroid Build Coastguard Worker; 2402*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v4i64_4i32: 2403*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2404*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa {{.*#+}} ymm1 = [0,1,2,3] 2405*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 2406*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %ymm0, %ymm0 2407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 2408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %ymm0, %ymm0 2409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm0, %ymm2, %ymm0 2410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 2411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2413*9880d681SAndroid Build Coastguard Worker %1 = mul <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 2414*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 2415*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 2416*9880d681SAndroid Build Coastguard Worker} 2417*9880d681SAndroid Build Coastguard Worker 2418*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 2419*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i64_v16i16: 2420*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2421*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [4,5] 2422*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm5 2423*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2424*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm2 2425*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm2 2426*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm2 2427*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm2 2428*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 2429*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm4 2430*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7] 2431*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm5 2432*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2433*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 2434*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm0 2435*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 2436*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm0 2437*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [6,7] 2438*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm5 2439*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2440*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm3 2441*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm3 2442*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm3 2443*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm3 2444*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [2,3] 2445*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm5 2446*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm5 2447*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 2448*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm1 2449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 2450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm1 2451*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 2452*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 2453*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 2454*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 2455*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 2456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 2457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 2458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 2459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 2460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 2461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 2462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 2463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 2464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 2465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 2466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2467*9880d681SAndroid Build Coastguard Worker; 2468*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i64_v16i16: 2469*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 2471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm2 2472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 2473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm0, %xmm3 2474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm4 2475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm2, %xmm4, %xmm2 2476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2 2477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm3, %xmm2 2478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2,3] 2480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm0, %xmm4 2481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 2482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm0, %xmm0 2483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0 2485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [4,5] 2486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm1, %xmm4 2487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm5 2488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm5, %xmm3 2489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3 2490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm4, %xmm3 2491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [6,7] 2493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm5 2494*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm1 2495*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm1, %xmm1 2496*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1 2497*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm5, %xmm1 2498*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4 2499*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7] 2500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7] 2501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm3, %xmm1 2502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7] 2503*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7] 2504*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm0, %xmm2, %xmm0 2505*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 2506*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2507*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2508*9880d681SAndroid Build Coastguard Worker; 2509*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i64_v16i16: 2510*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2511*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [4,5,6,7] 2512*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm1, %ymm3 2513*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm1 2514*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm1, %ymm1 2515*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1 2516*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm1, %ymm3, %ymm1 2517*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,2,3] 2518*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm0, %ymm3 2519*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 2520*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm2, %ymm0, %ymm0 2521*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 2522*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm3, %ymm0 2523*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 2524*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 2525*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 2526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 2527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 2528*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 2529*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2530*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2533*9880d681SAndroid Build Coastguard Worker; 2534*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i64_v16i16: 2535*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2536*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa32 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7] 2537*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm1, %zmm0, %zmm2 2538*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm0, %zmm0 2539*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm1, %zmm0, %zmm0 2540*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm0, %zmm0 2541*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm0, %zmm2, %zmm0 2542*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 2543*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2544*9880d681SAndroid Build Coastguard Worker %1 = mul <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 2545*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 2546*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 2547*9880d681SAndroid Build Coastguard Worker} 2548*9880d681SAndroid Build Coastguard Worker 2549*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 2550*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i32_v16i16: 2551*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2552*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [0,1,2,3] 2553*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3] 2554*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm0 2555*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2556*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2557*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm2 2558*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] 2559*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 2560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [4,5,6,7] 2561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3] 2562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm1 2563*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3] 2565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm2 2566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] 2567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 2568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 2569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 2570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 2571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 2572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 2573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2574*9880d681SAndroid Build Coastguard Worker; 2575*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i32_v16i16: 2576*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm1 2578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0 2580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 2581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 2584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2586*9880d681SAndroid Build Coastguard Worker; 2587*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i32_v16i16: 2588*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld {{.*}}(%rip), %ymm0, %ymm0 2590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 2591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2595*9880d681SAndroid Build Coastguard Worker; 2596*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i32_v16i16: 2597*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmulld {{.*}}(%rip), %ymm0, %ymm0 2599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 2600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2601*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2602*9880d681SAndroid Build Coastguard Worker %1 = mul <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 2603*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 2604*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 2605*9880d681SAndroid Build Coastguard Worker} 2606*9880d681SAndroid Build Coastguard Worker 2607*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 2608*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i64_v16i8: 2609*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 2611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 2612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 2613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm9 2614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 2616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm0 2617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 2618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm0 2619*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [2,3] 2620*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm9 2621*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2622*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm1 2623*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm1 2624*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm1 2625*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm1 2626*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [4,5] 2627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm9 2628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm2 2630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm2 2631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm2 2632*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm2 2633*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [6,7] 2634*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm9 2635*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2636*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm3 2637*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm3 2638*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm3 2639*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm3 2640*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [8,9] 2641*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm4, %xmm9 2642*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2643*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm4 2644*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm4 2645*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm4 2646*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm4 2647*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [10,11] 2648*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm5, %xmm9 2649*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2650*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm5 2651*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm5 2652*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm5 2653*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm5 2654*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [12,13] 2655*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm6, %xmm9 2656*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2657*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm6 2658*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm6 2659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm6 2660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm6 2661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [14,15] 2662*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm7, %xmm9 2663*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm9 2664*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm7 2665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm8, %xmm7 2666*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm7 2667*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm9, %xmm7 2668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 2669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 2670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 2671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 2672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 2673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 2674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 2675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 2676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 2677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 2678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 2679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 2680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 2681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 2683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 2684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2685*9880d681SAndroid Build Coastguard Worker; 2686*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i64_v16i8: 2687*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl $1, %eax 2689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %rax, %xmm4 2690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7] 2691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm0, %xmm5 2692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm6 2693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm6, %xmm4 2694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm5, %xmm8 2696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [2,3] 2698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm6 2699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 2700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm0 2701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm6, %xmm9 2703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [4,5] 2704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm1, %xmm6 2705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm7 2706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm7, %xmm5 2707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 2708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm6, %xmm5 2709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [6,7] 2711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm1, %xmm7 2712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm1 2713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm1, %xmm1 2714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm1, %xmm1 2715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm1, %xmm7, %xmm1 2716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [8,9] 2717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm7 2718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm4 2719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm4, %xmm4 2720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 2721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm7, %xmm4 2722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2 2723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [10,11] 2724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm7 2725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm2 2726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm2, %xmm2 2727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2 2728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm7, %xmm2 2729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [12,13] 2730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm3, %xmm7 2731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm0 2732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm0, %xmm0 2733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 2734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm7, %xmm0 2735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm3 2736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [14,15] 2737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm3, %xmm7 2738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm3 2739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm6, %xmm3, %xmm3 2740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm3, %xmm3 2741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm3, %xmm7, %xmm3 2742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm6 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 2743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm3, %xmm3 2744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm0, %xmm0 2745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 2746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm2, %xmm2 2747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm4, %xmm3 2748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm3, %xmm2 2749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 2750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm1, %xmm1 2751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm5, %xmm2 2752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 2753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm9, %xmm2 2754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm6, %xmm8, %xmm3 2755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm3, %xmm2 2756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm2, %xmm1 2757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm1, %xmm0 2758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2760*9880d681SAndroid Build Coastguard Worker; 2761*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i64_v16i8: 2762*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [4,5,6,7] 2764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm1, %ymm5 2765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm1 2766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm1, %ymm1 2767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm1, %ymm1 2768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm1, %ymm5, %ymm1 2769*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [0,1,2,3] 2770*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm5 2771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 2772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm0 2773*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 2774*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm5, %ymm0 2775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [12,13,14,15] 2776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm3, %ymm5 2777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm3, %ymm3 2778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm3, %ymm3 2779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm3, %ymm3 2780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm3, %ymm5, %ymm3 2781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm4 = [8,9,10,11] 2782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm5 2783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm2, %ymm2 2784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm4, %ymm2, %ymm2 2785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm2, %ymm2 2786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm2, %ymm5, %ymm2 2787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 2788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 2789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 2790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 2791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 2792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 2793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 2794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 2795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 2797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 2798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 2799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 2800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 2801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 2802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 2803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 2805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 2806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2808*9880d681SAndroid Build Coastguard Worker; 2809*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i64_v16i8: 2810*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2811*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa32 {{.*#+}} zmm2 = [8,9,10,11,12,13,14,15] 2812*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm1, %zmm3 2813*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm1, %zmm1 2814*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm1, %zmm1 2815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm1, %zmm1 2816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm1, %zmm3, %zmm1 2817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vmovdqa32 {{.*#+}} zmm2 = [0,1,2,3,4,5,6,7] 2818*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm0, %zmm3 2819*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %zmm0, %zmm0 2820*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %zmm2, %zmm0, %zmm0 2821*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %zmm0, %zmm0 2822*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %zmm0, %zmm3, %zmm0 2823*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 2824*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 2825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 2826*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2827*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2828*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 2829*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 2830*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2831*9880d681SAndroid Build Coastguard Worker} 2832*9880d681SAndroid Build Coastguard Worker 2833*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 2834*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i32_v16i8: 2835*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2836*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [0,1,2,3] 2837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3] 2838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm0 2839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm4 2842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3] 2843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1] 2844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [4,5,6,7] 2845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3] 2846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm1 2847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm4 2850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3] 2851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1] 2852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [8,9,10,11] 2853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm2[1,1,3,3] 2854*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm2 2855*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3] 2856*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2857*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm4 2858*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3] 2859*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1] 2860*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [12,13,14,15] 2861*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3] 2862*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm4, %xmm3 2863*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 2864*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3] 2865*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm5, %xmm4 2866*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3] 2867*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1] 2868*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 2869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 2870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 2871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 2872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 2873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 2874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 2876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2877*9880d681SAndroid Build Coastguard Worker; 2878*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i32_v16i8: 2879*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm2 2881*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm0, %xmm0 2883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm3 2884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1 2885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmulld {{.*}}(%rip), %xmm1, %xmm1 2886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 2887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm1, %xmm1 2888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm3, %xmm3 2889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm3, %xmm1 2890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm0, %xmm0 2891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpand %xmm4, %xmm2, %xmm2 2892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm2, %xmm0 2893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 2894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2896*9880d681SAndroid Build Coastguard Worker; 2897*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i32_v16i8: 2898*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld {{.*}}(%rip), %ymm0, %ymm0 2900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmulld {{.*}}(%rip), %ymm1, %ymm1 2901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 2902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 2903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 2904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 2906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 2907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 2908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 2909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2912*9880d681SAndroid Build Coastguard Worker; 2913*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i32_v16i8: 2914*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 2915*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmulld {{.*}}(%rip), %zmm0, %zmm0 2916*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 2917*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 2918*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 2919*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 2920*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2921*9880d681SAndroid Build Coastguard Worker} 2922*9880d681SAndroid Build Coastguard Worker 2923*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 2924*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i16_v16i8: 2925*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2926*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmullw {{.*}}(%rip), %xmm0 2927*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmullw {{.*}}(%rip), %xmm1 2928*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 2929*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 2930*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 2931*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 2932*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2933*9880d681SAndroid Build Coastguard Worker; 2934*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i16_v16i8: 2935*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2936*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm1 2937*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2938*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmullw {{.*}}(%rip), %xmm0, %xmm0 2939*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2940*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2941*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2942*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 2943*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2944*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2945*9880d681SAndroid Build Coastguard Worker; 2946*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i16_v16i8: 2947*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 2948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0 2949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 2950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 2951*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 2952*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 2953*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2954*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 2955*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 2956*9880d681SAndroid Build Coastguard Worker; 2957*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_mul_const_v16i16_v16i8: 2958*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 2959*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0 2960*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 2961*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 2962*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 2963*9880d681SAndroid Build Coastguard Worker; 2964*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_mul_const_v16i16_v16i8: 2965*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 2966*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmullw {{.*}}(%rip), %ymm0, %ymm0 2967*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 2968*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 2969*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 2970*9880d681SAndroid Build Coastguard Worker %1 = mul <16 x i16> %a0, <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> 2971*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 2972*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 2973*9880d681SAndroid Build Coastguard Worker} 2974*9880d681SAndroid Build Coastguard Worker 2975*9880d681SAndroid Build Coastguard Worker; 2976*9880d681SAndroid Build Coastguard Worker; and 2977*9880d681SAndroid Build Coastguard Worker; 2978*9880d681SAndroid Build Coastguard Worker 2979*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_and_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 2980*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v4i64_4i32: 2981*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 2982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 2983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm3, %xmm1 2984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 2985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 2987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 2988*9880d681SAndroid Build Coastguard Worker; 2989*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v4i64_4i32: 2990*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 2991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 2992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 2993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 2994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 2995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 2996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 2997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 2998*9880d681SAndroid Build Coastguard Worker; 2999*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v4i64_4i32: 3000*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3001*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3002*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3003*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3004*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3005*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3006*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3007*9880d681SAndroid Build Coastguard Worker; 3008*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v4i64_4i32: 3009*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3010*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vandps %ymm1, %ymm0, %ymm0 3011*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3012*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3013*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3014*9880d681SAndroid Build Coastguard Worker %1 = and <4 x i64> %a0, %a1 3015*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 3016*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 3017*9880d681SAndroid Build Coastguard Worker} 3018*9880d681SAndroid Build Coastguard Worker 3019*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 3020*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v8i64_8i16: 3021*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3022*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm6, %xmm2 3023*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 3024*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm7, %xmm3 3025*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm5, %xmm1 3026*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 3027*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 3028*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 3029*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 3030*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 3031*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 3032*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 3033*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 3034*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 3035*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 3036*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 3037*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 3038*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 3039*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 3040*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 3041*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3042*9880d681SAndroid Build Coastguard Worker; 3043*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v8i64_8i16: 3044*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm2, %ymm0, %ymm0 3046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1 3047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3 3049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 3051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 3052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 3055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 3056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 3057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3059*9880d681SAndroid Build Coastguard Worker; 3060*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v8i64_8i16: 3061*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1 3063*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 3064*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3065*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3066*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3070*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3071*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3072*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3073*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3074*9880d681SAndroid Build Coastguard Worker; 3075*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v8i64_8i16: 3076*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3077*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq %zmm1, %zmm0, %zmm0 3078*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 3079*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3080*9880d681SAndroid Build Coastguard Worker %1 = and <8 x i64> %a0, %a1 3081*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 3082*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3083*9880d681SAndroid Build Coastguard Worker} 3084*9880d681SAndroid Build Coastguard Worker 3085*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 3086*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v8i32_8i16: 3087*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 3089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm3, %xmm1 3090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 3091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 3092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 3093*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 3094*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 3095*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3096*9880d681SAndroid Build Coastguard Worker; 3097*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v8i32_8i16: 3098*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 3100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3107*9880d681SAndroid Build Coastguard Worker; 3108*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v8i32_8i16: 3109*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3116*9880d681SAndroid Build Coastguard Worker; 3117*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v8i32_8i16: 3118*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3119*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vandps %ymm1, %ymm0, %ymm0 3120*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 3121*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3122*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3123*9880d681SAndroid Build Coastguard Worker %1 = and <8 x i32> %a0, %a1 3124*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 3125*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3126*9880d681SAndroid Build Coastguard Worker} 3127*9880d681SAndroid Build Coastguard Worker 3128*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 3129*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i64_v16i8: 3130*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm0 3132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm1 3133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm2 3134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm3 3135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm4 3136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm5 3137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm6 3138*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{[0-9]+}}(%rsp), %xmm7 3139*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3140*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 3141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 3142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 3143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 3144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 3145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 3146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 3147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 3148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 3149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 3150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 3151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 3152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3153*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 3154*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 3155*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3156*9880d681SAndroid Build Coastguard Worker; 3157*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i64_v16i8: 3158*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm4, %ymm0, %ymm0 3160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm5, %ymm1, %ymm1 3161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm6, %ymm2, %ymm2 3162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm7, %ymm3, %ymm3 3163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 3164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 3168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 3171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 3172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 3173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 3174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 3176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 3177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 3180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 3181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3185*9880d681SAndroid Build Coastguard Worker; 3186*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i64_v16i8: 3187*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3188*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm5, %ymm1, %ymm1 3189*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0 3190*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm7, %ymm3, %ymm3 3191*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm6, %ymm2, %ymm2 3192*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 3193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 3194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 3195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 3196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 3197*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 3198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 3199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 3200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 3202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 3208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 3210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 3211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3213*9880d681SAndroid Build Coastguard Worker; 3214*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v16i64_v16i8: 3215*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq %zmm3, %zmm1, %zmm1 3217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq %zmm2, %zmm0, %zmm0 3218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 3220*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 3221*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 3222*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3223*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i64> %a0, %a1 3224*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 3225*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3226*9880d681SAndroid Build Coastguard Worker} 3227*9880d681SAndroid Build Coastguard Worker 3228*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 3229*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i32_v16i8: 3230*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 3233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm3, %xmm7 3234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 3235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm6 3236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 3237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 3238*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm1, %xmm5 3239*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 3240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 3241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm0 3242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm0 3243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3244*9880d681SAndroid Build Coastguard Worker; 3245*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i32_v16i8: 3246*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm2, %ymm0, %ymm0 3248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm3, %ymm1, %ymm1 3249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 3253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 3254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 3257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3261*9880d681SAndroid Build Coastguard Worker; 3262*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i32_v16i8: 3263*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0 3265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1 3266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 3267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 3268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 3269*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3270*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 3271*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 3272*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3273*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 3274*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3275*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3277*9880d681SAndroid Build Coastguard Worker; 3278*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v16i32_v16i8: 3279*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandd %zmm1, %zmm0, %zmm0 3281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 3282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3283*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i32> %a0, %a1 3284*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 3285*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3286*9880d681SAndroid Build Coastguard Worker} 3287*9880d681SAndroid Build Coastguard Worker 3288*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 3289*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i16_v16i8: 3290*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255] 3292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 3293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm1, %xmm3 3294*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 3295*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 3296*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm0 3297*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3298*9880d681SAndroid Build Coastguard Worker; 3299*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i16_v16i8: 3300*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %ymm1, %ymm0, %ymm0 3302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3309*9880d681SAndroid Build Coastguard Worker; 3310*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i16_v16i8: 3311*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0 3313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3320*9880d681SAndroid Build Coastguard Worker; 3321*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_and_v16i16_v16i8: 3322*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 3323*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vandps %ymm1, %ymm0, %ymm0 3324*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 3325*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3326*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 3327*9880d681SAndroid Build Coastguard Worker; 3328*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_and_v16i16_v16i8: 3329*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 3330*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vandps %ymm1, %ymm0, %ymm0 3331*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 3332*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3333*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 3334*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i16> %a0, %a1 3335*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 3336*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3337*9880d681SAndroid Build Coastguard Worker} 3338*9880d681SAndroid Build Coastguard Worker 3339*9880d681SAndroid Build Coastguard Worker; 3340*9880d681SAndroid Build Coastguard Worker; and to constant 3341*9880d681SAndroid Build Coastguard Worker; 3342*9880d681SAndroid Build Coastguard Worker 3343*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_and_const_v4i64_4i32(<4 x i64> %a0) nounwind { 3344*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v4i64_4i32: 3345*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 3347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 3348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 3349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm0, %xmm2 3350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 3352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 3353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3355*9880d681SAndroid Build Coastguard Worker; 3356*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v4i64_4i32: 3357*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 3361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 3362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 3363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3365*9880d681SAndroid Build Coastguard Worker; 3366*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v4i64_4i32: 3367*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3374*9880d681SAndroid Build Coastguard Worker; 3375*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v4i64_4i32: 3376*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3377*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3378*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3379*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3380*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3381*9880d681SAndroid Build Coastguard Worker %1 = and <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 3382*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 3383*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 3384*9880d681SAndroid Build Coastguard Worker} 3385*9880d681SAndroid Build Coastguard Worker 3386*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 3387*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i64_v16i16: 3388*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3389*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 3390*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 3391*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm0 3392*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] 3393*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 3394*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm2 3395*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm3 3396*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3397*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 3398*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 3399*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 3400*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 3401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 3402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 3403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 3404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 3405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 3406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm1 3407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 3408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm2 3409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 3410*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 3411*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 3412*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3413*9880d681SAndroid Build Coastguard Worker; 3414*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i64_v16i16: 3415*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 3418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 3420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 3422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 3423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 3426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 3427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 3428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3429*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3430*9880d681SAndroid Build Coastguard Worker; 3431*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i64_v16i16: 3432*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 3434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3443*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3444*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3445*9880d681SAndroid Build Coastguard Worker; 3446*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i64_v16i16: 3447*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 3449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 3450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3451*9880d681SAndroid Build Coastguard Worker %1 = and <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 3452*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 3453*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3454*9880d681SAndroid Build Coastguard Worker} 3455*9880d681SAndroid Build Coastguard Worker 3456*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 3457*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i32_v16i16: 3458*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm0 3460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 3462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 3463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 3464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 3465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 3466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3467*9880d681SAndroid Build Coastguard Worker; 3468*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i32_v16i16: 3469*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3478*9880d681SAndroid Build Coastguard Worker; 3479*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i32_v16i16: 3480*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3483*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3484*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3485*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3486*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3487*9880d681SAndroid Build Coastguard Worker; 3488*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i32_v16i16: 3489*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 3492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3494*9880d681SAndroid Build Coastguard Worker %1 = and <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 3495*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 3496*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3497*9880d681SAndroid Build Coastguard Worker} 3498*9880d681SAndroid Build Coastguard Worker 3499*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 3500*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i64_v16i8: 3501*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 3503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 3504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 3505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm2 3507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm3 3508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm4 3509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm5 3510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm6 3511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm7 3512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm9 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm7 3514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm6 3515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 3516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm5 3517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm4 3518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 3519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 3520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm3 3521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm2 3522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 3523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm1 3524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm9, %xmm8 3525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 3526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3527*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 3528*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 3529*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3530*9880d681SAndroid Build Coastguard Worker; 3531*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i64_v16i8: 3532*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 3535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm2, %ymm2 3536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm3, %ymm3 3537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 3538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 3542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 3545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 3546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 3547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 3548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3549*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 3550*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 3551*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3552*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3553*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 3554*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 3555*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3559*9880d681SAndroid Build Coastguard Worker; 3560*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i64_v16i8: 3561*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3562*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 3563*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3564*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm3, %ymm3 3565*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm2, %ymm2 3566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 3567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 3568*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 3569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 3570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 3571*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 3572*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 3573*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 3574*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3575*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 3576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3578*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3579*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3580*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3581*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 3582*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 3584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 3585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3587*9880d681SAndroid Build Coastguard Worker; 3588*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i64_v16i8: 3589*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3590*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq {{.*}}(%rip), %zmm1, %zmm1 3591*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandq {{.*}}(%rip), %zmm0, %zmm0 3592*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3593*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 3594*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 3595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 3596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3597*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 3598*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 3599*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3600*9880d681SAndroid Build Coastguard Worker} 3601*9880d681SAndroid Build Coastguard Worker 3602*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 3603*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i32_v16i8: 3604*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3605*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm0 3606*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm2 3608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm3 3609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 3611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 3612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 3613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 3614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 3615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 3617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3618*9880d681SAndroid Build Coastguard Worker; 3619*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i32_v16i8: 3620*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm1, %ymm1 3623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 3627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 3628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 3631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3633*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3634*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3635*9880d681SAndroid Build Coastguard Worker; 3636*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i32_v16i8: 3637*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm1, %ymm1 3640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 3641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 3642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 3643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 3645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 3646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 3648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3651*9880d681SAndroid Build Coastguard Worker; 3652*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i32_v16i8: 3653*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpandd {{.*}}(%rip), %zmm0, %zmm0 3655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 3656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3657*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 3658*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 3659*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3660*9880d681SAndroid Build Coastguard Worker} 3661*9880d681SAndroid Build Coastguard Worker 3662*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 3663*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i16_v16i8: 3664*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm0 3666*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand {{.*}}(%rip), %xmm1 3667*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 3668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 3669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 3670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3672*9880d681SAndroid Build Coastguard Worker; 3673*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i16_v16i8: 3674*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3683*9880d681SAndroid Build Coastguard Worker; 3684*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i16_v16i8: 3685*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 3687*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 3688*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3689*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3690*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3691*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3692*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3693*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3694*9880d681SAndroid Build Coastguard Worker; 3695*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_and_const_v16i16_v16i8: 3696*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 3697*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3698*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 3699*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 3700*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 3701*9880d681SAndroid Build Coastguard Worker; 3702*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_and_const_v16i16_v16i8: 3703*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 3704*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 3705*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 3706*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3707*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 3708*9880d681SAndroid Build Coastguard Worker %1 = and <16 x i16> %a0, <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> 3709*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 3710*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3711*9880d681SAndroid Build Coastguard Worker} 3712*9880d681SAndroid Build Coastguard Worker 3713*9880d681SAndroid Build Coastguard Worker; 3714*9880d681SAndroid Build Coastguard Worker; xor 3715*9880d681SAndroid Build Coastguard Worker; 3716*9880d681SAndroid Build Coastguard Worker 3717*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_xor_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 3718*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v4i64_4i32: 3719*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3720*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm2, %xmm0 3721*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm3, %xmm1 3722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 3723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 3724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3725*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3726*9880d681SAndroid Build Coastguard Worker; 3727*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v4i64_4i32: 3728*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 3730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 3732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 3733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 3734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3736*9880d681SAndroid Build Coastguard Worker; 3737*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v4i64_4i32: 3738*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 3740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3745*9880d681SAndroid Build Coastguard Worker; 3746*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v4i64_4i32: 3747*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3748*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps %ymm1, %ymm0, %ymm0 3749*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3750*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3751*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3752*9880d681SAndroid Build Coastguard Worker %1 = xor <4 x i64> %a0, %a1 3753*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 3754*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 3755*9880d681SAndroid Build Coastguard Worker} 3756*9880d681SAndroid Build Coastguard Worker 3757*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 3758*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v8i64_8i16: 3759*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3760*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm6, %xmm2 3761*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm4, %xmm0 3762*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm7, %xmm3 3763*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm5, %xmm1 3764*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 3765*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 3766*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 3767*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 3768*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 3769*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 3770*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 3771*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 3772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 3773*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 3774*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 3775*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 3776*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 3777*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 3778*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 3779*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3780*9880d681SAndroid Build Coastguard Worker; 3781*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v8i64_8i16: 3782*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3783*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm0 3784*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm1 3785*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3786*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3 3787*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3788*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 3789*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 3790*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3791*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 3792*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 3793*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 3794*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 3795*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3796*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3797*9880d681SAndroid Build Coastguard Worker; 3798*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v8i64_8i16: 3799*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1 3801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 3802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3812*9880d681SAndroid Build Coastguard Worker; 3813*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v8i64_8i16: 3814*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq %zmm1, %zmm0, %zmm0 3816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 3817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3818*9880d681SAndroid Build Coastguard Worker %1 = xor <8 x i64> %a0, %a1 3819*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 3820*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3821*9880d681SAndroid Build Coastguard Worker} 3822*9880d681SAndroid Build Coastguard Worker 3823*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 3824*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v8i32_8i16: 3825*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3826*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm2, %xmm0 3827*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm3, %xmm1 3828*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 3829*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 3830*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 3831*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 3832*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 3833*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3834*9880d681SAndroid Build Coastguard Worker; 3835*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v8i32_8i16: 3836*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 3838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 3839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 3840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 3841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 3842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3844*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3845*9880d681SAndroid Build Coastguard Worker; 3846*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v8i32_8i16: 3847*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3848*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 3849*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 3850*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3851*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3852*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3853*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3854*9880d681SAndroid Build Coastguard Worker; 3855*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v8i32_8i16: 3856*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps %ymm1, %ymm0, %ymm0 3858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 3859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 3860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3861*9880d681SAndroid Build Coastguard Worker %1 = xor <8 x i32> %a0, %a1 3862*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 3863*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 3864*9880d681SAndroid Build Coastguard Worker} 3865*9880d681SAndroid Build Coastguard Worker 3866*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 3867*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i64_v16i8: 3868*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm0 3870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm1 3871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm2 3872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm3 3873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm4 3874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm5 3875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm6 3876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{[0-9]+}}(%rsp), %xmm7 3877*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3878*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 3879*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 3880*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 3881*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 3882*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 3883*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 3884*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 3885*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 3886*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 3887*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 3888*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 3889*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 3890*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3891*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 3892*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 3893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3894*9880d681SAndroid Build Coastguard Worker; 3895*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i64_v16i8: 3896*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm4, %ymm0, %ymm0 3898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm5, %ymm1, %ymm1 3899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm6, %ymm2, %ymm2 3900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm7, %ymm3, %ymm3 3901*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 3902*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 3903*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3904*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3905*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 3906*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 3907*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 3908*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 3909*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 3910*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 3911*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 3912*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3913*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 3914*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 3915*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 3916*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 3917*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 3918*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 3919*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3920*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3921*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3922*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3923*9880d681SAndroid Build Coastguard Worker; 3924*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i64_v16i8: 3925*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 3926*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm5, %ymm1, %ymm1 3927*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0 3928*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm7, %ymm3, %ymm3 3929*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm6, %ymm2, %ymm2 3930*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 3931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 3932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 3933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 3934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 3935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 3936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 3937*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 3938*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 3939*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 3940*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 3941*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 3942*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 3943*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 3944*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 3945*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 3946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 3947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 3948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 3949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 3950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 3951*9880d681SAndroid Build Coastguard Worker; 3952*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v16i64_v16i8: 3953*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 3954*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq %zmm3, %zmm1, %zmm1 3955*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq %zmm2, %zmm0, %zmm0 3956*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 3957*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 3958*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 3959*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 3960*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 3961*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i64> %a0, %a1 3962*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 3963*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 3964*9880d681SAndroid Build Coastguard Worker} 3965*9880d681SAndroid Build Coastguard Worker 3966*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 3967*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i32_v16i8: 3968*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 3969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm4, %xmm0 3970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm5, %xmm1 3971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm6, %xmm2 3972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm7, %xmm3 3973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 3975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 3976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 3977*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 3978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 3979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 3980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 3981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 3982*9880d681SAndroid Build Coastguard Worker; 3983*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i32_v16i8: 3984*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 3985*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm0 3986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm3, %ymm1, %ymm1 3987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 3988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 3989*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3990*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 3991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 3992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 3993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 3994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 3995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 3996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 3997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 3998*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 3999*9880d681SAndroid Build Coastguard Worker; 4000*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i32_v16i8: 4001*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4002*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0 4003*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1 4004*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 4005*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 4006*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 4007*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4008*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 4009*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 4010*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4011*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 4012*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4013*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4014*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4015*9880d681SAndroid Build Coastguard Worker; 4016*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v16i32_v16i8: 4017*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4018*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxord %zmm1, %zmm0, %zmm0 4019*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 4020*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4021*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i32> %a0, %a1 4022*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 4023*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4024*9880d681SAndroid Build Coastguard Worker} 4025*9880d681SAndroid Build Coastguard Worker 4026*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 4027*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i16_v16i8: 4028*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4029*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm2, %xmm0 4030*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm3, %xmm1 4031*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 4032*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 4033*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 4034*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4035*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4036*9880d681SAndroid Build Coastguard Worker; 4037*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i16_v16i8: 4038*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %ymm1, %ymm0, %ymm0 4040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4047*9880d681SAndroid Build Coastguard Worker; 4048*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i16_v16i8: 4049*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4050*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0 4051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 4052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4053*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4054*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4055*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4056*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4058*9880d681SAndroid Build Coastguard Worker; 4059*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_xor_v16i16_v16i8: 4060*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 4061*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vxorps %ymm1, %ymm0, %ymm0 4062*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 4063*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 4064*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 4065*9880d681SAndroid Build Coastguard Worker; 4066*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_xor_v16i16_v16i8: 4067*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 4068*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vxorps %ymm1, %ymm0, %ymm0 4069*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 4070*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4071*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 4072*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i16> %a0, %a1 4073*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 4074*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4075*9880d681SAndroid Build Coastguard Worker} 4076*9880d681SAndroid Build Coastguard Worker 4077*9880d681SAndroid Build Coastguard Worker; 4078*9880d681SAndroid Build Coastguard Worker; xor to constant 4079*9880d681SAndroid Build Coastguard Worker; 4080*9880d681SAndroid Build Coastguard Worker 4081*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_xor_const_v4i64_4i32(<4 x i64> %a0) nounwind { 4082*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v4i64_4i32: 4083*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4084*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4085*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 4086*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 4087*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm0, %xmm2 4088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 4090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 4091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4093*9880d681SAndroid Build Coastguard Worker; 4094*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v4i64_4i32: 4095*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 4099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 4100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 4101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4103*9880d681SAndroid Build Coastguard Worker; 4104*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v4i64_4i32: 4105*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4112*9880d681SAndroid Build Coastguard Worker; 4113*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v4i64_4i32: 4114*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 4117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4119*9880d681SAndroid Build Coastguard Worker %1 = xor <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 4120*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 4121*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 4122*9880d681SAndroid Build Coastguard Worker} 4123*9880d681SAndroid Build Coastguard Worker 4124*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 4125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i64_v16i16: 4126*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 4128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm0 4130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] 4131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm4, %xmm0 4132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm2 4133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm3 4134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 4136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 4137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 4138*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 4139*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 4140*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 4141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 4142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 4143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 4144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm1 4145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 4146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm2 4147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 4148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 4149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 4150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4151*9880d681SAndroid Build Coastguard Worker; 4152*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i64_v16i16: 4153*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 4156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 4158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 4160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 4161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 4162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 4164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 4165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 4166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4168*9880d681SAndroid Build Coastguard Worker; 4169*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i64_v16i16: 4170*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4171*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm1, %ymm1 4172*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4173*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4174*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4175*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 4176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 4177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 4178*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4179*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4183*9880d681SAndroid Build Coastguard Worker; 4184*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i64_v16i16: 4185*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq {{.*}}(%rip), %zmm0, %zmm0 4187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 4188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4189*9880d681SAndroid Build Coastguard Worker %1 = xor <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 4190*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 4191*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4192*9880d681SAndroid Build Coastguard Worker} 4193*9880d681SAndroid Build Coastguard Worker 4194*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 4195*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i32_v16i16: 4196*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4197*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm0 4198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 4200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 4201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 4202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 4203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 4204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4205*9880d681SAndroid Build Coastguard Worker; 4206*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i32_v16i16: 4207*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 4211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4216*9880d681SAndroid Build Coastguard Worker; 4217*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i32_v16i16: 4218*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4225*9880d681SAndroid Build Coastguard Worker; 4226*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i32_v16i16: 4227*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4228*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4229*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 4230*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4231*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4232*9880d681SAndroid Build Coastguard Worker %1 = xor <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 4233*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 4234*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4235*9880d681SAndroid Build Coastguard Worker} 4236*9880d681SAndroid Build Coastguard Worker 4237*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 4238*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i64_v16i8: 4239*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 4242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 4243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor %xmm8, %xmm0 4244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm2 4246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm3 4247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm4 4248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm5 4249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm6 4250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm7 4251*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 4252*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 4253*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 4254*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 4255*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 4256*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 4257*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 4258*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 4259*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 4260*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 4261*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 4262*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 4263*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 4264*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4265*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 4266*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 4267*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4268*9880d681SAndroid Build Coastguard Worker; 4269*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i64_v16i8: 4270*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 4273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm2, %ymm2 4274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm3, %ymm3 4275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 4277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 4278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 4280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 4282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 4283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 4284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 4285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 4286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 4288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 4289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 4290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 4292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 4293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 4295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4297*9880d681SAndroid Build Coastguard Worker; 4298*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i64_v16i8: 4299*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4300*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm1, %ymm1 4301*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4302*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm3, %ymm3 4303*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm2, %ymm2 4304*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 4305*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 4306*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 4307*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 4308*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 4309*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 4310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 4311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 4312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 4314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 4317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 4318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 4319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 4320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 4322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 4323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4325*9880d681SAndroid Build Coastguard Worker; 4326*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i64_v16i8: 4327*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq {{.*}}(%rip), %zmm1, %zmm1 4329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxorq {{.*}}(%rip), %zmm0, %zmm0 4330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 4331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 4332*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 4333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 4334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4335*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 4336*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 4337*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4338*9880d681SAndroid Build Coastguard Worker} 4339*9880d681SAndroid Build Coastguard Worker 4340*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 4341*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i32_v16i8: 4342*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4343*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm0 4344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm2 4346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm3 4347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 4348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 4349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 4350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 4351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 4352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 4353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 4355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4356*9880d681SAndroid Build Coastguard Worker; 4357*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i32_v16i8: 4358*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm1, %ymm1 4361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 4363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 4364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 4365*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 4366*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 4367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 4368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 4369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 4370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4373*9880d681SAndroid Build Coastguard Worker; 4374*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i32_v16i8: 4375*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm1, %ymm1 4378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 4379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 4380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 4381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 4383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 4384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 4386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4389*9880d681SAndroid Build Coastguard Worker; 4390*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i32_v16i8: 4391*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4392*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpxord {{.*}}(%rip), %zmm0, %zmm0 4393*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 4394*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4395*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 4396*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 4397*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4398*9880d681SAndroid Build Coastguard Worker} 4399*9880d681SAndroid Build Coastguard Worker 4400*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 4401*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i16_v16i8: 4402*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm0 4404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pxor {{.*}}(%rip), %xmm1 4405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 4406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 4407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 4408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4410*9880d681SAndroid Build Coastguard Worker; 4411*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i16_v16i8: 4412*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4421*9880d681SAndroid Build Coastguard Worker; 4422*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i16_v16i8: 4423*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm0 4425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 4426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4432*9880d681SAndroid Build Coastguard Worker; 4433*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_xor_const_v16i16_v16i8: 4434*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 4435*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4436*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 4437*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 4438*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 4439*9880d681SAndroid Build Coastguard Worker; 4440*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_xor_const_v16i16_v16i8: 4441*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 4442*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm0 4443*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 4444*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4445*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 4446*9880d681SAndroid Build Coastguard Worker %1 = xor <16 x i16> %a0, <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> 4447*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 4448*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4449*9880d681SAndroid Build Coastguard Worker} 4450*9880d681SAndroid Build Coastguard Worker 4451*9880d681SAndroid Build Coastguard Worker; 4452*9880d681SAndroid Build Coastguard Worker; or 4453*9880d681SAndroid Build Coastguard Worker; 4454*9880d681SAndroid Build Coastguard Worker 4455*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_or_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind { 4456*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v4i64_4i32: 4457*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm2, %xmm0 4459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm3, %xmm1 4460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 4461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 4462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4464*9880d681SAndroid Build Coastguard Worker; 4465*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v4i64_4i32: 4466*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 4468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 4470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 4471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 4472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4474*9880d681SAndroid Build Coastguard Worker; 4475*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v4i64_4i32: 4476*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4477*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 4478*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4479*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4480*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4483*9880d681SAndroid Build Coastguard Worker; 4484*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v4i64_4i32: 4485*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vorps %ymm1, %ymm0, %ymm0 4487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 4488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4490*9880d681SAndroid Build Coastguard Worker %1 = or <4 x i64> %a0, %a1 4491*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 4492*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 4493*9880d681SAndroid Build Coastguard Worker} 4494*9880d681SAndroid Build Coastguard Worker 4495*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind { 4496*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v8i64_8i16: 4497*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4498*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm6, %xmm2 4499*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm4, %xmm0 4500*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm7, %xmm3 4501*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm5, %xmm1 4502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 4503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 4504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 4505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 4506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 4507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 4508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 4509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 4510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 4511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 4512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm1 4513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm2 4514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 4515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 4516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 4517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4518*9880d681SAndroid Build Coastguard Worker; 4519*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v8i64_8i16: 4520*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm2, %ymm0, %ymm0 4522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm3, %ymm1, %ymm1 4523*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4524*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3 4525*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 4527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 4528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 4529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 4531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 4532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 4533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4535*9880d681SAndroid Build Coastguard Worker; 4536*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v8i64_8i16: 4537*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1 4539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0 4540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 4543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 4544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 4545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4550*9880d681SAndroid Build Coastguard Worker; 4551*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v8i64_8i16: 4552*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4553*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq %zmm1, %zmm0, %zmm0 4554*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 4555*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4556*9880d681SAndroid Build Coastguard Worker %1 = or <8 x i64> %a0, %a1 4557*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 4558*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4559*9880d681SAndroid Build Coastguard Worker} 4560*9880d681SAndroid Build Coastguard Worker 4561*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind { 4562*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v8i32_8i16: 4563*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm2, %xmm0 4565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm3, %xmm1 4566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 4567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 4568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 4569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 4570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 4571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4572*9880d681SAndroid Build Coastguard Worker; 4573*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v8i32_8i16: 4574*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 4576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 4578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4583*9880d681SAndroid Build Coastguard Worker; 4584*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v8i32_8i16: 4585*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 4587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4592*9880d681SAndroid Build Coastguard Worker; 4593*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v8i32_8i16: 4594*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vorps %ymm1, %ymm0, %ymm0 4596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 4597*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4599*9880d681SAndroid Build Coastguard Worker %1 = or <8 x i32> %a0, %a1 4600*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 4601*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4602*9880d681SAndroid Build Coastguard Worker} 4603*9880d681SAndroid Build Coastguard Worker 4604*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind { 4605*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i64_v16i8: 4606*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm0 4608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm1 4609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm2 4610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm3 4611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm4 4612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm5 4613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm6 4614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{[0-9]+}}(%rsp), %xmm7 4615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 4616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 4617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 4618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 4619*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 4620*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 4621*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 4622*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 4623*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 4624*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 4625*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 4626*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 4627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 4628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 4630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 4631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4632*9880d681SAndroid Build Coastguard Worker; 4633*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i64_v16i8: 4634*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4635*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm4, %ymm0, %ymm0 4636*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm5, %ymm1, %ymm1 4637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm6, %ymm2, %ymm2 4638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm7, %ymm3, %ymm3 4639*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 4640*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 4641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 4642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 4644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 4645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 4646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 4647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 4648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 4649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 4650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 4652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 4653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 4654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 4655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 4656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 4657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 4659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4661*9880d681SAndroid Build Coastguard Worker; 4662*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i64_v16i8: 4663*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4664*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm5, %ymm1, %ymm1 4665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0 4666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm7, %ymm3, %ymm3 4667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm6, %ymm2, %ymm2 4668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 4669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 4670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 4671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 4672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 4673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 4674*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 4675*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 4676*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4677*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 4678*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4679*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4680*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 4681*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 4682*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 4683*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 4684*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4685*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 4686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 4687*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4688*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4689*9880d681SAndroid Build Coastguard Worker; 4690*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v16i64_v16i8: 4691*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq %zmm3, %zmm1, %zmm1 4693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq %zmm2, %zmm0, %zmm0 4694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 4695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 4696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 4697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 4698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4699*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i64> %a0, %a1 4700*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 4701*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4702*9880d681SAndroid Build Coastguard Worker} 4703*9880d681SAndroid Build Coastguard Worker 4704*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind { 4705*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i32_v16i8: 4706*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm4, %xmm0 4708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm5, %xmm1 4709*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm6, %xmm2 4710*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm7, %xmm3 4711*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 4712*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 4713*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 4714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 4715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 4716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 4717*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4718*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 4719*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4720*9880d681SAndroid Build Coastguard Worker; 4721*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i32_v16i8: 4722*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm2, %ymm0, %ymm0 4724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm3, %ymm1, %ymm1 4725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 4727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 4728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 4729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 4730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 4731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 4732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 4733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 4734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 4735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4737*9880d681SAndroid Build Coastguard Worker; 4738*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i32_v16i8: 4739*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0 4741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1 4742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 4743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 4744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 4745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 4747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 4748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 4750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4753*9880d681SAndroid Build Coastguard Worker; 4754*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v16i32_v16i8: 4755*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4756*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpord %zmm1, %zmm0, %zmm0 4757*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 4758*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4759*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i32> %a0, %a1 4760*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 4761*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4762*9880d681SAndroid Build Coastguard Worker} 4763*9880d681SAndroid Build Coastguard Worker 4764*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind { 4765*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i16_v16i8: 4766*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4767*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm2, %xmm0 4768*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm3, %xmm1 4769*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 4770*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 4771*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 4772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 4773*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4774*9880d681SAndroid Build Coastguard Worker; 4775*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i16_v16i8: 4776*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0 4778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4781*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4782*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4783*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4784*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4785*9880d681SAndroid Build Coastguard Worker; 4786*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i16_v16i8: 4787*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0 4789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 4790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 4791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4796*9880d681SAndroid Build Coastguard Worker; 4797*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_or_v16i16_v16i8: 4798*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 4799*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vorps %ymm1, %ymm0, %ymm0 4800*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 4801*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 4802*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 4803*9880d681SAndroid Build Coastguard Worker; 4804*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_or_v16i16_v16i8: 4805*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 4806*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vorps %ymm1, %ymm0, %ymm0 4807*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 4808*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4809*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 4810*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i16> %a0, %a1 4811*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 4812*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 4813*9880d681SAndroid Build Coastguard Worker} 4814*9880d681SAndroid Build Coastguard Worker 4815*9880d681SAndroid Build Coastguard Worker; 4816*9880d681SAndroid Build Coastguard Worker; or to constant 4817*9880d681SAndroid Build Coastguard Worker; 4818*9880d681SAndroid Build Coastguard Worker 4819*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_or_const_v4i64_4i32(<4 x i64> %a0) nounwind { 4820*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v4i64_4i32: 4821*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4822*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4823*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm2 4824*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 4825*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm0, %xmm2 4826*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 4827*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3] 4828*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 4829*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4830*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4831*9880d681SAndroid Build Coastguard Worker; 4832*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v4i64_4i32: 4833*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4834*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 4835*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 4837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 4838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 4839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4841*9880d681SAndroid Build Coastguard Worker; 4842*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v4i64_4i32: 4843*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 4845*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4846*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4847*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4848*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4849*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4850*9880d681SAndroid Build Coastguard Worker; 4851*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v4i64_4i32: 4852*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 4854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 4855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4857*9880d681SAndroid Build Coastguard Worker %1 = or <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3> 4858*9880d681SAndroid Build Coastguard Worker %2 = trunc <4 x i64> %1 to <4 x i32> 4859*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 4860*9880d681SAndroid Build Coastguard Worker} 4861*9880d681SAndroid Build Coastguard Worker 4862*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_const_v16i64_v16i16(<8 x i64> %a0) nounwind { 4863*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i64_v16i16: 4864*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4865*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 4866*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4867*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm0 4868*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] 4869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm4, %xmm0 4870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm2 4871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm3 4872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 4873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm1, %eax 4874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 4875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm0, %ecx 4876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 4877*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 4878*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm3, %edx 4879*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %edx, %xmm1 4880*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm3 4881*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 4882*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %ecx, %xmm1 4883*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $4, %xmm2, %eax 4884*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %eax, %xmm2 4885*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 4886*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 4887*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 4888*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4889*9880d681SAndroid Build Coastguard Worker; 4890*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i64_v16i16: 4891*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 4893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm1, %ymm1 4894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 4895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 4896*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 4898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 4899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 4900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 4901*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 4902*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 4903*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 4904*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4905*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4906*9880d681SAndroid Build Coastguard Worker; 4907*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i64_v16i16: 4908*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm1, %ymm1 4910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 4911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 4912*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 4913*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 4914*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 4915*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 4916*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4917*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4918*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4919*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4920*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4921*9880d681SAndroid Build Coastguard Worker; 4922*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i64_v16i16: 4923*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4924*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq {{.*}}(%rip), %zmm0, %zmm0 4925*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqw %zmm0, %xmm0 4926*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4927*9880d681SAndroid Build Coastguard Worker %1 = or <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7> 4928*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i64> %1 to <8 x i16> 4929*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4930*9880d681SAndroid Build Coastguard Worker} 4931*9880d681SAndroid Build Coastguard Worker 4932*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_const_v16i32_v16i16(<8 x i32> %a0) nounwind { 4933*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i32_v16i16: 4934*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4935*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm0 4936*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 4937*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm1 4938*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm1 4939*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslld $16, %xmm0 4940*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $16, %xmm0 4941*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packssdw %xmm1, %xmm0 4942*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 4943*9880d681SAndroid Build Coastguard Worker; 4944*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i32_v16i16: 4945*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 4946*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 4947*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 4948*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 4949*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 4950*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 4951*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 4952*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 4953*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 4954*9880d681SAndroid Build Coastguard Worker; 4955*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i32_v16i16: 4956*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 4957*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 4958*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero 4959*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 4960*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4961*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 4962*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 4963*9880d681SAndroid Build Coastguard Worker; 4964*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i32_v16i16: 4965*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 4966*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 4967*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdw %zmm0, %ymm0 4968*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 4969*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 4970*9880d681SAndroid Build Coastguard Worker %1 = or <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 4971*9880d681SAndroid Build Coastguard Worker %2 = trunc <8 x i32> %1 to <8 x i16> 4972*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 4973*9880d681SAndroid Build Coastguard Worker} 4974*9880d681SAndroid Build Coastguard Worker 4975*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i64_v16i8(<16 x i64> %a0) nounwind { 4976*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i64_v16i8: 4977*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 4978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl $1, %eax 4979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %rax, %xmm8 4980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7] 4981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por %xmm8, %xmm0 4982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 4983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm2 4984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm3 4985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm4 4986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm5 4987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm6 4988*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm7 4989*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 4990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm7 4991*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm6 4992*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm7, %xmm6 4993*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm5 4994*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm4 4995*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm5, %xmm4 4996*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm6, %xmm4 4997*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm3 4998*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm2 4999*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 5000*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm1 5001*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm8, %xmm0 5002*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 5003*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 5004*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm4, %xmm0 5005*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 5006*9880d681SAndroid Build Coastguard Worker; 5007*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i64_v16i8: 5008*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 5009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 5010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm1, %ymm1 5011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm2, %ymm2 5012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm3, %ymm3 5013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4 5014*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 5015*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 5016*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 5017*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm3, %xmm3 5018*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4 5019*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm4, %xmm4 5020*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm2, %xmm2 5021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm4, %xmm2, %xmm2 5022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm2, %xmm2 5023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3 5024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 5025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm1, %xmm1 5026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm1, %xmm1 5027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3 5028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm3, %xmm3 5029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm5, %xmm0, %xmm0 5030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm3, %xmm0, %xmm0 5031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 5033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 5034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 5035*9880d681SAndroid Build Coastguard Worker; 5036*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i64_v16i8: 5037*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 5038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm1, %ymm1 5039*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 5040*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm3, %ymm3 5041*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm2, %ymm2 5042*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6] 5043*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3] 5044*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6] 5045*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3] 5046*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm2, %ymm2 5047*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 5048*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm2, %ymm2 5049*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3] 5050*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 5051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm2, %xmm2 5052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 5053*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 5054*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 5055*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 5056*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 5057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm3, %ymm0, %ymm0 5058*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 5059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm4, %xmm0, %xmm0 5060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 5061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 5062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 5063*9880d681SAndroid Build Coastguard Worker; 5064*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i64_v16i8: 5065*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 5066*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq {{.*}}(%rip), %zmm1, %zmm1 5067*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vporq {{.*}}(%rip), %zmm0, %zmm0 5068*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 5069*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm1, %ymm1 5070*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0 5071*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 5072*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 5073*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15> 5074*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i64> %1 to <16 x i8> 5075*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 5076*9880d681SAndroid Build Coastguard Worker} 5077*9880d681SAndroid Build Coastguard Worker 5078*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i32_v16i8(<16 x i32> %a0) nounwind { 5079*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i32_v16i8: 5080*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 5081*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm0 5082*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 5083*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm2 5084*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm3 5085*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 5086*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 5087*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 5088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 5089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 5090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 5091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 5092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 5093*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 5094*9880d681SAndroid Build Coastguard Worker; 5095*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i32_v16i8: 5096*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 5097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 5098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm1, %ymm1 5099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 5100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 5101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 5102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 5103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 5104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 5105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 5106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 5107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 5108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 5109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 5110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 5111*9880d681SAndroid Build Coastguard Worker; 5112*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i32_v16i8: 5113*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 5114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 5115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm1, %ymm1 5116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128] 5117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 5118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 5119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 5120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 5121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 5122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 5123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 5124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 5125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 5126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 5127*9880d681SAndroid Build Coastguard Worker; 5128*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i32_v16i8: 5129*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 5130*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpord {{.*}}(%rip), %zmm0, %zmm0 5131*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovdb %zmm0, %xmm0 5132*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 5133*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 5134*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i32> %1 to <16 x i8> 5135*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 5136*9880d681SAndroid Build Coastguard Worker} 5137*9880d681SAndroid Build Coastguard Worker 5138*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i16_v16i8(<16 x i16> %a0) nounwind { 5139*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i16_v16i8: 5140*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 5141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm0 5142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: por {{.*}}(%rip), %xmm1 5143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 5144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm1 5145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm2, %xmm0 5146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 5147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 5148*9880d681SAndroid Build Coastguard Worker; 5149*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i16_v16i8: 5150*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 5151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 5152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 5153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 5154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 5155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 5156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 5157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 5158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 5159*9880d681SAndroid Build Coastguard Worker; 5160*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i16_v16i8: 5161*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 5162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpor {{.*}}(%rip), %ymm0, %ymm0 5163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 5164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 5165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 5166*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 5167*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 5168*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 5169*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 5170*9880d681SAndroid Build Coastguard Worker; 5171*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_or_const_v16i16_v16i8: 5172*9880d681SAndroid Build Coastguard Worker; AVX512F: # BB#0: 5173*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 5174*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm0 5175*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: vpmovdb %zmm0, %xmm0 5176*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT: retq 5177*9880d681SAndroid Build Coastguard Worker; 5178*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_or_const_v16i16_v16i8: 5179*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: 5180*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vorps {{.*}}(%rip), %ymm0, %ymm0 5181*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovwb %zmm0, %ymm0 5182*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 5183*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 5184*9880d681SAndroid Build Coastguard Worker %1 = or <16 x i16> %a0, <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> 5185*9880d681SAndroid Build Coastguard Worker %2 = trunc <16 x i16> %1 to <16 x i8> 5186*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 5187*9880d681SAndroid Build Coastguard Worker} 5188*9880d681SAndroid Build Coastguard Worker 5189*9880d681SAndroid Build Coastguard Worker; 5190*9880d681SAndroid Build Coastguard Worker; complex patterns - often created by vectorizer 5191*9880d681SAndroid Build Coastguard Worker; 5192*9880d681SAndroid Build Coastguard Worker 5193*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mul_add_v4i64_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind { 5194*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: mul_add_v4i64_v4i32: 5195*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 5196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1] 5197*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm3 5198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $31, %xmm3 5199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1] 5200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm3 5201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $31, %xmm3 5202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1] 5203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1] 5204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm4 5205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $31, %xmm4 5206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1] 5207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm4 5208*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrad $31, %xmm4 5209*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1] 5210*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm0, %xmm4 5211*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm1, %xmm4 5212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm5 5213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm5 5214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm0, %xmm5 5215*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm5 5216*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm5 5217*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm0 5218*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm1, %xmm0 5219*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm0 5220*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm5, %xmm0 5221*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm2, %xmm1 5222*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm1 5223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm3, %xmm4 5224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm4 5225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm2, %xmm4 5226*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm4 5227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm1, %xmm4 5228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psrlq $32, %xmm2 5229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pmuludq %xmm3, %xmm2 5230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: psllq $32, %xmm2 5231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq %xmm4, %xmm2 5232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm2 5233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: paddq {{.*}}(%rip), %xmm0 5234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 5235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 5236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 5237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 5238*9880d681SAndroid Build Coastguard Worker; 5239*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: mul_add_v4i64_v4i32: 5240*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 5241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1] 5242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxdq %xmm2, %xmm2 5243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 5244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm1[2,3,0,1] 5245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxdq %xmm3, %xmm3 5246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmovsxdq %xmm1, %xmm1 5247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm4 5248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm1, %xmm5 5249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm5, %xmm0, %xmm5 5250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm5, %xmm5 5251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm5, %xmm4, %xmm4 5252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm0, %xmm0 5253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm1, %xmm0, %xmm0 5254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm0, %xmm0 5255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm0, %xmm4, %xmm0 5256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm2, %xmm1 5257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm3, %xmm4 5258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm4, %xmm2, %xmm4 5259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm4, %xmm4 5260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm4, %xmm1, %xmm1 5261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsrlq $32, %xmm2, %xmm2 5262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpmuludq %xmm3, %xmm2, %xmm2 5263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpsllq $32, %xmm2, %xmm2 5264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq %xmm2, %xmm1, %xmm1 5265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm1, %xmm1 5266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpaddq {{.*}}(%rip), %xmm0, %xmm0 5267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 5268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 5269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 5270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 5271*9880d681SAndroid Build Coastguard Worker; 5272*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: mul_add_v4i64_v4i32: 5273*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 5274*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 5275*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmovsxdq %xmm1, %ymm1 5276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 5277*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm1, %ymm3 5278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm3, %ymm0, %ymm3 5279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm3, %ymm3 5280*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm3, %ymm2, %ymm2 5281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsrlq $32, %ymm0, %ymm0 5282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 5283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpsllq $32, %ymm0, %ymm0 5284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq %ymm0, %ymm2, %ymm0 5285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 5286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 5287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 5288*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 5289*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 5290*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 5291*9880d681SAndroid Build Coastguard Worker; 5292*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: mul_add_v4i64_v4i32: 5293*9880d681SAndroid Build Coastguard Worker; AVX512: # BB#0: 5294*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovsxdq %xmm0, %ymm0 5295*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovsxdq %xmm1, %ymm1 5296*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm2 5297*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %ymm1, %ymm3 5298*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm3, %ymm0, %ymm3 5299*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %ymm3, %ymm3 5300*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm3, %ymm2, %ymm2 5301*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsrlq $32, %ymm0, %ymm0 5302*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmuludq %ymm1, %ymm0, %ymm0 5303*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpsllq $32, %ymm0, %ymm0 5304*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq %ymm0, %ymm2, %ymm0 5305*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpaddq {{.*}}(%rip), %ymm0, %ymm0 5306*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: vpmovqd %zmm0, %ymm0 5307*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 5308*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT: retq 5309*9880d681SAndroid Build Coastguard Worker %1 = sext <4 x i32> %a0 to <4 x i64> 5310*9880d681SAndroid Build Coastguard Worker %2 = sext <4 x i32> %a1 to <4 x i64> 5311*9880d681SAndroid Build Coastguard Worker %3 = mul <4 x i64> %1, %2 5312*9880d681SAndroid Build Coastguard Worker %4 = add <4 x i64> %3, <i64 -3, i64 -1, i64 1, i64 3> 5313*9880d681SAndroid Build Coastguard Worker %5 = trunc <4 x i64> %4 to <4 x i32> 5314*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %5 5315*9880d681SAndroid Build Coastguard Worker} 5316