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-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX512
10 ; FIXME: should be paddusb
11 define <16 x i8> @test1(<16 x i8> %x) {
14 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
15 ; SSE-NEXT: movdqa %xmm0, %xmm2
16 ; SSE-NEXT: psubb %xmm1, %xmm2
17 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
18 ; SSE-NEXT: por %xmm2, %xmm0
23 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
24 ; AVX1-NEXT: vpsubb %xmm1, %xmm0, %xmm2
25 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
26 ; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
31 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
32 ; AVX2-NEXT: vpsubb %xmm1, %xmm0, %xmm2
33 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
34 ; AVX2-NEXT: vpor %xmm2, %xmm0, %xmm0
37 ; AVX512-LABEL: test1:
39 ; AVX512-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
40 ; AVX512-NEXT: vpsubb %xmm2, %xmm0, %xmm1
41 ; AVX512-NEXT: vpcmpeqb %xmm2, %xmm0, %k1
42 ; AVX512-NEXT: vmovdqu8 %xmm2, %xmm1 {%k1}
43 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
45 %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>
46 %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>
47 %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
51 define <16 x i8> @test2(<16 x i8> %x) {
54 ; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
59 ; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
61 %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>
62 %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>
63 %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
67 define <16 x i8> @test3(<16 x i8> %x) {
70 ; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
75 ; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
77 %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>
78 %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>
79 %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
83 define <16 x i8> @test4(<16 x i8> %x) {
86 ; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
91 ; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
93 %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>
94 %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>
95 %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
99 ; FIXME: should be paddusb
100 define <16 x i8> @test5(<16 x i8> %x) {
103 ; SSE-NEXT: movdqa {{.*#+}} xmm1 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
104 ; SSE-NEXT: pxor %xmm0, %xmm1
105 ; SSE-NEXT: pmaxub %xmm1, %xmm0
106 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
107 ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
108 ; SSE-NEXT: pxor %xmm2, %xmm0
109 ; SSE-NEXT: por %xmm1, %xmm0
114 ; AVX1-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
115 ; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
116 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
117 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
118 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
119 ; AVX1-NEXT: vpor %xmm1, %xmm0, %xmm0
124 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
125 ; AVX2-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
126 ; AVX2-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
127 ; AVX2-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
128 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
129 ; AVX2-NEXT: vpor %xmm1, %xmm0, %xmm0
132 ; AVX512-LABEL: test5:
134 ; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm1
135 ; AVX512-NEXT: vpcmpltub %xmm0, %xmm1, %k1
136 ; AVX512-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
137 ; AVX512-NEXT: vmovdqu8 %xmm0, %xmm1 {%k1}
138 ; AVX512-NEXT: vmovdqa %xmm1, %xmm0
140 %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>
141 %2 = icmp ult <16 x i8> %1, %x
142 %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
146 define <16 x i8> @test6(<16 x i8> %x) {
149 ; SSE-NEXT: paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
154 ; AVX-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
156 %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>
157 %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>
158 %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
162 define <32 x i8> @test7(<32 x i8> %x) {
165 ; SSE-NEXT: pcmpeqd %xmm2, %xmm2
166 ; SSE-NEXT: movdqa %xmm1, %xmm3
167 ; SSE-NEXT: psubb %xmm2, %xmm3
168 ; SSE-NEXT: movdqa %xmm0, %xmm4
169 ; SSE-NEXT: psubb %xmm2, %xmm4
170 ; SSE-NEXT: pcmpeqb %xmm2, %xmm1
171 ; SSE-NEXT: por %xmm3, %xmm1
172 ; SSE-NEXT: pcmpeqb %xmm2, %xmm0
173 ; SSE-NEXT: por %xmm4, %xmm0
178 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
179 ; AVX1-NEXT: vpcmpeqd %xmm2, %xmm2, %xmm2
180 ; AVX1-NEXT: vpsubb %xmm2, %xmm1, %xmm3
181 ; AVX1-NEXT: vpsubb %xmm2, %xmm0, %xmm4
182 ; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3
183 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1
184 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm0, %xmm0
185 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
186 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
191 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
192 ; AVX2-NEXT: vpsubb %ymm1, %ymm0, %ymm2
193 ; AVX2-NEXT: vpcmpeqb %ymm1, %ymm0, %ymm0
194 ; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
197 ; AVX512-LABEL: test7:
199 ; AVX512-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
200 ; AVX512-NEXT: vpsubb %ymm2, %ymm0, %ymm1
201 ; AVX512-NEXT: vpcmpeqb %ymm2, %ymm0, %k1
202 ; AVX512-NEXT: vmovdqu8 %ymm2, %ymm1 {%k1}
203 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
205 %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>
206 %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>
207 %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
211 define <32 x i8> @test8(<32 x i8> %x) {
214 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
215 ; SSE-NEXT: paddusb %xmm2, %xmm0
216 ; SSE-NEXT: paddusb %xmm2, %xmm1
221 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
222 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
223 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
224 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
225 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
230 ; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
233 ; AVX512-LABEL: test8:
235 ; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
237 %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>
238 %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>
239 %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
243 define <32 x i8> @test9(<32 x i8> %x) {
246 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
247 ; SSE-NEXT: paddusb %xmm2, %xmm0
248 ; SSE-NEXT: paddusb %xmm2, %xmm1
253 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
254 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
255 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
256 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
257 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
262 ; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
265 ; AVX512-LABEL: test9:
267 ; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
269 %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>
270 %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>
271 %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
275 define <32 x i8> @test10(<32 x i8> %x) {
278 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
279 ; SSE-NEXT: paddusb %xmm2, %xmm0
280 ; SSE-NEXT: paddusb %xmm2, %xmm1
283 ; AVX1-LABEL: test10:
285 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
286 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
287 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
288 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
289 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
292 ; AVX2-LABEL: test10:
294 ; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
297 ; AVX512-LABEL: test10:
299 ; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
301 %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>
302 %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>
303 %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
307 define <32 x i8> @test11(<32 x i8> %x) {
310 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
311 ; SSE-NEXT: movdqa %xmm0, %xmm3
312 ; SSE-NEXT: pxor %xmm2, %xmm3
313 ; SSE-NEXT: pxor %xmm1, %xmm2
314 ; SSE-NEXT: pmaxub %xmm2, %xmm1
315 ; SSE-NEXT: pcmpeqb %xmm2, %xmm1
316 ; SSE-NEXT: pcmpeqd %xmm4, %xmm4
317 ; SSE-NEXT: pxor %xmm4, %xmm1
318 ; SSE-NEXT: pmaxub %xmm3, %xmm0
319 ; SSE-NEXT: pcmpeqb %xmm3, %xmm0
320 ; SSE-NEXT: pxor %xmm4, %xmm0
321 ; SSE-NEXT: por %xmm3, %xmm0
322 ; SSE-NEXT: por %xmm2, %xmm1
325 ; AVX1-LABEL: test11:
327 ; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
328 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
329 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
330 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
331 ; AVX1-NEXT: vpcmpeqb %xmm2, %xmm3, %xmm2
332 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
333 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
334 ; AVX1-NEXT: vpmaxub %xmm0, %xmm1, %xmm0
335 ; AVX1-NEXT: vpcmpeqb %xmm0, %xmm1, %xmm0
336 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0
337 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
338 ; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
341 ; AVX2-LABEL: test11:
343 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
344 ; AVX2-NEXT: vpmaxub %ymm0, %ymm1, %ymm0
345 ; AVX2-NEXT: vpcmpeqb %ymm0, %ymm1, %ymm0
346 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
347 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
348 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
351 ; AVX512-LABEL: test11:
353 ; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1
354 ; AVX512-NEXT: vpcmpltub %ymm0, %ymm1, %k1
355 ; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
356 ; AVX512-NEXT: vmovdqu8 %ymm0, %ymm1 {%k1}
357 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
359 %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>
360 %2 = icmp ult <32 x i8> %1, %x
361 %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
365 define <32 x i8> @test12(<32 x i8> %x) {
368 ; SSE-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
369 ; SSE-NEXT: paddusb %xmm2, %xmm0
370 ; SSE-NEXT: paddusb %xmm2, %xmm1
373 ; AVX1-LABEL: test12:
375 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
376 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
377 ; AVX1-NEXT: vpaddusb %xmm2, %xmm1, %xmm1
378 ; AVX1-NEXT: vpaddusb %xmm2, %xmm0, %xmm0
379 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
382 ; AVX2-LABEL: test12:
384 ; AVX2-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
387 ; AVX512-LABEL: test12:
389 ; AVX512-NEXT: vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
391 %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>
392 %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>
393 %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
397 define <64 x i8> @test13(<64 x i8> %x) {
400 ; SSE-NEXT: pcmpeqd %xmm4, %xmm4
401 ; SSE-NEXT: movdqa %xmm3, %xmm5
402 ; SSE-NEXT: psubb %xmm4, %xmm5
403 ; SSE-NEXT: movdqa %xmm2, %xmm6
404 ; SSE-NEXT: psubb %xmm4, %xmm6
405 ; SSE-NEXT: movdqa %xmm1, %xmm7
406 ; SSE-NEXT: psubb %xmm4, %xmm7
407 ; SSE-NEXT: movdqa %xmm0, %xmm8
408 ; SSE-NEXT: psubb %xmm4, %xmm8
409 ; SSE-NEXT: pcmpeqb %xmm4, %xmm3
410 ; SSE-NEXT: por %xmm5, %xmm3
411 ; SSE-NEXT: pcmpeqb %xmm4, %xmm2
412 ; SSE-NEXT: por %xmm6, %xmm2
413 ; SSE-NEXT: pcmpeqb %xmm4, %xmm1
414 ; SSE-NEXT: por %xmm7, %xmm1
415 ; SSE-NEXT: pcmpeqb %xmm4, %xmm0
416 ; SSE-NEXT: por %xmm8, %xmm0
419 ; AVX1-LABEL: test13:
421 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
422 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
423 ; AVX1-NEXT: vpsubb %xmm3, %xmm2, %xmm4
424 ; AVX1-NEXT: vpsubb %xmm3, %xmm1, %xmm5
425 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
426 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
427 ; AVX1-NEXT: vpsubb %xmm3, %xmm5, %xmm6
428 ; AVX1-NEXT: vpsubb %xmm3, %xmm0, %xmm7
429 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
430 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm2, %xmm2
431 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm1, %xmm1
432 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
433 ; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1
434 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm5, %xmm2
435 ; AVX1-NEXT: vpcmpeqb %xmm3, %xmm0, %xmm0
436 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
437 ; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0
440 ; AVX2-LABEL: test13:
442 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
443 ; AVX2-NEXT: vpsubb %ymm2, %ymm1, %ymm3
444 ; AVX2-NEXT: vpsubb %ymm2, %ymm0, %ymm4
445 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm1, %ymm1
446 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
447 ; AVX2-NEXT: vpcmpeqb %ymm2, %ymm0, %ymm0
448 ; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0
451 ; AVX512-LABEL: test13:
453 ; AVX512-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1
454 ; AVX512-NEXT: vpcmpneqb %zmm1, %zmm0, %k1
455 ; AVX512-NEXT: vpsubb %zmm1, %zmm0, %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: vbroadcastss {{.*#+}} 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: vpbroadcastb {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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: vpbroadcastb {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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: vpbroadcastb {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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: vpbroadcastb {{.*#+}} 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: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %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: vbroadcastss {{.*#+}} 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: vpbroadcastb {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
760 ; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
776 ; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
792 ; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
874 ; AVX-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
953 ; AVX512-LABEL: test26:
955 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
985 ; AVX512-LABEL: test27:
987 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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: vbroadcastss {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1017 ; AVX512-LABEL: test28:
1019 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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 {{\.?LCPI[0-9]+_[0-9]+}}(%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: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %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: vbroadcastss {{.*#+}} 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 {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1139 ; AVX512-LABEL: test30:
1141 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%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 %xmm4, %xmm4
1153 ; SSE-NEXT: movdqa %xmm3, %xmm5
1154 ; SSE-NEXT: psubw %xmm4, %xmm5
1155 ; SSE-NEXT: movdqa %xmm2, %xmm6
1156 ; SSE-NEXT: psubw %xmm4, %xmm6
1157 ; SSE-NEXT: movdqa %xmm1, %xmm7
1158 ; SSE-NEXT: psubw %xmm4, %xmm7
1159 ; SSE-NEXT: movdqa %xmm0, %xmm8
1160 ; SSE-NEXT: psubw %xmm4, %xmm8
1161 ; SSE-NEXT: pcmpeqw %xmm4, %xmm3
1162 ; SSE-NEXT: por %xmm5, %xmm3
1163 ; SSE-NEXT: pcmpeqw %xmm4, %xmm2
1164 ; SSE-NEXT: por %xmm6, %xmm2
1165 ; SSE-NEXT: pcmpeqw %xmm4, %xmm1
1166 ; SSE-NEXT: por %xmm7, %xmm1
1167 ; SSE-NEXT: pcmpeqw %xmm4, %xmm0
1168 ; SSE-NEXT: por %xmm8, %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, %zmm1, %zmm1, %zmm1
1206 ; AVX512-NEXT: vpcmpneqw %zmm1, %zmm0, %k1
1207 ; AVX512-NEXT: vpsubw %zmm1, %zmm0, %zmm1 {%k1}
1208 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1210 %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>
1211 %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>
1212 %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
1216 define <32 x i16> @test32(<32 x i16> %x) {
1217 ; SSE-LABEL: test32:
1219 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]
1220 ; SSE-NEXT: paddusw %xmm4, %xmm0
1221 ; SSE-NEXT: paddusw %xmm4, %xmm1
1222 ; SSE-NEXT: paddusw %xmm4, %xmm2
1223 ; SSE-NEXT: paddusw %xmm4, %xmm3
1226 ; AVX1-LABEL: test32:
1228 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1229 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]
1230 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1231 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1232 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1233 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1234 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1235 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1236 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1239 ; AVX2-LABEL: test32:
1241 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]
1242 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1243 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1246 ; AVX512-LABEL: test32:
1248 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1250 %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>
1251 %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>
1252 %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
1256 define <32 x i16> @test33(<32 x i16> %x) {
1257 ; SSE-LABEL: test33:
1259 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]
1260 ; SSE-NEXT: paddusw %xmm4, %xmm0
1261 ; SSE-NEXT: paddusw %xmm4, %xmm1
1262 ; SSE-NEXT: paddusw %xmm4, %xmm2
1263 ; SSE-NEXT: paddusw %xmm4, %xmm3
1266 ; AVX1-LABEL: test33:
1268 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1269 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
1270 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1271 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1272 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1273 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1274 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1275 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1276 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1279 ; AVX2-LABEL: test33:
1281 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]
1282 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1283 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1286 ; AVX512-LABEL: test33:
1288 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1290 %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>
1291 %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>
1292 %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
1296 define <32 x i16> @test34(<32 x i16> %x) {
1297 ; SSE-LABEL: test34:
1299 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1300 ; SSE-NEXT: paddusw %xmm4, %xmm0
1301 ; SSE-NEXT: paddusw %xmm4, %xmm1
1302 ; SSE-NEXT: paddusw %xmm4, %xmm2
1303 ; SSE-NEXT: paddusw %xmm4, %xmm3
1306 ; AVX1-LABEL: test34:
1308 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1309 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]
1310 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1311 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1312 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1313 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1314 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1315 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1316 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1319 ; AVX2-LABEL: test34:
1321 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]
1322 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1323 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1326 ; AVX512-LABEL: test34:
1328 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1330 %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>
1331 %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>
1332 %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
1336 define <32 x i16> @test35(<32 x i16> %x) {
1337 ; SSE2-LABEL: test35:
1339 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1340 ; SSE2-NEXT: movdqa %xmm0, %xmm6
1341 ; SSE2-NEXT: pxor %xmm5, %xmm6
1342 ; SSE2-NEXT: movdqa %xmm1, %xmm7
1343 ; SSE2-NEXT: pxor %xmm5, %xmm7
1344 ; SSE2-NEXT: movdqa %xmm2, %xmm8
1345 ; SSE2-NEXT: pxor %xmm5, %xmm8
1346 ; SSE2-NEXT: pxor %xmm3, %xmm5
1347 ; SSE2-NEXT: movdqa %xmm5, %xmm4
1348 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm4
1349 ; SSE2-NEXT: movdqa %xmm8, %xmm3
1350 ; SSE2-NEXT: pcmpgtw %xmm2, %xmm3
1351 ; SSE2-NEXT: movdqa %xmm7, %xmm2
1352 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm2
1353 ; SSE2-NEXT: movdqa %xmm6, %xmm1
1354 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
1355 ; SSE2-NEXT: por %xmm6, %xmm1
1356 ; SSE2-NEXT: por %xmm7, %xmm2
1357 ; SSE2-NEXT: por %xmm8, %xmm3
1358 ; SSE2-NEXT: por %xmm5, %xmm4
1359 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1360 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1361 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1362 ; SSE2-NEXT: movdqa %xmm4, %xmm3
1365 ; SSSE3-LABEL: test35:
1367 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1368 ; SSSE3-NEXT: movdqa %xmm0, %xmm6
1369 ; SSSE3-NEXT: pxor %xmm5, %xmm6
1370 ; SSSE3-NEXT: movdqa %xmm1, %xmm7
1371 ; SSSE3-NEXT: pxor %xmm5, %xmm7
1372 ; SSSE3-NEXT: movdqa %xmm2, %xmm8
1373 ; SSSE3-NEXT: pxor %xmm5, %xmm8
1374 ; SSSE3-NEXT: pxor %xmm3, %xmm5
1375 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
1376 ; SSSE3-NEXT: pcmpgtw %xmm3, %xmm4
1377 ; SSSE3-NEXT: movdqa %xmm8, %xmm3
1378 ; SSSE3-NEXT: pcmpgtw %xmm2, %xmm3
1379 ; SSSE3-NEXT: movdqa %xmm7, %xmm2
1380 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2
1381 ; SSSE3-NEXT: movdqa %xmm6, %xmm1
1382 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
1383 ; SSSE3-NEXT: por %xmm6, %xmm1
1384 ; SSSE3-NEXT: por %xmm7, %xmm2
1385 ; SSSE3-NEXT: por %xmm8, %xmm3
1386 ; SSSE3-NEXT: por %xmm5, %xmm4
1387 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1388 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1389 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1390 ; SSSE3-NEXT: movdqa %xmm4, %xmm3
1393 ; SSE41-LABEL: test35:
1395 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1396 ; SSE41-NEXT: movdqa %xmm0, %xmm5
1397 ; SSE41-NEXT: pxor %xmm4, %xmm5
1398 ; SSE41-NEXT: movdqa %xmm1, %xmm6
1399 ; SSE41-NEXT: pxor %xmm4, %xmm6
1400 ; SSE41-NEXT: movdqa %xmm2, %xmm7
1401 ; SSE41-NEXT: pxor %xmm4, %xmm7
1402 ; SSE41-NEXT: pxor %xmm3, %xmm4
1403 ; SSE41-NEXT: pmaxuw %xmm4, %xmm3
1404 ; SSE41-NEXT: pcmpeqw %xmm4, %xmm3
1405 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm8
1406 ; SSE41-NEXT: pxor %xmm8, %xmm3
1407 ; SSE41-NEXT: pmaxuw %xmm7, %xmm2
1408 ; SSE41-NEXT: pcmpeqw %xmm7, %xmm2
1409 ; SSE41-NEXT: pxor %xmm8, %xmm2
1410 ; SSE41-NEXT: pmaxuw %xmm6, %xmm1
1411 ; SSE41-NEXT: pcmpeqw %xmm6, %xmm1
1412 ; SSE41-NEXT: pxor %xmm8, %xmm1
1413 ; SSE41-NEXT: pmaxuw %xmm5, %xmm0
1414 ; SSE41-NEXT: pcmpeqw %xmm5, %xmm0
1415 ; SSE41-NEXT: pxor %xmm8, %xmm0
1416 ; SSE41-NEXT: por %xmm5, %xmm0
1417 ; SSE41-NEXT: por %xmm6, %xmm1
1418 ; SSE41-NEXT: por %xmm7, %xmm2
1419 ; SSE41-NEXT: por %xmm4, %xmm3
1422 ; AVX1-LABEL: test35:
1424 ; AVX1-NEXT: vbroadcastss {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1425 ; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm3
1426 ; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2
1427 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
1428 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1429 ; AVX1-NEXT: vpmaxuw %xmm5, %xmm4, %xmm5
1430 ; AVX1-NEXT: vpcmpeqw %xmm5, %xmm4, %xmm4
1431 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
1432 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1433 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1
1434 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
1435 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1
1436 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1
1437 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
1438 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1439 ; AVX1-NEXT: vpmaxuw %xmm6, %xmm4, %xmm6
1440 ; AVX1-NEXT: vpcmpeqw %xmm6, %xmm4, %xmm4
1441 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1442 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0
1443 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm3, %xmm0
1444 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0
1445 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
1446 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
1447 ; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
1450 ; AVX2-LABEL: test35:
1452 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1453 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
1454 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
1455 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1
1456 ; AVX2-NEXT: vpcmpeqw %ymm1, %ymm2, %ymm1
1457 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4
1458 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1
1459 ; AVX2-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0
1460 ; AVX2-NEXT: vpcmpeqw %ymm0, %ymm3, %ymm0
1461 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0
1462 ; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0
1463 ; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
1466 ; AVX512-LABEL: test35:
1468 ; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1
1469 ; AVX512-NEXT: vpcmpltuw %zmm0, %zmm1, %k1
1470 ; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
1471 ; AVX512-NEXT: vmovdqu16 %zmm0, %zmm1 {%k1}
1472 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1474 %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>
1475 %2 = icmp ult <32 x i16> %1, %x
1476 %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
1480 define <32 x i16> @test36(<32 x i16> %x) {
1481 ; SSE-LABEL: test36:
1483 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1484 ; SSE-NEXT: paddusw %xmm4, %xmm0
1485 ; SSE-NEXT: paddusw %xmm4, %xmm1
1486 ; SSE-NEXT: paddusw %xmm4, %xmm2
1487 ; SSE-NEXT: paddusw %xmm4, %xmm3
1490 ; AVX1-LABEL: test36:
1492 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1493 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]
1494 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1495 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1496 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1497 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1498 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1499 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1500 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1503 ; AVX2-LABEL: test36:
1505 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1506 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1507 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1510 ; AVX512-LABEL: test36:
1512 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1514 %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>
1515 %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>
1516 %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
1520 define void @addus_v8i8(ptr %p1, ptr %p2) {
1521 ; SSE-LABEL: addus_v8i8:
1523 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1524 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1525 ; SSE-NEXT: paddusb %xmm0, %xmm1
1526 ; SSE-NEXT: movq %xmm1, (%rdi)
1529 ; AVX-LABEL: addus_v8i8:
1531 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1532 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1533 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1534 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1536 %ld1 = load <8 x i8>, ptr %p1, align 8
1537 %ld2 = load <8 x i8>, ptr %p2, align 8
1538 %1 = add <8 x i8> %ld2, %ld1
1539 %2 = icmp ugt <8 x i8> %ld1, %1
1540 %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
1541 store <8 x i8> %sh3, ptr %p1, align 8
1545 define void @addus_v4i8(ptr %p1, ptr %p2) {
1546 ; SSE-LABEL: addus_v4i8:
1548 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1549 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1550 ; SSE-NEXT: paddusb %xmm0, %xmm1
1551 ; SSE-NEXT: movd %xmm1, (%rdi)
1554 ; AVX-LABEL: addus_v4i8:
1556 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1557 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1558 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1559 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1561 %ld1 = load <4 x i8>, ptr %p1, align 4
1562 %ld2 = load <4 x i8>, ptr %p2, align 4
1563 %1 = add <4 x i8> %ld2, %ld1
1564 %2 = icmp ugt <4 x i8> %ld1, %1
1565 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1566 store <4 x i8> %sh3, ptr %p1, align 4
1570 define void @addus_v2i8(ptr %p1, ptr %p2) {
1571 ; SSE2-LABEL: addus_v2i8:
1573 ; SSE2-NEXT: movzwl (%rdi), %eax
1574 ; SSE2-NEXT: movd %eax, %xmm0
1575 ; SSE2-NEXT: movzwl (%rsi), %eax
1576 ; SSE2-NEXT: movd %eax, %xmm1
1577 ; SSE2-NEXT: paddusb %xmm0, %xmm1
1578 ; SSE2-NEXT: movd %xmm1, %eax
1579 ; SSE2-NEXT: movw %ax, (%rdi)
1582 ; SSSE3-LABEL: addus_v2i8:
1584 ; SSSE3-NEXT: movzwl (%rdi), %eax
1585 ; SSSE3-NEXT: movd %eax, %xmm0
1586 ; SSSE3-NEXT: movzwl (%rsi), %eax
1587 ; SSSE3-NEXT: movd %eax, %xmm1
1588 ; SSSE3-NEXT: paddusb %xmm0, %xmm1
1589 ; SSSE3-NEXT: movd %xmm1, %eax
1590 ; SSSE3-NEXT: movw %ax, (%rdi)
1593 ; SSE41-LABEL: addus_v2i8:
1595 ; SSE41-NEXT: movzwl (%rdi), %eax
1596 ; SSE41-NEXT: movd %eax, %xmm0
1597 ; SSE41-NEXT: movzwl (%rsi), %eax
1598 ; SSE41-NEXT: movd %eax, %xmm1
1599 ; SSE41-NEXT: paddusb %xmm0, %xmm1
1600 ; SSE41-NEXT: pextrw $0, %xmm1, (%rdi)
1603 ; AVX-LABEL: addus_v2i8:
1605 ; AVX-NEXT: movzwl (%rdi), %eax
1606 ; AVX-NEXT: vmovd %eax, %xmm0
1607 ; AVX-NEXT: movzwl (%rsi), %eax
1608 ; AVX-NEXT: vmovd %eax, %xmm1
1609 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1610 ; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)
1612 %ld1 = load <2 x i8>, ptr %p1, align 2
1613 %ld2 = load <2 x i8>, ptr %p2, align 2
1614 %1 = add <2 x i8> %ld2, %ld1
1615 %2 = icmp ugt <2 x i8> %ld1, %1
1616 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1617 store <2 x i8> %sh3, ptr %p1, align 2
1621 define void @addus_v4i16(ptr %p1, ptr %p2) {
1622 ; SSE-LABEL: addus_v4i16:
1624 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1625 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1626 ; SSE-NEXT: paddusw %xmm0, %xmm1
1627 ; SSE-NEXT: movq %xmm1, (%rdi)
1630 ; AVX-LABEL: addus_v4i16:
1632 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1633 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1634 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1635 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1637 %ld1 = load <4 x i16>, ptr %p1, align 4
1638 %ld2 = load <4 x i16>, ptr %p2, align 4
1639 %1 = add <4 x i16> %ld2, %ld1
1640 %2 = icmp ugt <4 x i16> %ld1, %1
1641 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1642 store <4 x i16> %sh3, ptr %p1, align 4
1646 define void @addus_v2i16(ptr %p1, ptr %p2) {
1647 ; SSE-LABEL: addus_v2i16:
1649 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1650 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1651 ; SSE-NEXT: paddusw %xmm0, %xmm1
1652 ; SSE-NEXT: movd %xmm1, (%rdi)
1655 ; AVX-LABEL: addus_v2i16:
1657 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1658 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1659 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1660 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1662 %ld1 = load <2 x i16>, ptr %p1, align 2
1663 %ld2 = load <2 x i16>, ptr %p2, align 2
1664 %1 = add <2 x i16> %ld2, %ld1
1665 %2 = icmp ugt <2 x i16> %ld1, %1
1666 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1667 store <2 x i16> %sh3, ptr %p1, align 2