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) {
996 ; SSE2-LABEL: test28:
998 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
999 ; SSE2-NEXT: paddusw %xmm2, %xmm0
1000 ; SSE2-NEXT: paddusw %xmm2, %xmm1
1003 ; SSSE3-LABEL: test28:
1005 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1006 ; SSSE3-NEXT: paddusw %xmm2, %xmm0
1007 ; SSSE3-NEXT: paddusw %xmm2, %xmm1
1010 ; SSE41-LABEL: test28:
1012 ; SSE41-NEXT: pmovsxbw {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1013 ; SSE41-NEXT: paddusw %xmm2, %xmm0
1014 ; SSE41-NEXT: paddusw %xmm2, %xmm1
1017 ; AVX1-LABEL: test28:
1019 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1020 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1021 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
1022 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
1023 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1026 ; AVX2-LABEL: test28:
1028 ; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1031 ; AVX512-LABEL: test28:
1033 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1035 %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>
1036 %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>
1037 %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
1041 define <16 x i16> @test29(<16 x i16> %x) {
1042 ; SSE2-LABEL: test29:
1044 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1045 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1046 ; SSE2-NEXT: pxor %xmm3, %xmm4
1047 ; SSE2-NEXT: pxor %xmm1, %xmm3
1048 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1049 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm2
1050 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1051 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
1052 ; SSE2-NEXT: por %xmm4, %xmm1
1053 ; SSE2-NEXT: por %xmm3, %xmm2
1054 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1055 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1058 ; SSSE3-LABEL: test29:
1060 ; SSSE3-NEXT: movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1061 ; SSSE3-NEXT: movdqa %xmm0, %xmm4
1062 ; SSSE3-NEXT: pxor %xmm3, %xmm4
1063 ; SSSE3-NEXT: pxor %xmm1, %xmm3
1064 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1065 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2
1066 ; SSSE3-NEXT: movdqa %xmm4, %xmm1
1067 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
1068 ; SSSE3-NEXT: por %xmm4, %xmm1
1069 ; SSSE3-NEXT: por %xmm3, %xmm2
1070 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1071 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1074 ; SSE41-LABEL: test29:
1076 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1077 ; SSE41-NEXT: movdqa %xmm0, %xmm3
1078 ; SSE41-NEXT: pxor %xmm2, %xmm3
1079 ; SSE41-NEXT: pxor %xmm1, %xmm2
1080 ; SSE41-NEXT: pmaxuw %xmm2, %xmm1
1081 ; SSE41-NEXT: pcmpeqw %xmm2, %xmm1
1082 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm4
1083 ; SSE41-NEXT: pxor %xmm4, %xmm1
1084 ; SSE41-NEXT: pmaxuw %xmm3, %xmm0
1085 ; SSE41-NEXT: pcmpeqw %xmm3, %xmm0
1086 ; SSE41-NEXT: pxor %xmm4, %xmm0
1087 ; SSE41-NEXT: por %xmm3, %xmm0
1088 ; SSE41-NEXT: por %xmm2, %xmm1
1091 ; AVX1-LABEL: test29:
1093 ; AVX1-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1094 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1095 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
1096 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1097 ; AVX1-NEXT: vpcmpeqw %xmm2, %xmm3, %xmm2
1098 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
1099 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
1100 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm1, %xmm0
1101 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm1, %xmm0
1102 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm0
1103 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1104 ; AVX1-NEXT: vorps %ymm1, %ymm0, %ymm0
1107 ; AVX2-LABEL: test29:
1109 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1110 ; AVX2-NEXT: vpmaxuw %ymm0, %ymm1, %ymm0
1111 ; AVX2-NEXT: vpcmpeqw %ymm0, %ymm1, %ymm0
1112 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
1113 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
1114 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
1117 ; AVX512-LABEL: test29:
1119 ; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1
1120 ; AVX512-NEXT: vpcmpltuw %ymm0, %ymm1, %k1
1121 ; AVX512-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
1122 ; AVX512-NEXT: vmovdqu16 %ymm0, %ymm1 {%k1}
1123 ; AVX512-NEXT: vmovdqa %ymm1, %ymm0
1125 %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>
1126 %2 = icmp ult <16 x i16> %1, %x
1127 %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
1131 define <16 x i16> @test30(<16 x i16> %x) {
1132 ; SSE2-LABEL: test30:
1134 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1135 ; SSE2-NEXT: paddusw %xmm2, %xmm0
1136 ; SSE2-NEXT: paddusw %xmm2, %xmm1
1139 ; SSSE3-LABEL: test30:
1141 ; SSSE3-NEXT: movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1142 ; SSSE3-NEXT: paddusw %xmm2, %xmm0
1143 ; SSSE3-NEXT: paddusw %xmm2, %xmm1
1146 ; SSE41-LABEL: test30:
1148 ; SSE41-NEXT: pmovsxbw {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1149 ; SSE41-NEXT: paddusw %xmm2, %xmm0
1150 ; SSE41-NEXT: paddusw %xmm2, %xmm1
1153 ; AVX1-LABEL: test30:
1155 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
1156 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1157 ; AVX1-NEXT: vpaddusw %xmm2, %xmm1, %xmm1
1158 ; AVX1-NEXT: vpaddusw %xmm2, %xmm0, %xmm0
1159 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1162 ; AVX2-LABEL: test30:
1164 ; AVX2-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1167 ; AVX512-LABEL: test30:
1169 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1171 %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>
1172 %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>
1173 %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
1177 define <32 x i16> @test31(<32 x i16> %x) {
1178 ; SSE-LABEL: test31:
1180 ; SSE-NEXT: pcmpeqd %xmm4, %xmm4
1181 ; SSE-NEXT: movdqa %xmm3, %xmm5
1182 ; SSE-NEXT: psubw %xmm4, %xmm5
1183 ; SSE-NEXT: movdqa %xmm2, %xmm6
1184 ; SSE-NEXT: psubw %xmm4, %xmm6
1185 ; SSE-NEXT: movdqa %xmm1, %xmm7
1186 ; SSE-NEXT: psubw %xmm4, %xmm7
1187 ; SSE-NEXT: movdqa %xmm0, %xmm8
1188 ; SSE-NEXT: psubw %xmm4, %xmm8
1189 ; SSE-NEXT: pcmpeqw %xmm4, %xmm3
1190 ; SSE-NEXT: por %xmm5, %xmm3
1191 ; SSE-NEXT: pcmpeqw %xmm4, %xmm2
1192 ; SSE-NEXT: por %xmm6, %xmm2
1193 ; SSE-NEXT: pcmpeqw %xmm4, %xmm1
1194 ; SSE-NEXT: por %xmm7, %xmm1
1195 ; SSE-NEXT: pcmpeqw %xmm4, %xmm0
1196 ; SSE-NEXT: por %xmm8, %xmm0
1199 ; AVX1-LABEL: test31:
1201 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1202 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
1203 ; AVX1-NEXT: vpsubw %xmm3, %xmm2, %xmm4
1204 ; AVX1-NEXT: vpsubw %xmm3, %xmm1, %xmm5
1205 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
1206 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
1207 ; AVX1-NEXT: vpsubw %xmm3, %xmm5, %xmm6
1208 ; AVX1-NEXT: vpsubw %xmm3, %xmm0, %xmm7
1209 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm7, %ymm6
1210 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm2, %xmm2
1211 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm1, %xmm1
1212 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1213 ; AVX1-NEXT: vorps %ymm4, %ymm1, %ymm1
1214 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm5, %xmm2
1215 ; AVX1-NEXT: vpcmpeqw %xmm3, %xmm0, %xmm0
1216 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1217 ; AVX1-NEXT: vorps %ymm6, %ymm0, %ymm0
1220 ; AVX2-LABEL: test31:
1222 ; AVX2-NEXT: vpcmpeqd %ymm2, %ymm2, %ymm2
1223 ; AVX2-NEXT: vpsubw %ymm2, %ymm1, %ymm3
1224 ; AVX2-NEXT: vpsubw %ymm2, %ymm0, %ymm4
1225 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm1, %ymm1
1226 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
1227 ; AVX2-NEXT: vpcmpeqw %ymm2, %ymm0, %ymm0
1228 ; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0
1231 ; AVX512-LABEL: test31:
1233 ; AVX512-NEXT: vpternlogd $255, %zmm1, %zmm1, %zmm1
1234 ; AVX512-NEXT: vpcmpneqw %zmm1, %zmm0, %k1
1235 ; AVX512-NEXT: vpsubw %zmm1, %zmm0, %zmm1 {%k1}
1236 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1238 %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>
1239 %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>
1240 %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
1244 define <32 x i16> @test32(<32 x i16> %x) {
1245 ; SSE-LABEL: test32:
1247 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]
1248 ; SSE-NEXT: paddusw %xmm4, %xmm0
1249 ; SSE-NEXT: paddusw %xmm4, %xmm1
1250 ; SSE-NEXT: paddusw %xmm4, %xmm2
1251 ; SSE-NEXT: paddusw %xmm4, %xmm3
1254 ; AVX1-LABEL: test32:
1256 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1257 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]
1258 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1259 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1260 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1261 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1262 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1263 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1264 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1267 ; AVX2-LABEL: test32:
1269 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]
1270 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1271 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1274 ; AVX512-LABEL: test32:
1276 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1278 %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>
1279 %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>
1280 %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
1284 define <32 x i16> @test33(<32 x i16> %x) {
1285 ; SSE-LABEL: test33:
1287 ; SSE-NEXT: movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]
1288 ; SSE-NEXT: paddusw %xmm4, %xmm0
1289 ; SSE-NEXT: paddusw %xmm4, %xmm1
1290 ; SSE-NEXT: paddusw %xmm4, %xmm2
1291 ; SSE-NEXT: paddusw %xmm4, %xmm3
1294 ; AVX1-LABEL: test33:
1296 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1297 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
1298 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1299 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1300 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1301 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1302 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1303 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1304 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1307 ; AVX2-LABEL: test33:
1309 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]
1310 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1311 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1314 ; AVX512-LABEL: test33:
1316 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1318 %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>
1319 %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>
1320 %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
1324 define <32 x i16> @test34(<32 x i16> %x) {
1325 ; SSE2-LABEL: test34:
1327 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1328 ; SSE2-NEXT: paddusw %xmm4, %xmm0
1329 ; SSE2-NEXT: paddusw %xmm4, %xmm1
1330 ; SSE2-NEXT: paddusw %xmm4, %xmm2
1331 ; SSE2-NEXT: paddusw %xmm4, %xmm3
1334 ; SSSE3-LABEL: test34:
1336 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1337 ; SSSE3-NEXT: paddusw %xmm4, %xmm0
1338 ; SSSE3-NEXT: paddusw %xmm4, %xmm1
1339 ; SSSE3-NEXT: paddusw %xmm4, %xmm2
1340 ; SSSE3-NEXT: paddusw %xmm4, %xmm3
1343 ; SSE41-LABEL: test34:
1345 ; SSE41-NEXT: pmovsxbw {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1346 ; SSE41-NEXT: paddusw %xmm4, %xmm0
1347 ; SSE41-NEXT: paddusw %xmm4, %xmm1
1348 ; SSE41-NEXT: paddusw %xmm4, %xmm2
1349 ; SSE41-NEXT: paddusw %xmm4, %xmm3
1352 ; AVX1-LABEL: test34:
1354 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1355 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]
1356 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1357 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1358 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1359 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1360 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1361 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1362 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1365 ; AVX2-LABEL: test34:
1367 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]
1368 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1369 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1372 ; AVX512-LABEL: test34:
1374 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1376 %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>
1377 %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>
1378 %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
1382 define <32 x i16> @test35(<32 x i16> %x) {
1383 ; SSE2-LABEL: test35:
1385 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1386 ; SSE2-NEXT: movdqa %xmm0, %xmm6
1387 ; SSE2-NEXT: pxor %xmm5, %xmm6
1388 ; SSE2-NEXT: movdqa %xmm1, %xmm7
1389 ; SSE2-NEXT: pxor %xmm5, %xmm7
1390 ; SSE2-NEXT: movdqa %xmm2, %xmm8
1391 ; SSE2-NEXT: pxor %xmm5, %xmm8
1392 ; SSE2-NEXT: pxor %xmm3, %xmm5
1393 ; SSE2-NEXT: movdqa %xmm5, %xmm4
1394 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm4
1395 ; SSE2-NEXT: movdqa %xmm8, %xmm3
1396 ; SSE2-NEXT: pcmpgtw %xmm2, %xmm3
1397 ; SSE2-NEXT: movdqa %xmm7, %xmm2
1398 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm2
1399 ; SSE2-NEXT: movdqa %xmm6, %xmm1
1400 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm1
1401 ; SSE2-NEXT: por %xmm6, %xmm1
1402 ; SSE2-NEXT: por %xmm7, %xmm2
1403 ; SSE2-NEXT: por %xmm8, %xmm3
1404 ; SSE2-NEXT: por %xmm5, %xmm4
1405 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1406 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1407 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1408 ; SSE2-NEXT: movdqa %xmm4, %xmm3
1411 ; SSSE3-LABEL: test35:
1413 ; SSSE3-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1414 ; SSSE3-NEXT: movdqa %xmm0, %xmm6
1415 ; SSSE3-NEXT: pxor %xmm5, %xmm6
1416 ; SSSE3-NEXT: movdqa %xmm1, %xmm7
1417 ; SSSE3-NEXT: pxor %xmm5, %xmm7
1418 ; SSSE3-NEXT: movdqa %xmm2, %xmm8
1419 ; SSSE3-NEXT: pxor %xmm5, %xmm8
1420 ; SSSE3-NEXT: pxor %xmm3, %xmm5
1421 ; SSSE3-NEXT: movdqa %xmm5, %xmm4
1422 ; SSSE3-NEXT: pcmpgtw %xmm3, %xmm4
1423 ; SSSE3-NEXT: movdqa %xmm8, %xmm3
1424 ; SSSE3-NEXT: pcmpgtw %xmm2, %xmm3
1425 ; SSSE3-NEXT: movdqa %xmm7, %xmm2
1426 ; SSSE3-NEXT: pcmpgtw %xmm1, %xmm2
1427 ; SSSE3-NEXT: movdqa %xmm6, %xmm1
1428 ; SSSE3-NEXT: pcmpgtw %xmm0, %xmm1
1429 ; SSSE3-NEXT: por %xmm6, %xmm1
1430 ; SSSE3-NEXT: por %xmm7, %xmm2
1431 ; SSSE3-NEXT: por %xmm8, %xmm3
1432 ; SSSE3-NEXT: por %xmm5, %xmm4
1433 ; SSSE3-NEXT: movdqa %xmm1, %xmm0
1434 ; SSSE3-NEXT: movdqa %xmm2, %xmm1
1435 ; SSSE3-NEXT: movdqa %xmm3, %xmm2
1436 ; SSSE3-NEXT: movdqa %xmm4, %xmm3
1439 ; SSE41-LABEL: test35:
1441 ; SSE41-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1442 ; SSE41-NEXT: movdqa %xmm0, %xmm5
1443 ; SSE41-NEXT: pxor %xmm4, %xmm5
1444 ; SSE41-NEXT: movdqa %xmm1, %xmm6
1445 ; SSE41-NEXT: pxor %xmm4, %xmm6
1446 ; SSE41-NEXT: movdqa %xmm2, %xmm7
1447 ; SSE41-NEXT: pxor %xmm4, %xmm7
1448 ; SSE41-NEXT: pxor %xmm3, %xmm4
1449 ; SSE41-NEXT: pmaxuw %xmm4, %xmm3
1450 ; SSE41-NEXT: pcmpeqw %xmm4, %xmm3
1451 ; SSE41-NEXT: pcmpeqd %xmm8, %xmm8
1452 ; SSE41-NEXT: pxor %xmm8, %xmm3
1453 ; SSE41-NEXT: pmaxuw %xmm7, %xmm2
1454 ; SSE41-NEXT: pcmpeqw %xmm7, %xmm2
1455 ; SSE41-NEXT: pxor %xmm8, %xmm2
1456 ; SSE41-NEXT: pmaxuw %xmm6, %xmm1
1457 ; SSE41-NEXT: pcmpeqw %xmm6, %xmm1
1458 ; SSE41-NEXT: pxor %xmm8, %xmm1
1459 ; SSE41-NEXT: pmaxuw %xmm5, %xmm0
1460 ; SSE41-NEXT: pcmpeqw %xmm5, %xmm0
1461 ; SSE41-NEXT: pxor %xmm8, %xmm0
1462 ; SSE41-NEXT: por %xmm5, %xmm0
1463 ; SSE41-NEXT: por %xmm6, %xmm1
1464 ; SSE41-NEXT: por %xmm7, %xmm2
1465 ; SSE41-NEXT: por %xmm4, %xmm3
1468 ; AVX1-LABEL: test35:
1470 ; AVX1-NEXT: vbroadcastss {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1471 ; AVX1-NEXT: vxorps %ymm2, %ymm0, %ymm3
1472 ; AVX1-NEXT: vxorps %ymm2, %ymm1, %ymm2
1473 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
1474 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
1475 ; AVX1-NEXT: vpmaxuw %xmm5, %xmm4, %xmm5
1476 ; AVX1-NEXT: vpcmpeqw %xmm5, %xmm4, %xmm4
1477 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
1478 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1479 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm2, %xmm1
1480 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm2, %xmm1
1481 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm1
1482 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1
1483 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
1484 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
1485 ; AVX1-NEXT: vpmaxuw %xmm6, %xmm4, %xmm6
1486 ; AVX1-NEXT: vpcmpeqw %xmm6, %xmm4, %xmm4
1487 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
1488 ; AVX1-NEXT: vpmaxuw %xmm0, %xmm3, %xmm0
1489 ; AVX1-NEXT: vpcmpeqw %xmm0, %xmm3, %xmm0
1490 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm0
1491 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
1492 ; AVX1-NEXT: vorps %ymm3, %ymm0, %ymm0
1493 ; AVX1-NEXT: vorps %ymm2, %ymm1, %ymm1
1496 ; AVX2-LABEL: test35:
1498 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1499 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
1500 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
1501 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm2, %ymm1
1502 ; AVX2-NEXT: vpcmpeqw %ymm1, %ymm2, %ymm1
1503 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm4, %ymm4
1504 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm1
1505 ; AVX2-NEXT: vpmaxuw %ymm0, %ymm3, %ymm0
1506 ; AVX2-NEXT: vpcmpeqw %ymm0, %ymm3, %ymm0
1507 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0
1508 ; AVX2-NEXT: vpor %ymm3, %ymm0, %ymm0
1509 ; AVX2-NEXT: vpor %ymm2, %ymm1, %ymm1
1512 ; AVX512-LABEL: test35:
1514 ; AVX512-NEXT: vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1
1515 ; AVX512-NEXT: vpcmpltuw %zmm0, %zmm1, %k1
1516 ; AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
1517 ; AVX512-NEXT: vmovdqu16 %zmm0, %zmm1 {%k1}
1518 ; AVX512-NEXT: vmovdqa64 %zmm1, %zmm0
1520 %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>
1521 %2 = icmp ult <32 x i16> %1, %x
1522 %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
1526 define <32 x i16> @test36(<32 x i16> %x) {
1527 ; SSE2-LABEL: test36:
1529 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1530 ; SSE2-NEXT: paddusw %xmm4, %xmm0
1531 ; SSE2-NEXT: paddusw %xmm4, %xmm1
1532 ; SSE2-NEXT: paddusw %xmm4, %xmm2
1533 ; SSE2-NEXT: paddusw %xmm4, %xmm3
1536 ; SSSE3-LABEL: test36:
1538 ; SSSE3-NEXT: movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1539 ; SSSE3-NEXT: paddusw %xmm4, %xmm0
1540 ; SSSE3-NEXT: paddusw %xmm4, %xmm1
1541 ; SSSE3-NEXT: paddusw %xmm4, %xmm2
1542 ; SSSE3-NEXT: paddusw %xmm4, %xmm3
1545 ; SSE41-LABEL: test36:
1547 ; SSE41-NEXT: pmovsxbw {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1548 ; SSE41-NEXT: paddusw %xmm4, %xmm0
1549 ; SSE41-NEXT: paddusw %xmm4, %xmm1
1550 ; SSE41-NEXT: paddusw %xmm4, %xmm2
1551 ; SSE41-NEXT: paddusw %xmm4, %xmm3
1554 ; AVX1-LABEL: test36:
1556 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1557 ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]
1558 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1559 ; AVX1-NEXT: vpaddusw %xmm3, %xmm0, %xmm0
1560 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1561 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1562 ; AVX1-NEXT: vpaddusw %xmm3, %xmm2, %xmm2
1563 ; AVX1-NEXT: vpaddusw %xmm3, %xmm1, %xmm1
1564 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1567 ; AVX2-LABEL: test36:
1569 ; AVX2-NEXT: vpbroadcastw {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1570 ; AVX2-NEXT: vpaddusw %ymm2, %ymm0, %ymm0
1571 ; AVX2-NEXT: vpaddusw %ymm2, %ymm1, %ymm1
1574 ; AVX512-LABEL: test36:
1576 ; AVX512-NEXT: vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1578 %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>
1579 %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>
1580 %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
1584 define void @addus_v8i8(ptr %p1, ptr %p2) {
1585 ; SSE-LABEL: addus_v8i8:
1587 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1588 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1589 ; SSE-NEXT: paddusb %xmm0, %xmm1
1590 ; SSE-NEXT: movq %xmm1, (%rdi)
1593 ; AVX-LABEL: addus_v8i8:
1595 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1596 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1597 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1598 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1600 %ld1 = load <8 x i8>, ptr %p1, align 8
1601 %ld2 = load <8 x i8>, ptr %p2, align 8
1602 %1 = add <8 x i8> %ld2, %ld1
1603 %2 = icmp ugt <8 x i8> %ld1, %1
1604 %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
1605 store <8 x i8> %sh3, ptr %p1, align 8
1609 define void @addus_v4i8(ptr %p1, ptr %p2) {
1610 ; SSE-LABEL: addus_v4i8:
1612 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1613 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1614 ; SSE-NEXT: paddusb %xmm0, %xmm1
1615 ; SSE-NEXT: movd %xmm1, (%rdi)
1618 ; AVX-LABEL: addus_v4i8:
1620 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1621 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1622 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1623 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1625 %ld1 = load <4 x i8>, ptr %p1, align 4
1626 %ld2 = load <4 x i8>, ptr %p2, align 4
1627 %1 = add <4 x i8> %ld2, %ld1
1628 %2 = icmp ugt <4 x i8> %ld1, %1
1629 %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1630 store <4 x i8> %sh3, ptr %p1, align 4
1634 define void @addus_v2i8(ptr %p1, ptr %p2) {
1635 ; SSE2-LABEL: addus_v2i8:
1637 ; SSE2-NEXT: movzwl (%rdi), %eax
1638 ; SSE2-NEXT: movd %eax, %xmm0
1639 ; SSE2-NEXT: movzwl (%rsi), %eax
1640 ; SSE2-NEXT: movd %eax, %xmm1
1641 ; SSE2-NEXT: paddusb %xmm0, %xmm1
1642 ; SSE2-NEXT: movd %xmm1, %eax
1643 ; SSE2-NEXT: movw %ax, (%rdi)
1646 ; SSSE3-LABEL: addus_v2i8:
1648 ; SSSE3-NEXT: movzwl (%rdi), %eax
1649 ; SSSE3-NEXT: movd %eax, %xmm0
1650 ; SSSE3-NEXT: movzwl (%rsi), %eax
1651 ; SSSE3-NEXT: movd %eax, %xmm1
1652 ; SSSE3-NEXT: paddusb %xmm0, %xmm1
1653 ; SSSE3-NEXT: movd %xmm1, %eax
1654 ; SSSE3-NEXT: movw %ax, (%rdi)
1657 ; SSE41-LABEL: addus_v2i8:
1659 ; SSE41-NEXT: movzwl (%rdi), %eax
1660 ; SSE41-NEXT: movd %eax, %xmm0
1661 ; SSE41-NEXT: movzwl (%rsi), %eax
1662 ; SSE41-NEXT: movd %eax, %xmm1
1663 ; SSE41-NEXT: paddusb %xmm0, %xmm1
1664 ; SSE41-NEXT: pextrw $0, %xmm1, (%rdi)
1667 ; AVX-LABEL: addus_v2i8:
1669 ; AVX-NEXT: movzwl (%rdi), %eax
1670 ; AVX-NEXT: vmovd %eax, %xmm0
1671 ; AVX-NEXT: movzwl (%rsi), %eax
1672 ; AVX-NEXT: vmovd %eax, %xmm1
1673 ; AVX-NEXT: vpaddusb %xmm0, %xmm1, %xmm0
1674 ; AVX-NEXT: vpextrw $0, %xmm0, (%rdi)
1676 %ld1 = load <2 x i8>, ptr %p1, align 2
1677 %ld2 = load <2 x i8>, ptr %p2, align 2
1678 %1 = add <2 x i8> %ld2, %ld1
1679 %2 = icmp ugt <2 x i8> %ld1, %1
1680 %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1681 store <2 x i8> %sh3, ptr %p1, align 2
1685 define void @addus_v4i16(ptr %p1, ptr %p2) {
1686 ; SSE-LABEL: addus_v4i16:
1688 ; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
1689 ; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero
1690 ; SSE-NEXT: paddusw %xmm0, %xmm1
1691 ; SSE-NEXT: movq %xmm1, (%rdi)
1694 ; AVX-LABEL: addus_v4i16:
1696 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
1697 ; AVX-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero
1698 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1699 ; AVX-NEXT: vmovq %xmm0, (%rdi)
1701 %ld1 = load <4 x i16>, ptr %p1, align 4
1702 %ld2 = load <4 x i16>, ptr %p2, align 4
1703 %1 = add <4 x i16> %ld2, %ld1
1704 %2 = icmp ugt <4 x i16> %ld1, %1
1705 %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1706 store <4 x i16> %sh3, ptr %p1, align 4
1710 define void @addus_v2i16(ptr %p1, ptr %p2) {
1711 ; SSE-LABEL: addus_v2i16:
1713 ; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1714 ; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1715 ; SSE-NEXT: paddusw %xmm0, %xmm1
1716 ; SSE-NEXT: movd %xmm1, (%rdi)
1719 ; AVX-LABEL: addus_v2i16:
1721 ; AVX-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1722 ; AVX-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1723 ; AVX-NEXT: vpaddusw %xmm0, %xmm1, %xmm0
1724 ; AVX-NEXT: vmovd %xmm0, (%rdi)
1726 %ld1 = load <2 x i16>, ptr %p1, align 2
1727 %ld2 = load <2 x i16>, ptr %p2, align 2
1728 %1 = add <2 x i16> %ld2, %ld1
1729 %2 = icmp ugt <2 x i16> %ld1, %1
1730 %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1731 store <2 x i16> %sh3, ptr %p1, align 2