xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-trunc-math.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 -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker;
9*9880d681SAndroid Build Coastguard Worker; add
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_add_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
13*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v4i64_4i32:
14*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm2, %xmm0
16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm3, %xmm1
17*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
18*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
19*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
20*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
21*9880d681SAndroid Build Coastguard Worker;
22*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v4i64_4i32:
23*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm2
25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
33*9880d681SAndroid Build Coastguard Worker;
34*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v4i64_4i32:
35*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
36*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
37*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
38*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
39*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
40*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
42*9880d681SAndroid Build Coastguard Worker;
43*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v4i64_4i32:
44*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
45*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm1, %ymm0, %ymm0
46*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
47*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
48*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
49*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i64> %a0, %a1
50*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
51*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
55*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v8i64_8i16:
56*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
57*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm6, %xmm2
58*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm0
59*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm7, %xmm3
60*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm1
61*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
62*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
63*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
65*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
66*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
67*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
68*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
69*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
70*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
71*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
72*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
73*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
74*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
75*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
76*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
77*9880d681SAndroid Build Coastguard Worker;
78*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v8i64_8i16:
79*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
80*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm4
81*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
82*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
83*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm0
84*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm2
85*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
86*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
87*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm1, %xmm1
88*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
89*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
90*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
91*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm1
92*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
93*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7]
94*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
95*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
96*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
97*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker;
99*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v8i64_8i16:
100*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm3, %ymm1, %ymm1
102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm0
103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
113*9880d681SAndroid Build Coastguard Worker;
114*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v8i64_8i16:
115*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm1, %zmm0, %zmm0
117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
119*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i64> %a0, %a1
120*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
121*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v8i32_8i16:
126*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm2, %xmm0
128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm3, %xmm1
129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
135*9880d681SAndroid Build Coastguard Worker;
136*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v8i32_8i16:
137*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2
139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
144*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
145*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
146*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
147*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
148*9880d681SAndroid Build Coastguard Worker;
149*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v8i32_8i16:
150*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
157*9880d681SAndroid Build Coastguard Worker;
158*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v8i32_8i16:
159*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
160*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
161*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
162*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
163*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i32> %a0, %a1
165*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
166*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
170*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i64_v16i8:
171*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
172*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm0
173*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm1
174*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm2
175*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm3
176*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm4
177*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm5
178*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm6
179*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{[0-9]+}}(%rsp), %xmm7
180*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
181*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
182*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
183*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
186*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
190*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
191*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
192*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
193*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
194*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
195*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker;
198*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i64_v16i8:
199*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm8
201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm0
204*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm1, %xmm4
205*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
207*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm1, %xmm1
208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm6, %xmm2, %xmm5
209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm6, %xmm2, %xmm2
212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm7, %xmm3, %xmm6
213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm7, %xmm3, %xmm3
216*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
217*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
218*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm6, %xmm6
219*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm6, %xmm3
220*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
221*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm5, %xmm5
222*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm5, %xmm2
223*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
224*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm1, %xmm1
225*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm4, %xmm3
226*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
227*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm0, %xmm0
228*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm8, %xmm3
229*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm3, %xmm0
230*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
231*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
232*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
233*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
234*9880d681SAndroid Build Coastguard Worker;
235*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i64_v16i8:
236*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
237*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm5, %ymm1, %ymm1
238*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm4, %ymm0, %ymm0
239*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm7, %ymm3, %ymm3
240*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm6, %ymm2, %ymm2
241*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
242*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
243*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
244*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
245*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
246*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
247*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
251*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
252*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
255*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
256*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
257*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
258*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
259*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
262*9880d681SAndroid Build Coastguard Worker;
263*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v16i64_v16i8:
264*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
265*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm3, %zmm1, %zmm1
266*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm2, %zmm0, %zmm0
267*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
268*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
269*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
270*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
271*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
272*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i64> %a0, %a1
273*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
274*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
278*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i32_v16i8:
279*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
280*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm4, %xmm0
281*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm5, %xmm1
282*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm6, %xmm2
283*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd %xmm7, %xmm3
284*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
285*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
286*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
287*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
288*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
293*9880d681SAndroid Build Coastguard Worker;
294*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i32_v16i8:
295*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm4
297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm2, %xmm0, %xmm0
300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm2
301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm1, %xmm1
304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm4, %xmm2
310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
314*9880d681SAndroid Build Coastguard Worker;
315*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i32_v16i8:
316*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd %ymm2, %ymm0, %ymm0
318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd %ymm3, %ymm1, %ymm1
319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
330*9880d681SAndroid Build Coastguard Worker;
331*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_v16i32_v16i8:
332*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
335*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i32> %a0, %a1
337*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
338*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
342*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_v16i16_v16i8:
343*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddw %xmm2, %xmm0
345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddw %xmm3, %xmm1
346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
351*9880d681SAndroid Build Coastguard Worker;
352*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_v16i16_v16i8:
353*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
354*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm0, %xmm2
355*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
356*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
357*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm1, %xmm0, %xmm0
358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
364*9880d681SAndroid Build Coastguard Worker;
365*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_v16i16_v16i8:
366*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
367*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
374*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
375*9880d681SAndroid Build Coastguard Worker;
376*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_add_v16i16_v16i8:
377*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
378*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
379*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
380*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
381*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
382*9880d681SAndroid Build Coastguard Worker;
383*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_add_v16i16_v16i8:
384*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
385*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddw %ymm1, %ymm0, %ymm0
386*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
387*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
388*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
389*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i16> %a0, %a1
390*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
391*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Worker;
395*9880d681SAndroid Build Coastguard Worker; add to constant
396*9880d681SAndroid Build Coastguard Worker;
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_add_const_v4i64_4i32(<4 x i64> %a0) nounwind {
399*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v4i64_4i32:
400*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm0, %xmm2
405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm1
406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
410*9880d681SAndroid Build Coastguard Worker;
411*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v4i64_4i32:
412*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm1
415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7]
416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
424*9880d681SAndroid Build Coastguard Worker;
425*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v4i64_4i32:
426*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
433*9880d681SAndroid Build Coastguard Worker;
434*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v4i64_4i32:
435*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
436*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
437*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
438*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
439*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
440*9880d681SAndroid Build Coastguard Worker  %1 = add <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
441*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
442*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
443*9880d681SAndroid Build Coastguard Worker}
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
446*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i64_v16i16:
447*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
448*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
451*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
452*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm0
453*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm2
454*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm3
455*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm1
456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm1
466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm2
468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
469*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
470*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
471*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
472*9880d681SAndroid Build Coastguard Worker;
473*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i64_v16i16:
474*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm2
477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm0, %xmm2
479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm1, %xmm3
482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm1, %xmm1
484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7]
486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7]
487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm3, %xmm1
488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7]
489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7]
490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
494*9880d681SAndroid Build Coastguard Worker;
495*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i64_v16i16:
496*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm1, %ymm1
498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
509*9880d681SAndroid Build Coastguard Worker;
510*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i64_v16i16:
511*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
512*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq {{.*}}(%rip), %zmm0, %zmm0
513*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
514*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
515*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
516*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
517*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
518*9880d681SAndroid Build Coastguard Worker}
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_add_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
521*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i32_v16i16:
522*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm0
524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm1
525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
527*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
528*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
529*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
530*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
531*9880d681SAndroid Build Coastguard Worker;
532*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i32_v16i16:
533*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm0, %xmm1
535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm0, %xmm0
537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
543*9880d681SAndroid Build Coastguard Worker;
544*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i32_v16i16:
545*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd {{.*}}(%rip), %ymm0, %ymm0
547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
550*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
551*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
552*9880d681SAndroid Build Coastguard Worker;
553*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i32_v16i16:
554*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
555*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddd {{.*}}(%rip), %ymm0, %ymm0
556*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
557*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
558*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
559*9880d681SAndroid Build Coastguard Worker  %1 = add <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
560*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
561*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
562*9880d681SAndroid Build Coastguard Worker}
563*9880d681SAndroid Build Coastguard Worker
564*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
565*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i64_v16i8:
566*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm0
571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm1
572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm2
573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm3
574*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm4
575*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm5
576*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm6
577*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm7
578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
589*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
590*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
591*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
592*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
594*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
595*9880d681SAndroid Build Coastguard Worker;
596*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i64_v16i8:
597*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
598*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
599*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm4
600*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7]
601*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm8
602*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm1, %xmm5
605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm1, %xmm1
607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm2, %xmm6
608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm2, %xmm2
610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm3, %xmm7
611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm3, %xmm3
613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm7, %xmm7
616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm7, %xmm3
617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm6, %xmm6
619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm6, %xmm2
620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm3
623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm8, %xmm3
626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm3, %xmm0
627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
631*9880d681SAndroid Build Coastguard Worker;
632*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i64_v16i8:
633*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm1, %ymm1
635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm3, %ymm3
637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm2, %ymm2
638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
651*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
652*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
653*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
654*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
655*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
656*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
657*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
658*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
659*9880d681SAndroid Build Coastguard Worker;
660*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i64_v16i8:
661*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
662*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq {{.*}}(%rip), %zmm1, %zmm1
663*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq {{.*}}(%rip), %zmm0, %zmm0
664*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
665*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
666*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
667*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
668*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
669*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
670*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
671*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
672*9880d681SAndroid Build Coastguard Worker}
673*9880d681SAndroid Build Coastguard Worker
674*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
675*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i32_v16i8:
676*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm0
678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm1
679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm2
680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddd {{.*}}(%rip), %xmm3
681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
689*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
690*9880d681SAndroid Build Coastguard Worker;
691*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i32_v16i8:
692*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm0, %xmm2
694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm0, %xmm0
696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm1, %xmm3
697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd {{.*}}(%rip), %xmm1, %xmm1
699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
709*9880d681SAndroid Build Coastguard Worker;
710*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i32_v16i8:
711*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
712*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd {{.*}}(%rip), %ymm0, %ymm0
713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddd {{.*}}(%rip), %ymm1, %ymm1
714*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
715*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
716*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
717*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
718*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
719*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
720*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
721*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
722*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
725*9880d681SAndroid Build Coastguard Worker;
726*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_add_const_v16i32_v16i8:
727*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
728*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddd {{.*}}(%rip), %zmm0, %zmm0
729*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
730*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
731*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
732*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
733*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
734*9880d681SAndroid Build Coastguard Worker}
735*9880d681SAndroid Build Coastguard Worker
736*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_add_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
737*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_add_const_v16i16_v16i8:
738*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
739*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddw {{.*}}(%rip), %xmm0
740*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddw {{.*}}(%rip), %xmm1
741*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
742*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
743*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
744*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
745*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
746*9880d681SAndroid Build Coastguard Worker;
747*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_add_const_v16i16_v16i8:
748*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw {{.*}}(%rip), %xmm0, %xmm1
750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw {{.*}}(%rip), %xmm0, %xmm0
752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
758*9880d681SAndroid Build Coastguard Worker;
759*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_add_const_v16i16_v16i8:
760*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddw {{.*}}(%rip), %ymm0, %ymm0
762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
769*9880d681SAndroid Build Coastguard Worker;
770*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_add_const_v16i16_v16i8:
771*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
772*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpaddw {{.*}}(%rip), %ymm0, %ymm0
773*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
774*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
775*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
776*9880d681SAndroid Build Coastguard Worker;
777*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_add_const_v16i16_v16i8:
778*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
779*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpaddw {{.*}}(%rip), %ymm0, %ymm0
780*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
781*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
782*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
783*9880d681SAndroid Build Coastguard Worker  %1 = add <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
784*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
785*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
786*9880d681SAndroid Build Coastguard Worker}
787*9880d681SAndroid Build Coastguard Worker
788*9880d681SAndroid Build Coastguard Worker;
789*9880d681SAndroid Build Coastguard Worker; sub
790*9880d681SAndroid Build Coastguard Worker;
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_sub_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
793*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v4i64_4i32:
794*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
795*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm2, %xmm0
796*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm3, %xmm1
797*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
798*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
799*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
800*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
801*9880d681SAndroid Build Coastguard Worker;
802*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v4i64_4i32:
803*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
804*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm0, %xmm2
805*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
806*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
807*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm0, %xmm0
808*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
809*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
810*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
811*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
812*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
813*9880d681SAndroid Build Coastguard Worker;
814*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v4i64_4i32:
815*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
816*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm1, %ymm0, %ymm0
817*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
818*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
822*9880d681SAndroid Build Coastguard Worker;
823*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v4i64_4i32:
824*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %ymm1, %ymm0, %ymm0
826*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
827*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
828*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
829*9880d681SAndroid Build Coastguard Worker  %1 = sub <4 x i64> %a0, %a1
830*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
831*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
832*9880d681SAndroid Build Coastguard Worker}
833*9880d681SAndroid Build Coastguard Worker
834*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
835*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v8i64_8i16:
836*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm6, %xmm2
838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm4, %xmm0
839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm7, %xmm3
840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm5, %xmm1
841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
854*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
855*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
856*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
857*9880d681SAndroid Build Coastguard Worker;
858*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v8i64_8i16:
859*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm4
861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm1, %xmm2
865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
867*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm1, %xmm1
868*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
869*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
870*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
871*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm1
872*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
873*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7]
874*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
875*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
876*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
877*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
878*9880d681SAndroid Build Coastguard Worker;
879*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v8i64_8i16:
880*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
881*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm3, %ymm1, %ymm1
882*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
883*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
884*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
885*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
886*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
887*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
888*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
889*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
890*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
893*9880d681SAndroid Build Coastguard Worker;
894*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v8i64_8i16:
895*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
896*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %zmm1, %zmm0, %zmm0
897*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
898*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
899*9880d681SAndroid Build Coastguard Worker  %1 = sub <8 x i64> %a0, %a1
900*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
901*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
902*9880d681SAndroid Build Coastguard Worker}
903*9880d681SAndroid Build Coastguard Worker
904*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
905*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v8i32_8i16:
906*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
907*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm2, %xmm0
908*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm3, %xmm1
909*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
910*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
911*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
912*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
913*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
914*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
915*9880d681SAndroid Build Coastguard Worker;
916*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v8i32_8i16:
917*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
918*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm1, %xmm0, %xmm2
919*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
920*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
921*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm1, %xmm0, %xmm0
922*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
923*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
924*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
925*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
926*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
927*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
928*9880d681SAndroid Build Coastguard Worker;
929*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v8i32_8i16:
930*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm1, %ymm0, %ymm0
932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
937*9880d681SAndroid Build Coastguard Worker;
938*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v8i32_8i16:
939*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
940*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubd %ymm1, %ymm0, %ymm0
941*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
942*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
943*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
944*9880d681SAndroid Build Coastguard Worker  %1 = sub <8 x i32> %a0, %a1
945*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
946*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
947*9880d681SAndroid Build Coastguard Worker}
948*9880d681SAndroid Build Coastguard Worker
949*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
950*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i64_v16i8:
951*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
952*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm0
953*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm1
954*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm2
955*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm3
956*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm4
957*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm5
958*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm6
959*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{[0-9]+}}(%rsp), %xmm7
960*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
961*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
962*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
963*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
964*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
965*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
966*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
967*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
968*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
977*9880d681SAndroid Build Coastguard Worker;
978*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i64_v16i8:
979*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
980*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm4, %xmm0, %xmm8
981*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm4
982*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
983*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm4, %xmm0, %xmm0
984*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm5, %xmm1, %xmm4
985*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm5
986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm5, %xmm1, %xmm1
988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm6, %xmm2, %xmm5
989*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm6
990*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm6, %xmm2, %xmm2
992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm7, %xmm3, %xmm6
993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm7
994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm7, %xmm3, %xmm3
996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm7 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm3, %xmm3
998*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm6, %xmm6
999*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm6, %xmm3
1000*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
1001*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm5, %xmm5
1002*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm5, %xmm2
1003*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
1004*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm1, %xmm1
1005*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm4, %xmm3
1006*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
1007*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm0, %xmm0
1008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm7, %xmm8, %xmm3
1009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm3, %xmm0
1010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
1011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
1012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1014*9880d681SAndroid Build Coastguard Worker;
1015*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i64_v16i8:
1016*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1017*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm5, %ymm1, %ymm1
1018*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm4, %ymm0, %ymm0
1019*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm7, %ymm3, %ymm3
1020*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm6, %ymm2, %ymm2
1021*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
1022*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
1023*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
1024*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
1025*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
1026*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
1027*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
1028*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
1029*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1030*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
1031*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1032*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1033*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
1034*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
1035*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1036*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
1037*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
1039*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1040*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1041*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1042*9880d681SAndroid Build Coastguard Worker;
1043*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v16i64_v16i8:
1044*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1045*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %zmm3, %zmm1, %zmm1
1046*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq %zmm2, %zmm0, %zmm0
1047*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
1048*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
1049*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1050*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1051*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1052*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i64> %a0, %a1
1053*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
1054*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1055*9880d681SAndroid Build Coastguard Worker}
1056*9880d681SAndroid Build Coastguard Worker
1057*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
1058*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i32_v16i8:
1059*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1060*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm4, %xmm0
1061*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm5, %xmm1
1062*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm6, %xmm2
1063*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd %xmm7, %xmm3
1064*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1065*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
1066*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
1067*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
1068*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
1069*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
1070*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
1071*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
1072*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1073*9880d681SAndroid Build Coastguard Worker;
1074*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i32_v16i8:
1075*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm2, %xmm0, %xmm4
1077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm2, %xmm0, %xmm0
1080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm2
1081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm1, %xmm1
1084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
1086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
1087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
1088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
1089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm4, %xmm2
1090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
1091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
1092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1094*9880d681SAndroid Build Coastguard Worker;
1095*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i32_v16i8:
1096*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1097*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm2, %ymm0, %ymm0
1098*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm3, %ymm1, %ymm1
1099*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
1100*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
1101*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
1102*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1103*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
1104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
1105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1110*9880d681SAndroid Build Coastguard Worker;
1111*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_v16i32_v16i8:
1112*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1113*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubd %zmm1, %zmm0, %zmm0
1114*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1116*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i32> %a0, %a1
1117*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
1118*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1119*9880d681SAndroid Build Coastguard Worker}
1120*9880d681SAndroid Build Coastguard Worker
1121*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
1122*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_v16i16_v16i8:
1123*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1124*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubw %xmm2, %xmm0
1125*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubw %xmm3, %xmm1
1126*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
1127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
1128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
1129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
1130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1131*9880d681SAndroid Build Coastguard Worker;
1132*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_v16i16_v16i8:
1133*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1134*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm2
1135*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1136*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1137*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm0
1138*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1139*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1140*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
1141*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1142*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1143*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1144*9880d681SAndroid Build Coastguard Worker;
1145*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_v16i16_v16i8:
1146*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw %ymm1, %ymm0, %ymm0
1148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1155*9880d681SAndroid Build Coastguard Worker;
1156*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_sub_v16i16_v16i8:
1157*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
1158*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsubw %ymm1, %ymm0, %ymm0
1159*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
1160*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
1161*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
1162*9880d681SAndroid Build Coastguard Worker;
1163*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_sub_v16i16_v16i8:
1164*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
1165*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsubw %ymm1, %ymm0, %ymm0
1166*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
1167*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1168*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
1169*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i16> %a0, %a1
1170*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
1171*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1172*9880d681SAndroid Build Coastguard Worker}
1173*9880d681SAndroid Build Coastguard Worker
1174*9880d681SAndroid Build Coastguard Worker;
1175*9880d681SAndroid Build Coastguard Worker; sub to constant
1176*9880d681SAndroid Build Coastguard Worker;
1177*9880d681SAndroid Build Coastguard Worker
1178*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_sub_const_v4i64_4i32(<4 x i64> %a0) nounwind {
1179*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v4i64_4i32:
1180*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1181*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
1182*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
1183*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
1184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm2, %xmm0
1185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm1
1186*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1187*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1188*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1189*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1190*9880d681SAndroid Build Coastguard Worker;
1191*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v4i64_4i32:
1192*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
1194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm1
1195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7]
1196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm0, %xmm1
1197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm0, %xmm0
1199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
1201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1204*9880d681SAndroid Build Coastguard Worker;
1205*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v4i64_4i32:
1206*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm0, %ymm0
1208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1213*9880d681SAndroid Build Coastguard Worker;
1214*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v4i64_4i32:
1215*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq {{.*}}(%rip), %ymm0, %ymm0
1217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
1218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1220*9880d681SAndroid Build Coastguard Worker  %1 = sub <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
1221*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
1222*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
1223*9880d681SAndroid Build Coastguard Worker}
1224*9880d681SAndroid Build Coastguard Worker
1225*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
1226*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i64_v16i16:
1227*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
1229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm4
1230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7]
1231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm4, %xmm0
1232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm2
1233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm3
1234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm1
1235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
1236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
1237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
1238*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1239*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
1241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
1242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
1243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
1244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm1
1245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
1246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm2
1247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
1248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
1249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1251*9880d681SAndroid Build Coastguard Worker;
1252*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i64_v16i16:
1253*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
1255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm2
1256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
1257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm2
1258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm0, %xmm0
1260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm3
1261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm1
1263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
1264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7]
1265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7]
1266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm3, %xmm1
1267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7]
1268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7]
1269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
1270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
1271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1273*9880d681SAndroid Build Coastguard Worker;
1274*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i64_v16i16:
1275*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm1, %ymm1
1277*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm0, %ymm0
1278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1280*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
1281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
1282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
1284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1288*9880d681SAndroid Build Coastguard Worker;
1289*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i64_v16i16:
1290*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1291*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq {{.*}}(%rip), %zmm0, %zmm0
1292*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
1293*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1294*9880d681SAndroid Build Coastguard Worker  %1 = sub <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
1295*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
1296*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
1297*9880d681SAndroid Build Coastguard Worker}
1298*9880d681SAndroid Build Coastguard Worker
1299*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_sub_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
1300*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i32_v16i16:
1301*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1302*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm0
1303*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm1
1304*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
1305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
1306*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
1307*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
1308*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
1309*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1310*9880d681SAndroid Build Coastguard Worker;
1311*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i32_v16i16:
1312*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm0, %xmm1
1314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1315*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm0, %xmm0
1316*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
1317*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1318*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1319*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1320*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1321*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1322*9880d681SAndroid Build Coastguard Worker;
1323*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i32_v16i16:
1324*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd {{.*}}(%rip), %ymm0, %ymm0
1326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
1327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1331*9880d681SAndroid Build Coastguard Worker;
1332*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i32_v16i16:
1333*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubd {{.*}}(%rip), %ymm0, %ymm0
1335*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
1336*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1337*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1338*9880d681SAndroid Build Coastguard Worker  %1 = sub <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1339*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
1340*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
1341*9880d681SAndroid Build Coastguard Worker}
1342*9880d681SAndroid Build Coastguard Worker
1343*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
1344*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i64_v16i8:
1345*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
1347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
1348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
1349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq %xmm8, %xmm0
1350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm1
1351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm2
1352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm3
1353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm4
1354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm5
1355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm6
1356*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubq {{.*}}(%rip), %xmm7
1357*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
1359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
1360*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
1361*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
1362*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
1363*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
1364*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
1365*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
1366*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
1367*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
1368*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
1369*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
1370*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
1371*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
1372*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
1373*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1374*9880d681SAndroid Build Coastguard Worker;
1375*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i64_v16i8:
1376*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
1378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm4
1379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7]
1380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm4, %xmm0, %xmm8
1381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm0, %xmm0
1383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm5
1384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm1, %xmm1
1386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm2, %xmm6
1387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm2, %xmm2
1389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm3, %xmm7
1390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq {{.*}}(%rip), %xmm3, %xmm3
1392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
1394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm7, %xmm7
1395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm7, %xmm3
1396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
1397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm6, %xmm6
1398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm6, %xmm2
1399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
1400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
1401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm3
1402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
1403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
1404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm8, %xmm3
1405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm3, %xmm0
1406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
1407*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
1408*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1409*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1410*9880d681SAndroid Build Coastguard Worker;
1411*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i64_v16i8:
1412*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm1, %ymm1
1414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm0, %ymm0
1415*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm3, %ymm3
1416*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq {{.*}}(%rip), %ymm2, %ymm2
1417*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
1418*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
1419*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
1420*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
1421*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
1422*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
1423*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
1424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
1425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
1427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
1430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
1431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1432*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
1433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
1435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1438*9880d681SAndroid Build Coastguard Worker;
1439*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i64_v16i8:
1440*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1441*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq {{.*}}(%rip), %zmm1, %zmm1
1442*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubq {{.*}}(%rip), %zmm0, %zmm0
1443*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
1444*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
1445*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
1446*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1447*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1448*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
1449*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
1450*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1451*9880d681SAndroid Build Coastguard Worker}
1452*9880d681SAndroid Build Coastguard Worker
1453*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
1454*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i32_v16i8:
1455*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm0
1457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm1
1458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm2
1459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubd {{.*}}(%rip), %xmm3
1460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
1462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
1463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
1464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
1465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
1466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
1467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
1468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1469*9880d681SAndroid Build Coastguard Worker;
1470*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i32_v16i8:
1471*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm0, %xmm2
1473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm0, %xmm0
1475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm1, %xmm3
1476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd {{.*}}(%rip), %xmm1, %xmm1
1478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
1480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
1481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
1482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
1483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
1484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
1485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
1486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1488*9880d681SAndroid Build Coastguard Worker;
1489*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i32_v16i8:
1490*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1491*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd {{.*}}(%rip), %ymm0, %ymm0
1492*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd {{.*}}(%rip), %ymm1, %ymm1
1493*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
1494*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
1495*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
1496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
1498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
1499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1504*9880d681SAndroid Build Coastguard Worker;
1505*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_sub_const_v16i32_v16i8:
1506*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1507*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsubd {{.*}}(%rip), %zmm0, %zmm0
1508*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
1509*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1510*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1511*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
1512*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1513*9880d681SAndroid Build Coastguard Worker}
1514*9880d681SAndroid Build Coastguard Worker
1515*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_sub_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
1516*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_sub_const_v16i16_v16i8:
1517*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubw {{.*}}(%rip), %xmm0
1519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psubw {{.*}}(%rip), %xmm1
1520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
1521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
1522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
1523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
1524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1525*9880d681SAndroid Build Coastguard Worker;
1526*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_sub_const_v16i16_v16i8:
1527*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm1
1529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw {{.*}}(%rip), %xmm0, %xmm0
1531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1537*9880d681SAndroid Build Coastguard Worker;
1538*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_sub_const_v16i16_v16i8:
1539*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
1541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1548*9880d681SAndroid Build Coastguard Worker;
1549*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_sub_const_v16i16_v16i8:
1550*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
1551*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
1552*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
1553*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
1554*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
1555*9880d681SAndroid Build Coastguard Worker;
1556*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_sub_const_v16i16_v16i8:
1557*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
1558*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
1559*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
1560*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1561*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
1562*9880d681SAndroid Build Coastguard Worker  %1 = sub <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
1563*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
1564*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
1565*9880d681SAndroid Build Coastguard Worker}
1566*9880d681SAndroid Build Coastguard Worker
1567*9880d681SAndroid Build Coastguard Worker;
1568*9880d681SAndroid Build Coastguard Worker; mul
1569*9880d681SAndroid Build Coastguard Worker;
1570*9880d681SAndroid Build Coastguard Worker
1571*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_mul_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
1572*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v4i64_4i32:
1573*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1574*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
1575*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm4
1576*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm5
1577*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm5
1578*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm0, %xmm5
1579*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm5
1580*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm5
1581*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
1582*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm0
1583*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
1584*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm0
1585*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm2
1586*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm2
1587*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
1588*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm4
1589*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm1, %xmm4
1590*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm4
1591*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm2, %xmm4
1592*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
1593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm1
1594*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
1595*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm1
1596*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1597*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1598*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1599*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1600*9880d681SAndroid Build Coastguard Worker;
1601*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v4i64_4i32:
1602*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1603*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm2
1604*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm3
1605*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm0, %xmm3
1606*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm3
1607*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
1608*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm3
1609*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm3, %xmm3
1610*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm3
1611*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
1612*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1613*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1614*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm3
1615*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm4
1616*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm0, %xmm4
1617*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
1618*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm3, %xmm3
1619*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
1620*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0
1621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
1622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm3, %xmm0
1623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
1624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
1625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1628*9880d681SAndroid Build Coastguard Worker;
1629*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v4i64_4i32:
1630*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1631*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
1632*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm3
1633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm3, %ymm0, %ymm3
1634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm3, %ymm3
1635*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
1636*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
1637*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
1638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
1639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
1640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1645*9880d681SAndroid Build Coastguard Worker;
1646*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v4i64_4i32:
1647*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1648*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
1649*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %ymm1, %ymm3
1650*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm3, %ymm0, %ymm3
1651*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %ymm3, %ymm3
1652*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
1653*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %ymm0, %ymm0
1654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
1655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %ymm0, %ymm0
1656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
1657*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
1658*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1659*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1660*9880d681SAndroid Build Coastguard Worker  %1 = mul <4 x i64> %a0, %a1
1661*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
1662*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
1663*9880d681SAndroid Build Coastguard Worker}
1664*9880d681SAndroid Build Coastguard Worker
1665*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
1666*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v8i64_8i16:
1667*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm8
1669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm6, %xmm8
1670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm6, %xmm9
1671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm9
1672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm9
1673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm9
1674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm9
1675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm2
1676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm6, %xmm2
1677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm2
1678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm2
1679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm8
1680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm8
1681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm4, %xmm6
1682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm6
1683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm0, %xmm6
1684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm6
1685*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm6
1686*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
1687*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm0
1688*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
1689*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm6, %xmm0
1690*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
1691*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm7, %xmm4
1692*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm7, %xmm6
1693*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm6
1694*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm6
1695*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm6
1696*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm6
1697*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm3
1698*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm7, %xmm3
1699*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm3
1700*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm6, %xmm3
1701*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm4
1702*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm4
1703*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm5, %xmm6
1704*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm6
1705*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm1, %xmm6
1706*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm6
1707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm6
1708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
1709*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm1
1710*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
1711*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm6, %xmm1
1712*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
1713*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
1714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
1715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
1717*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
1718*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
1719*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
1720*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
1721*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
1722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
1723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
1724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
1725*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
1726*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1727*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1728*9880d681SAndroid Build Coastguard Worker;
1729*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v8i64_8i16:
1730*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm4
1732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm5
1733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm0, %xmm5
1734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
1735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm4, %xmm4
1736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm5
1737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm5, %xmm5
1738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
1739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm4, %xmm4
1740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
1741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm5
1743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm6
1744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm0, %xmm6
1745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm6, %xmm6
1746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm6, %xmm5, %xmm5
1747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
1748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm0
1749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
1750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm5, %xmm0
1751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm1, %xmm2
1752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm5
1753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm1, %xmm5
1754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
1755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm2, %xmm2
1756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm5
1757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm5, %xmm5
1758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
1759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm2, %xmm2
1760*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
1761*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1762*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm1, %xmm5
1763*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm6
1764*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm1, %xmm6
1765*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm6, %xmm6
1766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm6, %xmm5, %xmm5
1767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm1
1768*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm1, %xmm1
1769*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm1
1770*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm5, %xmm1
1771*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1772*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
1773*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
1774*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm2, %xmm1
1775*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
1776*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0],xmm3[1,2,3],xmm4[4],xmm3[5,6,7]
1777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
1778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
1779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1781*9880d681SAndroid Build Coastguard Worker;
1782*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v8i64_8i16:
1783*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm3, %ymm1, %ymm4
1785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm3, %ymm5
1786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm5, %ymm1, %ymm5
1787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm5, %ymm5
1788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm5, %ymm4, %ymm4
1789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm1
1790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm3, %ymm1, %ymm1
1791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm1, %ymm1
1792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm1, %ymm4, %ymm1
1793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm0, %ymm3
1794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm2, %ymm4
1795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm0, %ymm4
1796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm4, %ymm4
1797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm4, %ymm3, %ymm3
1798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
1799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm0, %ymm0
1800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
1801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm3, %ymm0
1802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
1803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
1804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
1805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
1806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
1808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1812*9880d681SAndroid Build Coastguard Worker;
1813*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v8i64_8i16:
1814*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm1, %zmm0, %zmm2
1816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm1, %zmm3
1817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm3, %zmm0, %zmm3
1818*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm3, %zmm3
1819*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm3, %zmm2, %zmm2
1820*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm0, %zmm0
1821*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm1, %zmm0, %zmm0
1822*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm0, %zmm0
1823*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm0, %zmm2, %zmm0
1824*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
1825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1826*9880d681SAndroid Build Coastguard Worker  %1 = mul <8 x i64> %a0, %a1
1827*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
1828*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
1829*9880d681SAndroid Build Coastguard Worker}
1830*9880d681SAndroid Build Coastguard Worker
1831*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
1832*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v8i32_8i16:
1833*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1834*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
1835*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm0
1836*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
1837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm2
1839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
1840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,1,3,3]
1842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm1
1843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
1844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
1845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm3
1846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[0,2,2,3]
1847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
1849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
1850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
1851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
1852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
1853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
1854*9880d681SAndroid Build Coastguard Worker;
1855*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v8i32_8i16:
1856*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
1857*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm2
1858*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
1859*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1860*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm1, %xmm0, %xmm0
1861*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
1862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
1864*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
1865*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
1866*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
1867*9880d681SAndroid Build Coastguard Worker;
1868*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v8i32_8i16:
1869*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
1870*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld %ymm1, %ymm0, %ymm0
1871*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
1872*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1873*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1874*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1875*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
1876*9880d681SAndroid Build Coastguard Worker;
1877*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v8i32_8i16:
1878*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
1879*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmulld %ymm1, %ymm0, %ymm0
1880*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
1881*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1882*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
1883*9880d681SAndroid Build Coastguard Worker  %1 = mul <8 x i32> %a0, %a1
1884*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
1885*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
1886*9880d681SAndroid Build Coastguard Worker}
1887*9880d681SAndroid Build Coastguard Worker
1888*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
1889*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i64_v16i8:
1890*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
1891*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1892*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm9
1893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
1894*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm8, %xmm10
1895*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1896*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm0, %xmm10
1897*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1898*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm9
1899*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm10
1900*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
1901*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm0
1902*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
1903*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm0
1904*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm8
1905*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm10, %xmm8
1906*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm10, %xmm9
1907*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm9
1908*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm1, %xmm9
1909*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm9
1910*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm9
1911*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1912*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
1913*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm10, %xmm1
1914*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
1915*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm1
1916*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm9
1917*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
1918*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm8, %xmm10
1919*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1920*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm10
1921*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1922*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm10
1923*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1924*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm2
1925*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm2
1926*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm2
1927*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm2
1928*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm8
1929*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm8
1930*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm9, %xmm10
1931*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1932*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm10
1933*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1934*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm10
1935*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1936*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm3
1937*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm3
1938*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm3
1939*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm3
1940*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm4, %xmm9
1941*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
1942*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm8, %xmm10
1943*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1944*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm10
1945*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1946*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm10
1947*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1948*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm4
1949*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm4
1950*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm4
1951*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm4
1952*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm5, %xmm8
1953*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm8
1954*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm9, %xmm10
1955*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1956*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm10
1957*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1958*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm10
1959*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm8
1960*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm5
1961*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm5
1962*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm5
1963*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm5
1964*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm6, %xmm9
1965*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
1966*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm8, %xmm10
1967*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1968*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm6, %xmm10
1969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm10
1971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{[0-9]+}}(%rsp), %xmm9
1972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm6
1973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm6
1974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm6
1975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm6
1976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm7, %xmm8
1977*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm8
1978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm9, %xmm10
1979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm10
1980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm7, %xmm10
1981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm10
1982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm8, %xmm10
1983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm7
1984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm9, %xmm7
1985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm7
1986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm10, %xmm7
1987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
1988*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
1989*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
1990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
1991*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
1992*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
1993*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
1994*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
1995*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
1996*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
1997*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
1998*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
1999*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
2000*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2001*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
2002*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
2003*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2004*9880d681SAndroid Build Coastguard Worker;
2005*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i64_v16i8:
2006*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2007*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm0, %xmm8
2008*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm4, %xmm9
2009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm9, %xmm0, %xmm9
2010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm9, %xmm9
2011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm9, %xmm8, %xmm8
2012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm9
2013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm9, %xmm9
2014*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm9, %xmm9
2015*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm9, %xmm8, %xmm8
2016*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm4, %xmm10
2017*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2018*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm10, %xmm0, %xmm9
2019*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm10, %xmm4
2020*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm0, %xmm4
2021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm9, %xmm4
2023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
2024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm10, %xmm0, %xmm0
2025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm9
2027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm1, %xmm4
2028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm5, %xmm0
2029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
2030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm0
2032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm4
2033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm4, %xmm4
2034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2035*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm10
2036*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm5, %xmm0
2037*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2038*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm0, %xmm1, %xmm5
2039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm4
2040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm1, %xmm4
2041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm5, %xmm4
2043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm1
2044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm0, %xmm1, %xmm0
2045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm1
2047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm2, %xmm0
2048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm6, %xmm4
2049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm2, %xmm4
2050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm0
2052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm4
2053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm4, %xmm4
2054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm5
2056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm6, %xmm0
2057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
2058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm0, %xmm2, %xmm4
2059*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm6
2060*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm2, %xmm6
2061*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm6, %xmm6
2062*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm6, %xmm4, %xmm4
2063*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm2
2064*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm0, %xmm2, %xmm0
2065*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2066*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm0
2067*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm7, %xmm3, %xmm2
2068*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm7, %xmm4
2069*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm3, %xmm4
2070*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2071*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm2, %xmm2
2072*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm4
2073*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm7, %xmm4, %xmm4
2074*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2075*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm2, %xmm2
2076*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm7, %xmm4
2077*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
2078*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm3, %xmm6
2079*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm4, %xmm7
2080*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm7, %xmm3, %xmm7
2081*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm7, %xmm7
2082*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm7, %xmm6, %xmm6
2083*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm3
2084*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm3, %xmm3
2085*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm3
2086*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm6, %xmm3
2087*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2088*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
2089*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
2090*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
2091*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
2092*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm3
2093*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm3, %xmm0
2094*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
2095*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
2096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm10, %xmm2
2097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
2098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm9, %xmm2
2099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm8, %xmm3
2100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm3, %xmm2
2101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
2102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm0
2103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2105*9880d681SAndroid Build Coastguard Worker;
2106*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i64_v16i8:
2107*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm5, %ymm1, %ymm8
2109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm5, %ymm9
2110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm9, %ymm1, %ymm9
2111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm9, %ymm9
2112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm9, %ymm8, %ymm8
2113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm1
2114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm5, %ymm1, %ymm1
2115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm1, %ymm1
2116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm1, %ymm8, %ymm1
2117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm0, %ymm5
2118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm4, %ymm8
2119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm8, %ymm0, %ymm8
2120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm8, %ymm8
2121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm8, %ymm5, %ymm5
2122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
2123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm0, %ymm0
2124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
2125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm5, %ymm0
2126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm7, %ymm3, %ymm4
2127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm7, %ymm5
2128*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm5, %ymm3, %ymm5
2129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm5, %ymm5
2130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm5, %ymm4, %ymm4
2131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm3, %ymm3
2132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm7, %ymm3, %ymm3
2133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm3, %ymm3
2134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm3, %ymm4, %ymm3
2135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm6, %ymm2, %ymm4
2136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm6, %ymm5
2137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm5, %ymm2, %ymm5
2138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm5, %ymm5
2139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm5, %ymm4, %ymm4
2140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm2, %ymm2
2141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm6, %ymm2, %ymm2
2142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm2, %ymm2
2143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm4, %ymm2
2144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
2145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
2146*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
2147*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
2148*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
2149*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2150*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
2151*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
2152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
2154*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
2155*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
2156*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
2157*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
2158*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2159*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
2160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
2163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2165*9880d681SAndroid Build Coastguard Worker;
2166*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v16i64_v16i8:
2167*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2168*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm3, %zmm1, %zmm4
2169*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm3, %zmm5
2170*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm5, %zmm1, %zmm5
2171*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm5, %zmm5
2172*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm5, %zmm4, %zmm4
2173*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm1, %zmm1
2174*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm3, %zmm1, %zmm1
2175*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm1, %zmm1
2176*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm1, %zmm4, %zmm1
2177*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm0, %zmm3
2178*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm2, %zmm4
2179*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm4, %zmm0, %zmm4
2180*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm4, %zmm4
2181*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm4, %zmm3, %zmm3
2182*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm0, %zmm0
2183*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm0, %zmm0
2184*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm0, %zmm0
2185*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm0, %zmm3, %zmm0
2186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2189*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2190*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2191*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i64> %a0, %a1
2192*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
2193*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2194*9880d681SAndroid Build Coastguard Worker}
2195*9880d681SAndroid Build Coastguard Worker
2196*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
2197*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i32_v16i8:
2198*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm8 = xmm0[1,1,3,3]
2200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm0
2201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm4
2204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
2206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[1,1,3,3]
2207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm1
2208*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2209*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
2210*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2211*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3]
2212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
2213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[1,1,3,3]
2214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm6, %xmm2
2215*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2216*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
2217*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2218*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3]
2219*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
2220*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
2221*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm7, %xmm3
2222*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
2224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[0,2,2,3]
2226*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
2227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
2229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
2230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
2231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
2232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
2233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
2235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2236*9880d681SAndroid Build Coastguard Worker;
2237*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i32_v16i8:
2238*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2239*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm4
2240*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
2241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm2, %xmm0, %xmm0
2243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm3, %xmm1, %xmm2
2244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
2245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld %xmm3, %xmm1, %xmm1
2247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
2249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
2250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
2251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
2252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm4, %xmm2
2253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
2254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2257*9880d681SAndroid Build Coastguard Worker;
2258*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i32_v16i8:
2259*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2260*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld %ymm2, %ymm0, %ymm0
2261*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld %ymm3, %ymm1, %ymm1
2262*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2263*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
2264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
2265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
2267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
2268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2269*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
2270*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2271*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2272*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2273*9880d681SAndroid Build Coastguard Worker;
2274*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_v16i32_v16i8:
2275*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2276*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmulld %zmm1, %zmm0, %zmm0
2277*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2278*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2279*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i32> %a0, %a1
2280*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
2281*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2282*9880d681SAndroid Build Coastguard Worker}
2283*9880d681SAndroid Build Coastguard Worker
2284*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
2285*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_v16i16_v16i8:
2286*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2287*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmullw %xmm2, %xmm0
2288*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmullw %xmm3, %xmm1
2289*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
2290*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
2291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
2292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2294*9880d681SAndroid Build Coastguard Worker;
2295*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_v16i16_v16i8:
2296*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm2
2298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmullw %xmm1, %xmm0, %xmm0
2301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
2303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm1
2304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
2305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2307*9880d681SAndroid Build Coastguard Worker;
2308*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_v16i16_v16i8:
2309*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmullw %ymm1, %ymm0, %ymm0
2311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2318*9880d681SAndroid Build Coastguard Worker;
2319*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_mul_v16i16_v16i8:
2320*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
2321*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmullw %ymm1, %ymm0, %ymm0
2322*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
2323*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2324*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
2325*9880d681SAndroid Build Coastguard Worker;
2326*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_mul_v16i16_v16i8:
2327*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
2328*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmullw %ymm1, %ymm0, %ymm0
2329*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
2330*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2331*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
2332*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i16> %a0, %a1
2333*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
2334*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2335*9880d681SAndroid Build Coastguard Worker}
2336*9880d681SAndroid Build Coastguard Worker
2337*9880d681SAndroid Build Coastguard Worker;
2338*9880d681SAndroid Build Coastguard Worker; mul to constant
2339*9880d681SAndroid Build Coastguard Worker;
2340*9880d681SAndroid Build Coastguard Worker
2341*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_mul_const_v4i64_4i32(<4 x i64> %a0) nounwind {
2342*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v4i64_4i32:
2343*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
2345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
2346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
2347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm3
2348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm3
2349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
2350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm0
2351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
2352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm3, %xmm0
2353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2,3]
2354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm3
2355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm3
2356*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
2357*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm1
2358*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
2359*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm3, %xmm1
2360*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2361*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2362*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2363*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2364*9880d681SAndroid Build Coastguard Worker;
2365*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v4i64_4i32:
2366*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
2368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm1
2369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6,7]
2370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm2
2371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm3
2372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm3, %xmm1
2373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm1
2374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm2, %xmm1
2375*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2376*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2,3]
2377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm3
2378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
2379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm0
2380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm3, %xmm0
2382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,1,0,2]
2383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
2385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2387*9880d681SAndroid Build Coastguard Worker;
2388*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v4i64_4i32:
2389*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2390*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3]
2391*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
2392*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
2393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
2394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
2395*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
2396*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
2397*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
2398*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2401*9880d681SAndroid Build Coastguard Worker;
2402*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v4i64_4i32:
2403*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2404*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3]
2405*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
2406*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %ymm0, %ymm0
2407*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
2408*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %ymm0, %ymm0
2409*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
2410*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2411*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2412*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2413*9880d681SAndroid Build Coastguard Worker  %1 = mul <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
2414*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
2415*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
2416*9880d681SAndroid Build Coastguard Worker}
2417*9880d681SAndroid Build Coastguard Worker
2418*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
2419*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i64_v16i16:
2420*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2421*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [4,5]
2422*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm5
2423*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2424*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm2
2425*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm2
2426*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm2
2427*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm2
2428*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
2429*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm4
2430*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7]
2431*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm5
2432*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2433*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
2434*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm0
2435*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
2436*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm0
2437*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [6,7]
2438*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm5
2439*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2440*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm3
2441*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm3
2442*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm3
2443*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm3
2444*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2,3]
2445*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm5
2446*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm5
2447*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
2448*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm1
2449*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
2450*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm1
2451*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
2452*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
2453*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
2454*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
2455*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2456*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
2457*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
2458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
2459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
2460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
2461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
2462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
2463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
2464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
2465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
2466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2467*9880d681SAndroid Build Coastguard Worker;
2468*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i64_v16i16:
2469*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
2471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm2
2472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
2473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm0, %xmm3
2474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm4
2475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm2, %xmm4, %xmm2
2476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm2, %xmm2
2477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm3, %xmm2
2478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2,3]
2480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm0, %xmm4
2481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
2482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm0, %xmm0
2483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm0
2485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [4,5]
2486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm1, %xmm4
2487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm5
2488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm5, %xmm3
2489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm3
2490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm4, %xmm3
2491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2492*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [6,7]
2493*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm1, %xmm5
2494*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm1
2495*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm1, %xmm1
2496*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm1
2497*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm5, %xmm1
2498*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2499*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm4[1,2,3],xmm1[4],xmm4[5,6,7]
2500*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0],xmm4[1,2,3],xmm3[4],xmm4[5,6,7]
2501*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm3, %xmm1
2502*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm4[1,2,3],xmm0[4],xmm4[5,6,7]
2503*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm4[1,2,3],xmm2[4],xmm4[5,6,7]
2504*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm0, %xmm2, %xmm0
2505*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
2506*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2507*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2508*9880d681SAndroid Build Coastguard Worker;
2509*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i64_v16i16:
2510*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2511*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [4,5,6,7]
2512*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm1, %ymm3
2513*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm1
2514*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm1, %ymm1
2515*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm1, %ymm1
2516*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm1, %ymm3, %ymm1
2517*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3]
2518*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm0, %ymm3
2519*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
2520*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm2, %ymm0, %ymm0
2521*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
2522*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm3, %ymm0
2523*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
2524*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
2525*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
2526*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
2527*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2528*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
2529*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2530*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2533*9880d681SAndroid Build Coastguard Worker;
2534*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i64_v16i16:
2535*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2536*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa32 {{.*#+}} zmm1 = [0,1,2,3,4,5,6,7]
2537*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm1, %zmm0, %zmm2
2538*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm0, %zmm0
2539*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm1, %zmm0, %zmm0
2540*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm0, %zmm0
2541*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm0, %zmm2, %zmm0
2542*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
2543*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2544*9880d681SAndroid Build Coastguard Worker  %1 = mul <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
2545*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
2546*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
2547*9880d681SAndroid Build Coastguard Worker}
2548*9880d681SAndroid Build Coastguard Worker
2549*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_mul_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
2550*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i32_v16i16:
2551*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2552*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,2,3]
2553*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
2554*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm0
2555*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2556*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2557*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm2
2558*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2559*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
2560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [4,5,6,7]
2561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,3,3]
2562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm1
2563*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
2565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm2
2566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
2568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
2569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
2570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
2571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
2572*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
2573*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2574*9880d681SAndroid Build Coastguard Worker;
2575*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i32_v16i16:
2576*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm1
2578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm0
2580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
2581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2583*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
2584*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2585*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2586*9880d681SAndroid Build Coastguard Worker;
2587*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i32_v16i16:
2588*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld {{.*}}(%rip), %ymm0, %ymm0
2590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
2591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2595*9880d681SAndroid Build Coastguard Worker;
2596*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i32_v16i16:
2597*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmulld {{.*}}(%rip), %ymm0, %ymm0
2599*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
2600*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2601*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2602*9880d681SAndroid Build Coastguard Worker  %1 = mul <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
2603*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
2604*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
2605*9880d681SAndroid Build Coastguard Worker}
2606*9880d681SAndroid Build Coastguard Worker
2607*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
2608*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i64_v16i8:
2609*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
2611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
2612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
2613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm9
2614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
2616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm0
2617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
2618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm0
2619*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [2,3]
2620*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm9
2621*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2622*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm1
2623*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm1
2624*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm1
2625*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm1
2626*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [4,5]
2627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm9
2628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm2
2630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm2
2631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm2
2632*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm2
2633*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [6,7]
2634*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm9
2635*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2636*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm3
2637*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm3
2638*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm3
2639*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm3
2640*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [8,9]
2641*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm4, %xmm9
2642*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2643*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm4
2644*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm4
2645*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm4
2646*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm4
2647*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [10,11]
2648*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm5, %xmm9
2649*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2650*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm5
2651*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm5
2652*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm5
2653*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm5
2654*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [12,13]
2655*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm6, %xmm9
2656*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2657*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm6
2658*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm6
2659*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm6
2660*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm6
2661*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [14,15]
2662*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm7, %xmm9
2663*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm9
2664*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm7
2665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm8, %xmm7
2666*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm7
2667*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm9, %xmm7
2668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
2670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
2671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
2672*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
2673*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
2674*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
2675*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
2676*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
2677*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
2678*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
2679*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
2680*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
2681*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2682*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
2683*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
2684*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2685*9880d681SAndroid Build Coastguard Worker;
2686*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i64_v16i8:
2687*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2688*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    movl $1, %eax
2689*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovq %rax, %xmm4
2690*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6,7]
2691*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm0, %xmm5
2692*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm6
2693*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm6, %xmm4
2694*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2695*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm5, %xmm8
2696*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2697*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [2,3]
2698*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm0, %xmm6
2699*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
2700*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm0, %xmm0
2701*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2702*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm6, %xmm9
2703*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [4,5]
2704*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm1, %xmm6
2705*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm7
2706*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm7, %xmm5
2707*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
2708*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm6, %xmm5
2709*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2710*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [6,7]
2711*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm1, %xmm7
2712*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm1
2713*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm1, %xmm1
2714*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm1, %xmm1
2715*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm1, %xmm7, %xmm1
2716*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [8,9]
2717*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm2, %xmm7
2718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm4
2719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm4, %xmm4
2720*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
2721*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm7, %xmm4
2722*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm2
2723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [10,11]
2724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm2, %xmm7
2725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm2
2726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm2, %xmm2
2727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm2, %xmm2
2728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm7, %xmm2
2729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [12,13]
2730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm3, %xmm7
2731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm0
2732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm0, %xmm0
2733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
2734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm7, %xmm0
2735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm3
2736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [14,15]
2737*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm3, %xmm7
2738*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm3
2739*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm6, %xmm3, %xmm3
2740*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm3, %xmm3
2741*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm7, %xmm3
2742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm3, %xmm3
2744*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm0, %xmm0
2745*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
2746*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm2, %xmm2
2747*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm4, %xmm3
2748*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm3, %xmm2
2749*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
2750*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm1, %xmm1
2751*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm5, %xmm2
2752*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
2753*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm9, %xmm2
2754*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm6, %xmm8, %xmm3
2755*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm3, %xmm2
2756*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm2, %xmm1
2757*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm1, %xmm0
2758*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2759*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2760*9880d681SAndroid Build Coastguard Worker;
2761*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i64_v16i8:
2762*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2763*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [4,5,6,7]
2764*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm1, %ymm5
2765*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm1
2766*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm1, %ymm1
2767*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm1, %ymm1
2768*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm1, %ymm5, %ymm1
2769*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,2,3]
2770*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm0, %ymm5
2771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
2772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm0, %ymm0
2773*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
2774*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm5, %ymm0
2775*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [12,13,14,15]
2776*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm3, %ymm5
2777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm3, %ymm3
2778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm3, %ymm3
2779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm3, %ymm3
2780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm3, %ymm5, %ymm3
2781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [8,9,10,11]
2782*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm2, %ymm5
2783*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm2, %ymm2
2784*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm4, %ymm2, %ymm2
2785*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm2, %ymm2
2786*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm5, %ymm2
2787*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
2788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
2789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
2790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
2791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
2792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
2794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
2795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
2797*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
2798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
2799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
2800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
2801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
2802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
2803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
2805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
2806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2808*9880d681SAndroid Build Coastguard Worker;
2809*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i64_v16i8:
2810*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2811*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa32 {{.*#+}} zmm2 = [8,9,10,11,12,13,14,15]
2812*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm1, %zmm3
2813*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm1, %zmm1
2814*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm1, %zmm1
2815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm1, %zmm1
2816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm1, %zmm3, %zmm1
2817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vmovdqa32 {{.*#+}} zmm2 = [0,1,2,3,4,5,6,7]
2818*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm0, %zmm3
2819*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %zmm0, %zmm0
2820*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %zmm2, %zmm0, %zmm0
2821*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %zmm0, %zmm0
2822*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %zmm0, %zmm3, %zmm0
2823*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
2824*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
2825*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
2826*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2827*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2828*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
2829*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
2830*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2831*9880d681SAndroid Build Coastguard Worker}
2832*9880d681SAndroid Build Coastguard Worker
2833*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
2834*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i32_v16i8:
2835*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2836*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [0,1,2,3]
2837*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
2838*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm0
2839*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2840*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2841*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm4
2842*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2843*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
2844*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [4,5,6,7]
2845*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
2846*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm1
2847*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2848*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2849*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm4
2850*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2851*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
2852*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [8,9,10,11]
2853*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[1,1,3,3]
2854*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm2
2855*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[0,2,2,3]
2856*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2857*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm4
2858*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2859*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
2860*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [12,13,14,15]
2861*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]
2862*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm4, %xmm3
2863*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,2,2,3]
2864*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
2865*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm5, %xmm4
2866*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,2,2,3]
2867*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
2868*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
2870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
2871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
2872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
2873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
2874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
2876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2877*9880d681SAndroid Build Coastguard Worker;
2878*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i32_v16i8:
2879*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2880*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm2
2881*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2882*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm0, %xmm0
2883*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm1, %xmm3
2884*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm1
2885*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmulld {{.*}}(%rip), %xmm1, %xmm1
2886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
2887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
2888*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
2889*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
2890*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
2891*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
2892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm0, %xmm2, %xmm0
2893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
2894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2896*9880d681SAndroid Build Coastguard Worker;
2897*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i32_v16i8:
2898*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2899*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld {{.*}}(%rip), %ymm0, %ymm0
2900*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulld {{.*}}(%rip), %ymm1, %ymm1
2901*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
2902*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
2903*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
2904*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2905*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
2906*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
2907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
2909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2912*9880d681SAndroid Build Coastguard Worker;
2913*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_mul_const_v16i32_v16i8:
2914*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
2915*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmulld {{.*}}(%rip), %zmm0, %zmm0
2916*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
2917*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
2918*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
2919*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
2920*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2921*9880d681SAndroid Build Coastguard Worker}
2922*9880d681SAndroid Build Coastguard Worker
2923*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_mul_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
2924*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_mul_const_v16i16_v16i8:
2925*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2926*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmullw {{.*}}(%rip), %xmm0
2927*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmullw {{.*}}(%rip), %xmm1
2928*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
2929*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
2930*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
2931*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
2932*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2933*9880d681SAndroid Build Coastguard Worker;
2934*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_mul_const_v16i16_v16i8:
2935*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2936*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmullw {{.*}}(%rip), %xmm0, %xmm1
2937*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
2938*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmullw {{.*}}(%rip), %xmm0, %xmm0
2939*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2940*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2941*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2942*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
2943*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2944*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2945*9880d681SAndroid Build Coastguard Worker;
2946*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_mul_const_v16i16_v16i8:
2947*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
2948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmullw {{.*}}(%rip), %ymm0, %ymm0
2949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
2950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
2951*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
2952*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
2953*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2954*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
2955*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
2956*9880d681SAndroid Build Coastguard Worker;
2957*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_mul_const_v16i16_v16i8:
2958*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
2959*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmullw {{.*}}(%rip), %ymm0, %ymm0
2960*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
2961*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
2962*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
2963*9880d681SAndroid Build Coastguard Worker;
2964*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_mul_const_v16i16_v16i8:
2965*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
2966*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmullw {{.*}}(%rip), %ymm0, %ymm0
2967*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
2968*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
2969*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
2970*9880d681SAndroid Build Coastguard Worker  %1 = mul <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
2971*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
2972*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
2973*9880d681SAndroid Build Coastguard Worker}
2974*9880d681SAndroid Build Coastguard Worker
2975*9880d681SAndroid Build Coastguard Worker;
2976*9880d681SAndroid Build Coastguard Worker; and
2977*9880d681SAndroid Build Coastguard Worker;
2978*9880d681SAndroid Build Coastguard Worker
2979*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_and_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
2980*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v4i64_4i32:
2981*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
2982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
2983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm3, %xmm1
2984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
2985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
2988*9880d681SAndroid Build Coastguard Worker;
2989*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v4i64_4i32:
2990*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
2991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
2992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
2993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
2994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
2995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
2996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
2997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
2998*9880d681SAndroid Build Coastguard Worker;
2999*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v4i64_4i32:
3000*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3001*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3002*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3003*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3004*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3005*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3006*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3007*9880d681SAndroid Build Coastguard Worker;
3008*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v4i64_4i32:
3009*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3010*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vandps %ymm1, %ymm0, %ymm0
3011*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3012*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3013*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3014*9880d681SAndroid Build Coastguard Worker  %1 = and <4 x i64> %a0, %a1
3015*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
3016*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
3017*9880d681SAndroid Build Coastguard Worker}
3018*9880d681SAndroid Build Coastguard Worker
3019*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
3020*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v8i64_8i16:
3021*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3022*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm6, %xmm2
3023*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
3024*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm7, %xmm3
3025*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm5, %xmm1
3026*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
3027*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
3028*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
3029*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
3030*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3031*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
3032*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
3033*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
3034*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
3035*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
3036*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
3037*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
3038*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
3039*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
3040*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
3041*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3042*9880d681SAndroid Build Coastguard Worker;
3043*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v8i64_8i16:
3044*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
3046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
3047*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3048*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %xmm3, %xmm3, %xmm3
3049*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3050*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
3051*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
3052*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3053*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3054*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
3055*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
3056*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
3057*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3058*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3059*9880d681SAndroid Build Coastguard Worker;
3060*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v8i64_8i16:
3061*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
3063*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
3064*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3065*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3066*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3069*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3070*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3071*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3072*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3073*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3074*9880d681SAndroid Build Coastguard Worker;
3075*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v8i64_8i16:
3076*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3077*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm0
3078*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
3079*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3080*9880d681SAndroid Build Coastguard Worker  %1 = and <8 x i64> %a0, %a1
3081*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
3082*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3083*9880d681SAndroid Build Coastguard Worker}
3084*9880d681SAndroid Build Coastguard Worker
3085*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
3086*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v8i32_8i16:
3087*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
3089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm3, %xmm1
3090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
3091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
3092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
3093*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
3094*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
3095*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3096*9880d681SAndroid Build Coastguard Worker;
3097*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v8i32_8i16:
3098*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
3100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3107*9880d681SAndroid Build Coastguard Worker;
3108*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v8i32_8i16:
3109*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3112*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3113*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3116*9880d681SAndroid Build Coastguard Worker;
3117*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v8i32_8i16:
3118*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3119*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vandps %ymm1, %ymm0, %ymm0
3120*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
3121*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3122*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3123*9880d681SAndroid Build Coastguard Worker  %1 = and <8 x i32> %a0, %a1
3124*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
3125*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3126*9880d681SAndroid Build Coastguard Worker}
3127*9880d681SAndroid Build Coastguard Worker
3128*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
3129*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i64_v16i8:
3130*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm0
3132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm1
3133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm2
3134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm3
3135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm4
3136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm5
3137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm6
3138*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{[0-9]+}}(%rsp), %xmm7
3139*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3140*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
3141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
3142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
3143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
3144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
3145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
3146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
3147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
3148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
3149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
3150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
3151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
3152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3153*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
3154*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
3155*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3156*9880d681SAndroid Build Coastguard Worker;
3157*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i64_v16i8:
3158*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm4, %ymm0, %ymm0
3160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm5, %ymm1, %ymm1
3161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm6, %ymm2, %ymm2
3162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm7, %ymm3, %ymm3
3163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
3164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
3168*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3169*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3170*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
3171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
3172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
3173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
3176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
3177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
3180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
3181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3185*9880d681SAndroid Build Coastguard Worker;
3186*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i64_v16i8:
3187*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3188*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm5, %ymm1, %ymm1
3189*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm4, %ymm0, %ymm0
3190*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm7, %ymm3, %ymm3
3191*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm6, %ymm2, %ymm2
3192*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
3193*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
3194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
3195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
3196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
3197*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
3199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
3200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
3202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3203*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3204*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3205*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3206*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
3208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3209*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
3210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3213*9880d681SAndroid Build Coastguard Worker;
3214*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v16i64_v16i8:
3215*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3216*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq %zmm3, %zmm1, %zmm1
3217*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq %zmm2, %zmm0, %zmm0
3218*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3219*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
3220*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3221*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3222*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3223*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i64> %a0, %a1
3224*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
3225*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3226*9880d681SAndroid Build Coastguard Worker}
3227*9880d681SAndroid Build Coastguard Worker
3228*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
3229*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i32_v16i8:
3230*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
3233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm3, %xmm7
3234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
3235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm6
3236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
3237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
3238*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm1, %xmm5
3239*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
3240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
3241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm0
3242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm0
3243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3244*9880d681SAndroid Build Coastguard Worker;
3245*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i32_v16i8:
3246*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
3248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
3249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
3253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
3254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
3257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3261*9880d681SAndroid Build Coastguard Worker;
3262*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i32_v16i8:
3263*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3264*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
3265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
3266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
3268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
3269*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3270*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
3271*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
3272*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3273*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3274*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3275*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3277*9880d681SAndroid Build Coastguard Worker;
3278*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_v16i32_v16i8:
3279*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3280*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandd %zmm1, %zmm0, %zmm0
3281*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3282*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3283*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i32> %a0, %a1
3284*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
3285*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3286*9880d681SAndroid Build Coastguard Worker}
3287*9880d681SAndroid Build Coastguard Worker
3288*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
3289*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_v16i16_v16i8:
3290*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3291*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255]
3292*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
3293*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm1, %xmm3
3294*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
3295*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
3296*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm0
3297*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3298*9880d681SAndroid Build Coastguard Worker;
3299*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_v16i16_v16i8:
3300*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
3302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3309*9880d681SAndroid Build Coastguard Worker;
3310*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_v16i16_v16i8:
3311*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
3313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3320*9880d681SAndroid Build Coastguard Worker;
3321*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_and_v16i16_v16i8:
3322*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
3323*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vandps %ymm1, %ymm0, %ymm0
3324*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
3325*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3326*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
3327*9880d681SAndroid Build Coastguard Worker;
3328*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_and_v16i16_v16i8:
3329*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
3330*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vandps %ymm1, %ymm0, %ymm0
3331*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
3332*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3333*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
3334*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i16> %a0, %a1
3335*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
3336*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3337*9880d681SAndroid Build Coastguard Worker}
3338*9880d681SAndroid Build Coastguard Worker
3339*9880d681SAndroid Build Coastguard Worker;
3340*9880d681SAndroid Build Coastguard Worker; and to constant
3341*9880d681SAndroid Build Coastguard Worker;
3342*9880d681SAndroid Build Coastguard Worker
3343*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_and_const_v4i64_4i32(<4 x i64> %a0) nounwind {
3344*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v4i64_4i32:
3345*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
3347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
3348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
3349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm0, %xmm2
3350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
3352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3355*9880d681SAndroid Build Coastguard Worker;
3356*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v4i64_4i32:
3357*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3358*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
3361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
3363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3365*9880d681SAndroid Build Coastguard Worker;
3366*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v4i64_4i32:
3367*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3368*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3369*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3372*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3373*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3374*9880d681SAndroid Build Coastguard Worker;
3375*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v4i64_4i32:
3376*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3377*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3378*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3379*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3380*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3381*9880d681SAndroid Build Coastguard Worker  %1 = and <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
3382*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
3383*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
3384*9880d681SAndroid Build Coastguard Worker}
3385*9880d681SAndroid Build Coastguard Worker
3386*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
3387*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i64_v16i16:
3388*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3389*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
3390*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
3391*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
3392*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
3393*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
3394*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm2
3395*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm3
3396*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3397*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
3398*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
3399*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
3400*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
3401*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3402*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
3403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
3404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
3405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
3406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm1
3407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
3408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm2
3409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
3410*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
3411*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3412*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3413*9880d681SAndroid Build Coastguard Worker;
3414*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i64_v16i16:
3415*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm1, %ymm1
3418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
3420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3421*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
3422*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
3423*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3424*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3425*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
3426*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
3427*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
3428*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3429*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3430*9880d681SAndroid Build Coastguard Worker;
3431*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i64_v16i16:
3432*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3433*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm1, %ymm1
3434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3436*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3437*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3438*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3439*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3440*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3443*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3444*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3445*9880d681SAndroid Build Coastguard Worker;
3446*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i64_v16i16:
3447*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3448*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq {{.*}}(%rip), %zmm0, %zmm0
3449*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
3450*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3451*9880d681SAndroid Build Coastguard Worker  %1 = and <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
3452*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
3453*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3454*9880d681SAndroid Build Coastguard Worker}
3455*9880d681SAndroid Build Coastguard Worker
3456*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_and_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
3457*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i32_v16i16:
3458*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
3460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
3462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
3463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
3464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
3465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
3466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3467*9880d681SAndroid Build Coastguard Worker;
3468*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i32_v16i16:
3469*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3478*9880d681SAndroid Build Coastguard Worker;
3479*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i32_v16i16:
3480*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3483*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3484*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3485*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3486*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3487*9880d681SAndroid Build Coastguard Worker;
3488*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i32_v16i16:
3489*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3490*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3491*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
3492*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3493*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3494*9880d681SAndroid Build Coastguard Worker  %1 = and <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
3495*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
3496*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3497*9880d681SAndroid Build Coastguard Worker}
3498*9880d681SAndroid Build Coastguard Worker
3499*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
3500*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i64_v16i8:
3501*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
3503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
3504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
3505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm2
3507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm3
3508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm4
3509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm5
3510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm6
3511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm7
3512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm9 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm7
3514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm6
3515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
3516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm5
3517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm4
3518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
3519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
3520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm3
3521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm2
3522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
3523*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm1
3524*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm9, %xmm8
3525*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
3526*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3527*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
3528*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
3529*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3530*9880d681SAndroid Build Coastguard Worker;
3531*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i64_v16i8:
3532*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm1, %ymm1
3535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm2, %ymm2
3536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm3, %ymm3
3537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
3538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
3542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
3545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
3546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
3547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3549*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
3550*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
3551*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3552*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3553*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
3554*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
3555*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3559*9880d681SAndroid Build Coastguard Worker;
3560*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i64_v16i8:
3561*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3562*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm1, %ymm1
3563*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3564*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm3, %ymm3
3565*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm2, %ymm2
3566*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
3567*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
3568*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
3569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
3570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
3571*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3572*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
3573*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
3574*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3575*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
3576*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3577*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3578*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3579*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3580*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3581*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
3582*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3583*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
3584*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3587*9880d681SAndroid Build Coastguard Worker;
3588*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i64_v16i8:
3589*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3590*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq {{.*}}(%rip), %zmm1, %zmm1
3591*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandq {{.*}}(%rip), %zmm0, %zmm0
3592*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3593*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
3594*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3597*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
3598*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
3599*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3600*9880d681SAndroid Build Coastguard Worker}
3601*9880d681SAndroid Build Coastguard Worker
3602*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
3603*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i32_v16i8:
3604*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3605*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
3606*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm2
3608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm3
3609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
3611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
3612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
3613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
3614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
3615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
3617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3618*9880d681SAndroid Build Coastguard Worker;
3619*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i32_v16i8:
3620*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3621*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3622*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm1, %ymm1
3623*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3624*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3625*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3626*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
3627*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
3628*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3629*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3630*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
3631*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3632*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3633*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3634*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3635*9880d681SAndroid Build Coastguard Worker;
3636*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i32_v16i8:
3637*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3638*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3639*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm1, %ymm1
3640*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3641*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
3642*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
3643*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3644*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
3645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
3646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
3648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3651*9880d681SAndroid Build Coastguard Worker;
3652*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_and_const_v16i32_v16i8:
3653*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3654*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpandd {{.*}}(%rip), %zmm0, %zmm0
3655*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3656*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3657*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
3658*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
3659*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3660*9880d681SAndroid Build Coastguard Worker}
3661*9880d681SAndroid Build Coastguard Worker
3662*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_and_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
3663*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_and_const_v16i16_v16i8:
3664*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3665*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm0
3666*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand {{.*}}(%rip), %xmm1
3667*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
3668*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
3669*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
3670*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3671*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3672*9880d681SAndroid Build Coastguard Worker;
3673*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_and_const_v16i16_v16i8:
3674*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3675*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3676*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3677*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3678*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3679*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3680*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3681*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3682*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3683*9880d681SAndroid Build Coastguard Worker;
3684*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_and_const_v16i16_v16i8:
3685*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
3687*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
3688*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3689*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3690*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3691*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3692*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3693*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3694*9880d681SAndroid Build Coastguard Worker;
3695*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_and_const_v16i16_v16i8:
3696*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
3697*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3698*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
3699*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
3700*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
3701*9880d681SAndroid Build Coastguard Worker;
3702*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_and_const_v16i16_v16i8:
3703*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
3704*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
3705*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
3706*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3707*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
3708*9880d681SAndroid Build Coastguard Worker  %1 = and <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
3709*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
3710*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3711*9880d681SAndroid Build Coastguard Worker}
3712*9880d681SAndroid Build Coastguard Worker
3713*9880d681SAndroid Build Coastguard Worker;
3714*9880d681SAndroid Build Coastguard Worker; xor
3715*9880d681SAndroid Build Coastguard Worker;
3716*9880d681SAndroid Build Coastguard Worker
3717*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_xor_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
3718*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v4i64_4i32:
3719*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3720*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm2, %xmm0
3721*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm3, %xmm1
3722*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
3723*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3724*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3725*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3726*9880d681SAndroid Build Coastguard Worker;
3727*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v4i64_4i32:
3728*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
3730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
3732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
3733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
3734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3736*9880d681SAndroid Build Coastguard Worker;
3737*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v4i64_4i32:
3738*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3739*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
3740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3745*9880d681SAndroid Build Coastguard Worker;
3746*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v4i64_4i32:
3747*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3748*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps %ymm1, %ymm0, %ymm0
3749*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3750*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3751*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3752*9880d681SAndroid Build Coastguard Worker  %1 = xor <4 x i64> %a0, %a1
3753*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
3754*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
3755*9880d681SAndroid Build Coastguard Worker}
3756*9880d681SAndroid Build Coastguard Worker
3757*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
3758*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v8i64_8i16:
3759*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3760*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm6, %xmm2
3761*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm0
3762*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm7, %xmm3
3763*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm5, %xmm1
3764*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
3765*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
3766*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
3767*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
3768*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
3769*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
3770*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
3771*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
3772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
3773*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
3774*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
3775*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
3776*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
3777*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
3778*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
3779*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3780*9880d681SAndroid Build Coastguard Worker;
3781*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v8i64_8i16:
3782*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3783*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm0
3784*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm1
3785*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3786*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %xmm3, %xmm3, %xmm3
3787*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3788*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
3789*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
3790*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3791*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
3792*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
3793*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
3794*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
3795*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3796*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3797*9880d681SAndroid Build Coastguard Worker;
3798*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v8i64_8i16:
3799*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
3801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
3802*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3803*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3804*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3805*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3806*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3807*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3808*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3811*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3812*9880d681SAndroid Build Coastguard Worker;
3813*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v8i64_8i16:
3814*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3815*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq %zmm1, %zmm0, %zmm0
3816*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
3817*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3818*9880d681SAndroid Build Coastguard Worker  %1 = xor <8 x i64> %a0, %a1
3819*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
3820*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3821*9880d681SAndroid Build Coastguard Worker}
3822*9880d681SAndroid Build Coastguard Worker
3823*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
3824*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v8i32_8i16:
3825*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3826*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm2, %xmm0
3827*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm3, %xmm1
3828*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
3829*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
3830*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
3831*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
3832*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
3833*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3834*9880d681SAndroid Build Coastguard Worker;
3835*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v8i32_8i16:
3836*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
3838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
3839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
3840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
3841*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
3842*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
3843*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3844*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3845*9880d681SAndroid Build Coastguard Worker;
3846*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v8i32_8i16:
3847*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3848*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
3849*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
3850*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3851*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3852*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3853*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3854*9880d681SAndroid Build Coastguard Worker;
3855*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v8i32_8i16:
3856*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3857*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps %ymm1, %ymm0, %ymm0
3858*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
3859*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
3860*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3861*9880d681SAndroid Build Coastguard Worker  %1 = xor <8 x i32> %a0, %a1
3862*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
3863*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
3864*9880d681SAndroid Build Coastguard Worker}
3865*9880d681SAndroid Build Coastguard Worker
3866*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
3867*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i64_v16i8:
3868*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm0
3870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm1
3871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm2
3872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm3
3873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm4
3874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm5
3875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm6
3876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{[0-9]+}}(%rsp), %xmm7
3877*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3878*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
3879*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
3880*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
3881*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
3882*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
3883*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
3884*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
3885*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
3886*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
3887*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
3888*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
3889*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
3890*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3891*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
3892*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
3893*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3894*9880d681SAndroid Build Coastguard Worker;
3895*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i64_v16i8:
3896*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm4, %ymm0, %ymm0
3898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm5, %ymm1, %ymm1
3899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm6, %ymm2, %ymm2
3900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm7, %ymm3, %ymm3
3901*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
3902*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
3903*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3904*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3905*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
3906*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3907*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
3908*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
3909*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
3910*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
3911*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3912*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3913*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
3914*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
3915*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3916*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
3917*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
3918*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
3919*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3920*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3921*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3922*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3923*9880d681SAndroid Build Coastguard Worker;
3924*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i64_v16i8:
3925*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
3926*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm5, %ymm1, %ymm1
3927*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm0
3928*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm7, %ymm3, %ymm3
3929*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm6, %ymm2, %ymm2
3930*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
3931*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
3932*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
3933*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
3934*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
3935*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
3936*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
3937*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
3938*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
3939*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
3940*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
3941*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
3942*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
3943*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
3944*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
3945*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
3946*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3947*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
3948*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
3949*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
3950*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
3951*9880d681SAndroid Build Coastguard Worker;
3952*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v16i64_v16i8:
3953*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
3954*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq %zmm3, %zmm1, %zmm1
3955*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq %zmm2, %zmm0, %zmm0
3956*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
3957*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
3958*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
3959*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
3960*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
3961*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i64> %a0, %a1
3962*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
3963*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
3964*9880d681SAndroid Build Coastguard Worker}
3965*9880d681SAndroid Build Coastguard Worker
3966*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
3967*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i32_v16i8:
3968*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
3969*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm0
3970*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm5, %xmm1
3971*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm6, %xmm2
3972*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm7, %xmm3
3973*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3974*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
3975*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
3976*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
3977*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
3978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
3979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
3980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
3981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
3982*9880d681SAndroid Build Coastguard Worker;
3983*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i32_v16i8:
3984*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
3985*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm0
3986*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm3, %ymm1, %ymm1
3987*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3988*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
3989*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3990*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
3991*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
3992*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
3993*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
3994*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
3995*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
3996*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
3997*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
3998*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
3999*9880d681SAndroid Build Coastguard Worker;
4000*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i32_v16i8:
4001*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4002*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
4003*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm3, %ymm1, %ymm1
4004*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
4005*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
4006*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
4007*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4008*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
4009*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
4010*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4011*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
4012*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4013*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4014*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4015*9880d681SAndroid Build Coastguard Worker;
4016*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_v16i32_v16i8:
4017*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4018*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxord %zmm1, %zmm0, %zmm0
4019*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
4020*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4021*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i32> %a0, %a1
4022*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
4023*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4024*9880d681SAndroid Build Coastguard Worker}
4025*9880d681SAndroid Build Coastguard Worker
4026*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
4027*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_v16i16_v16i8:
4028*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4029*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm2, %xmm0
4030*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm3, %xmm1
4031*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
4032*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
4033*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
4034*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4035*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4036*9880d681SAndroid Build Coastguard Worker;
4037*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_v16i16_v16i8:
4038*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4039*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
4040*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4041*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4042*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4043*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4044*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4045*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4046*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4047*9880d681SAndroid Build Coastguard Worker;
4048*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_v16i16_v16i8:
4049*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4050*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
4051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
4052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4053*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4054*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4055*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4056*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4058*9880d681SAndroid Build Coastguard Worker;
4059*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_xor_v16i16_v16i8:
4060*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
4061*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vxorps %ymm1, %ymm0, %ymm0
4062*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
4063*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4064*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
4065*9880d681SAndroid Build Coastguard Worker;
4066*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_xor_v16i16_v16i8:
4067*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
4068*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vxorps %ymm1, %ymm0, %ymm0
4069*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
4070*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4071*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
4072*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i16> %a0, %a1
4073*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
4074*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4075*9880d681SAndroid Build Coastguard Worker}
4076*9880d681SAndroid Build Coastguard Worker
4077*9880d681SAndroid Build Coastguard Worker;
4078*9880d681SAndroid Build Coastguard Worker; xor to constant
4079*9880d681SAndroid Build Coastguard Worker;
4080*9880d681SAndroid Build Coastguard Worker
4081*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_xor_const_v4i64_4i32(<4 x i64> %a0) nounwind {
4082*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v4i64_4i32:
4083*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4084*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4085*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
4086*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
4087*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm0, %xmm2
4088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
4090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
4091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4093*9880d681SAndroid Build Coastguard Worker;
4094*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v4i64_4i32:
4095*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4096*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
4099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
4100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
4101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4103*9880d681SAndroid Build Coastguard Worker;
4104*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v4i64_4i32:
4105*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4108*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4109*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4110*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4111*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4112*9880d681SAndroid Build Coastguard Worker;
4113*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v4i64_4i32:
4114*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4115*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4116*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
4117*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4118*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4119*9880d681SAndroid Build Coastguard Worker  %1 = xor <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
4120*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
4121*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
4122*9880d681SAndroid Build Coastguard Worker}
4123*9880d681SAndroid Build Coastguard Worker
4124*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
4125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i64_v16i16:
4126*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
4128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4129*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
4130*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
4131*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm0
4132*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm2
4133*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm3
4134*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
4136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
4137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
4138*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
4139*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
4140*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
4141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
4142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
4143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
4144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm1
4145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
4146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm2
4147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
4148*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
4149*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
4150*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4151*9880d681SAndroid Build Coastguard Worker;
4152*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i64_v16i16:
4153*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm1, %ymm1
4156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4159*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
4160*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
4161*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4162*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4163*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
4164*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
4165*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
4166*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4167*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4168*9880d681SAndroid Build Coastguard Worker;
4169*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i64_v16i16:
4170*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4171*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm1, %ymm1
4172*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4173*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4174*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4175*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
4176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
4177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4178*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4179*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4180*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4181*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4182*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4183*9880d681SAndroid Build Coastguard Worker;
4184*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i64_v16i16:
4185*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4186*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq {{.*}}(%rip), %zmm0, %zmm0
4187*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
4188*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4189*9880d681SAndroid Build Coastguard Worker  %1 = xor <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
4190*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
4191*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4192*9880d681SAndroid Build Coastguard Worker}
4193*9880d681SAndroid Build Coastguard Worker
4194*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_xor_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
4195*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i32_v16i16:
4196*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4197*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm0
4198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
4200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
4201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
4202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
4203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
4204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4205*9880d681SAndroid Build Coastguard Worker;
4206*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i32_v16i16:
4207*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4208*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4209*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4210*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4211*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4212*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4213*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4214*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4215*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4216*9880d681SAndroid Build Coastguard Worker;
4217*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i32_v16i16:
4218*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4225*9880d681SAndroid Build Coastguard Worker;
4226*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i32_v16i16:
4227*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4228*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4229*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
4230*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4231*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4232*9880d681SAndroid Build Coastguard Worker  %1 = xor <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
4233*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
4234*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4235*9880d681SAndroid Build Coastguard Worker}
4236*9880d681SAndroid Build Coastguard Worker
4237*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
4238*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i64_v16i8:
4239*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4240*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
4242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
4243*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm8, %xmm0
4244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm2
4246*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm3
4247*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm4
4248*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm5
4249*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm6
4250*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm7
4251*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4252*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
4253*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
4254*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
4255*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
4256*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
4257*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
4258*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
4259*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
4260*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
4261*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
4262*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
4263*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
4264*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4265*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
4266*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
4267*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4268*9880d681SAndroid Build Coastguard Worker;
4269*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i64_v16i8:
4270*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4271*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4272*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm1, %ymm1
4273*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm2, %ymm2
4274*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm3, %ymm3
4275*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4276*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4277*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
4278*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
4280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
4282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
4283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
4284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
4285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
4286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
4288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
4289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
4290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
4292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
4293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
4295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4297*9880d681SAndroid Build Coastguard Worker;
4298*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i64_v16i8:
4299*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4300*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm1, %ymm1
4301*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4302*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm3, %ymm3
4303*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm2, %ymm2
4304*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
4305*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
4306*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
4307*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
4308*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
4309*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
4310*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
4311*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
4312*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
4314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4315*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4316*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
4317*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
4318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
4320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
4322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
4323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4325*9880d681SAndroid Build Coastguard Worker;
4326*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i64_v16i8:
4327*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4328*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq {{.*}}(%rip), %zmm1, %zmm1
4329*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxorq {{.*}}(%rip), %zmm0, %zmm0
4330*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
4331*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
4332*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
4333*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
4334*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4335*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
4336*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
4337*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4338*9880d681SAndroid Build Coastguard Worker}
4339*9880d681SAndroid Build Coastguard Worker
4340*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
4341*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i32_v16i8:
4342*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4343*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm0
4344*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4345*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm2
4346*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm3
4347*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4348*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
4349*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
4350*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
4351*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
4352*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
4353*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4354*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
4355*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4356*9880d681SAndroid Build Coastguard Worker;
4357*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i32_v16i8:
4358*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4359*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4360*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm1, %ymm1
4361*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4362*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4363*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
4364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
4365*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
4366*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
4368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
4369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
4370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4373*9880d681SAndroid Build Coastguard Worker;
4374*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i32_v16i8:
4375*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4376*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm1, %ymm1
4378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
4379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
4380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
4381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4382*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
4383*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
4384*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4385*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
4386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4388*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4389*9880d681SAndroid Build Coastguard Worker;
4390*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_xor_const_v16i32_v16i8:
4391*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4392*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpxord {{.*}}(%rip), %zmm0, %zmm0
4393*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
4394*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4395*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
4396*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
4397*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4398*9880d681SAndroid Build Coastguard Worker}
4399*9880d681SAndroid Build Coastguard Worker
4400*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_xor_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
4401*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_xor_const_v16i16_v16i8:
4402*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4403*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm0
4404*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor {{.*}}(%rip), %xmm1
4405*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
4406*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
4407*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
4408*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4409*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4410*9880d681SAndroid Build Coastguard Worker;
4411*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_xor_const_v16i16_v16i8:
4412*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4413*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4414*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4415*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4416*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4417*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4418*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4419*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4420*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4421*9880d681SAndroid Build Coastguard Worker;
4422*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_xor_const_v16i16_v16i8:
4423*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4424*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor {{.*}}(%rip), %ymm0, %ymm0
4425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
4426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4427*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4428*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4429*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4430*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4431*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4432*9880d681SAndroid Build Coastguard Worker;
4433*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_xor_const_v16i16_v16i8:
4434*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
4435*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4436*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
4437*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4438*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
4439*9880d681SAndroid Build Coastguard Worker;
4440*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_xor_const_v16i16_v16i8:
4441*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
4442*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vxorps {{.*}}(%rip), %ymm0, %ymm0
4443*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
4444*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4445*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
4446*9880d681SAndroid Build Coastguard Worker  %1 = xor <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
4447*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
4448*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4449*9880d681SAndroid Build Coastguard Worker}
4450*9880d681SAndroid Build Coastguard Worker
4451*9880d681SAndroid Build Coastguard Worker;
4452*9880d681SAndroid Build Coastguard Worker; or
4453*9880d681SAndroid Build Coastguard Worker;
4454*9880d681SAndroid Build Coastguard Worker
4455*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_or_v4i64_4i32(<4 x i64> %a0, <4 x i64> %a1) nounwind {
4456*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v4i64_4i32:
4457*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4458*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm2, %xmm0
4459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm3, %xmm1
4460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
4461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
4462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4464*9880d681SAndroid Build Coastguard Worker;
4465*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v4i64_4i32:
4466*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0
4468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
4470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
4471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
4472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4474*9880d681SAndroid Build Coastguard Worker;
4475*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v4i64_4i32:
4476*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4477*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
4478*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4479*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4480*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4483*9880d681SAndroid Build Coastguard Worker;
4484*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v4i64_4i32:
4485*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4486*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vorps %ymm1, %ymm0, %ymm0
4487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
4488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4489*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4490*9880d681SAndroid Build Coastguard Worker  %1 = or <4 x i64> %a0, %a1
4491*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
4492*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
4493*9880d681SAndroid Build Coastguard Worker}
4494*9880d681SAndroid Build Coastguard Worker
4495*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_v8i64_8i16(<8 x i64> %a0, <8 x i64> %a1) nounwind {
4496*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v8i64_8i16:
4497*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4498*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm6, %xmm2
4499*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm4, %xmm0
4500*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm7, %xmm3
4501*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm5, %xmm1
4502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
4503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
4504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
4505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
4506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
4507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
4508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
4509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
4510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
4511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
4512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm1
4513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm2
4514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
4515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
4516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
4517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4518*9880d681SAndroid Build Coastguard Worker;
4519*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v8i64_8i16:
4520*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm2, %ymm0, %ymm0
4522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm3, %ymm1, %ymm1
4523*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4524*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %xmm3, %xmm3, %xmm3
4525*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
4527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
4528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
4531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
4532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
4533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4535*9880d681SAndroid Build Coastguard Worker;
4536*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v8i64_8i16:
4537*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm3, %ymm1, %ymm1
4539*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0
4540*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4541*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4542*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
4543*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
4544*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4545*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4546*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4547*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4548*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4549*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4550*9880d681SAndroid Build Coastguard Worker;
4551*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v8i64_8i16:
4552*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4553*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq %zmm1, %zmm0, %zmm0
4554*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
4555*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4556*9880d681SAndroid Build Coastguard Worker  %1 = or <8 x i64> %a0, %a1
4557*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
4558*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4559*9880d681SAndroid Build Coastguard Worker}
4560*9880d681SAndroid Build Coastguard Worker
4561*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_v8i32_8i16(<8 x i32> %a0, <8 x i32> %a1) nounwind {
4562*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v8i32_8i16:
4563*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm2, %xmm0
4565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm3, %xmm1
4566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
4567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
4568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
4569*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
4570*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
4571*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4572*9880d681SAndroid Build Coastguard Worker;
4573*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v8i32_8i16:
4574*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0
4576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4582*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4583*9880d681SAndroid Build Coastguard Worker;
4584*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v8i32_8i16:
4585*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
4587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4592*9880d681SAndroid Build Coastguard Worker;
4593*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v8i32_8i16:
4594*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4595*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vorps %ymm1, %ymm0, %ymm0
4596*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
4597*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4598*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4599*9880d681SAndroid Build Coastguard Worker  %1 = or <8 x i32> %a0, %a1
4600*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
4601*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4602*9880d681SAndroid Build Coastguard Worker}
4603*9880d681SAndroid Build Coastguard Worker
4604*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i64_v16i8(<16 x i64> %a0, <16 x i64> %a1) nounwind {
4605*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i64_v16i8:
4606*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4607*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm0
4608*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm1
4609*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm2
4610*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm3
4611*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm4
4612*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm5
4613*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm6
4614*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{[0-9]+}}(%rsp), %xmm7
4615*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4616*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
4617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
4618*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
4619*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
4620*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
4621*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
4622*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
4623*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
4624*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
4625*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
4626*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
4627*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
4628*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
4630*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
4631*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4632*9880d681SAndroid Build Coastguard Worker;
4633*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i64_v16i8:
4634*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4635*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm4, %ymm0, %ymm0
4636*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm5, %ymm1, %ymm1
4637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm6, %ymm2, %ymm2
4638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm7, %ymm3, %ymm3
4639*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4640*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
4642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
4644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
4646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
4647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
4648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
4649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
4650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
4652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
4653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
4654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
4655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
4656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
4657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
4659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4661*9880d681SAndroid Build Coastguard Worker;
4662*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i64_v16i8:
4663*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4664*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm5, %ymm1, %ymm1
4665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm4, %ymm0, %ymm0
4666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm7, %ymm3, %ymm3
4667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm6, %ymm2, %ymm2
4668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
4669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
4670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
4671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
4672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
4673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
4674*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
4675*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
4676*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4677*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
4678*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4679*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4680*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
4681*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
4682*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4683*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
4684*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4685*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
4686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
4687*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4688*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4689*9880d681SAndroid Build Coastguard Worker;
4690*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v16i64_v16i8:
4691*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4692*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq %zmm3, %zmm1, %zmm1
4693*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq %zmm2, %zmm0, %zmm0
4694*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
4695*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
4696*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
4697*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
4698*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4699*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i64> %a0, %a1
4700*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
4701*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4702*9880d681SAndroid Build Coastguard Worker}
4703*9880d681SAndroid Build Coastguard Worker
4704*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i32_v16i8(<16 x i32> %a0, <16 x i32> %a1) nounwind {
4705*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i32_v16i8:
4706*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4707*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm4, %xmm0
4708*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm5, %xmm1
4709*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm6, %xmm2
4710*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm7, %xmm3
4711*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4712*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
4713*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
4714*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
4715*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
4716*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
4717*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4718*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
4719*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4720*9880d681SAndroid Build Coastguard Worker;
4721*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i32_v16i8:
4722*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4723*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm2, %ymm0, %ymm0
4724*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm3, %ymm1, %ymm1
4725*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4726*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
4727*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
4728*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
4729*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
4730*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4731*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
4732*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
4733*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
4734*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
4735*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4736*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4737*9880d681SAndroid Build Coastguard Worker;
4738*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i32_v16i8:
4739*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4740*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0
4741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm3, %ymm1, %ymm1
4742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
4743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
4744*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
4745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
4747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
4748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4749*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
4750*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4751*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4752*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4753*9880d681SAndroid Build Coastguard Worker;
4754*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_v16i32_v16i8:
4755*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4756*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpord %zmm1, %zmm0, %zmm0
4757*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
4758*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4759*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i32> %a0, %a1
4760*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
4761*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4762*9880d681SAndroid Build Coastguard Worker}
4763*9880d681SAndroid Build Coastguard Worker
4764*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_v16i16_v16i8(<16 x i16> %a0, <16 x i16> %a1) nounwind {
4765*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_v16i16_v16i8:
4766*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4767*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm2, %xmm0
4768*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm3, %xmm1
4769*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
4770*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
4771*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
4772*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
4773*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4774*9880d681SAndroid Build Coastguard Worker;
4775*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_v16i16_v16i8:
4776*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4777*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0
4778*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4779*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4780*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4781*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4782*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4783*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4784*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4785*9880d681SAndroid Build Coastguard Worker;
4786*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_v16i16_v16i8:
4787*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4788*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
4789*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
4790*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
4791*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4792*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4796*9880d681SAndroid Build Coastguard Worker;
4797*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_or_v16i16_v16i8:
4798*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
4799*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vorps %ymm1, %ymm0, %ymm0
4800*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
4801*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
4802*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
4803*9880d681SAndroid Build Coastguard Worker;
4804*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_or_v16i16_v16i8:
4805*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
4806*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vorps %ymm1, %ymm0, %ymm0
4807*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
4808*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4809*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
4810*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i16> %a0, %a1
4811*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
4812*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
4813*9880d681SAndroid Build Coastguard Worker}
4814*9880d681SAndroid Build Coastguard Worker
4815*9880d681SAndroid Build Coastguard Worker;
4816*9880d681SAndroid Build Coastguard Worker; or to constant
4817*9880d681SAndroid Build Coastguard Worker;
4818*9880d681SAndroid Build Coastguard Worker
4819*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_or_const_v4i64_4i32(<4 x i64> %a0) nounwind {
4820*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v4i64_4i32:
4821*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4822*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4823*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm2
4824*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7]
4825*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm0, %xmm2
4826*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
4827*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,2,2,3]
4828*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[0,2,2,3]
4829*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4830*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4831*9880d681SAndroid Build Coastguard Worker;
4832*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v4i64_4i32:
4833*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4834*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
4835*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4836*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
4837*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
4838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
4839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4840*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4841*9880d681SAndroid Build Coastguard Worker;
4842*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v4i64_4i32:
4843*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
4845*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4846*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4847*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4848*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4849*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4850*9880d681SAndroid Build Coastguard Worker;
4851*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v4i64_4i32:
4852*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4853*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
4854*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
4855*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4856*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4857*9880d681SAndroid Build Coastguard Worker  %1 = or <4 x i64> %a0, <i64 0, i64 1, i64 2, i64 3>
4858*9880d681SAndroid Build Coastguard Worker  %2 = trunc <4 x i64> %1 to <4 x i32>
4859*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
4860*9880d681SAndroid Build Coastguard Worker}
4861*9880d681SAndroid Build Coastguard Worker
4862*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_const_v16i64_v16i16(<8 x i64> %a0) nounwind {
4863*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i64_v16i16:
4864*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4865*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
4866*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4867*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm0
4868*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7]
4869*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm4, %xmm0
4870*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm2
4871*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm3
4872*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
4873*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm1, %eax
4874*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
4875*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm0, %ecx
4876*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
4877*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
4878*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm3, %edx
4879*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %edx, %xmm1
4880*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm3
4881*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
4882*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %ecx, %xmm1
4883*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pextrw $4, %xmm2, %eax
4884*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %eax, %xmm2
4885*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
4886*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
4887*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
4888*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4889*9880d681SAndroid Build Coastguard Worker;
4890*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i64_v16i16:
4891*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4892*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
4893*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm1, %ymm1
4894*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4895*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
4896*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4897*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm3[1,2,3],xmm1[4],xmm3[5,6,7]
4898*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
4899*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
4900*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0],xmm3[1,2,3],xmm2[4],xmm3[5,6,7]
4901*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm3[1,2,3],xmm0[4],xmm3[5,6,7]
4902*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
4903*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
4904*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4905*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4906*9880d681SAndroid Build Coastguard Worker;
4907*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i64_v16i16:
4908*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4909*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm1, %ymm1
4910*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
4911*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
4912*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
4913*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
4914*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
4915*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
4916*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4917*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4918*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4919*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4920*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4921*9880d681SAndroid Build Coastguard Worker;
4922*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i64_v16i16:
4923*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4924*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq {{.*}}(%rip), %zmm0, %zmm0
4925*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
4926*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4927*9880d681SAndroid Build Coastguard Worker  %1 = or <8 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>
4928*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i64> %1 to <8 x i16>
4929*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4930*9880d681SAndroid Build Coastguard Worker}
4931*9880d681SAndroid Build Coastguard Worker
4932*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @trunc_or_const_v16i32_v16i16(<8 x i32> %a0) nounwind {
4933*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i32_v16i16:
4934*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4935*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm0
4936*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
4937*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm1
4938*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm1
4939*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslld $16, %xmm0
4940*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $16, %xmm0
4941*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packssdw %xmm1, %xmm0
4942*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
4943*9880d681SAndroid Build Coastguard Worker;
4944*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i32_v16i16:
4945*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
4946*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
4947*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
4948*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
4949*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
4950*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
4951*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
4952*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
4953*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
4954*9880d681SAndroid Build Coastguard Worker;
4955*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i32_v16i16:
4956*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
4957*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
4958*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13],zero,zero,zero,zero,zero,zero,zero,zero,ymm0[16,17,20,21,24,25,28,29],zero,zero,zero,zero,zero,zero,zero,zero
4959*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4960*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4961*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
4962*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
4963*9880d681SAndroid Build Coastguard Worker;
4964*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i32_v16i16:
4965*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
4966*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
4967*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdw %zmm0, %ymm0
4968*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
4969*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
4970*9880d681SAndroid Build Coastguard Worker  %1 = or <8 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
4971*9880d681SAndroid Build Coastguard Worker  %2 = trunc <8 x i32> %1 to <8 x i16>
4972*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %2
4973*9880d681SAndroid Build Coastguard Worker}
4974*9880d681SAndroid Build Coastguard Worker
4975*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i64_v16i8(<16 x i64> %a0) nounwind {
4976*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i64_v16i8:
4977*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
4978*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movl $1, %eax
4979*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movd %rax, %xmm8
4980*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pslldq {{.*#+}} xmm8 = zero,zero,zero,zero,zero,zero,zero,zero,xmm8[0,1,2,3,4,5,6,7]
4981*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por %xmm8, %xmm0
4982*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
4983*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm2
4984*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm3
4985*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm4
4986*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm5
4987*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm6
4988*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm7
4989*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm8 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
4990*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm7
4991*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm6
4992*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm7, %xmm6
4993*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm5
4994*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm4
4995*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm5, %xmm4
4996*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm6, %xmm4
4997*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm3
4998*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm2
4999*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
5000*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm1
5001*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm8, %xmm0
5002*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
5003*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
5004*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm4, %xmm0
5005*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
5006*9880d681SAndroid Build Coastguard Worker;
5007*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i64_v16i8:
5008*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
5009*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
5010*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm1, %ymm1
5011*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm2, %ymm2
5012*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm3, %ymm3
5013*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5014*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
5015*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
5016*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
5017*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm3, %xmm3
5018*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5019*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm4, %xmm4
5020*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm2, %xmm2
5021*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm4, %xmm2, %xmm2
5022*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
5023*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5024*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
5025*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm1, %xmm1
5026*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm1, %xmm1
5027*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
5028*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm3, %xmm3
5029*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm5, %xmm0, %xmm0
5030*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
5031*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5032*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
5033*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
5034*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
5035*9880d681SAndroid Build Coastguard Worker;
5036*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i64_v16i8:
5037*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
5038*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm1, %ymm1
5039*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
5040*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm3, %ymm3
5041*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm2, %ymm2
5042*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[0,2,0,2,4,6,4,6]
5043*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,3,2,3]
5044*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm3 = ymm3[0,2,0,2,4,6,4,6]
5045*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,3,2,3]
5046*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm2, %ymm2
5047*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
5048*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm2, %ymm2
5049*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,2,3]
5050*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm4 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
5051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm2, %xmm2
5052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
5053*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
5054*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,0,2,4,6,4,6]
5055*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,3,2,3]
5056*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
5057*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm0, %ymm0
5058*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
5059*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm4, %xmm0, %xmm0
5060*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
5061*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
5062*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
5063*9880d681SAndroid Build Coastguard Worker;
5064*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i64_v16i8:
5065*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
5066*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq {{.*}}(%rip), %zmm1, %zmm1
5067*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vporq {{.*}}(%rip), %zmm0, %zmm0
5068*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
5069*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
5070*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
5071*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
5072*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
5073*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i64> %a0, <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>
5074*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i64> %1 to <16 x i8>
5075*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
5076*9880d681SAndroid Build Coastguard Worker}
5077*9880d681SAndroid Build Coastguard Worker
5078*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i32_v16i8(<16 x i32> %a0) nounwind {
5079*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i32_v16i8:
5080*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
5081*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm0
5082*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
5083*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm2
5084*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm3
5085*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
5086*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm3
5087*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm2
5088*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm3, %xmm2
5089*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm1
5090*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm4, %xmm0
5091*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
5092*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm2, %xmm0
5093*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
5094*9880d681SAndroid Build Coastguard Worker;
5095*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i32_v16i8:
5096*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
5097*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
5098*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm1, %ymm1
5099*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
5101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
5102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm1, %xmm1
5103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
5104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
5105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm2, %xmm2
5106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %xmm3, %xmm0, %xmm0
5107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
5108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
5109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
5110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
5111*9880d681SAndroid Build Coastguard Worker;
5112*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i32_v16i8:
5113*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
5114*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
5115*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm1, %ymm1
5116*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128,0,1,4,5,8,9,12,13,128,128,128,128,128,128,128,128]
5117*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm1, %ymm1
5118*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
5119*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
5120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm1, %xmm1
5121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm0, %ymm0
5122*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
5123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
5124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
5125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
5126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
5127*9880d681SAndroid Build Coastguard Worker;
5128*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: trunc_or_const_v16i32_v16i8:
5129*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
5130*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpord {{.*}}(%rip), %zmm0, %zmm0
5131*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
5132*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
5133*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i32> %a0, <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
5134*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i32> %1 to <16 x i8>
5135*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
5136*9880d681SAndroid Build Coastguard Worker}
5137*9880d681SAndroid Build Coastguard Worker
5138*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @trunc_or_const_v16i16_v16i8(<16 x i16> %a0) nounwind {
5139*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: trunc_or_const_v16i16_v16i8:
5140*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
5141*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm0
5142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    por {{.*}}(%rip), %xmm1
5143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255]
5144*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm1
5145*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pand %xmm2, %xmm0
5146*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    packuswb %xmm1, %xmm0
5147*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
5148*9880d681SAndroid Build Coastguard Worker;
5149*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: trunc_or_const_v16i16_v16i8:
5150*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
5151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
5152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
5153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
5154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
5155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
5156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
5157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vzeroupper
5158*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
5159*9880d681SAndroid Build Coastguard Worker;
5160*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: trunc_or_const_v16i16_v16i8:
5161*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
5162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpor {{.*}}(%rip), %ymm0, %ymm0
5163*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
5164*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
5165*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
5166*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
5167*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
5168*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
5169*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
5170*9880d681SAndroid Build Coastguard Worker;
5171*9880d681SAndroid Build Coastguard Worker; AVX512F-LABEL: trunc_or_const_v16i16_v16i8:
5172*9880d681SAndroid Build Coastguard Worker; AVX512F:       # BB#0:
5173*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
5174*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
5175*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
5176*9880d681SAndroid Build Coastguard Worker; AVX512F-NEXT:    retq
5177*9880d681SAndroid Build Coastguard Worker;
5178*9880d681SAndroid Build Coastguard Worker; AVX512BW-LABEL: trunc_or_const_v16i16_v16i8:
5179*9880d681SAndroid Build Coastguard Worker; AVX512BW:       # BB#0:
5180*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vorps {{.*}}(%rip), %ymm0, %ymm0
5181*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
5182*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
5183*9880d681SAndroid Build Coastguard Worker; AVX512BW-NEXT:    retq
5184*9880d681SAndroid Build Coastguard Worker  %1 = or <16 x i16> %a0, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
5185*9880d681SAndroid Build Coastguard Worker  %2 = trunc <16 x i16> %1 to <16 x i8>
5186*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %2
5187*9880d681SAndroid Build Coastguard Worker}
5188*9880d681SAndroid Build Coastguard Worker
5189*9880d681SAndroid Build Coastguard Worker;
5190*9880d681SAndroid Build Coastguard Worker; complex patterns - often created by vectorizer
5191*9880d681SAndroid Build Coastguard Worker;
5192*9880d681SAndroid Build Coastguard Worker
5193*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @mul_add_v4i64_v4i32(<4 x i32> %a0, <4 x i32> %a1) nounwind {
5194*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: mul_add_v4i64_v4i32:
5195*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
5196*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
5197*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm3
5198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm3
5199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
5200*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm3
5201*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm3
5202*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
5203*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]
5204*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
5205*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
5206*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
5207*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm4
5208*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
5209*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
5210*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
5211*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm1, %xmm4
5212*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm5
5213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm5
5214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm0, %xmm5
5215*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm5
5216*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm5
5217*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm0
5218*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm1, %xmm0
5219*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm0
5220*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm5, %xmm0
5221*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm1
5222*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm1
5223*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
5224*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm4
5225*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm2, %xmm4
5226*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm4
5227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm1, %xmm4
5228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrlq $32, %xmm2
5229*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pmuludq %xmm3, %xmm2
5230*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psllq $32, %xmm2
5231*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm2
5232*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm2
5233*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq {{.*}}(%rip), %xmm0
5234*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
5235*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
5236*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
5237*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
5238*9880d681SAndroid Build Coastguard Worker;
5239*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: mul_add_v4i64_v4i32:
5240*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
5241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
5242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovsxdq %xmm2, %xmm2
5243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
5244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm1[2,3,0,1]
5245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovsxdq %xmm3, %xmm3
5246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmovsxdq %xmm1, %xmm1
5247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm4
5248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm5
5249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm5, %xmm0, %xmm5
5250*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm5, %xmm5
5251*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm5, %xmm4, %xmm4
5252*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm0, %xmm0
5253*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm1, %xmm0, %xmm0
5254*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm0, %xmm0
5255*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm0, %xmm4, %xmm0
5256*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm2, %xmm1
5257*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm4
5258*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm4, %xmm2, %xmm4
5259*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm4, %xmm4
5260*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm1, %xmm1
5261*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlq $32, %xmm2, %xmm2
5262*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpmuludq %xmm3, %xmm2, %xmm2
5263*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllq $32, %xmm2, %xmm2
5264*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm2, %xmm1, %xmm1
5265*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm1, %xmm1
5266*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq {{.*}}(%rip), %xmm0, %xmm0
5267*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
5268*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[0,1,0,2]
5269*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
5270*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
5271*9880d681SAndroid Build Coastguard Worker;
5272*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: mul_add_v4i64_v4i32:
5273*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
5274*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
5275*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovsxdq %xmm1, %ymm1
5276*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
5277*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm1, %ymm3
5278*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm3, %ymm0, %ymm3
5279*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm3, %ymm3
5280*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
5281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $32, %ymm0, %ymm0
5282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
5283*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $32, %ymm0, %ymm0
5284*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
5285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
5286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,0,2,4,6,4,6]
5287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,3,2,3]
5288*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
5289*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
5290*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
5291*9880d681SAndroid Build Coastguard Worker;
5292*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: mul_add_v4i64_v4i32:
5293*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
5294*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovsxdq %xmm0, %ymm0
5295*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovsxdq %xmm1, %ymm1
5296*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm2
5297*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %ymm1, %ymm3
5298*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm3, %ymm0, %ymm3
5299*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %ymm3, %ymm3
5300*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm3, %ymm2, %ymm2
5301*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsrlq $32, %ymm0, %ymm0
5302*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
5303*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpsllq $32, %ymm0, %ymm0
5304*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq %ymm0, %ymm2, %ymm0
5305*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpaddq {{.*}}(%rip), %ymm0, %ymm0
5306*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
5307*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    # kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
5308*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
5309*9880d681SAndroid Build Coastguard Worker  %1 = sext <4 x i32> %a0 to <4 x i64>
5310*9880d681SAndroid Build Coastguard Worker  %2 = sext <4 x i32> %a1 to <4 x i64>
5311*9880d681SAndroid Build Coastguard Worker  %3 = mul <4 x i64> %1, %2
5312*9880d681SAndroid Build Coastguard Worker  %4 = add <4 x i64> %3, <i64 -3, i64 -1, i64 1, i64 3>
5313*9880d681SAndroid Build Coastguard Worker  %5 = trunc <4 x i64> %4 to <4 x i32>
5314*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %5
5315*9880d681SAndroid Build Coastguard Worker}
5316