xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-trunc.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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