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 ; AVX-LABEL: addus_v8i8:
1532 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1533 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1534 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1535 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1537 %ld1 = load <8 x i8>, <8 x i8>* %p1, align 8
1538 %ld2 = load <8 x i8>, <8 x i8>* %p2, align 8
1539 %1 = add <8 x i8> %ld2, %ld1
1540 %2 = icmp ugt <8 x i8> %ld1, %1
1541 %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
1542 store <8 x i8> %sh3, <8 x i8>* %p1, align 8
1546 define void @addus_v4i8(<4 x i8>* %p1, <4 x i8>* %p2) {
1547 ; SSE-LABEL: addus_v4i8:
1549 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1550 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1551 ; SSE-NEXT: paddusb %xmm0, %xmm1
1552 ; SSE-NEXT: movd %xmm1, (%rdi)
1555 ; AVX-LABEL: addus_v4i8:
1557 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1558 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1559 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1560 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1562 %ld1 = load <4 x i8>, <4 x i8>* %p1, align 4
1563 %ld2 = load <4 x i8>, <4 x i8>* %p2, align 4
1564 %1 = add <4 x i8> %ld2, %ld1
1565 %2 = icmp ugt <4 x i8> %ld1, %1
1566 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1567 store <4 x i8> %sh3, <4 x i8>* %p1, align 4
1571 define void @addus_v2i8(<2 x i8>* %p1, <2 x i8>* %p2) {
1572 ; SSE2-LABEL: addus_v2i8:
1574 ; SSE2-NEXT: movzwl (%rdi), %eax
1575 ; SSE2-NEXT: movd %eax, %xmm0
1576 ; SSE2-NEXT: movzwl (%rsi), %eax
1577 ; SSE2-NEXT: movd %eax, %xmm1
1578 ; SSE2-NEXT: paddusb %xmm0, %xmm1
1579 ; SSE2-NEXT: movd %xmm1, %eax
1580 ; SSE2-NEXT: movw %ax, (%rdi)
1583 ; SSSE3-LABEL: addus_v2i8:
1585 ; SSSE3-NEXT: movzwl (%rdi), %eax
1586 ; SSSE3-NEXT: movd %eax, %xmm0
1587 ; SSSE3-NEXT: movzwl (%rsi), %eax
1588 ; SSSE3-NEXT: movd %eax, %xmm1
1589 ; SSSE3-NEXT: paddusb %xmm0, %xmm1
1590 ; SSSE3-NEXT: movd %xmm1, %eax
1591 ; SSSE3-NEXT: movw %ax, (%rdi)
1594 ; SSE41-LABEL: addus_v2i8:
1596 ; SSE41-NEXT: movzwl (%rdi), %eax
1597 ; SSE41-NEXT: movd %eax, %xmm0
1598 ; SSE41-NEXT: movzwl (%rsi), %eax
1599 ; SSE41-NEXT: movd %eax, %xmm1
1600 ; SSE41-NEXT: paddusb %xmm0, %xmm1
1601 ; SSE41-NEXT: pextrw $0, %xmm1, (%rdi)
1604 ; AVX-LABEL: addus_v2i8:
1606 ; AVX-NEXT: movzwl (%rdi), %eax
1607 ; AVX-NEXT: vmovd %eax, %xmm0
1608 ; AVX-NEXT: movzwl (%rsi), %eax
1609 ; AVX-NEXT: vmovd %eax, %xmm1
1610 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1611 ; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)
1613 %ld1 = load <2 x i8>, <2 x i8>* %p1, align 2
1614 %ld2 = load <2 x i8>, <2 x i8>* %p2, align 2
1615 %1 = add <2 x i8> %ld2, %ld1
1616 %2 = icmp ugt <2 x i8> %ld1, %1
1617 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1618 store <2 x i8> %sh3, <2 x i8>* %p1, align 2
1622 define void @addus_v4i16(<4 x i16>* %p1, <4 x i16>* %p2) {
1623 ; SSE-LABEL: addus_v4i16:
1625 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1626 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1627 ; SSE-NEXT: paddusw %xmm0, %xmm1
1628 ; SSE-NEXT: movq %xmm1, (%rdi)
1631 ; AVX-LABEL: addus_v4i16:
1633 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1634 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1635 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1636 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1638 %ld1 = load <4 x i16>, <4 x i16>* %p1, align 4
1639 %ld2 = load <4 x i16>, <4 x i16>* %p2, align 4
1640 %1 = add <4 x i16> %ld2, %ld1
1641 %2 = icmp ugt <4 x i16> %ld1, %1
1642 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1643 store <4 x i16> %sh3, <4 x i16>* %p1, align 4
1647 define void @addus_v2i16(<2 x i16>* %p1, <2 x i16>* %p2) {
1648 ; SSE-LABEL: addus_v2i16:
1650 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1651 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1652 ; SSE-NEXT: paddusw %xmm0, %xmm1
1653 ; SSE-NEXT: movd %xmm1, (%rdi)
1656 ; AVX-LABEL: addus_v2i16:
1658 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1659 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1660 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1661 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1663 %ld1 = load <2 x i16>, <2 x i16>* %p1, align 2
1664 %ld2 = load <2 x i16>, <2 x i16>* %p2, align 2
1665 %1 = add <2 x i16> %ld2, %ld1
1666 %2 = icmp ugt <2 x i16> %ld1, %1
1667 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1668 store <2 x i16> %sh3, <2 x i16>* %p1, align 2