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 -mcpu=x86-64 -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx512bw | FileCheck %s --check-prefix=AVX512BW 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @trunc8i64_8i32(<8 x i64> %a) { 10*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc8i64_8i32: 11*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 12*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 13*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 14*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 16*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 17*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0] 18*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 19*9880d681SAndroid Build Coastguard Worker; 20*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc8i64_8i32: 21*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 22*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 23*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 24*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 25*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 26*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 27*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0] 28*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 29*9880d681SAndroid Build Coastguard Worker; 30*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc8i64_8i32: 31*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 32*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 33*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 34*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 35*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,1,0,2] 36*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 37*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7] 38*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 39*9880d681SAndroid Build Coastguard Worker; 40*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc8i64_8i32: 41*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 42*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 43*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 44*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 45*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7] 46*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 47*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 48*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 49*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 50*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 51*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 52*9880d681SAndroid Build Coastguard Worker; 53*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc8i64_8i32: 54*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 55*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 56*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 57*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 58*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 59*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 60*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker; 62*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i64_8i32: 63*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 64*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0 65*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 66*9880d681SAndroid Build Coastguard Workerentry: 67*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i64> %a to <8 x i32> 68*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %0 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc8i64_8i16(<8 x i64> %a) { 72*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc8i64_8i16: 73*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 74*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm1, %eax 75*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 76*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm0, %ecx 77*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 78*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 79*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm3, %edx 80*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %edx, %xmm1 81*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %eax, %xmm3 82*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 83*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm2, %eax 84*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %eax, %xmm1 85*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %ecx, %xmm2 86*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 87*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 88*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 89*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 90*9880d681SAndroid Build Coastguard Worker; 91*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc8i64_8i16: 92*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 93*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm1, %eax 94*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 95*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm0, %ecx 96*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 97*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 98*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm3, %edx 99*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %edx, %xmm1 100*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %eax, %xmm3 101*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 102*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm2, %eax 103*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %eax, %xmm1 104*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %ecx, %xmm2 105*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 106*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 107*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 108*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 109*9880d681SAndroid Build Coastguard Worker; 110*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc8i64_8i16: 111*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 112*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pxor %xmm4, %xmm4 113*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7] 114*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7] 115*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packusdw %xmm3, %xmm2 116*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7] 117*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7] 118*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packusdw %xmm1, %xmm0 119*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: packusdw %xmm2, %xmm0 120*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 121*9880d681SAndroid Build Coastguard Worker; 122*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc8i64_8i16: 123*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3 126*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 127*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7] 128*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm1, %xmm1 129*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 130*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7] 131*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7] 132*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm2, %xmm0, %xmm0 133*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackusdw %xmm1, %xmm0, %xmm0 134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 136*9880d681SAndroid Build Coastguard Worker; 137*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc8i64_8i16: 138*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 144*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 145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 149*9880d681SAndroid Build Coastguard Worker; 150*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i64_8i16: 151*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 152*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqw %zmm0, %xmm0 153*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 154*9880d681SAndroid Build Coastguard Workerentry: 155*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i64> %a to <8 x i16> 156*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %0 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Workerdefine void @trunc8i64_8i8(<8 x i64> %a) { 160*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc8i64_8i8: 161*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: # %entry 162*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 163*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 164*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 165*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 166*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 167*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 168*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 169*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 170*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm0, %xmm0 171*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %xmm0, (%rax) 172*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc8i64_8i8: 175*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0] 178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm0, %xmm0, %xmm0 187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, (%rax) 188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc8i64_8i8: 192*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 197*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u> 198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, (%rax) 202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 204*9880d681SAndroid Build Coastguard Worker; 205*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i64_8i8: 206*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 207*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqb %zmm0, (%rax) 208*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 209*9880d681SAndroid Build Coastguard Workerentry: 210*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i64> %a to <8 x i8> 211*9880d681SAndroid Build Coastguard Worker store <8 x i8> %0, <8 x i8>* undef, align 4 212*9880d681SAndroid Build Coastguard Worker ret void 213*9880d681SAndroid Build Coastguard Worker} 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc8i32_8i16(<8 x i32> %a) { 216*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc8i32_8i16: 217*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 218*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pslld $16, %xmm1 219*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $16, %xmm1 220*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pslld $16, %xmm0 221*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: psrad $16, %xmm0 222*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packssdw %xmm1, %xmm0 223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 224*9880d681SAndroid Build Coastguard Worker; 225*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc8i32_8i16: 226*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 227*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 228*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm1 229*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm0 230*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 231*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 232*9880d681SAndroid Build Coastguard Worker; 233*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc8i32_8i16: 234*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 235*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 236*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm1 237*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm0 238*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 239*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 240*9880d681SAndroid Build Coastguard Worker; 241*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc8i32_8i16: 242*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 250*9880d681SAndroid Build Coastguard Worker; 251*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc8i32_8i16: 252*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 253*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 254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 258*9880d681SAndroid Build Coastguard Worker; 259*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i32_8i16: 260*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 261*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 262*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 263*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %XMM0<def> %XMM0<kill> %YMM0<kill> 264*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 265*9880d681SAndroid Build Coastguard Workerentry: 266*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i32> %a to <8 x i16> 267*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %0 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Workerdefine void @trunc8i32_8i8(<8 x i32> %a) { 271*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc8i32_8i8: 272*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm1 275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm1, %xmm0 277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm0, %xmm0 278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movq %xmm0, (%rax) 279*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 280*9880d681SAndroid Build Coastguard Worker; 281*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc8i32_8i8: 282*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 283*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u> 284*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm1 285*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm0 286*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 287*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movq %xmm0, (%rax) 288*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 289*9880d681SAndroid Build Coastguard Worker; 290*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc8i32_8i8: 291*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 292*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u> 293*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm1 294*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm0 295*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 296*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movq %xmm0, (%rax) 297*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 298*9880d681SAndroid Build Coastguard Worker; 299*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc8i32_8i8: 300*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <0,4,8,12,u,u,u,u,u,u,u,u,u,u,u,u> 303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovq %xmm0, (%rax) 307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 309*9880d681SAndroid Build Coastguard Worker; 310*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc8i32_8i8: 311*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 312*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 313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovq %xmm0, (%rax) 316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 318*9880d681SAndroid Build Coastguard Worker; 319*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i32_8i8: 320*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 321*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 322*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovdw %zmm0, %ymm0 323*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 324*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovq %xmm0, (%rax) 325*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 326*9880d681SAndroid Build Coastguard Workerentry: 327*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i32> %a to <8 x i8> 328*9880d681SAndroid Build Coastguard Worker store <8 x i8> %0, <8 x i8>* undef, align 4 329*9880d681SAndroid Build Coastguard Worker ret void 330*9880d681SAndroid Build Coastguard Worker} 331*9880d681SAndroid Build Coastguard Worker 332*9880d681SAndroid Build Coastguard Workerdefine void @trunc16i32_16i8(<16 x i32> %a) { 333*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc16i32_16i8: 334*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: # %entry 335*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 336*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm3 337*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm2 338*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm3, %xmm2 339*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm1 340*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pand %xmm4, %xmm0 341*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm1, %xmm0 342*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: packuswb %xmm2, %xmm0 343*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqu %xmm0, (%rax) 344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 345*9880d681SAndroid Build Coastguard Worker; 346*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc16i32_16i8: 347*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 348*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 349*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0] 350*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 351*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm1, %xmm1 352*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm1, %xmm1 353*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm2, %xmm2 355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vandps %xmm3, %xmm0, %xmm0 356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm2, %xmm0, %xmm0 357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpackuswb %xmm1, %xmm0, %xmm0 358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqu %xmm0, (%rax) 359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 361*9880d681SAndroid Build Coastguard Worker; 362*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc16i32_16i8: 363*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 364*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] 365*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1 366*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3] 367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm1, %xmm1 369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %ymm2, %ymm0, %ymm0 370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3] 371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm3, %xmm0, %xmm0 372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqu %xmm0, (%rax) 374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 375*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 376*9880d681SAndroid Build Coastguard Worker; 377*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc16i32_16i8: 378*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 379*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovdb %zmm0, (%rax) 380*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 381*9880d681SAndroid Build Coastguard Workerentry: 382*9880d681SAndroid Build Coastguard Worker %0 = trunc <16 x i32> %a to <16 x i8> 383*9880d681SAndroid Build Coastguard Worker store <16 x i8> %0, <16 x i8>* undef, align 4 384*9880d681SAndroid Build Coastguard Worker ret void 385*9880d681SAndroid Build Coastguard Worker} 386*9880d681SAndroid Build Coastguard Worker 387*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @trunc2x4i64_8i32(<4 x i64> %a, <4 x i64> %b) { 388*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc2x4i64_8i32: 389*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 390*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 391*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 392*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 393*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 394*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 395*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0] 396*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 397*9880d681SAndroid Build Coastguard Worker; 398*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc2x4i64_8i32: 399*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 400*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 401*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 402*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 403*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3] 404*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 405*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0] 406*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 407*9880d681SAndroid Build Coastguard Worker; 408*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc2x4i64_8i32: 409*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 410*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 411*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 412*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 413*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm3[0,1,0,2] 414*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3] 415*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm3[4,5,6,7] 416*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 417*9880d681SAndroid Build Coastguard Worker; 418*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc2x4i64_8i32: 419*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7] 428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 429*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 430*9880d681SAndroid Build Coastguard Worker; 431*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc2x4i64_8i32: 432*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 439*9880d681SAndroid Build Coastguard Worker; 440*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2x4i64_8i32: 441*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 442*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 443*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 444*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0 445*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqd %zmm1, %ymm1 446*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 447*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 448*9880d681SAndroid Build Coastguard Workerentry: 449*9880d681SAndroid Build Coastguard Worker %0 = trunc <4 x i64> %a to <4 x i32> 450*9880d681SAndroid Build Coastguard Worker %1 = trunc <4 x i64> %b to <4 x i32> 451*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i32> %0, <4 x i32> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 452*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %2 453*9880d681SAndroid Build Coastguard Worker} 454*9880d681SAndroid Build Coastguard Worker 455*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc2x4i64_8i16(<4 x i64> %a, <4 x i64> %b) { 456*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc2x4i64_8i16: 457*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 458*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm1, %eax 459*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 460*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm0, %ecx 461*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 462*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 463*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm3, %edx 464*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %edx, %xmm1 465*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %eax, %xmm3 466*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 467*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pextrw $4, %xmm2, %eax 468*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %eax, %xmm1 469*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %ecx, %xmm2 470*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 471*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 472*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 473*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 474*9880d681SAndroid Build Coastguard Worker; 475*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc2x4i64_8i16: 476*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 477*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm1, %eax 478*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 479*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm0, %ecx 480*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 481*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 482*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm3, %edx 483*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %edx, %xmm1 484*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %eax, %xmm3 485*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 486*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pextrw $4, %xmm2, %eax 487*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %eax, %xmm1 488*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %ecx, %xmm2 489*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 490*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3] 491*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 492*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 493*9880d681SAndroid Build Coastguard Worker; 494*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc2x4i64_8i16: 495*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 496*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrw $4, %xmm0, %eax 497*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $1, %eax, %xmm0 498*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm1, %eax 499*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $2, %eax, %xmm0 500*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrw $4, %xmm1, %eax 501*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $3, %eax, %xmm0 502*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm2, %eax 503*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $4, %eax, %xmm0 504*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrw $4, %xmm2, %eax 505*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $5, %eax, %xmm0 506*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm3, %eax 507*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $6, %eax, %xmm0 508*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrw $4, %xmm3, %eax 509*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pinsrw $7, %eax, %xmm0 510*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 511*9880d681SAndroid Build Coastguard Worker; 512*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc2x4i64_8i16: 513*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 514*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2 515*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 516*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 517*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7] 518*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2 519*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[0,1,0,2] 520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7] 522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 523*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1 524*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0 525*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 528*9880d681SAndroid Build Coastguard Worker; 529*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc2x4i64_8i16: 530*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6] 532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3] 533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6] 534*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3] 535*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 536*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm1, %xmm1 537*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufb %xmm2, %xmm0, %xmm0 538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 541*9880d681SAndroid Build Coastguard Worker; 542*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2x4i64_8i16: 543*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 544*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM1<def> %YMM1<kill> %ZMM1<def> 545*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: # kill: %YMM0<def> %YMM0<kill> %ZMM0<def> 546*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqd %zmm0, %ymm0 547*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpmovqd %zmm1, %ymm1 548*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 549*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm1, %xmm1 550*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm0, %xmm0 551*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 552*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 553*9880d681SAndroid Build Coastguard Workerentry: 554*9880d681SAndroid Build Coastguard Worker %0 = trunc <4 x i64> %a to <4 x i16> 555*9880d681SAndroid Build Coastguard Worker %1 = trunc <4 x i64> %b to <4 x i16> 556*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i16> %0, <4 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 557*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 558*9880d681SAndroid Build Coastguard Worker} 559*9880d681SAndroid Build Coastguard Worker 560*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc2x2i64_4i32(<2 x i64> %a, <2 x i64> %b) { 561*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc2x2i64_4i32: 562*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 563*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 564*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 565*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 566*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 567*9880d681SAndroid Build Coastguard Worker; 568*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc2x2i64_4i32: 569*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 570*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 571*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 572*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 573*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 574*9880d681SAndroid Build Coastguard Worker; 575*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc2x2i64_4i32: 576*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 577*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 578*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 579*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 580*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 581*9880d681SAndroid Build Coastguard Worker; 582*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc2x2i64_4i32: 583*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: # %entry 584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 586*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7] 587*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 588*9880d681SAndroid Build Coastguard Worker; 589*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc2x2i64_4i32: 590*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: # %entry 591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3] 594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 595*9880d681SAndroid Build Coastguard Worker; 596*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2x2i64_4i32: 597*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 598*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2] 599*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 600*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3] 601*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 602*9880d681SAndroid Build Coastguard Workerentry: 603*9880d681SAndroid Build Coastguard Worker %0 = trunc <2 x i64> %a to <2 x i32> 604*9880d681SAndroid Build Coastguard Worker %1 = trunc <2 x i64> %b to <2 x i32> 605*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <2 x i32> %0, <2 x i32> %1, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 606*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %2 607*9880d681SAndroid Build Coastguard Worker} 608*9880d681SAndroid Build Coastguard Worker 609*9880d681SAndroid Build Coastguard Workerdefine i64 @trunc2i64_i64(<2 x i64> %inval) { 610*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc2i64_i64: 611*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: # %entry 612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm0, %rax 614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 615*9880d681SAndroid Build Coastguard Worker; 616*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc2i64_i64: 617*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 618*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 619*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rax 620*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 621*9880d681SAndroid Build Coastguard Worker; 622*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2i64_i64: 623*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 624*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 625*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovq %xmm0, %rax 626*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 627*9880d681SAndroid Build Coastguard Workerentry: 628*9880d681SAndroid Build Coastguard Worker %0 = trunc <2 x i64> %inval to <2 x i32> 629*9880d681SAndroid Build Coastguard Worker %1 = bitcast <2 x i32> %0 to i64 630*9880d681SAndroid Build Coastguard Worker ret i64 %1 631*9880d681SAndroid Build Coastguard Worker} 632*9880d681SAndroid Build Coastguard Worker 633*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc2x4i32_8i16(<4 x i32> %a, <4 x i32> %b) { 634*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc2x4i32_8i16: 635*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 636*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7] 637*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,4,6,6,7] 638*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3] 639*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7] 640*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7] 641*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 642*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 643*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 644*9880d681SAndroid Build Coastguard Worker; 645*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc2x4i32_8i16: 646*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 647*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 648*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm1 649*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm0 650*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 651*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 652*9880d681SAndroid Build Coastguard Worker; 653*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc2x4i32_8i16: 654*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 655*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 656*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm1 657*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm0 658*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 659*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 660*9880d681SAndroid Build Coastguard Worker; 661*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc2x4i32_8i16: 662*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 663*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 664*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb %xmm2, %xmm1, %xmm1 665*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb %xmm2, %xmm0, %xmm0 666*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 667*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 668*9880d681SAndroid Build Coastguard Worker; 669*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2x4i32_8i16: 670*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 671*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 672*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm1, %xmm1 673*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm0, %xmm0 674*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 675*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 676*9880d681SAndroid Build Coastguard Workerentry: 677*9880d681SAndroid Build Coastguard Worker %0 = trunc <4 x i32> %a to <4 x i16> 678*9880d681SAndroid Build Coastguard Worker %1 = trunc <4 x i32> %b to <4 x i16> 679*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <4 x i16> %0, <4 x i16> %1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 680*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %2 681*9880d681SAndroid Build Coastguard Worker} 682*9880d681SAndroid Build Coastguard Worker 683*9880d681SAndroid Build Coastguard Worker; PR15524 http://llvm.org/bugs/show_bug.cgi?id=15524 684*9880d681SAndroid Build Coastguard Workerdefine i64 @trunc4i32_i64(<4 x i32> %inval) { 685*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc4i32_i64: 686*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 687*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7] 688*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,6,6,7] 689*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 690*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 691*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 692*9880d681SAndroid Build Coastguard Worker; 693*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc4i32_i64: 694*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 695*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 696*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %xmm0, %rax 697*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 698*9880d681SAndroid Build Coastguard Worker; 699*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc4i32_i64: 700*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 701*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 702*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm0, %rax 703*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 704*9880d681SAndroid Build Coastguard Worker; 705*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc4i32_i64: 706*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 707*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 708*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rax 709*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 710*9880d681SAndroid Build Coastguard Worker; 711*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc4i32_i64: 712*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 713*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15] 714*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovq %xmm0, %rax 715*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 716*9880d681SAndroid Build Coastguard Workerentry: 717*9880d681SAndroid Build Coastguard Worker %0 = trunc <4 x i32> %inval to <4 x i16> 718*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x i16> %0 to i64 719*9880d681SAndroid Build Coastguard Worker ret i64 %1 720*9880d681SAndroid Build Coastguard Worker} 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc2x8i16_16i8(<8 x i16> %a, <8 x i16> %b) { 723*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc2x8i16_16i8: 724*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 725*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 726*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm1 727*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand %xmm2, %xmm0 728*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm1, %xmm0 729*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 730*9880d681SAndroid Build Coastguard Worker; 731*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc2x8i16_16i8: 732*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 733*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 734*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm1 735*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb %xmm2, %xmm0 736*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 737*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 738*9880d681SAndroid Build Coastguard Worker; 739*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc2x8i16_16i8: 740*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 741*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 742*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm1 743*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb %xmm2, %xmm0 744*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 745*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 746*9880d681SAndroid Build Coastguard Worker; 747*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc2x8i16_16i8: 748*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 749*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 750*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb %xmm2, %xmm1, %xmm1 751*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb %xmm2, %xmm0, %xmm0 752*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 753*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 754*9880d681SAndroid Build Coastguard Worker; 755*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc2x8i16_16i8: 756*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 757*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u> 758*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm1, %xmm1 759*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb %xmm2, %xmm0, %xmm0 760*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 761*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 762*9880d681SAndroid Build Coastguard Workerentry: 763*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i16> %a to <8 x i8> 764*9880d681SAndroid Build Coastguard Worker %1 = trunc <8 x i16> %b to <8 x i8> 765*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <8 x i8> %0, <8 x i8> %1, <16 x i32> <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> 766*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 767*9880d681SAndroid Build Coastguard Worker} 768*9880d681SAndroid Build Coastguard Worker 769*9880d681SAndroid Build Coastguard Worker; PR15524 http://llvm.org/bugs/show_bug.cgi?id=15524 770*9880d681SAndroid Build Coastguard Workerdefine i64 @trunc8i16_i64(<8 x i16> %inval) { 771*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: trunc8i16_i64: 772*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: # %entry 773*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pand {{.*}}(%rip), %xmm0 774*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: packuswb %xmm0, %xmm0 775*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 776*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 777*9880d681SAndroid Build Coastguard Worker; 778*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: trunc8i16_i64: 779*9880d681SAndroid Build Coastguard Worker; SSSE3: # BB#0: # %entry 780*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 781*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: movd %xmm0, %rax 782*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT: retq 783*9880d681SAndroid Build Coastguard Worker; 784*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: trunc8i16_i64: 785*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: # %entry 786*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 787*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: movd %xmm0, %rax 788*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 789*9880d681SAndroid Build Coastguard Worker; 790*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc8i16_i64: 791*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 792*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 793*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rax 794*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 795*9880d681SAndroid Build Coastguard Worker; 796*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc8i16_i64: 797*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 798*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u] 799*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vmovq %xmm0, %rax 800*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 801*9880d681SAndroid Build Coastguard Workerentry: 802*9880d681SAndroid Build Coastguard Worker %0 = trunc <8 x i16> %inval to <8 x i8> 803*9880d681SAndroid Build Coastguard Worker %1 = bitcast <8 x i8> %0 to i64 804*9880d681SAndroid Build Coastguard Worker ret i64 %1 805*9880d681SAndroid Build Coastguard Worker} 806*9880d681SAndroid Build Coastguard Worker 807*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc16i64_16i8_const() { 808*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc16i64_16i8_const: 809*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: # %entry 810*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: xorps %xmm0, %xmm0 811*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 812*9880d681SAndroid Build Coastguard Worker; 813*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: trunc16i64_16i8_const: 814*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: # %entry 815*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 816*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 817*9880d681SAndroid Build Coastguard Worker; 818*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc16i64_16i8_const: 819*9880d681SAndroid Build Coastguard Worker; AVX512BW: # BB#0: # %entry 820*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: vxorps %xmm0, %xmm0, %xmm0 821*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT: retq 822*9880d681SAndroid Build Coastguard Worker 823*9880d681SAndroid Build Coastguard Workerentry: 824*9880d681SAndroid Build Coastguard Worker %0 = trunc <16 x i64> zeroinitializer to <16 x i8> 825*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %0, <16 x i8> %0, <16 x i32> <i32 28, i32 30, i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 undef, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26> 826*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %1 827*9880d681SAndroid Build Coastguard Worker} 828