[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / paddus.ll
blob7dd676d87866e18ea55dc3d1db82fe874b965b9e
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) {
12 ; SSE-LABEL: test1:
13 ; SSE:       # %bb.0:
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
19 ; SSE-NEXT:    retq
21 ; AVX1-LABEL: test1:
22 ; AVX1:       # %bb.0:
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
27 ; AVX1-NEXT:    retq
29 ; AVX2-LABEL: test1:
30 ; AVX2:       # %bb.0:
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
35 ; AVX2-NEXT:    retq
37 ; AVX512-LABEL: test1:
38 ; AVX512:       # %bb.0:
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
44 ; AVX512-NEXT:    retq
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
48   ret <16 x i8> %3
51 define <16 x i8> @test2(<16 x i8> %x) {
52 ; SSE-LABEL: test2:
53 ; SSE:       # %bb.0:
54 ; SSE-NEXT:    paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
55 ; SSE-NEXT:    retq
57 ; AVX-LABEL: test2:
58 ; AVX:       # %bb.0:
59 ; AVX-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
60 ; AVX-NEXT:    retq
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
64   ret <16 x i8> %3
67 define <16 x i8> @test3(<16 x i8> %x) {
68 ; SSE-LABEL: test3:
69 ; SSE:       # %bb.0:
70 ; SSE-NEXT:    paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
71 ; SSE-NEXT:    retq
73 ; AVX-LABEL: test3:
74 ; AVX:       # %bb.0:
75 ; AVX-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
76 ; AVX-NEXT:    retq
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
80   ret <16 x i8> %3
83 define <16 x i8> @test4(<16 x i8> %x) {
84 ; SSE-LABEL: test4:
85 ; SSE:       # %bb.0:
86 ; SSE-NEXT:    paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
87 ; SSE-NEXT:    retq
89 ; AVX-LABEL: test4:
90 ; AVX:       # %bb.0:
91 ; AVX-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
92 ; AVX-NEXT:    retq
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
96   ret <16 x i8> %3
99 ; FIXME: should be paddusb
100 define <16 x i8> @test5(<16 x i8> %x) {
101 ; SSE-LABEL: test5:
102 ; SSE:       # %bb.0:
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
110 ; SSE-NEXT:    retq
112 ; AVX1-LABEL: test5:
113 ; AVX1:       # %bb.0:
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
120 ; AVX1-NEXT:    retq
122 ; AVX2-LABEL: test5:
123 ; AVX2:       # %bb.0:
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
130 ; AVX2-NEXT:    retq
132 ; AVX512-LABEL: test5:
133 ; AVX512:       # %bb.0:
134 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %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
139 ; AVX512-NEXT:    retq
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
143   ret <16 x i8> %3
146 define <16 x i8> @test6(<16 x i8> %x) {
147 ; SSE-LABEL: test6:
148 ; SSE:       # %bb.0:
149 ; SSE-NEXT:    paddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
150 ; SSE-NEXT:    retq
152 ; AVX-LABEL: test6:
153 ; AVX:       # %bb.0:
154 ; AVX-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
155 ; AVX-NEXT:    retq
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
159   ret <16 x i8> %3
162 define <32 x i8> @test7(<32 x i8> %x) {
163 ; SSE-LABEL: test7:
164 ; SSE:       # %bb.0:
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
174 ; SSE-NEXT:    retq
176 ; AVX1-LABEL: test7:
177 ; AVX1:       # %bb.0:
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
187 ; AVX1-NEXT:    retq
189 ; AVX2-LABEL: test7:
190 ; AVX2:       # %bb.0:
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
195 ; AVX2-NEXT:    retq
197 ; AVX512-LABEL: test7:
198 ; AVX512:       # %bb.0:
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
204 ; AVX512-NEXT:    retq
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
208   ret <32 x i8> %3
211 define <32 x i8> @test8(<32 x i8> %x) {
212 ; SSE-LABEL: test8:
213 ; SSE:       # %bb.0:
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
217 ; SSE-NEXT:    retq
219 ; AVX1-LABEL: test8:
220 ; AVX1:       # %bb.0:
221 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
222 ; AVX1-NEXT:    vmovdqa {{.*#+}} 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
226 ; AVX1-NEXT:    retq
228 ; AVX2-LABEL: test8:
229 ; AVX2:       # %bb.0:
230 ; AVX2-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
231 ; AVX2-NEXT:    retq
233 ; AVX512-LABEL: test8:
234 ; AVX512:       # %bb.0:
235 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
236 ; AVX512-NEXT:    retq
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
240   ret <32 x i8> %3
243 define <32 x i8> @test9(<32 x i8> %x) {
244 ; SSE-LABEL: test9:
245 ; SSE:       # %bb.0:
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
249 ; SSE-NEXT:    retq
251 ; AVX1-LABEL: test9:
252 ; AVX1:       # %bb.0:
253 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
254 ; AVX1-NEXT:    vmovdqa {{.*#+}} 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
258 ; AVX1-NEXT:    retq
260 ; AVX2-LABEL: test9:
261 ; AVX2:       # %bb.0:
262 ; AVX2-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
263 ; AVX2-NEXT:    retq
265 ; AVX512-LABEL: test9:
266 ; AVX512:       # %bb.0:
267 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
268 ; AVX512-NEXT:    retq
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
272   ret <32 x i8> %3
275 define <32 x i8> @test10(<32 x i8> %x) {
276 ; SSE-LABEL: test10:
277 ; SSE:       # %bb.0:
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
281 ; SSE-NEXT:    retq
283 ; AVX1-LABEL: test10:
284 ; AVX1:       # %bb.0:
285 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
286 ; AVX1-NEXT:    vmovdqa {{.*#+}} 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
290 ; AVX1-NEXT:    retq
292 ; AVX2-LABEL: test10:
293 ; AVX2:       # %bb.0:
294 ; AVX2-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
295 ; AVX2-NEXT:    retq
297 ; AVX512-LABEL: test10:
298 ; AVX512:       # %bb.0:
299 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
300 ; AVX512-NEXT:    retq
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
304   ret <32 x i8> %3
307 define <32 x i8> @test11(<32 x i8> %x) {
308 ; SSE-LABEL: test11:
309 ; SSE:       # %bb.0:
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
323 ; SSE-NEXT:    retq
325 ; AVX1-LABEL: test11:
326 ; AVX1:       # %bb.0:
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
339 ; AVX1-NEXT:    retq
341 ; AVX2-LABEL: test11:
342 ; AVX2:       # %bb.0:
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
349 ; AVX2-NEXT:    retq
351 ; AVX512-LABEL: test11:
352 ; AVX512:       # %bb.0:
353 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %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
358 ; AVX512-NEXT:    retq
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
362   ret <32 x i8> %3
365 define <32 x i8> @test12(<32 x i8> %x) {
366 ; SSE-LABEL: test12:
367 ; SSE:       # %bb.0:
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
371 ; SSE-NEXT:    retq
373 ; AVX1-LABEL: test12:
374 ; AVX1:       # %bb.0:
375 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
376 ; AVX1-NEXT:    vmovdqa {{.*#+}} 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
380 ; AVX1-NEXT:    retq
382 ; AVX2-LABEL: test12:
383 ; AVX2:       # %bb.0:
384 ; AVX2-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
385 ; AVX2-NEXT:    retq
387 ; AVX512-LABEL: test12:
388 ; AVX512:       # %bb.0:
389 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
390 ; AVX512-NEXT:    retq
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
394   ret <32 x i8> %3
397 define <64 x i8> @test13(<64 x i8> %x) {
398 ; SSE-LABEL: test13:
399 ; SSE:       # %bb.0:
400 ; SSE-NEXT:    pcmpeqd %xmm8, %xmm8
401 ; SSE-NEXT:    movdqa %xmm3, %xmm5
402 ; SSE-NEXT:    psubb %xmm8, %xmm5
403 ; SSE-NEXT:    movdqa %xmm2, %xmm6
404 ; SSE-NEXT:    psubb %xmm8, %xmm6
405 ; SSE-NEXT:    movdqa %xmm1, %xmm7
406 ; SSE-NEXT:    psubb %xmm8, %xmm7
407 ; SSE-NEXT:    movdqa %xmm0, %xmm4
408 ; SSE-NEXT:    psubb %xmm8, %xmm4
409 ; SSE-NEXT:    pcmpeqb %xmm8, %xmm3
410 ; SSE-NEXT:    por %xmm5, %xmm3
411 ; SSE-NEXT:    pcmpeqb %xmm8, %xmm2
412 ; SSE-NEXT:    por %xmm6, %xmm2
413 ; SSE-NEXT:    pcmpeqb %xmm8, %xmm1
414 ; SSE-NEXT:    por %xmm7, %xmm1
415 ; SSE-NEXT:    pcmpeqb %xmm8, %xmm0
416 ; SSE-NEXT:    por %xmm4, %xmm0
417 ; SSE-NEXT:    retq
419 ; AVX1-LABEL: test13:
420 ; AVX1:       # %bb.0:
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
438 ; AVX1-NEXT:    retq
440 ; AVX2-LABEL: test13:
441 ; AVX2:       # %bb.0:
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
449 ; AVX2-NEXT:    retq
451 ; AVX512-LABEL: test13:
452 ; AVX512:       # %bb.0:
453 ; AVX512-NEXT:    vpternlogd $255, %zmm2, %zmm2, %zmm2
454 ; AVX512-NEXT:    vpsubb %zmm2, %zmm0, %zmm1
455 ; AVX512-NEXT:    vpcmpeqb %zmm2, %zmm0, %k1
456 ; AVX512-NEXT:    vmovdqu8 %zmm2, %zmm1 {%k1}
457 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
458 ; AVX512-NEXT:    retq
459   %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>
460   %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>
461   %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
462   ret <64 x i8> %3
465 define <64 x i8> @test14(<64 x i8> %x) {
466 ; SSE-LABEL: test14:
467 ; SSE:       # %bb.0:
468 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
469 ; SSE-NEXT:    paddusb %xmm4, %xmm0
470 ; SSE-NEXT:    paddusb %xmm4, %xmm1
471 ; SSE-NEXT:    paddusb %xmm4, %xmm2
472 ; SSE-NEXT:    paddusb %xmm4, %xmm3
473 ; SSE-NEXT:    retq
475 ; AVX1-LABEL: test14:
476 ; AVX1:       # %bb.0:
477 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
478 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
479 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
480 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm0, %xmm0
481 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
482 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
483 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
484 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm1, %xmm1
485 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
486 ; AVX1-NEXT:    retq
488 ; AVX2-LABEL: test14:
489 ; AVX2:       # %bb.0:
490 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127]
491 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm0, %ymm0
492 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm1, %ymm1
493 ; AVX2-NEXT:    retq
495 ; AVX512-LABEL: test14:
496 ; AVX512:       # %bb.0:
497 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
498 ; AVX512-NEXT:    retq
499   %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>
500   %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>
501   %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
502   ret <64 x i8> %3
505 define <64 x i8> @test15(<64 x i8> %x) {
506 ; SSE-LABEL: test15:
507 ; SSE:       # %bb.0:
508 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
509 ; SSE-NEXT:    paddusb %xmm4, %xmm0
510 ; SSE-NEXT:    paddusb %xmm4, %xmm1
511 ; SSE-NEXT:    paddusb %xmm4, %xmm2
512 ; SSE-NEXT:    paddusb %xmm4, %xmm3
513 ; SSE-NEXT:    retq
515 ; AVX1-LABEL: test15:
516 ; AVX1:       # %bb.0:
517 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
518 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
519 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
520 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm0, %xmm0
521 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
522 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
523 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
524 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm1, %xmm1
525 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
526 ; AVX1-NEXT:    retq
528 ; AVX2-LABEL: test15:
529 ; AVX2:       # %bb.0:
530 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129]
531 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm0, %ymm0
532 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm1, %ymm1
533 ; AVX2-NEXT:    retq
535 ; AVX512-LABEL: test15:
536 ; AVX512:       # %bb.0:
537 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
538 ; AVX512-NEXT:    retq
539   %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>
540   %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>
541   %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
542   ret <64 x i8> %3
545 define <64 x i8> @test16(<64 x i8> %x) {
546 ; SSE-LABEL: test16:
547 ; SSE:       # %bb.0:
548 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
549 ; SSE-NEXT:    paddusb %xmm4, %xmm0
550 ; SSE-NEXT:    paddusb %xmm4, %xmm1
551 ; SSE-NEXT:    paddusb %xmm4, %xmm2
552 ; SSE-NEXT:    paddusb %xmm4, %xmm3
553 ; SSE-NEXT:    retq
555 ; AVX1-LABEL: test16:
556 ; AVX1:       # %bb.0:
557 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
558 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
559 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
560 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm0, %xmm0
561 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
562 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
563 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
564 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm1, %xmm1
565 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
566 ; AVX1-NEXT:    retq
568 ; AVX2-LABEL: test16:
569 ; AVX2:       # %bb.0:
570 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254]
571 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm0, %ymm0
572 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm1, %ymm1
573 ; AVX2-NEXT:    retq
575 ; AVX512-LABEL: test16:
576 ; AVX512:       # %bb.0:
577 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
578 ; AVX512-NEXT:    retq
579   %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>
580   %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>
581   %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
582   ret <64 x i8> %3
585 define <64 x i8> @test17(<64 x i8> %x) {
586 ; SSE-LABEL: test17:
587 ; SSE:       # %bb.0:
588 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
589 ; SSE-NEXT:    movdqa %xmm0, %xmm5
590 ; SSE-NEXT:    pxor %xmm4, %xmm5
591 ; SSE-NEXT:    movdqa %xmm1, %xmm6
592 ; SSE-NEXT:    pxor %xmm4, %xmm6
593 ; SSE-NEXT:    movdqa %xmm2, %xmm7
594 ; SSE-NEXT:    pxor %xmm4, %xmm7
595 ; SSE-NEXT:    pxor %xmm3, %xmm4
596 ; SSE-NEXT:    pmaxub %xmm4, %xmm3
597 ; SSE-NEXT:    pcmpeqb %xmm4, %xmm3
598 ; SSE-NEXT:    pcmpeqd %xmm8, %xmm8
599 ; SSE-NEXT:    pxor %xmm8, %xmm3
600 ; SSE-NEXT:    pmaxub %xmm7, %xmm2
601 ; SSE-NEXT:    pcmpeqb %xmm7, %xmm2
602 ; SSE-NEXT:    pxor %xmm8, %xmm2
603 ; SSE-NEXT:    pmaxub %xmm6, %xmm1
604 ; SSE-NEXT:    pcmpeqb %xmm6, %xmm1
605 ; SSE-NEXT:    pxor %xmm8, %xmm1
606 ; SSE-NEXT:    pmaxub %xmm5, %xmm0
607 ; SSE-NEXT:    pcmpeqb %xmm5, %xmm0
608 ; SSE-NEXT:    pxor %xmm8, %xmm0
609 ; SSE-NEXT:    por %xmm5, %xmm0
610 ; SSE-NEXT:    por %xmm6, %xmm1
611 ; SSE-NEXT:    por %xmm7, %xmm2
612 ; SSE-NEXT:    por %xmm4, %xmm3
613 ; SSE-NEXT:    retq
615 ; AVX1-LABEL: test17:
616 ; AVX1:       # %bb.0:
617 ; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
618 ; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm3
619 ; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm2
620 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
621 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
622 ; AVX1-NEXT:    vpmaxub %xmm5, %xmm4, %xmm5
623 ; AVX1-NEXT:    vpcmpeqb %xmm5, %xmm4, %xmm4
624 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
625 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
626 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm2, %xmm1
627 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
628 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
629 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
630 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
631 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
632 ; AVX1-NEXT:    vpmaxub %xmm6, %xmm4, %xmm6
633 ; AVX1-NEXT:    vpcmpeqb %xmm6, %xmm4, %xmm4
634 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
635 ; AVX1-NEXT:    vpmaxub %xmm0, %xmm3, %xmm0
636 ; AVX1-NEXT:    vpcmpeqb %xmm0, %xmm3, %xmm0
637 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm0
638 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
639 ; AVX1-NEXT:    vorps %ymm3, %ymm0, %ymm0
640 ; AVX1-NEXT:    vorps %ymm2, %ymm1, %ymm1
641 ; AVX1-NEXT:    retq
643 ; AVX2-LABEL: test17:
644 ; AVX2:       # %bb.0:
645 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
646 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
647 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
648 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm2, %ymm1
649 ; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm2, %ymm1
650 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm4, %ymm4
651 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm1
652 ; AVX2-NEXT:    vpmaxub %ymm0, %ymm3, %ymm0
653 ; AVX2-NEXT:    vpcmpeqb %ymm0, %ymm3, %ymm0
654 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm0
655 ; AVX2-NEXT:    vpor %ymm3, %ymm0, %ymm0
656 ; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1
657 ; AVX2-NEXT:    retq
659 ; AVX512-LABEL: test17:
660 ; AVX512:       # %bb.0:
661 ; AVX512-NEXT:    vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1
662 ; AVX512-NEXT:    vpcmpltub %zmm0, %zmm1, %k1
663 ; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
664 ; AVX512-NEXT:    vmovdqu8 %zmm0, %zmm1 {%k1}
665 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
666 ; AVX512-NEXT:    retq
667   %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>
668   %2 = icmp ult <64 x i8> %1, %x
669   %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
670   ret <64 x i8> %3
673 define <64 x i8> @test18(<64 x i8> %x) {
674 ; SSE-LABEL: test18:
675 ; SSE:       # %bb.0:
676 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
677 ; SSE-NEXT:    paddusb %xmm4, %xmm0
678 ; SSE-NEXT:    paddusb %xmm4, %xmm1
679 ; SSE-NEXT:    paddusb %xmm4, %xmm2
680 ; SSE-NEXT:    paddusb %xmm4, %xmm3
681 ; SSE-NEXT:    retq
683 ; AVX1-LABEL: test18:
684 ; AVX1:       # %bb.0:
685 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
686 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
687 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
688 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm0, %xmm0
689 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
690 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
691 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm2, %xmm2
692 ; AVX1-NEXT:    vpaddusb %xmm3, %xmm1, %xmm1
693 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
694 ; AVX1-NEXT:    retq
696 ; AVX2-LABEL: test18:
697 ; AVX2:       # %bb.0:
698 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
699 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm0, %ymm0
700 ; AVX2-NEXT:    vpaddusb %ymm2, %ymm1, %ymm1
701 ; AVX2-NEXT:    retq
703 ; AVX512-LABEL: test18:
704 ; AVX512:       # %bb.0:
705 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
706 ; AVX512-NEXT:    retq
707   %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>
708   %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>
709   %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
710   ret <64 x i8> %3
713 define <8 x i16> @test19(<8 x i16> %x) {
714 ; SSE-LABEL: test19:
715 ; SSE:       # %bb.0:
716 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
717 ; SSE-NEXT:    movdqa %xmm0, %xmm2
718 ; SSE-NEXT:    psubw %xmm1, %xmm2
719 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
720 ; SSE-NEXT:    por %xmm2, %xmm0
721 ; SSE-NEXT:    retq
723 ; AVX1-LABEL: test19:
724 ; AVX1:       # %bb.0:
725 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
726 ; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm2
727 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
728 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
729 ; AVX1-NEXT:    retq
731 ; AVX2-LABEL: test19:
732 ; AVX2:       # %bb.0:
733 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
734 ; AVX2-NEXT:    vpsubw %xmm1, %xmm0, %xmm2
735 ; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
736 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
737 ; AVX2-NEXT:    retq
739 ; AVX512-LABEL: test19:
740 ; AVX512:       # %bb.0:
741 ; AVX512-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
742 ; AVX512-NEXT:    vpsubw %xmm2, %xmm0, %xmm1
743 ; AVX512-NEXT:    vpcmpeqw %xmm2, %xmm0, %k1
744 ; AVX512-NEXT:    vmovdqu16 %xmm2, %xmm1 {%k1}
745 ; AVX512-NEXT:    vmovdqa %xmm1, %xmm0
746 ; AVX512-NEXT:    retq
747   %1 = add <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
748   %2 = icmp eq <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
749   %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
750   ret <8 x i16> %3
753 define <8 x i16> @test20(<8 x i16> %x) {
754 ; SSE-LABEL: test20:
755 ; SSE:       # %bb.0:
756 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
757 ; SSE-NEXT:    retq
759 ; AVX-LABEL: test20:
760 ; AVX:       # %bb.0:
761 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
762 ; AVX-NEXT:    retq
763   %1 = add <8 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>
764   %2 = icmp ugt <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
765   %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
766   ret <8 x i16> %3
769 define <8 x i16> @test21(<8 x i16> %x) {
770 ; SSE-LABEL: test21:
771 ; SSE:       # %bb.0:
772 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
773 ; SSE-NEXT:    retq
775 ; AVX-LABEL: test21:
776 ; AVX:       # %bb.0:
777 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
778 ; AVX-NEXT:    retq
779   %1 = add <8 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>
780   %2 = icmp ugt <8 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>
781   %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
782   ret <8 x i16> %3
785 define <8 x i16> @test22(<8 x i16> %x) {
786 ; SSE-LABEL: test22:
787 ; SSE:       # %bb.0:
788 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
789 ; SSE-NEXT:    retq
791 ; AVX-LABEL: test22:
792 ; AVX:       # %bb.0:
793 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
794 ; AVX-NEXT:    retq
795   %1 = add <8 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
796   %2 = icmp ugt <8 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
797   %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
798   ret <8 x i16> %3
801 define <8 x i16> @test23(<8 x i16> %x) {
802 ; SSE2-LABEL: test23:
803 ; SSE2:       # %bb.0:
804 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
805 ; SSE2-NEXT:    pxor %xmm0, %xmm2
806 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
807 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm1
808 ; SSE2-NEXT:    por %xmm2, %xmm1
809 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
810 ; SSE2-NEXT:    retq
812 ; SSSE3-LABEL: test23:
813 ; SSSE3:       # %bb.0:
814 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
815 ; SSSE3-NEXT:    pxor %xmm0, %xmm2
816 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
817 ; SSSE3-NEXT:    pcmpgtw %xmm0, %xmm1
818 ; SSSE3-NEXT:    por %xmm2, %xmm1
819 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
820 ; SSSE3-NEXT:    retq
822 ; SSE41-LABEL: test23:
823 ; SSE41:       # %bb.0:
824 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [32768,32768,32768,32768,32768,32768,32768,32768]
825 ; SSE41-NEXT:    pxor %xmm0, %xmm1
826 ; SSE41-NEXT:    pmaxuw %xmm1, %xmm0
827 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
828 ; SSE41-NEXT:    pcmpeqd %xmm2, %xmm2
829 ; SSE41-NEXT:    pxor %xmm2, %xmm0
830 ; SSE41-NEXT:    por %xmm1, %xmm0
831 ; SSE41-NEXT:    retq
833 ; AVX1-LABEL: test23:
834 ; AVX1:       # %bb.0:
835 ; AVX1-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
836 ; AVX1-NEXT:    vpmaxuw %xmm0, %xmm1, %xmm0
837 ; AVX1-NEXT:    vpcmpeqw %xmm0, %xmm1, %xmm0
838 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
839 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
840 ; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0
841 ; AVX1-NEXT:    retq
843 ; AVX2-LABEL: test23:
844 ; AVX2:       # %bb.0:
845 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
846 ; AVX2-NEXT:    vpmaxuw %xmm0, %xmm1, %xmm0
847 ; AVX2-NEXT:    vpcmpeqw %xmm0, %xmm1, %xmm0
848 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
849 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
850 ; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0
851 ; AVX2-NEXT:    retq
853 ; AVX512-LABEL: test23:
854 ; AVX512:       # %bb.0:
855 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
856 ; AVX512-NEXT:    vpcmpltuw %xmm0, %xmm1, %k1
857 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
858 ; AVX512-NEXT:    vmovdqu16 %xmm0, %xmm1 {%k1}
859 ; AVX512-NEXT:    vmovdqa %xmm1, %xmm0
860 ; AVX512-NEXT:    retq
861   %1 = xor <8 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
862   %2 = icmp ult <8 x i16> %1, %x
863   %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
864   ret <8 x i16> %3
867 define <8 x i16> @test24(<8 x i16> %x) {
868 ; SSE-LABEL: test24:
869 ; SSE:       # %bb.0:
870 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
871 ; SSE-NEXT:    retq
873 ; AVX-LABEL: test24:
874 ; AVX:       # %bb.0:
875 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
876 ; AVX-NEXT:    retq
877   %1 = add <8 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
878   %2 = icmp ugt <8 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
879   %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
880   ret <8 x i16> %3
883 define <16 x i16> @test25(<16 x i16> %x) {
884 ; SSE-LABEL: test25:
885 ; SSE:       # %bb.0:
886 ; SSE-NEXT:    pcmpeqd %xmm2, %xmm2
887 ; SSE-NEXT:    movdqa %xmm1, %xmm3
888 ; SSE-NEXT:    psubw %xmm2, %xmm3
889 ; SSE-NEXT:    movdqa %xmm0, %xmm4
890 ; SSE-NEXT:    psubw %xmm2, %xmm4
891 ; SSE-NEXT:    pcmpeqw %xmm2, %xmm1
892 ; SSE-NEXT:    por %xmm3, %xmm1
893 ; SSE-NEXT:    pcmpeqw %xmm2, %xmm0
894 ; SSE-NEXT:    por %xmm4, %xmm0
895 ; SSE-NEXT:    retq
897 ; AVX1-LABEL: test25:
898 ; AVX1:       # %bb.0:
899 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
900 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm2, %xmm2
901 ; AVX1-NEXT:    vpsubw %xmm2, %xmm1, %xmm3
902 ; AVX1-NEXT:    vpsubw %xmm2, %xmm0, %xmm4
903 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3
904 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm1, %xmm1
905 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
906 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
907 ; AVX1-NEXT:    vorps %ymm3, %ymm0, %ymm0
908 ; AVX1-NEXT:    retq
910 ; AVX2-LABEL: test25:
911 ; AVX2:       # %bb.0:
912 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
913 ; AVX2-NEXT:    vpsubw %ymm1, %ymm0, %ymm2
914 ; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
915 ; AVX2-NEXT:    vpor %ymm2, %ymm0, %ymm0
916 ; AVX2-NEXT:    retq
918 ; AVX512-LABEL: test25:
919 ; AVX512:       # %bb.0:
920 ; AVX512-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2
921 ; AVX512-NEXT:    vpsubw %ymm2, %ymm0, %ymm1
922 ; AVX512-NEXT:    vpcmpeqw %ymm2, %ymm0, %k1
923 ; AVX512-NEXT:    vmovdqu16 %ymm2, %ymm1 {%k1}
924 ; AVX512-NEXT:    vmovdqa %ymm1, %ymm0
925 ; AVX512-NEXT:    retq
926   %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>
927   %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>
928   %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
929   ret <16 x i16> %3
932 define <16 x i16> @test26(<16 x i16> %x) {
933 ; SSE-LABEL: test26:
934 ; SSE:       # %bb.0:
935 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]
936 ; SSE-NEXT:    paddusw %xmm2, %xmm0
937 ; SSE-NEXT:    paddusw %xmm2, %xmm1
938 ; SSE-NEXT:    retq
940 ; AVX1-LABEL: test26:
941 ; AVX1:       # %bb.0:
942 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
943 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [32767,32767,32767,32767,32767,32767,32767,32767]
944 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
945 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
946 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
947 ; AVX1-NEXT:    retq
949 ; AVX2-LABEL: test26:
950 ; AVX2:       # %bb.0:
951 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
952 ; AVX2-NEXT:    retq
954 ; AVX512-LABEL: test26:
955 ; AVX512:       # %bb.0:
956 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
957 ; AVX512-NEXT:    retq
958   %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>
959   %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>
960   %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
961   ret <16 x i16> %3
964 define <16 x i16> @test27(<16 x i16> %x) {
965 ; SSE-LABEL: test27:
966 ; SSE:       # %bb.0:
967 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]
968 ; SSE-NEXT:    paddusw %xmm2, %xmm0
969 ; SSE-NEXT:    paddusw %xmm2, %xmm1
970 ; SSE-NEXT:    retq
972 ; AVX1-LABEL: test27:
973 ; AVX1:       # %bb.0:
974 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
975 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [32769,32769,32769,32769,32769,32769,32769,32769]
976 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
977 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
978 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
979 ; AVX1-NEXT:    retq
981 ; AVX2-LABEL: test27:
982 ; AVX2:       # %bb.0:
983 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
984 ; AVX2-NEXT:    retq
986 ; AVX512-LABEL: test27:
987 ; AVX512:       # %bb.0:
988 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
989 ; AVX512-NEXT:    retq
990   %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>
991   %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>
992   %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
993   ret <16 x i16> %3
996 define <16 x i16> @test28(<16 x i16> %x) {
997 ; SSE-LABEL: test28:
998 ; SSE:       # %bb.0:
999 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1000 ; SSE-NEXT:    paddusw %xmm2, %xmm0
1001 ; SSE-NEXT:    paddusw %xmm2, %xmm1
1002 ; SSE-NEXT:    retq
1004 ; AVX1-LABEL: test28:
1005 ; AVX1:       # %bb.0:
1006 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1007 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1008 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
1009 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
1010 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1011 ; AVX1-NEXT:    retq
1013 ; AVX2-LABEL: test28:
1014 ; AVX2:       # %bb.0:
1015 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1016 ; AVX2-NEXT:    retq
1018 ; AVX512-LABEL: test28:
1019 ; AVX512:       # %bb.0:
1020 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1021 ; AVX512-NEXT:    retq
1022   %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>
1023   %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>
1024   %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
1025   ret <16 x i16> %3
1028 define <16 x i16> @test29(<16 x i16> %x) {
1029 ; SSE2-LABEL: test29:
1030 ; SSE2:       # %bb.0:
1031 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1032 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1033 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1034 ; SSE2-NEXT:    pxor %xmm1, %xmm3
1035 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1036 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm2
1037 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1038 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm1
1039 ; SSE2-NEXT:    por %xmm4, %xmm1
1040 ; SSE2-NEXT:    por %xmm3, %xmm2
1041 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1042 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1043 ; SSE2-NEXT:    retq
1045 ; SSSE3-LABEL: test29:
1046 ; SSSE3:       # %bb.0:
1047 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1048 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
1049 ; SSSE3-NEXT:    pxor %xmm3, %xmm4
1050 ; SSSE3-NEXT:    pxor %xmm1, %xmm3
1051 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1052 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm2
1053 ; SSSE3-NEXT:    movdqa %xmm4, %xmm1
1054 ; SSSE3-NEXT:    pcmpgtw %xmm0, %xmm1
1055 ; SSSE3-NEXT:    por %xmm4, %xmm1
1056 ; SSSE3-NEXT:    por %xmm3, %xmm2
1057 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1058 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1059 ; SSSE3-NEXT:    retq
1061 ; SSE41-LABEL: test29:
1062 ; SSE41:       # %bb.0:
1063 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1064 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
1065 ; SSE41-NEXT:    pxor %xmm2, %xmm3
1066 ; SSE41-NEXT:    pxor %xmm1, %xmm2
1067 ; SSE41-NEXT:    pmaxuw %xmm2, %xmm1
1068 ; SSE41-NEXT:    pcmpeqw %xmm2, %xmm1
1069 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm4
1070 ; SSE41-NEXT:    pxor %xmm4, %xmm1
1071 ; SSE41-NEXT:    pmaxuw %xmm3, %xmm0
1072 ; SSE41-NEXT:    pcmpeqw %xmm3, %xmm0
1073 ; SSE41-NEXT:    pxor %xmm4, %xmm0
1074 ; SSE41-NEXT:    por %xmm3, %xmm0
1075 ; SSE41-NEXT:    por %xmm2, %xmm1
1076 ; SSE41-NEXT:    retq
1078 ; AVX1-LABEL: test29:
1079 ; AVX1:       # %bb.0:
1080 ; AVX1-NEXT:    vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1081 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1082 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1083 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1084 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm3, %xmm2
1085 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1086 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1087 ; AVX1-NEXT:    vpmaxuw %xmm0, %xmm1, %xmm0
1088 ; AVX1-NEXT:    vpcmpeqw %xmm0, %xmm1, %xmm0
1089 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
1090 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1091 ; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0
1092 ; AVX1-NEXT:    retq
1094 ; AVX2-LABEL: test29:
1095 ; AVX2:       # %bb.0:
1096 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1097 ; AVX2-NEXT:    vpmaxuw %ymm0, %ymm1, %ymm0
1098 ; AVX2-NEXT:    vpcmpeqw %ymm0, %ymm1, %ymm0
1099 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2
1100 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
1101 ; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
1102 ; AVX2-NEXT:    retq
1104 ; AVX512-LABEL: test29:
1105 ; AVX512:       # %bb.0:
1106 ; AVX512-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1107 ; AVX512-NEXT:    vpcmpltuw %ymm0, %ymm1, %k1
1108 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
1109 ; AVX512-NEXT:    vmovdqu16 %ymm0, %ymm1 {%k1}
1110 ; AVX512-NEXT:    vmovdqa %ymm1, %ymm0
1111 ; AVX512-NEXT:    retq
1112   %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>
1113   %2 = icmp ult <16 x i16> %1, %x
1114   %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
1115   ret <16 x i16> %3
1118 define <16 x i16> @test30(<16 x i16> %x) {
1119 ; SSE-LABEL: test30:
1120 ; SSE:       # %bb.0:
1121 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1122 ; SSE-NEXT:    paddusw %xmm2, %xmm0
1123 ; SSE-NEXT:    paddusw %xmm2, %xmm1
1124 ; SSE-NEXT:    retq
1126 ; AVX1-LABEL: test30:
1127 ; AVX1:       # %bb.0:
1128 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1129 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1130 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
1131 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
1132 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1133 ; AVX1-NEXT:    retq
1135 ; AVX2-LABEL: test30:
1136 ; AVX2:       # %bb.0:
1137 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1138 ; AVX2-NEXT:    retq
1140 ; AVX512-LABEL: test30:
1141 ; AVX512:       # %bb.0:
1142 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1143 ; AVX512-NEXT:    retq
1144   %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>
1145   %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>
1146   %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
1147   ret <16 x i16> %3
1150 define <32 x i16> @test31(<32 x i16> %x) {
1151 ; SSE-LABEL: test31:
1152 ; SSE:       # %bb.0:
1153 ; SSE-NEXT:    pcmpeqd %xmm8, %xmm8
1154 ; SSE-NEXT:    movdqa %xmm3, %xmm5
1155 ; SSE-NEXT:    psubw %xmm8, %xmm5
1156 ; SSE-NEXT:    movdqa %xmm2, %xmm6
1157 ; SSE-NEXT:    psubw %xmm8, %xmm6
1158 ; SSE-NEXT:    movdqa %xmm1, %xmm7
1159 ; SSE-NEXT:    psubw %xmm8, %xmm7
1160 ; SSE-NEXT:    movdqa %xmm0, %xmm4
1161 ; SSE-NEXT:    psubw %xmm8, %xmm4
1162 ; SSE-NEXT:    pcmpeqw %xmm8, %xmm3
1163 ; SSE-NEXT:    por %xmm5, %xmm3
1164 ; SSE-NEXT:    pcmpeqw %xmm8, %xmm2
1165 ; SSE-NEXT:    por %xmm6, %xmm2
1166 ; SSE-NEXT:    pcmpeqw %xmm8, %xmm1
1167 ; SSE-NEXT:    por %xmm7, %xmm1
1168 ; SSE-NEXT:    pcmpeqw %xmm8, %xmm0
1169 ; SSE-NEXT:    por %xmm4, %xmm0
1170 ; SSE-NEXT:    retq
1172 ; AVX1-LABEL: test31:
1173 ; AVX1:       # %bb.0:
1174 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1175 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1176 ; AVX1-NEXT:    vpsubw %xmm3, %xmm2, %xmm4
1177 ; AVX1-NEXT:    vpsubw %xmm3, %xmm1, %xmm5
1178 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
1179 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
1180 ; AVX1-NEXT:    vpsubw %xmm3, %xmm5, %xmm6
1181 ; AVX1-NEXT:    vpsubw %xmm3, %xmm0, %xmm7
1182 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm7, %ymm6
1183 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm2, %xmm2
1184 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm1
1185 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1186 ; AVX1-NEXT:    vorps %ymm4, %ymm1, %ymm1
1187 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm5, %xmm2
1188 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0
1189 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1190 ; AVX1-NEXT:    vorps %ymm6, %ymm0, %ymm0
1191 ; AVX1-NEXT:    retq
1193 ; AVX2-LABEL: test31:
1194 ; AVX2:       # %bb.0:
1195 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2
1196 ; AVX2-NEXT:    vpsubw %ymm2, %ymm1, %ymm3
1197 ; AVX2-NEXT:    vpsubw %ymm2, %ymm0, %ymm4
1198 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm1
1199 ; AVX2-NEXT:    vpor %ymm3, %ymm1, %ymm1
1200 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
1201 ; AVX2-NEXT:    vpor %ymm4, %ymm0, %ymm0
1202 ; AVX2-NEXT:    retq
1204 ; AVX512-LABEL: test31:
1205 ; AVX512:       # %bb.0:
1206 ; AVX512-NEXT:    vpternlogd $255, %zmm2, %zmm2, %zmm2
1207 ; AVX512-NEXT:    vpsubw %zmm2, %zmm0, %zmm1
1208 ; AVX512-NEXT:    vpcmpeqw %zmm2, %zmm0, %k1
1209 ; AVX512-NEXT:    vmovdqu16 %zmm2, %zmm1 {%k1}
1210 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
1211 ; AVX512-NEXT:    retq
1212   %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>
1213   %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>
1214   %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
1215   ret <32 x i16> %3
1218 define <32 x i16> @test32(<32 x i16> %x) {
1219 ; SSE-LABEL: test32:
1220 ; SSE:       # %bb.0:
1221 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]
1222 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1223 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1224 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1225 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1226 ; SSE-NEXT:    retq
1228 ; AVX1-LABEL: test32:
1229 ; AVX1:       # %bb.0:
1230 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1231 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]
1232 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1233 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1234 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1235 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1236 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1237 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1238 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1239 ; AVX1-NEXT:    retq
1241 ; AVX2-LABEL: test32:
1242 ; AVX2:       # %bb.0:
1243 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]
1244 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1245 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1246 ; AVX2-NEXT:    retq
1248 ; AVX512-LABEL: test32:
1249 ; AVX512:       # %bb.0:
1250 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1251 ; AVX512-NEXT:    retq
1252   %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>
1253   %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>
1254   %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
1255   ret <32 x i16> %3
1258 define <32 x i16> @test33(<32 x i16> %x) {
1259 ; SSE-LABEL: test33:
1260 ; SSE:       # %bb.0:
1261 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]
1262 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1263 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1264 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1265 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1266 ; SSE-NEXT:    retq
1268 ; AVX1-LABEL: test33:
1269 ; AVX1:       # %bb.0:
1270 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1271 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
1272 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1273 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1274 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1275 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1276 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1277 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1278 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1279 ; AVX1-NEXT:    retq
1281 ; AVX2-LABEL: test33:
1282 ; AVX2:       # %bb.0:
1283 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]
1284 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1285 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1286 ; AVX2-NEXT:    retq
1288 ; AVX512-LABEL: test33:
1289 ; AVX512:       # %bb.0:
1290 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1291 ; AVX512-NEXT:    retq
1292   %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>
1293   %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>
1294   %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
1295   ret <32 x i16> %3
1298 define <32 x i16> @test34(<32 x i16> %x) {
1299 ; SSE-LABEL: test34:
1300 ; SSE:       # %bb.0:
1301 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1302 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1303 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1304 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1305 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1306 ; SSE-NEXT:    retq
1308 ; AVX1-LABEL: test34:
1309 ; AVX1:       # %bb.0:
1310 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1311 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]
1312 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1313 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1314 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1315 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1316 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1317 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1318 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1319 ; AVX1-NEXT:    retq
1321 ; AVX2-LABEL: test34:
1322 ; AVX2:       # %bb.0:
1323 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]
1324 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1325 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1326 ; AVX2-NEXT:    retq
1328 ; AVX512-LABEL: test34:
1329 ; AVX512:       # %bb.0:
1330 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1331 ; AVX512-NEXT:    retq
1332   %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>
1333   %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>
1334   %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
1335   ret <32 x i16> %3
1338 define <32 x i16> @test35(<32 x i16> %x) {
1339 ; SSE2-LABEL: test35:
1340 ; SSE2:       # %bb.0:
1341 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1342 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
1343 ; SSE2-NEXT:    pxor %xmm5, %xmm6
1344 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
1345 ; SSE2-NEXT:    pxor %xmm5, %xmm7
1346 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
1347 ; SSE2-NEXT:    pxor %xmm5, %xmm8
1348 ; SSE2-NEXT:    pxor %xmm3, %xmm5
1349 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
1350 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
1351 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
1352 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm3
1353 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
1354 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm2
1355 ; SSE2-NEXT:    movdqa %xmm6, %xmm1
1356 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm1
1357 ; SSE2-NEXT:    por %xmm6, %xmm1
1358 ; SSE2-NEXT:    por %xmm7, %xmm2
1359 ; SSE2-NEXT:    por %xmm8, %xmm3
1360 ; SSE2-NEXT:    por %xmm5, %xmm4
1361 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1362 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1363 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1364 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
1365 ; SSE2-NEXT:    retq
1367 ; SSSE3-LABEL: test35:
1368 ; SSSE3:       # %bb.0:
1369 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1370 ; SSSE3-NEXT:    movdqa %xmm0, %xmm6
1371 ; SSSE3-NEXT:    pxor %xmm5, %xmm6
1372 ; SSSE3-NEXT:    movdqa %xmm1, %xmm7
1373 ; SSSE3-NEXT:    pxor %xmm5, %xmm7
1374 ; SSSE3-NEXT:    movdqa %xmm2, %xmm8
1375 ; SSSE3-NEXT:    pxor %xmm5, %xmm8
1376 ; SSSE3-NEXT:    pxor %xmm3, %xmm5
1377 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
1378 ; SSSE3-NEXT:    pcmpgtw %xmm3, %xmm4
1379 ; SSSE3-NEXT:    movdqa %xmm8, %xmm3
1380 ; SSSE3-NEXT:    pcmpgtw %xmm2, %xmm3
1381 ; SSSE3-NEXT:    movdqa %xmm7, %xmm2
1382 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm2
1383 ; SSSE3-NEXT:    movdqa %xmm6, %xmm1
1384 ; SSSE3-NEXT:    pcmpgtw %xmm0, %xmm1
1385 ; SSSE3-NEXT:    por %xmm6, %xmm1
1386 ; SSSE3-NEXT:    por %xmm7, %xmm2
1387 ; SSSE3-NEXT:    por %xmm8, %xmm3
1388 ; SSSE3-NEXT:    por %xmm5, %xmm4
1389 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1390 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1391 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1392 ; SSSE3-NEXT:    movdqa %xmm4, %xmm3
1393 ; SSSE3-NEXT:    retq
1395 ; SSE41-LABEL: test35:
1396 ; SSE41:       # %bb.0:
1397 ; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1398 ; SSE41-NEXT:    movdqa %xmm0, %xmm5
1399 ; SSE41-NEXT:    pxor %xmm4, %xmm5
1400 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
1401 ; SSE41-NEXT:    pxor %xmm4, %xmm6
1402 ; SSE41-NEXT:    movdqa %xmm2, %xmm7
1403 ; SSE41-NEXT:    pxor %xmm4, %xmm7
1404 ; SSE41-NEXT:    pxor %xmm3, %xmm4
1405 ; SSE41-NEXT:    pmaxuw %xmm4, %xmm3
1406 ; SSE41-NEXT:    pcmpeqw %xmm4, %xmm3
1407 ; SSE41-NEXT:    pcmpeqd %xmm8, %xmm8
1408 ; SSE41-NEXT:    pxor %xmm8, %xmm3
1409 ; SSE41-NEXT:    pmaxuw %xmm7, %xmm2
1410 ; SSE41-NEXT:    pcmpeqw %xmm7, %xmm2
1411 ; SSE41-NEXT:    pxor %xmm8, %xmm2
1412 ; SSE41-NEXT:    pmaxuw %xmm6, %xmm1
1413 ; SSE41-NEXT:    pcmpeqw %xmm6, %xmm1
1414 ; SSE41-NEXT:    pxor %xmm8, %xmm1
1415 ; SSE41-NEXT:    pmaxuw %xmm5, %xmm0
1416 ; SSE41-NEXT:    pcmpeqw %xmm5, %xmm0
1417 ; SSE41-NEXT:    pxor %xmm8, %xmm0
1418 ; SSE41-NEXT:    por %xmm5, %xmm0
1419 ; SSE41-NEXT:    por %xmm6, %xmm1
1420 ; SSE41-NEXT:    por %xmm7, %xmm2
1421 ; SSE41-NEXT:    por %xmm4, %xmm3
1422 ; SSE41-NEXT:    retq
1424 ; AVX1-LABEL: test35:
1425 ; AVX1:       # %bb.0:
1426 ; AVX1-NEXT:    vmovaps {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1427 ; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm3
1428 ; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm2
1429 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1430 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1431 ; AVX1-NEXT:    vpmaxuw %xmm5, %xmm4, %xmm5
1432 ; AVX1-NEXT:    vpcmpeqw %xmm5, %xmm4, %xmm4
1433 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
1434 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1435 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm2, %xmm1
1436 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm2, %xmm1
1437 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
1438 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
1439 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1440 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
1441 ; AVX1-NEXT:    vpmaxuw %xmm6, %xmm4, %xmm6
1442 ; AVX1-NEXT:    vpcmpeqw %xmm6, %xmm4, %xmm4
1443 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1444 ; AVX1-NEXT:    vpmaxuw %xmm0, %xmm3, %xmm0
1445 ; AVX1-NEXT:    vpcmpeqw %xmm0, %xmm3, %xmm0
1446 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm0
1447 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
1448 ; AVX1-NEXT:    vorps %ymm3, %ymm0, %ymm0
1449 ; AVX1-NEXT:    vorps %ymm2, %ymm1, %ymm1
1450 ; AVX1-NEXT:    retq
1452 ; AVX2-LABEL: test35:
1453 ; AVX2:       # %bb.0:
1454 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1455 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
1456 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
1457 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm2, %ymm1
1458 ; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm2, %ymm1
1459 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm4, %ymm4
1460 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm1
1461 ; AVX2-NEXT:    vpmaxuw %ymm0, %ymm3, %ymm0
1462 ; AVX2-NEXT:    vpcmpeqw %ymm0, %ymm3, %ymm0
1463 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm0
1464 ; AVX2-NEXT:    vpor %ymm3, %ymm0, %ymm0
1465 ; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1
1466 ; AVX2-NEXT:    retq
1468 ; AVX512-LABEL: test35:
1469 ; AVX512:       # %bb.0:
1470 ; AVX512-NEXT:    vpxorq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm1
1471 ; AVX512-NEXT:    vpcmpltuw %zmm0, %zmm1, %k1
1472 ; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1473 ; AVX512-NEXT:    vmovdqu16 %zmm0, %zmm1 {%k1}
1474 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
1475 ; AVX512-NEXT:    retq
1476   %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>
1477   %2 = icmp ult <32 x i16> %1, %x
1478   %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
1479   ret <32 x i16> %3
1482 define <32 x i16> @test36(<32 x i16> %x) {
1483 ; SSE-LABEL: test36:
1484 ; SSE:       # %bb.0:
1485 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1486 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1487 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1488 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1489 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1490 ; SSE-NEXT:    retq
1492 ; AVX1-LABEL: test36:
1493 ; AVX1:       # %bb.0:
1494 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1495 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]
1496 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1497 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1498 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1499 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1500 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1501 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1502 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1503 ; AVX1-NEXT:    retq
1505 ; AVX2-LABEL: test36:
1506 ; AVX2:       # %bb.0:
1507 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1508 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1509 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1510 ; AVX2-NEXT:    retq
1512 ; AVX512-LABEL: test36:
1513 ; AVX512:       # %bb.0:
1514 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1515 ; AVX512-NEXT:    retq
1516   %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>
1517   %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>
1518   %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
1519   ret <32 x i16> %3
1522 define void @addus_v8i8(<8 x i8>* %p1, <8 x i8>* %p2) {
1523 ; SSE-LABEL: addus_v8i8:
1524 ; SSE:       # %bb.0:
1525 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
1526 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1527 ; SSE-NEXT:    paddusb %xmm0, %xmm1
1528 ; SSE-NEXT:    movq %xmm1, (%rdi)
1529 ; SSE-NEXT:    retq
1531 ; AVX-LABEL: addus_v8i8:
1532 ; AVX:       # %bb.0:
1533 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1534 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1535 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1536 ; AVX-NEXT:    vmovq %xmm0, (%rdi)
1537 ; AVX-NEXT:    retq
1538   %ld1 = load <8 x i8>, <8 x i8>* %p1, align 8
1539   %ld2 = load <8 x i8>, <8 x i8>* %p2, align 8
1540   %1 = add <8 x i8> %ld2, %ld1
1541   %2 = icmp ugt <8 x i8> %ld1, %1
1542   %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
1543   store <8 x i8> %sh3, <8 x i8>* %p1, align 8
1544   ret void
1547 define void @addus_v4i8(<4 x i8>* %p1, <4 x i8>* %p2) {
1548 ; SSE-LABEL: addus_v4i8:
1549 ; SSE:       # %bb.0:
1550 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1551 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1552 ; SSE-NEXT:    paddusb %xmm0, %xmm1
1553 ; SSE-NEXT:    movd %xmm1, (%rdi)
1554 ; SSE-NEXT:    retq
1556 ; AVX-LABEL: addus_v4i8:
1557 ; AVX:       # %bb.0:
1558 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1559 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1560 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1561 ; AVX-NEXT:    vmovd %xmm0, (%rdi)
1562 ; AVX-NEXT:    retq
1563   %ld1 = load <4 x i8>, <4 x i8>* %p1, align 4
1564   %ld2 = load <4 x i8>, <4 x i8>* %p2, align 4
1565   %1 = add <4 x i8> %ld2, %ld1
1566   %2 = icmp ugt <4 x i8> %ld1, %1
1567   %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1568   store <4 x i8> %sh3, <4 x i8>* %p1, align 4
1569   ret void
1572 define void @addus_v2i8(<2 x i8>* %p1, <2 x i8>* %p2) {
1573 ; SSE2-LABEL: addus_v2i8:
1574 ; SSE2:       # %bb.0:
1575 ; SSE2-NEXT:    movzwl (%rdi), %eax
1576 ; SSE2-NEXT:    movd %eax, %xmm0
1577 ; SSE2-NEXT:    movzwl (%rsi), %eax
1578 ; SSE2-NEXT:    movd %eax, %xmm1
1579 ; SSE2-NEXT:    paddusb %xmm0, %xmm1
1580 ; SSE2-NEXT:    movd %xmm1, %eax
1581 ; SSE2-NEXT:    movw %ax, (%rdi)
1582 ; SSE2-NEXT:    retq
1584 ; SSSE3-LABEL: addus_v2i8:
1585 ; SSSE3:       # %bb.0:
1586 ; SSSE3-NEXT:    movzwl (%rdi), %eax
1587 ; SSSE3-NEXT:    movd %eax, %xmm0
1588 ; SSSE3-NEXT:    movzwl (%rsi), %eax
1589 ; SSSE3-NEXT:    movd %eax, %xmm1
1590 ; SSSE3-NEXT:    paddusb %xmm0, %xmm1
1591 ; SSSE3-NEXT:    movd %xmm1, %eax
1592 ; SSSE3-NEXT:    movw %ax, (%rdi)
1593 ; SSSE3-NEXT:    retq
1595 ; SSE41-LABEL: addus_v2i8:
1596 ; SSE41:       # %bb.0:
1597 ; SSE41-NEXT:    movzwl (%rdi), %eax
1598 ; SSE41-NEXT:    movd %eax, %xmm0
1599 ; SSE41-NEXT:    movzwl (%rsi), %eax
1600 ; SSE41-NEXT:    movd %eax, %xmm1
1601 ; SSE41-NEXT:    paddusb %xmm0, %xmm1
1602 ; SSE41-NEXT:    pextrw $0, %xmm1, (%rdi)
1603 ; SSE41-NEXT:    retq
1605 ; AVX-LABEL: addus_v2i8:
1606 ; AVX:       # %bb.0:
1607 ; AVX-NEXT:    movzwl (%rdi), %eax
1608 ; AVX-NEXT:    vmovd %eax, %xmm0
1609 ; AVX-NEXT:    movzwl (%rsi), %eax
1610 ; AVX-NEXT:    vmovd %eax, %xmm1
1611 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1612 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
1613 ; AVX-NEXT:    retq
1614   %ld1 = load <2 x i8>, <2 x i8>* %p1, align 2
1615   %ld2 = load <2 x i8>, <2 x i8>* %p2, align 2
1616   %1 = add <2 x i8> %ld2, %ld1
1617   %2 = icmp ugt <2 x i8> %ld1, %1
1618   %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1619   store <2 x i8> %sh3, <2 x i8>* %p1, align 2
1620   ret void
1623 define void @addus_v4i16(<4 x i16>* %p1, <4 x i16>* %p2) {
1624 ; SSE-LABEL: addus_v4i16:
1625 ; SSE:       # %bb.0:
1626 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
1627 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1628 ; SSE-NEXT:    paddusw %xmm0, %xmm1
1629 ; SSE-NEXT:    movq %xmm1, (%rdi)
1630 ; SSE-NEXT:    retq
1632 ; AVX-LABEL: addus_v4i16:
1633 ; AVX:       # %bb.0:
1634 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1635 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1636 ; AVX-NEXT:    vpaddusw %xmm0, %xmm1, %xmm0
1637 ; AVX-NEXT:    vmovq %xmm0, (%rdi)
1638 ; AVX-NEXT:    retq
1639   %ld1 = load <4 x i16>, <4 x i16>* %p1, align 4
1640   %ld2 = load <4 x i16>, <4 x i16>* %p2, align 4
1641   %1 = add <4 x i16> %ld2, %ld1
1642   %2 = icmp ugt <4 x i16> %ld1, %1
1643   %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1644   store <4 x i16> %sh3, <4 x i16>* %p1, align 4
1645   ret void
1648 define void @addus_v2i16(<2 x i16>* %p1, <2 x i16>* %p2) {
1649 ; SSE-LABEL: addus_v2i16:
1650 ; SSE:       # %bb.0:
1651 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1652 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1653 ; SSE-NEXT:    paddusw %xmm0, %xmm1
1654 ; SSE-NEXT:    movd %xmm1, (%rdi)
1655 ; SSE-NEXT:    retq
1657 ; AVX-LABEL: addus_v2i16:
1658 ; AVX:       # %bb.0:
1659 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1660 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1661 ; AVX-NEXT:    vpaddusw %xmm0, %xmm1, %xmm0
1662 ; AVX-NEXT:    vmovd %xmm0, (%rdi)
1663 ; AVX-NEXT:    retq
1664   %ld1 = load <2 x i16>, <2 x i16>* %p1, align 2
1665   %ld2 = load <2 x i16>, <2 x i16>* %p2, align 2
1666   %1 = add <2 x i16> %ld2, %ld1
1667   %2 = icmp ugt <2 x i16> %ld1, %1
1668   %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1669   store <2 x i16> %sh3, <2 x i16>* %p1, align 2
1670   ret void