1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX512
9 ; FIXME: should be paddusb
10 define <16 x i8> @test1(<16 x i8> %x) {
13 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
14 ; SSE-NEXT: movdqa %xmm0, %xmm2
15 ; SSE-NEXT: psubb %xmm1, %xmm2
16 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
17 ; SSE-NEXT: por %xmm2, %xmm0
22 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
23 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm2
24 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
25 ; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
30 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
31 ; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm2
32 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
33 ; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0
36 ; AVX512-LABEL: test1:
38 ; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
39 ; AVX512-NEXT: vpsubb %xmm2, %xmm0, %xmm1
40 ; AVX512-NEXT: vpcmpeqb %xmm2, %xmm0, %k1
41 ; AVX512-NEXT: vmovdqu8 %xmm2, %xmm1 {%k1}
42 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
44 %1 = add <16 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
45 %2 = icmp eq <16 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
46 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
50 define <16 x i8> @test2(<16 x i8> %x) {
53 ; SSE-NEXT: paddusb {{.*}}(%rip), %xmm0
58 ; AVX-NEXT: vpaddusb {{.*}}(%rip), %xmm0, %xmm0
60 %1 = add <16 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>
61 %2 = icmp ugt <16 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
62 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
66 define <16 x i8> @test3(<16 x i8> %x) {
69 ; SSE-NEXT: paddusb {{.*}}(%rip), %xmm0
74 ; AVX-NEXT: vpaddusb {{.*}}(%rip), %xmm0, %xmm0
76 %1 = add <16 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>
77 %2 = icmp ugt <16 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>
78 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
82 define <16 x i8> @test4(<16 x i8> %x) {
85 ; SSE-NEXT: paddusb {{.*}}(%rip), %xmm0
90 ; AVX-NEXT: vpaddusb {{.*}}(%rip), %xmm0, %xmm0
92 %1 = add <16 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>
93 %2 = icmp ugt <16 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
94 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
98 ; FIXME: should be paddusb
99 define <16 x i8> @test5(<16 x i8> %x) {
102 ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
103 ; SSE-NEXT: pxor %xmm0, %xmm1
104 ; SSE-NEXT: pmaxub %xmm1, %xmm0
105 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
106 ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
107 ; SSE-NEXT: pxor %xmm2, %xmm0
108 ; SSE-NEXT: por %xmm1, %xmm0
113 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
114 ; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
115 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
116 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
117 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
118 ; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
123 ; AVX2-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
124 ; AVX2-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
125 ; AVX2-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
126 ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
127 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
128 ; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0
131 ; AVX512-LABEL: test5:
133 ; AVX512-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
134 ; AVX512-NEXT: vpcmpltub %xmm0, %xmm1, %k1
135 ; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
136 ; AVX512-NEXT: vmovdqu8 %xmm0, %xmm1 {%k1}
137 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
139 %1 = xor <16 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
140 %2 = icmp ult <16 x i8> %1, %x
141 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
145 define <16 x i8> @test6(<16 x i8> %x) {
148 ; SSE-NEXT: paddusb {{.*}}(%rip), %xmm0
153 ; AVX-NEXT: vpaddusb {{.*}}(%rip), %xmm0, %xmm0
155 %1 = add <16 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
156 %2 = icmp ugt <16 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>
157 %3 = select <16 x i1> %2, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <16 x i8> %1
161 define <32 x i8> @test7(<32 x i8> %x) {
164 ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
165 ; SSE-NEXT: movdqa %xmm1, %xmm3
166 ; SSE-NEXT: psubb %xmm2, %xmm3
167 ; SSE-NEXT: movdqa %xmm0, %xmm4
168 ; SSE-NEXT: psubb %xmm2, %xmm4
169 ; SSE-NEXT: pcmpeqb %xmm2, %xmm1
170 ; SSE-NEXT: por %xmm3, %xmm1
171 ; SSE-NEXT: pcmpeqb %xmm2, %xmm0
172 ; SSE-NEXT: por %xmm4, %xmm0
177 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
178 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
179 ; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm3
180 ; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm4
181 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
182 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1
183 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
184 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
185 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
190 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
191 ; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm2
192 ; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0
193 ; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
196 ; AVX512-LABEL: test7:
198 ; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
199 ; AVX512-NEXT: vpsubb %ymm2, %ymm0, %ymm1
200 ; AVX512-NEXT: vpcmpeqb %ymm2, %ymm0, %k1
201 ; AVX512-NEXT: vmovdqu8 %ymm2, %ymm1 {%k1}
202 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
204 %1 = add <32 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
205 %2 = icmp eq <32 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
206 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
210 define <32 x i8> @test8(<32 x i8> %x) {
213 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
214 ; SSE-NEXT: paddusb %xmm2, %xmm0
215 ; SSE-NEXT: paddusb %xmm2, %xmm1
220 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
221 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
222 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
223 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
224 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
229 ; AVX2-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
232 ; AVX512-LABEL: test8:
234 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
236 %1 = add <32 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>
237 %2 = icmp ugt <32 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
238 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
242 define <32 x i8> @test9(<32 x i8> %x) {
245 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
246 ; SSE-NEXT: paddusb %xmm2, %xmm0
247 ; SSE-NEXT: paddusb %xmm2, %xmm1
252 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
253 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
254 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
255 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
256 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
261 ; AVX2-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
264 ; AVX512-LABEL: test9:
266 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
268 %1 = add <32 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>
269 %2 = icmp ugt <32 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>
270 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
274 define <32 x i8> @test10(<32 x i8> %x) {
277 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
278 ; SSE-NEXT: paddusb %xmm2, %xmm0
279 ; SSE-NEXT: paddusb %xmm2, %xmm1
282 ; AVX1-LABEL: test10:
284 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
285 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
286 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
287 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
288 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
291 ; AVX2-LABEL: test10:
293 ; AVX2-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
296 ; AVX512-LABEL: test10:
298 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
300 %1 = add <32 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>
301 %2 = icmp ugt <32 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
302 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
306 define <32 x i8> @test11(<32 x i8> %x) {
309 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
310 ; SSE-NEXT: movdqa %xmm0, %xmm3
311 ; SSE-NEXT: pxor %xmm2, %xmm3
312 ; SSE-NEXT: pxor %xmm1, %xmm2
313 ; SSE-NEXT: pmaxub %xmm2, %xmm1
314 ; SSE-NEXT: pcmpeqb %xmm2, %xmm1
315 ; SSE-NEXT: pcmpeqd %xmm4, %xmm4
316 ; SSE-NEXT: pxor %xmm4, %xmm1
317 ; SSE-NEXT: pmaxub %xmm3, %xmm0
318 ; SSE-NEXT: pcmpeqb %xmm3, %xmm0
319 ; SSE-NEXT: pxor %xmm4, %xmm0
320 ; SSE-NEXT: por %xmm3, %xmm0
321 ; SSE-NEXT: por %xmm2, %xmm1
324 ; AVX1-LABEL: test11:
326 ; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm1
327 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
328 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
329 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
330 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm3, %xmm2
331 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
332 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
333 ; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
334 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
335 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0
336 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
337 ; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
340 ; AVX2-LABEL: test11:
342 ; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm1
343 ; AVX2-NEXT: vpmaxub %ymm0, %ymm1, %ymm0
344 ; AVX2-NEXT: vpcmpeqb %ymm0, %ymm1, %ymm0
345 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
346 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
347 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
350 ; AVX512-LABEL: test11:
352 ; AVX512-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm1
353 ; AVX512-NEXT: vpcmpltub %ymm0, %ymm1, %k1
354 ; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
355 ; AVX512-NEXT: vmovdqu8 %ymm0, %ymm1 {%k1}
356 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
358 %1 = xor <32 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
359 %2 = icmp ult <32 x i8> %1, %x
360 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
364 define <32 x i8> @test12(<32 x i8> %x) {
367 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
368 ; SSE-NEXT: paddusb %xmm2, %xmm0
369 ; SSE-NEXT: paddusb %xmm2, %xmm1
372 ; AVX1-LABEL: test12:
374 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
375 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
376 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
377 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
378 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
381 ; AVX2-LABEL: test12:
383 ; AVX2-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
386 ; AVX512-LABEL: test12:
388 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %ymm0, %ymm0
390 %1 = add <32 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
391 %2 = icmp ugt <32 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>
392 %3 = select <32 x i1> %2, <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <32 x i8> %1
396 define <64 x i8> @test13(<64 x i8> %x) {
399 ; SSE-NEXT: pcmpeqd %xmm8, %xmm8
400 ; SSE-NEXT: movdqa %xmm3, %xmm5
401 ; SSE-NEXT: psubb %xmm8, %xmm5
402 ; SSE-NEXT: movdqa %xmm2, %xmm6
403 ; SSE-NEXT: psubb %xmm8, %xmm6
404 ; SSE-NEXT: movdqa %xmm1, %xmm7
405 ; SSE-NEXT: psubb %xmm8, %xmm7
406 ; SSE-NEXT: movdqa %xmm0, %xmm4
407 ; SSE-NEXT: psubb %xmm8, %xmm4
408 ; SSE-NEXT: pcmpeqb %xmm8, %xmm3
409 ; SSE-NEXT: por %xmm5, %xmm3
410 ; SSE-NEXT: pcmpeqb %xmm8, %xmm2
411 ; SSE-NEXT: por %xmm6, %xmm2
412 ; SSE-NEXT: pcmpeqb %xmm8, %xmm1
413 ; SSE-NEXT: por %xmm7, %xmm1
414 ; SSE-NEXT: pcmpeqb %xmm8, %xmm0
415 ; SSE-NEXT: por %xmm4, %xmm0
418 ; AVX1-LABEL: test13:
420 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
421 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
422 ; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm4
423 ; AVX1-NEXT: vpsubb %xmm3, %xmm1, %xmm5
424 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
425 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
426 ; AVX1-NEXT: vpsubb %xmm3, %xmm5, %xmm6
427 ; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm7
428 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
429 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm2, %xmm2
430 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1
431 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
432 ; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1
433 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm5, %xmm2
434 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0
435 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
436 ; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0
439 ; AVX2-LABEL: test13:
441 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
442 ; AVX2-NEXT: vpsubb %ymm2, %ymm1, %ymm3
443 ; AVX2-NEXT: vpsubb %ymm2, %ymm0, %ymm4
444 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm1
445 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
446 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
447 ; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0
450 ; AVX512-LABEL: test13:
452 ; AVX512-NEXT: vpternlogd $255, %zmm2, %zmm2, %zmm2
453 ; AVX512-NEXT: vpsubb %zmm2, %zmm0, %zmm1
454 ; AVX512-NEXT: vpcmpeqb %zmm2, %zmm0, %k1
455 ; AVX512-NEXT: vmovdqu8 %zmm2, %zmm1 {%k1}
456 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
458 %1 = add <64 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
459 %2 = icmp eq <64 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
460 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
464 define <64 x i8> @test14(<64 x i8> %x) {
467 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
468 ; SSE-NEXT: paddusb %xmm4, %xmm0
469 ; SSE-NEXT: paddusb %xmm4, %xmm1
470 ; SSE-NEXT: paddusb %xmm4, %xmm2
471 ; SSE-NEXT: paddusb %xmm4, %xmm3
474 ; AVX1-LABEL: test14:
476 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
477 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
478 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
479 ; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0
480 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
481 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
482 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
483 ; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1
484 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
487 ; AVX2-LABEL: test14:
489 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
490 ; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0
491 ; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1
494 ; AVX512-LABEL: test14:
496 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %zmm0, %zmm0
498 %1 = add <64 x i8> %x, <i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127, i8 127>
499 %2 = icmp ugt <64 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
500 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
504 define <64 x i8> @test15(<64 x i8> %x) {
507 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
508 ; SSE-NEXT: paddusb %xmm4, %xmm0
509 ; SSE-NEXT: paddusb %xmm4, %xmm1
510 ; SSE-NEXT: paddusb %xmm4, %xmm2
511 ; SSE-NEXT: paddusb %xmm4, %xmm3
514 ; AVX1-LABEL: test15:
516 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
517 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
518 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
519 ; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0
520 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
521 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
522 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
523 ; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1
524 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
527 ; AVX2-LABEL: test15:
529 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
530 ; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0
531 ; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1
534 ; AVX512-LABEL: test15:
536 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %zmm0, %zmm0
538 %1 = add <64 x i8> %x, <i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127, i8 -127>
539 %2 = icmp ugt <64 x i8> %x, <i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126, i8 126>
540 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
544 define <64 x i8> @test16(<64 x i8> %x) {
547 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
548 ; SSE-NEXT: paddusb %xmm4, %xmm0
549 ; SSE-NEXT: paddusb %xmm4, %xmm1
550 ; SSE-NEXT: paddusb %xmm4, %xmm2
551 ; SSE-NEXT: paddusb %xmm4, %xmm3
554 ; AVX1-LABEL: test16:
556 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
557 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
558 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
559 ; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0
560 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
561 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
562 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
563 ; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1
564 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
567 ; AVX2-LABEL: test16:
569 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
570 ; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0
571 ; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1
574 ; AVX512-LABEL: test16:
576 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %zmm0, %zmm0
578 %1 = add <64 x i8> %x, <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>
579 %2 = icmp ugt <64 x i8> %x, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
580 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
584 define <64 x i8> @test17(<64 x i8> %x) {
587 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
588 ; SSE-NEXT: movdqa %xmm0, %xmm5
589 ; SSE-NEXT: pxor %xmm4, %xmm5
590 ; SSE-NEXT: movdqa %xmm1, %xmm6
591 ; SSE-NEXT: pxor %xmm4, %xmm6
592 ; SSE-NEXT: movdqa %xmm2, %xmm7
593 ; SSE-NEXT: pxor %xmm4, %xmm7
594 ; SSE-NEXT: pxor %xmm3, %xmm4
595 ; SSE-NEXT: pmaxub %xmm4, %xmm3
596 ; SSE-NEXT: pcmpeqb %xmm4, %xmm3
597 ; SSE-NEXT: pcmpeqd %xmm8, %xmm8
598 ; SSE-NEXT: pxor %xmm8, %xmm3
599 ; SSE-NEXT: pmaxub %xmm7, %xmm2
600 ; SSE-NEXT: pcmpeqb %xmm7, %xmm2
601 ; SSE-NEXT: pxor %xmm8, %xmm2
602 ; SSE-NEXT: pmaxub %xmm6, %xmm1
603 ; SSE-NEXT: pcmpeqb %xmm6, %xmm1
604 ; SSE-NEXT: pxor %xmm8, %xmm1
605 ; SSE-NEXT: pmaxub %xmm5, %xmm0
606 ; SSE-NEXT: pcmpeqb %xmm5, %xmm0
607 ; SSE-NEXT: pxor %xmm8, %xmm0
608 ; SSE-NEXT: por %xmm5, %xmm0
609 ; SSE-NEXT: por %xmm6, %xmm1
610 ; SSE-NEXT: por %xmm7, %xmm2
611 ; SSE-NEXT: por %xmm4, %xmm3
614 ; AVX1-LABEL: test17:
616 ; AVX1-NEXT: vmovaps {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
617 ; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm3
618 ; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2
619 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
620 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
621 ; AVX1-NEXT: vpmaxub %xmm5, %xmm4, %xmm5
622 ; AVX1-NEXT: vpcmpeqb %xmm5, %xmm4, %xmm4
623 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
624 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
625 ; AVX1-NEXT: vpmaxub %xmm1, %xmm2, %xmm1
626 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm2, %xmm1
627 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1
628 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1
629 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
630 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
631 ; AVX1-NEXT: vpmaxub %xmm6, %xmm4, %xmm6
632 ; AVX1-NEXT: vpcmpeqb %xmm6, %xmm4, %xmm4
633 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
634 ; AVX1-NEXT: vpmaxub %xmm0, %xmm3, %xmm0
635 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm3, %xmm0
636 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0
637 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
638 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
639 ; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
642 ; AVX2-LABEL: test17:
644 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
645 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
646 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
647 ; AVX2-NEXT: vpmaxub %ymm1, %ymm2, %ymm1
648 ; AVX2-NEXT: vpcmpeqb %ymm1, %ymm2, %ymm1
649 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4
650 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1
651 ; AVX2-NEXT: vpmaxub %ymm0, %ymm3, %ymm0
652 ; AVX2-NEXT: vpcmpeqb %ymm0, %ymm3, %ymm0
653 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0
654 ; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0
655 ; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
658 ; AVX512-LABEL: test17:
660 ; AVX512-NEXT: vpxorq {{.*}}(%rip), %zmm0, %zmm1
661 ; AVX512-NEXT: vpcmpltub %zmm0, %zmm1, %k1
662 ; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
663 ; AVX512-NEXT: vmovdqu8 %zmm0, %zmm1 {%k1}
664 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
666 %1 = xor <64 x i8> %x, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
667 %2 = icmp ult <64 x i8> %1, %x
668 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
672 define <64 x i8> @test18(<64 x i8> %x) {
675 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
676 ; SSE-NEXT: paddusb %xmm4, %xmm0
677 ; SSE-NEXT: paddusb %xmm4, %xmm1
678 ; SSE-NEXT: paddusb %xmm4, %xmm2
679 ; SSE-NEXT: paddusb %xmm4, %xmm3
682 ; AVX1-LABEL: test18:
684 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
685 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
686 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
687 ; AVX1-NEXT: vpaddusb %xmm3, %xmm0, %xmm0
688 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
689 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
690 ; AVX1-NEXT: vpaddusb %xmm3, %xmm2, %xmm2
691 ; AVX1-NEXT: vpaddusb %xmm3, %xmm1, %xmm1
692 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
695 ; AVX2-LABEL: test18:
697 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
698 ; AVX2-NEXT: vpaddusb %ymm2, %ymm0, %ymm0
699 ; AVX2-NEXT: vpaddusb %ymm2, %ymm1, %ymm1
702 ; AVX512-LABEL: test18:
704 ; AVX512-NEXT: vpaddusb {{.*}}(%rip), %zmm0, %zmm0
706 %1 = add <64 x i8> %x, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
707 %2 = icmp ugt <64 x i8> %x, <i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3, i8 -3>
708 %3 = select <64 x i1> %2, <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <64 x i8> %1
712 define <8 x i16> @test19(<8 x i16> %x) {
715 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
716 ; SSE-NEXT: movdqa %xmm0, %xmm2
717 ; SSE-NEXT: psubw %xmm1, %xmm2
718 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
719 ; SSE-NEXT: por %xmm2, %xmm0
722 ; AVX1-LABEL: test19:
724 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
725 ; AVX1-NEXT: vpsubw %xmm1, %xmm0, %xmm2
726 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
727 ; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
730 ; AVX2-LABEL: test19:
732 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
733 ; AVX2-NEXT: vpsubw %xmm1, %xmm0, %xmm2
734 ; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
735 ; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0
738 ; AVX512-LABEL: test19:
740 ; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
741 ; AVX512-NEXT: vpsubw %xmm2, %xmm0, %xmm1
742 ; AVX512-NEXT: vpcmpeqw %xmm2, %xmm0, %k1
743 ; AVX512-NEXT: vmovdqu16 %xmm2, %xmm1 {%k1}
744 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
746 %1 = add <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
747 %2 = icmp eq <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
748 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
752 define <8 x i16> @test20(<8 x i16> %x) {
755 ; SSE-NEXT: paddusw {{.*}}(%rip), %xmm0
760 ; AVX-NEXT: vpaddusw {{.*}}(%rip), %xmm0, %xmm0
762 %1 = add <8 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>
763 %2 = icmp ugt <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
764 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
768 define <8 x i16> @test21(<8 x i16> %x) {
771 ; SSE-NEXT: paddusw {{.*}}(%rip), %xmm0
776 ; AVX-NEXT: vpaddusw {{.*}}(%rip), %xmm0, %xmm0
778 %1 = add <8 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>
779 %2 = icmp ugt <8 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>
780 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
784 define <8 x i16> @test22(<8 x i16> %x) {
787 ; SSE-NEXT: paddusw {{.*}}(%rip), %xmm0
792 ; AVX-NEXT: vpaddusw {{.*}}(%rip), %xmm0, %xmm0
794 %1 = add <8 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
795 %2 = icmp ugt <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
796 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
800 define <8 x i16> @test23(<8 x i16> %x) {
801 ; SSE2-LABEL: test23:
803 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
804 ; SSE2-NEXT: pxor %xmm0, %xmm2
805 ; SSE2-NEXT: movdqa %xmm2, %xmm1
806 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
807 ; SSE2-NEXT: por %xmm2, %xmm1
808 ; SSE2-NEXT: movdqa %xmm1, %xmm0
811 ; SSSE3-LABEL: test23:
813 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
814 ; SSSE3-NEXT: pxor %xmm0, %xmm2
815 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
816 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
817 ; SSSE3-NEXT: por %xmm2, %xmm1
818 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
821 ; SSE41-LABEL: test23:
823 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [32768,32768,32768,32768,32768,32768,32768,32768]
824 ; SSE41-NEXT: pxor %xmm0, %xmm1
825 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0
826 ; SSE41-NEXT: pcmpeqw %xmm1, %xmm0
827 ; SSE41-NEXT: pcmpeqd %xmm2, %xmm2
828 ; SSE41-NEXT: pxor %xmm2, %xmm0
829 ; SSE41-NEXT: por %xmm1, %xmm0
832 ; AVX1-LABEL: test23:
834 ; AVX1-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
835 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0
836 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0
837 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
838 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
839 ; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
842 ; AVX2-LABEL: test23:
844 ; AVX2-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
845 ; AVX2-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0
846 ; AVX2-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0
847 ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
848 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
849 ; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0
852 ; AVX512-LABEL: test23:
854 ; AVX512-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm1
855 ; AVX512-NEXT: vpcmpltuw %xmm0, %xmm1, %k1
856 ; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
857 ; AVX512-NEXT: vmovdqu16 %xmm0, %xmm1 {%k1}
858 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
860 %1 = xor <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
861 %2 = icmp ult <8 x i16> %1, %x
862 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
866 define <8 x i16> @test24(<8 x i16> %x) {
869 ; SSE-NEXT: paddusw {{.*}}(%rip), %xmm0
874 ; AVX-NEXT: vpaddusw {{.*}}(%rip), %xmm0, %xmm0
876 %1 = add <8 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
877 %2 = icmp ugt <8 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
878 %3 = select <8 x i1> %2, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <8 x i16> %1
882 define <16 x i16> @test25(<16 x i16> %x) {
885 ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
886 ; SSE-NEXT: movdqa %xmm1, %xmm3
887 ; SSE-NEXT: psubw %xmm2, %xmm3
888 ; SSE-NEXT: movdqa %xmm0, %xmm4
889 ; SSE-NEXT: psubw %xmm2, %xmm4
890 ; SSE-NEXT: pcmpeqw %xmm2, %xmm1
891 ; SSE-NEXT: por %xmm3, %xmm1
892 ; SSE-NEXT: pcmpeqw %xmm2, %xmm0
893 ; SSE-NEXT: por %xmm4, %xmm0
896 ; AVX1-LABEL: test25:
898 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
899 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
900 ; AVX1-NEXT: vpsubw %xmm2, %xmm1, %xmm3
901 ; AVX1-NEXT: vpsubw %xmm2, %xmm0, %xmm4
902 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
903 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1
904 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0
905 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
906 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
909 ; AVX2-LABEL: test25:
911 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
912 ; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm2
913 ; AVX2-NEXT: vpcmpeqw %ymm1, %ymm0, %ymm0
914 ; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
917 ; AVX512-LABEL: test25:
919 ; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
920 ; AVX512-NEXT: vpsubw %ymm2, %ymm0, %ymm1
921 ; AVX512-NEXT: vpcmpeqw %ymm2, %ymm0, %k1
922 ; AVX512-NEXT: vmovdqu16 %ymm2, %ymm1 {%k1}
923 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
925 %1 = add <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
926 %2 = icmp eq <16 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
927 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
931 define <16 x i16> @test26(<16 x i16> %x) {
934 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]
935 ; SSE-NEXT: paddusw %xmm2, %xmm0
936 ; SSE-NEXT: paddusw %xmm2, %xmm1
939 ; AVX1-LABEL: test26:
941 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
942 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]
943 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
944 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
945 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
948 ; AVX2-LABEL: test26:
950 ; AVX2-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
953 ; AVX512-LABEL: test26:
955 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
957 %1 = add <16 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>
958 %2 = icmp ugt <16 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
959 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
963 define <16 x i16> @test27(<16 x i16> %x) {
966 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]
967 ; SSE-NEXT: paddusw %xmm2, %xmm0
968 ; SSE-NEXT: paddusw %xmm2, %xmm1
971 ; AVX1-LABEL: test27:
973 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
974 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]
975 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
976 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
977 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
980 ; AVX2-LABEL: test27:
982 ; AVX2-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
985 ; AVX512-LABEL: test27:
987 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
989 %1 = add <16 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>
990 %2 = icmp ugt <16 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>
991 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
995 define <16 x i16> @test28(<16 x i16> %x) {
998 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
999 ; SSE-NEXT: paddusw %xmm2, %xmm0
1000 ; SSE-NEXT: paddusw %xmm2, %xmm1
1003 ; AVX1-LABEL: test28:
1005 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1006 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1007 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
1008 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
1009 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1012 ; AVX2-LABEL: test28:
1014 ; AVX2-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
1017 ; AVX512-LABEL: test28:
1019 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
1021 %1 = add <16 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
1022 %2 = icmp ugt <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1023 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1027 define <16 x i16> @test29(<16 x i16> %x) {
1028 ; SSE2-LABEL: test29:
1030 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1031 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1032 ; SSE2-NEXT: pxor %xmm3, %xmm4
1033 ; SSE2-NEXT: pxor %xmm1, %xmm3
1034 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1035 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm2
1036 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1037 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
1038 ; SSE2-NEXT: por %xmm4, %xmm1
1039 ; SSE2-NEXT: por %xmm3, %xmm2
1040 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1041 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1044 ; SSSE3-LABEL: test29:
1046 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1047 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
1048 ; SSSE3-NEXT: pxor %xmm3, %xmm4
1049 ; SSSE3-NEXT: pxor %xmm1, %xmm3
1050 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1051 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2
1052 ; SSSE3-NEXT: movdqa %xmm4, %xmm1
1053 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
1054 ; SSSE3-NEXT: por %xmm4, %xmm1
1055 ; SSSE3-NEXT: por %xmm3, %xmm2
1056 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1057 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1060 ; SSE41-LABEL: test29:
1062 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1063 ; SSE41-NEXT: movdqa %xmm0, %xmm3
1064 ; SSE41-NEXT: pxor %xmm2, %xmm3
1065 ; SSE41-NEXT: pxor %xmm1, %xmm2
1066 ; SSE41-NEXT: pmaxuw %xmm2, %xmm1
1067 ; SSE41-NEXT: pcmpeqw %xmm2, %xmm1
1068 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
1069 ; SSE41-NEXT: pxor %xmm4, %xmm1
1070 ; SSE41-NEXT: pmaxuw %xmm3, %xmm0
1071 ; SSE41-NEXT: pcmpeqw %xmm3, %xmm0
1072 ; SSE41-NEXT: pxor %xmm4, %xmm0
1073 ; SSE41-NEXT: por %xmm3, %xmm0
1074 ; SSE41-NEXT: por %xmm2, %xmm1
1077 ; AVX1-LABEL: test29:
1079 ; AVX1-NEXT: vxorps {{.*}}(%rip), %ymm0, %ymm1
1080 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1081 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1082 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1083 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm2
1084 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
1085 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1086 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0
1087 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0
1088 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0
1089 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1090 ; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1093 ; AVX2-LABEL: test29:
1095 ; AVX2-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm1
1096 ; AVX2-NEXT: vpmaxuw %ymm0, %ymm1, %ymm0
1097 ; AVX2-NEXT: vpcmpeqw %ymm0, %ymm1, %ymm0
1098 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
1099 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
1100 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1103 ; AVX512-LABEL: test29:
1105 ; AVX512-NEXT: vpxor {{.*}}(%rip), %ymm0, %ymm1
1106 ; AVX512-NEXT: vpcmpltuw %ymm0, %ymm1, %k1
1107 ; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
1108 ; AVX512-NEXT: vmovdqu16 %ymm0, %ymm1 {%k1}
1109 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
1111 %1 = xor <16 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1112 %2 = icmp ult <16 x i16> %1, %x
1113 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1117 define <16 x i16> @test30(<16 x i16> %x) {
1118 ; SSE-LABEL: test30:
1120 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1121 ; SSE-NEXT: paddusw %xmm2, %xmm0
1122 ; SSE-NEXT: paddusw %xmm2, %xmm1
1125 ; AVX1-LABEL: test30:
1127 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1128 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1129 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
1130 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
1131 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1134 ; AVX2-LABEL: test30:
1136 ; AVX2-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
1139 ; AVX512-LABEL: test30:
1141 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %ymm0, %ymm0
1143 %1 = add <16 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1144 %2 = icmp ugt <16 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
1145 %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1149 define <32 x i16> @test31(<32 x i16> %x) {
1150 ; SSE-LABEL: test31:
1152 ; SSE-NEXT: pcmpeqd %xmm8, %xmm8
1153 ; SSE-NEXT: movdqa %xmm3, %xmm5
1154 ; SSE-NEXT: psubw %xmm8, %xmm5
1155 ; SSE-NEXT: movdqa %xmm2, %xmm6
1156 ; SSE-NEXT: psubw %xmm8, %xmm6
1157 ; SSE-NEXT: movdqa %xmm1, %xmm7
1158 ; SSE-NEXT: psubw %xmm8, %xmm7
1159 ; SSE-NEXT: movdqa %xmm0, %xmm4
1160 ; SSE-NEXT: psubw %xmm8, %xmm4
1161 ; SSE-NEXT: pcmpeqw %xmm8, %xmm3
1162 ; SSE-NEXT: por %xmm5, %xmm3
1163 ; SSE-NEXT: pcmpeqw %xmm8, %xmm2
1164 ; SSE-NEXT: por %xmm6, %xmm2
1165 ; SSE-NEXT: pcmpeqw %xmm8, %xmm1
1166 ; SSE-NEXT: por %xmm7, %xmm1
1167 ; SSE-NEXT: pcmpeqw %xmm8, %xmm0
1168 ; SSE-NEXT: por %xmm4, %xmm0
1171 ; AVX1-LABEL: test31:
1173 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1174 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
1175 ; AVX1-NEXT: vpsubw %xmm3, %xmm2, %xmm4
1176 ; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm5
1177 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1178 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1179 ; AVX1-NEXT: vpsubw %xmm3, %xmm5, %xmm6
1180 ; AVX1-NEXT: vpsubw %xmm3, %xmm0, %xmm7
1181 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
1182 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm2, %xmm2
1183 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm1
1184 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1185 ; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1
1186 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm5, %xmm2
1187 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0
1188 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1189 ; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0
1192 ; AVX2-LABEL: test31:
1194 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
1195 ; AVX2-NEXT: vpsubw %ymm2, %ymm1, %ymm3
1196 ; AVX2-NEXT: vpsubw %ymm2, %ymm0, %ymm4
1197 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm1, %ymm1
1198 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
1199 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
1200 ; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0
1203 ; AVX512-LABEL: test31:
1205 ; AVX512-NEXT: vpternlogd $255, %zmm2, %zmm2, %zmm2
1206 ; AVX512-NEXT: vpsubw %zmm2, %zmm0, %zmm1
1207 ; AVX512-NEXT: vpcmpeqw %zmm2, %zmm0, %k1
1208 ; AVX512-NEXT: vmovdqu16 %zmm2, %zmm1 {%k1}
1209 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1211 %1 = add <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1212 %2 = icmp eq <32 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1213 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1217 define <32 x i16> @test32(<32 x i16> %x) {
1218 ; SSE-LABEL: test32:
1220 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]
1221 ; SSE-NEXT: paddusw %xmm4, %xmm0
1222 ; SSE-NEXT: paddusw %xmm4, %xmm1
1223 ; SSE-NEXT: paddusw %xmm4, %xmm2
1224 ; SSE-NEXT: paddusw %xmm4, %xmm3
1227 ; AVX1-LABEL: test32:
1229 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1230 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]
1231 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1232 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1233 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1234 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1235 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1236 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1237 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1240 ; AVX2-LABEL: test32:
1242 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]
1243 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1244 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1247 ; AVX512-LABEL: test32:
1249 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %zmm0, %zmm0
1251 %1 = add <32 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>
1252 %2 = icmp ugt <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1253 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1257 define <32 x i16> @test33(<32 x i16> %x) {
1258 ; SSE-LABEL: test33:
1260 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]
1261 ; SSE-NEXT: paddusw %xmm4, %xmm0
1262 ; SSE-NEXT: paddusw %xmm4, %xmm1
1263 ; SSE-NEXT: paddusw %xmm4, %xmm2
1264 ; SSE-NEXT: paddusw %xmm4, %xmm3
1267 ; AVX1-LABEL: test33:
1269 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1270 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
1271 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1272 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1273 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1274 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1275 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1276 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1277 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1280 ; AVX2-LABEL: test33:
1282 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]
1283 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1284 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1287 ; AVX512-LABEL: test33:
1289 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %zmm0, %zmm0
1291 %1 = add <32 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>
1292 %2 = icmp ugt <32 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>
1293 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1297 define <32 x i16> @test34(<32 x i16> %x) {
1298 ; SSE-LABEL: test34:
1300 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1301 ; SSE-NEXT: paddusw %xmm4, %xmm0
1302 ; SSE-NEXT: paddusw %xmm4, %xmm1
1303 ; SSE-NEXT: paddusw %xmm4, %xmm2
1304 ; SSE-NEXT: paddusw %xmm4, %xmm3
1307 ; AVX1-LABEL: test34:
1309 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1310 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]
1311 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1312 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1313 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1314 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1315 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1316 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1317 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1320 ; AVX2-LABEL: test34:
1322 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]
1323 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1324 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1327 ; AVX512-LABEL: test34:
1329 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %zmm0, %zmm0
1331 %1 = add <32 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
1332 %2 = icmp ugt <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1333 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1337 define <32 x i16> @test35(<32 x i16> %x) {
1338 ; SSE2-LABEL: test35:
1340 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1341 ; SSE2-NEXT: movdqa %xmm0, %xmm6
1342 ; SSE2-NEXT: pxor %xmm5, %xmm6
1343 ; SSE2-NEXT: movdqa %xmm1, %xmm7
1344 ; SSE2-NEXT: pxor %xmm5, %xmm7
1345 ; SSE2-NEXT: movdqa %xmm2, %xmm8
1346 ; SSE2-NEXT: pxor %xmm5, %xmm8
1347 ; SSE2-NEXT: pxor %xmm3, %xmm5
1348 ; SSE2-NEXT: movdqa %xmm5, %xmm4
1349 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm4
1350 ; SSE2-NEXT: movdqa %xmm8, %xmm3
1351 ; SSE2-NEXT: pcmpgtw %xmm2, %xmm3
1352 ; SSE2-NEXT: movdqa %xmm7, %xmm2
1353 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm2
1354 ; SSE2-NEXT: movdqa %xmm6, %xmm1
1355 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
1356 ; SSE2-NEXT: por %xmm6, %xmm1
1357 ; SSE2-NEXT: por %xmm7, %xmm2
1358 ; SSE2-NEXT: por %xmm8, %xmm3
1359 ; SSE2-NEXT: por %xmm5, %xmm4
1360 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1361 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1362 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1363 ; SSE2-NEXT: movdqa %xmm4, %xmm3
1366 ; SSSE3-LABEL: test35:
1368 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1369 ; SSSE3-NEXT: movdqa %xmm0, %xmm6
1370 ; SSSE3-NEXT: pxor %xmm5, %xmm6
1371 ; SSSE3-NEXT: movdqa %xmm1, %xmm7
1372 ; SSSE3-NEXT: pxor %xmm5, %xmm7
1373 ; SSSE3-NEXT: movdqa %xmm2, %xmm8
1374 ; SSSE3-NEXT: pxor %xmm5, %xmm8
1375 ; SSSE3-NEXT: pxor %xmm3, %xmm5
1376 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
1377 ; SSSE3-NEXT: pcmpgtw %xmm3, %xmm4
1378 ; SSSE3-NEXT: movdqa %xmm8, %xmm3
1379 ; SSSE3-NEXT: pcmpgtw %xmm2, %xmm3
1380 ; SSSE3-NEXT: movdqa %xmm7, %xmm2
1381 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2
1382 ; SSSE3-NEXT: movdqa %xmm6, %xmm1
1383 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
1384 ; SSSE3-NEXT: por %xmm6, %xmm1
1385 ; SSSE3-NEXT: por %xmm7, %xmm2
1386 ; SSSE3-NEXT: por %xmm8, %xmm3
1387 ; SSSE3-NEXT: por %xmm5, %xmm4
1388 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1389 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1390 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1391 ; SSSE3-NEXT: movdqa %xmm4, %xmm3
1394 ; SSE41-LABEL: test35:
1396 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1397 ; SSE41-NEXT: movdqa %xmm0, %xmm5
1398 ; SSE41-NEXT: pxor %xmm4, %xmm5
1399 ; SSE41-NEXT: movdqa %xmm1, %xmm6
1400 ; SSE41-NEXT: pxor %xmm4, %xmm6
1401 ; SSE41-NEXT: movdqa %xmm2, %xmm7
1402 ; SSE41-NEXT: pxor %xmm4, %xmm7
1403 ; SSE41-NEXT: pxor %xmm3, %xmm4
1404 ; SSE41-NEXT: pmaxuw %xmm4, %xmm3
1405 ; SSE41-NEXT: pcmpeqw %xmm4, %xmm3
1406 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm8
1407 ; SSE41-NEXT: pxor %xmm8, %xmm3
1408 ; SSE41-NEXT: pmaxuw %xmm7, %xmm2
1409 ; SSE41-NEXT: pcmpeqw %xmm7, %xmm2
1410 ; SSE41-NEXT: pxor %xmm8, %xmm2
1411 ; SSE41-NEXT: pmaxuw %xmm6, %xmm1
1412 ; SSE41-NEXT: pcmpeqw %xmm6, %xmm1
1413 ; SSE41-NEXT: pxor %xmm8, %xmm1
1414 ; SSE41-NEXT: pmaxuw %xmm5, %xmm0
1415 ; SSE41-NEXT: pcmpeqw %xmm5, %xmm0
1416 ; SSE41-NEXT: pxor %xmm8, %xmm0
1417 ; SSE41-NEXT: por %xmm5, %xmm0
1418 ; SSE41-NEXT: por %xmm6, %xmm1
1419 ; SSE41-NEXT: por %xmm7, %xmm2
1420 ; SSE41-NEXT: por %xmm4, %xmm3
1423 ; AVX1-LABEL: test35:
1425 ; AVX1-NEXT: vmovaps {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1426 ; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm3
1427 ; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2
1428 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
1429 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1430 ; AVX1-NEXT: vpmaxuw %xmm5, %xmm4, %xmm5
1431 ; AVX1-NEXT: vpcmpeqw %xmm5, %xmm4, %xmm4
1432 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
1433 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1434 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1
1435 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
1436 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1
1437 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1
1438 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
1439 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1440 ; AVX1-NEXT: vpmaxuw %xmm6, %xmm4, %xmm6
1441 ; AVX1-NEXT: vpcmpeqw %xmm6, %xmm4, %xmm4
1442 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1443 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0
1444 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm3, %xmm0
1445 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0
1446 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
1447 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
1448 ; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
1451 ; AVX2-LABEL: test35:
1453 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1454 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
1455 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
1456 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1
1457 ; AVX2-NEXT: vpcmpeqw %ymm1, %ymm2, %ymm1
1458 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4
1459 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1
1460 ; AVX2-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0
1461 ; AVX2-NEXT: vpcmpeqw %ymm0, %ymm3, %ymm0
1462 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0
1463 ; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0
1464 ; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
1467 ; AVX512-LABEL: test35:
1469 ; AVX512-NEXT: vpxorq {{.*}}(%rip), %zmm0, %zmm1
1470 ; AVX512-NEXT: vpcmpltuw %zmm0, %zmm1, %k1
1471 ; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
1472 ; AVX512-NEXT: vmovdqu16 %zmm0, %zmm1 {%k1}
1473 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1475 %1 = xor <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1476 %2 = icmp ult <32 x i16> %1, %x
1477 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1481 define <32 x i16> @test36(<32 x i16> %x) {
1482 ; SSE-LABEL: test36:
1484 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1485 ; SSE-NEXT: paddusw %xmm4, %xmm0
1486 ; SSE-NEXT: paddusw %xmm4, %xmm1
1487 ; SSE-NEXT: paddusw %xmm4, %xmm2
1488 ; SSE-NEXT: paddusw %xmm4, %xmm3
1491 ; AVX1-LABEL: test36:
1493 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1494 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]
1495 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1496 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1497 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1498 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1499 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1500 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1501 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1504 ; AVX2-LABEL: test36:
1506 ; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1507 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1508 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1511 ; AVX512-LABEL: test36:
1513 ; AVX512-NEXT: vpaddusw {{.*}}(%rip), %zmm0, %zmm0
1515 %1 = add <32 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1516 %2 = icmp ugt <32 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
1517 %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1521 define void @addus_v8i8(<8 x i8>* %p1, <8 x i8>* %p2) {
1522 ; SSE-LABEL: addus_v8i8:
1524 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1525 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1526 ; SSE-NEXT: paddusb %xmm0, %xmm1
1527 ; SSE-NEXT: movq %xmm1, (%rdi)
1530 ; AVX1-LABEL: addus_v8i8:
1532 ; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1533 ; AVX1-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1534 ; AVX1-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1535 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
1538 ; AVX2-LABEL: addus_v8i8:
1540 ; AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1541 ; AVX2-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1542 ; AVX2-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1543 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
1546 ; AVX512-LABEL: addus_v8i8:
1548 ; AVX512-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1549 ; AVX512-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1550 ; AVX512-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1551 ; AVX512-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1552 ; AVX512-NEXT: vpmovwb %xmm0, (%rdi)
1554 %ld1 = load <8 x i8>, <8 x i8>* %p1, align 8
1555 %ld2 = load <8 x i8>, <8 x i8>* %p2, align 8
1556 %1 = add <8 x i8> %ld2, %ld1
1557 %2 = icmp ugt <8 x i8> %ld1, %1
1558 %sh3 = select <8 x i1> %2, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i8> %1
1559 store <8 x i8> %sh3, <8 x i8>* %p1, align 8
1563 define void @addus_v4i8(<4 x i8>* %p1, <4 x i8>* %p2) {
1564 ; SSE-LABEL: addus_v4i8:
1566 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1567 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1568 ; SSE-NEXT: paddusb %xmm0, %xmm1
1569 ; SSE-NEXT: movd %xmm1, (%rdi)
1572 ; AVX1-LABEL: addus_v4i8:
1574 ; AVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1575 ; AVX1-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1576 ; AVX1-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1577 ; AVX1-NEXT: vmovd %xmm0, (%rdi)
1580 ; AVX2-LABEL: addus_v4i8:
1582 ; AVX2-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1583 ; AVX2-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1584 ; AVX2-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1585 ; AVX2-NEXT: vmovd %xmm0, (%rdi)
1588 ; AVX512-LABEL: addus_v4i8:
1590 ; AVX512-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1591 ; AVX512-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1592 ; AVX512-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1593 ; AVX512-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
1594 ; AVX512-NEXT: vpmovdb %xmm0, (%rdi)
1596 %ld1 = load <4 x i8>, <4 x i8>* %p1, align 4
1597 %ld2 = load <4 x i8>, <4 x i8>* %p2, align 4
1598 %1 = add <4 x i8> %ld2, %ld1
1599 %2 = icmp ugt <4 x i8> %ld1, %1
1600 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1601 store <4 x i8> %sh3, <4 x i8>* %p1, align 4
1605 define void @addus_v2i8(<2 x i8>* %p1, <2 x i8>* %p2) {
1606 ; SSE2-LABEL: addus_v2i8:
1608 ; SSE2-NEXT: movzwl (%rdi), %eax
1609 ; SSE2-NEXT: movd %eax, %xmm0
1610 ; SSE2-NEXT: movzwl (%rsi), %eax
1611 ; SSE2-NEXT: movd %eax, %xmm1
1612 ; SSE2-NEXT: paddusb %xmm0, %xmm1
1613 ; SSE2-NEXT: movd %xmm1, %eax
1614 ; SSE2-NEXT: movw %ax, (%rdi)
1617 ; SSSE3-LABEL: addus_v2i8:
1619 ; SSSE3-NEXT: movzwl (%rdi), %eax
1620 ; SSSE3-NEXT: movd %eax, %xmm0
1621 ; SSSE3-NEXT: movzwl (%rsi), %eax
1622 ; SSSE3-NEXT: movd %eax, %xmm1
1623 ; SSSE3-NEXT: paddusb %xmm0, %xmm1
1624 ; SSSE3-NEXT: movd %xmm1, %eax
1625 ; SSSE3-NEXT: movw %ax, (%rdi)
1628 ; SSE41-LABEL: addus_v2i8:
1630 ; SSE41-NEXT: movzwl (%rdi), %eax
1631 ; SSE41-NEXT: movd %eax, %xmm0
1632 ; SSE41-NEXT: movzwl (%rsi), %eax
1633 ; SSE41-NEXT: movd %eax, %xmm1
1634 ; SSE41-NEXT: paddusb %xmm0, %xmm1
1635 ; SSE41-NEXT: pextrw $0, %xmm1, (%rdi)
1638 ; AVX1-LABEL: addus_v2i8:
1640 ; AVX1-NEXT: movzwl (%rdi), %eax
1641 ; AVX1-NEXT: vmovd %eax, %xmm0
1642 ; AVX1-NEXT: movzwl (%rsi), %eax
1643 ; AVX1-NEXT: vmovd %eax, %xmm1
1644 ; AVX1-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1645 ; AVX1-NEXT: vpextrw $0, %xmm0, (%rdi)
1648 ; AVX2-LABEL: addus_v2i8:
1650 ; AVX2-NEXT: movzwl (%rdi), %eax
1651 ; AVX2-NEXT: vmovd %eax, %xmm0
1652 ; AVX2-NEXT: movzwl (%rsi), %eax
1653 ; AVX2-NEXT: vmovd %eax, %xmm1
1654 ; AVX2-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1655 ; AVX2-NEXT: vpextrw $0, %xmm0, (%rdi)
1658 ; AVX512-LABEL: addus_v2i8:
1660 ; AVX512-NEXT: movzwl (%rdi), %eax
1661 ; AVX512-NEXT: vmovd %eax, %xmm0
1662 ; AVX512-NEXT: movzwl (%rsi), %eax
1663 ; AVX512-NEXT: vmovd %eax, %xmm1
1664 ; AVX512-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1665 ; AVX512-NEXT: vpmovzxbq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero
1666 ; AVX512-NEXT: vpmovqb %xmm0, (%rdi)
1668 %ld1 = load <2 x i8>, <2 x i8>* %p1, align 2
1669 %ld2 = load <2 x i8>, <2 x i8>* %p2, align 2
1670 %1 = add <2 x i8> %ld2, %ld1
1671 %2 = icmp ugt <2 x i8> %ld1, %1
1672 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1673 store <2 x i8> %sh3, <2 x i8>* %p1, align 2
1677 define void @addus_v4i16(<4 x i16>* %p1, <4 x i16>* %p2) {
1678 ; SSE-LABEL: addus_v4i16:
1680 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1681 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1682 ; SSE-NEXT: paddusw %xmm0, %xmm1
1683 ; SSE-NEXT: movq %xmm1, (%rdi)
1686 ; AVX1-LABEL: addus_v4i16:
1688 ; AVX1-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1689 ; AVX1-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1690 ; AVX1-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1691 ; AVX1-NEXT: vmovq %xmm0, (%rdi)
1694 ; AVX2-LABEL: addus_v4i16:
1696 ; AVX2-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1697 ; AVX2-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1698 ; AVX2-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1699 ; AVX2-NEXT: vmovq %xmm0, (%rdi)
1702 ; AVX512-LABEL: addus_v4i16:
1704 ; AVX512-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1705 ; AVX512-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1706 ; AVX512-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1707 ; AVX512-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1708 ; AVX512-NEXT: vpmovdw %xmm0, (%rdi)
1710 %ld1 = load <4 x i16>, <4 x i16>* %p1, align 4
1711 %ld2 = load <4 x i16>, <4 x i16>* %p2, align 4
1712 %1 = add <4 x i16> %ld2, %ld1
1713 %2 = icmp ugt <4 x i16> %ld1, %1
1714 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1715 store <4 x i16> %sh3, <4 x i16>* %p1, align 4
1719 define void @addus_v2i16(<2 x i16>* %p1, <2 x i16>* %p2) {
1720 ; SSE-LABEL: addus_v2i16:
1722 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1723 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1724 ; SSE-NEXT: paddusw %xmm0, %xmm1
1725 ; SSE-NEXT: movd %xmm1, (%rdi)
1728 ; AVX1-LABEL: addus_v2i16:
1730 ; AVX1-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1731 ; AVX1-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1732 ; AVX1-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1733 ; AVX1-NEXT: vmovd %xmm0, (%rdi)
1736 ; AVX2-LABEL: addus_v2i16:
1738 ; AVX2-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1739 ; AVX2-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1740 ; AVX2-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1741 ; AVX2-NEXT: vmovd %xmm0, (%rdi)
1744 ; AVX512-LABEL: addus_v2i16:
1746 ; AVX512-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1747 ; AVX512-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1748 ; AVX512-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1749 ; AVX512-NEXT: vpmovzxwq {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero
1750 ; AVX512-NEXT: vpmovqw %xmm0, (%rdi)
1752 %ld1 = load <2 x i16>, <2 x i16>* %p1, align 2
1753 %ld2 = load <2 x i16>, <2 x i16>* %p2, align 2
1754 %1 = add <2 x i16> %ld2, %ld1
1755 %2 = icmp ugt <2 x i16> %ld1, %1
1756 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1757 store <2 x i16> %sh3, <2 x i16>* %p1, align 2