[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / paddus.ll
blob81e0a09d0e3fa24beb77568b31ecc93be4828319
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:    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
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:    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
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:    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
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:    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
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:    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
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:    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
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 %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
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, %zmm1, %zmm1, %zmm1
454 ; AVX512-NEXT:    vpcmpneqb %zmm1, %zmm0, %k1
455 ; AVX512-NEXT:    vpsubb %zmm1, %zmm0, %zmm1 {%k1}
456 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
457 ; AVX512-NEXT:    retq
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
461   ret <64 x i8> %3
464 define <64 x i8> @test14(<64 x i8> %x) {
465 ; SSE-LABEL: test14:
466 ; SSE:       # %bb.0:
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
472 ; SSE-NEXT:    retq
474 ; AVX1-LABEL: test14:
475 ; AVX1:       # %bb.0:
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
485 ; AVX1-NEXT:    retq
487 ; AVX2-LABEL: test14:
488 ; AVX2:       # %bb.0:
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
492 ; AVX2-NEXT:    retq
494 ; AVX512-LABEL: test14:
495 ; AVX512:       # %bb.0:
496 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
497 ; AVX512-NEXT:    retq
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
501   ret <64 x i8> %3
504 define <64 x i8> @test15(<64 x i8> %x) {
505 ; SSE-LABEL: test15:
506 ; SSE:       # %bb.0:
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
512 ; SSE-NEXT:    retq
514 ; AVX1-LABEL: test15:
515 ; AVX1:       # %bb.0:
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
525 ; AVX1-NEXT:    retq
527 ; AVX2-LABEL: test15:
528 ; AVX2:       # %bb.0:
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
532 ; AVX2-NEXT:    retq
534 ; AVX512-LABEL: test15:
535 ; AVX512:       # %bb.0:
536 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
537 ; AVX512-NEXT:    retq
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
541   ret <64 x i8> %3
544 define <64 x i8> @test16(<64 x i8> %x) {
545 ; SSE-LABEL: test16:
546 ; SSE:       # %bb.0:
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
552 ; SSE-NEXT:    retq
554 ; AVX1-LABEL: test16:
555 ; AVX1:       # %bb.0:
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
565 ; AVX1-NEXT:    retq
567 ; AVX2-LABEL: test16:
568 ; AVX2:       # %bb.0:
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
572 ; AVX2-NEXT:    retq
574 ; AVX512-LABEL: test16:
575 ; AVX512:       # %bb.0:
576 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
577 ; AVX512-NEXT:    retq
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
581   ret <64 x i8> %3
584 define <64 x i8> @test17(<64 x i8> %x) {
585 ; SSE-LABEL: test17:
586 ; SSE:       # %bb.0:
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
612 ; SSE-NEXT:    retq
614 ; AVX1-LABEL: test17:
615 ; AVX1:       # %bb.0:
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
640 ; AVX1-NEXT:    retq
642 ; AVX2-LABEL: test17:
643 ; AVX2:       # %bb.0:
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
656 ; AVX2-NEXT:    retq
658 ; AVX512-LABEL: test17:
659 ; AVX512:       # %bb.0:
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
665 ; AVX512-NEXT:    retq
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
669   ret <64 x i8> %3
672 define <64 x i8> @test18(<64 x i8> %x) {
673 ; SSE-LABEL: test18:
674 ; SSE:       # %bb.0:
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
680 ; SSE-NEXT:    retq
682 ; AVX1-LABEL: test18:
683 ; AVX1:       # %bb.0:
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
693 ; AVX1-NEXT:    retq
695 ; AVX2-LABEL: test18:
696 ; AVX2:       # %bb.0:
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
700 ; AVX2-NEXT:    retq
702 ; AVX512-LABEL: test18:
703 ; AVX512:       # %bb.0:
704 ; AVX512-NEXT:    vpaddusb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
705 ; AVX512-NEXT:    retq
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
709   ret <64 x i8> %3
712 define <8 x i16> @test19(<8 x i16> %x) {
713 ; SSE-LABEL: test19:
714 ; SSE:       # %bb.0:
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
720 ; SSE-NEXT:    retq
722 ; AVX1-LABEL: test19:
723 ; AVX1:       # %bb.0:
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
728 ; AVX1-NEXT:    retq
730 ; AVX2-LABEL: test19:
731 ; AVX2:       # %bb.0:
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
736 ; AVX2-NEXT:    retq
738 ; AVX512-LABEL: test19:
739 ; AVX512:       # %bb.0:
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
745 ; AVX512-NEXT:    retq
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
749   ret <8 x i16> %3
752 define <8 x i16> @test20(<8 x i16> %x) {
753 ; SSE-LABEL: test20:
754 ; SSE:       # %bb.0:
755 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
756 ; SSE-NEXT:    retq
758 ; AVX-LABEL: test20:
759 ; AVX:       # %bb.0:
760 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
761 ; AVX-NEXT:    retq
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
765   ret <8 x i16> %3
768 define <8 x i16> @test21(<8 x i16> %x) {
769 ; SSE-LABEL: test21:
770 ; SSE:       # %bb.0:
771 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
772 ; SSE-NEXT:    retq
774 ; AVX-LABEL: test21:
775 ; AVX:       # %bb.0:
776 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
777 ; AVX-NEXT:    retq
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
781   ret <8 x i16> %3
784 define <8 x i16> @test22(<8 x i16> %x) {
785 ; SSE-LABEL: test22:
786 ; SSE:       # %bb.0:
787 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
788 ; SSE-NEXT:    retq
790 ; AVX-LABEL: test22:
791 ; AVX:       # %bb.0:
792 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
793 ; AVX-NEXT:    retq
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
797   ret <8 x i16> %3
800 define <8 x i16> @test23(<8 x i16> %x) {
801 ; SSE2-LABEL: test23:
802 ; SSE2:       # %bb.0:
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
809 ; SSE2-NEXT:    retq
811 ; SSSE3-LABEL: test23:
812 ; SSSE3:       # %bb.0:
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
819 ; SSSE3-NEXT:    retq
821 ; SSE41-LABEL: test23:
822 ; SSE41:       # %bb.0:
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
830 ; SSE41-NEXT:    retq
832 ; AVX1-LABEL: test23:
833 ; AVX1:       # %bb.0:
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
840 ; AVX1-NEXT:    retq
842 ; AVX2-LABEL: test23:
843 ; AVX2:       # %bb.0:
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
850 ; AVX2-NEXT:    retq
852 ; AVX512-LABEL: test23:
853 ; AVX512:       # %bb.0:
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
859 ; AVX512-NEXT:    retq
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
863   ret <8 x i16> %3
866 define <8 x i16> @test24(<8 x i16> %x) {
867 ; SSE-LABEL: test24:
868 ; SSE:       # %bb.0:
869 ; SSE-NEXT:    paddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
870 ; SSE-NEXT:    retq
872 ; AVX-LABEL: test24:
873 ; AVX:       # %bb.0:
874 ; AVX-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
875 ; AVX-NEXT:    retq
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
879   ret <8 x i16> %3
882 define <16 x i16> @test25(<16 x i16> %x) {
883 ; SSE-LABEL: test25:
884 ; SSE:       # %bb.0:
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
894 ; SSE-NEXT:    retq
896 ; AVX1-LABEL: test25:
897 ; AVX1:       # %bb.0:
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
907 ; AVX1-NEXT:    retq
909 ; AVX2-LABEL: test25:
910 ; AVX2:       # %bb.0:
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
915 ; AVX2-NEXT:    retq
917 ; AVX512-LABEL: test25:
918 ; AVX512:       # %bb.0:
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
924 ; AVX512-NEXT:    retq
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
928   ret <16 x i16> %3
931 define <16 x i16> @test26(<16 x i16> %x) {
932 ; SSE-LABEL: test26:
933 ; SSE:       # %bb.0:
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
937 ; SSE-NEXT:    retq
939 ; AVX1-LABEL: test26:
940 ; AVX1:       # %bb.0:
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
946 ; AVX1-NEXT:    retq
948 ; AVX2-LABEL: test26:
949 ; AVX2:       # %bb.0:
950 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
951 ; AVX2-NEXT:    retq
953 ; AVX512-LABEL: test26:
954 ; AVX512:       # %bb.0:
955 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
956 ; AVX512-NEXT:    retq
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
960   ret <16 x i16> %3
963 define <16 x i16> @test27(<16 x i16> %x) {
964 ; SSE-LABEL: test27:
965 ; SSE:       # %bb.0:
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
969 ; SSE-NEXT:    retq
971 ; AVX1-LABEL: test27:
972 ; AVX1:       # %bb.0:
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
978 ; AVX1-NEXT:    retq
980 ; AVX2-LABEL: test27:
981 ; AVX2:       # %bb.0:
982 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
983 ; AVX2-NEXT:    retq
985 ; AVX512-LABEL: test27:
986 ; AVX512:       # %bb.0:
987 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
988 ; AVX512-NEXT:    retq
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
992   ret <16 x i16> %3
995 define <16 x i16> @test28(<16 x i16> %x) {
996 ; SSE2-LABEL: test28:
997 ; SSE2:       # %bb.0:
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
1001 ; SSE2-NEXT:    retq
1003 ; SSSE3-LABEL: test28:
1004 ; SSSE3:       # %bb.0:
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
1008 ; SSSE3-NEXT:    retq
1010 ; SSE41-LABEL: test28:
1011 ; SSE41:       # %bb.0:
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
1015 ; SSE41-NEXT:    retq
1017 ; AVX1-LABEL: test28:
1018 ; AVX1:       # %bb.0:
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
1024 ; AVX1-NEXT:    retq
1026 ; AVX2-LABEL: test28:
1027 ; AVX2:       # %bb.0:
1028 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1029 ; AVX2-NEXT:    retq
1031 ; AVX512-LABEL: test28:
1032 ; AVX512:       # %bb.0:
1033 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1034 ; AVX512-NEXT:    retq
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
1038   ret <16 x i16> %3
1041 define <16 x i16> @test29(<16 x i16> %x) {
1042 ; SSE2-LABEL: test29:
1043 ; SSE2:       # %bb.0:
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
1056 ; SSE2-NEXT:    retq
1058 ; SSSE3-LABEL: test29:
1059 ; SSSE3:       # %bb.0:
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
1072 ; SSSE3-NEXT:    retq
1074 ; SSE41-LABEL: test29:
1075 ; SSE41:       # %bb.0:
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
1089 ; SSE41-NEXT:    retq
1091 ; AVX1-LABEL: test29:
1092 ; AVX1:       # %bb.0:
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
1105 ; AVX1-NEXT:    retq
1107 ; AVX2-LABEL: test29:
1108 ; AVX2:       # %bb.0:
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
1115 ; AVX2-NEXT:    retq
1117 ; AVX512-LABEL: test29:
1118 ; AVX512:       # %bb.0:
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
1124 ; AVX512-NEXT:    retq
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
1128   ret <16 x i16> %3
1131 define <16 x i16> @test30(<16 x i16> %x) {
1132 ; SSE2-LABEL: test30:
1133 ; SSE2:       # %bb.0:
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
1137 ; SSE2-NEXT:    retq
1139 ; SSSE3-LABEL: test30:
1140 ; SSSE3:       # %bb.0:
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
1144 ; SSSE3-NEXT:    retq
1146 ; SSE41-LABEL: test30:
1147 ; SSE41:       # %bb.0:
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
1151 ; SSE41-NEXT:    retq
1153 ; AVX1-LABEL: test30:
1154 ; AVX1:       # %bb.0:
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
1160 ; AVX1-NEXT:    retq
1162 ; AVX2-LABEL: test30:
1163 ; AVX2:       # %bb.0:
1164 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1165 ; AVX2-NEXT:    retq
1167 ; AVX512-LABEL: test30:
1168 ; AVX512:       # %bb.0:
1169 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1170 ; AVX512-NEXT:    retq
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
1174   ret <16 x i16> %3
1177 define <32 x i16> @test31(<32 x i16> %x) {
1178 ; SSE-LABEL: test31:
1179 ; SSE:       # %bb.0:
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
1197 ; SSE-NEXT:    retq
1199 ; AVX1-LABEL: test31:
1200 ; AVX1:       # %bb.0:
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
1218 ; AVX1-NEXT:    retq
1220 ; AVX2-LABEL: test31:
1221 ; AVX2:       # %bb.0:
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
1229 ; AVX2-NEXT:    retq
1231 ; AVX512-LABEL: test31:
1232 ; AVX512:       # %bb.0:
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
1237 ; AVX512-NEXT:    retq
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
1241   ret <32 x i16> %3
1244 define <32 x i16> @test32(<32 x i16> %x) {
1245 ; SSE-LABEL: test32:
1246 ; SSE:       # %bb.0:
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
1252 ; SSE-NEXT:    retq
1254 ; AVX1-LABEL: test32:
1255 ; AVX1:       # %bb.0:
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
1265 ; AVX1-NEXT:    retq
1267 ; AVX2-LABEL: test32:
1268 ; AVX2:       # %bb.0:
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
1272 ; AVX2-NEXT:    retq
1274 ; AVX512-LABEL: test32:
1275 ; AVX512:       # %bb.0:
1276 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1277 ; AVX512-NEXT:    retq
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
1281   ret <32 x i16> %3
1284 define <32 x i16> @test33(<32 x i16> %x) {
1285 ; SSE-LABEL: test33:
1286 ; SSE:       # %bb.0:
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
1292 ; SSE-NEXT:    retq
1294 ; AVX1-LABEL: test33:
1295 ; AVX1:       # %bb.0:
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
1305 ; AVX1-NEXT:    retq
1307 ; AVX2-LABEL: test33:
1308 ; AVX2:       # %bb.0:
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
1312 ; AVX2-NEXT:    retq
1314 ; AVX512-LABEL: test33:
1315 ; AVX512:       # %bb.0:
1316 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1317 ; AVX512-NEXT:    retq
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
1321   ret <32 x i16> %3
1324 define <32 x i16> @test34(<32 x i16> %x) {
1325 ; SSE2-LABEL: test34:
1326 ; SSE2:       # %bb.0:
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
1332 ; SSE2-NEXT:    retq
1334 ; SSSE3-LABEL: test34:
1335 ; SSSE3:       # %bb.0:
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
1341 ; SSSE3-NEXT:    retq
1343 ; SSE41-LABEL: test34:
1344 ; SSE41:       # %bb.0:
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
1350 ; SSE41-NEXT:    retq
1352 ; AVX1-LABEL: test34:
1353 ; AVX1:       # %bb.0:
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
1363 ; AVX1-NEXT:    retq
1365 ; AVX2-LABEL: test34:
1366 ; AVX2:       # %bb.0:
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
1370 ; AVX2-NEXT:    retq
1372 ; AVX512-LABEL: test34:
1373 ; AVX512:       # %bb.0:
1374 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1375 ; AVX512-NEXT:    retq
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
1379   ret <32 x i16> %3
1382 define <32 x i16> @test35(<32 x i16> %x) {
1383 ; SSE2-LABEL: test35:
1384 ; SSE2:       # %bb.0:
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
1409 ; SSE2-NEXT:    retq
1411 ; SSSE3-LABEL: test35:
1412 ; SSSE3:       # %bb.0:
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
1437 ; SSSE3-NEXT:    retq
1439 ; SSE41-LABEL: test35:
1440 ; SSE41:       # %bb.0:
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
1466 ; SSE41-NEXT:    retq
1468 ; AVX1-LABEL: test35:
1469 ; AVX1:       # %bb.0:
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
1494 ; AVX1-NEXT:    retq
1496 ; AVX2-LABEL: test35:
1497 ; AVX2:       # %bb.0:
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
1510 ; AVX2-NEXT:    retq
1512 ; AVX512-LABEL: test35:
1513 ; AVX512:       # %bb.0:
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
1519 ; AVX512-NEXT:    retq
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
1523   ret <32 x i16> %3
1526 define <32 x i16> @test36(<32 x i16> %x) {
1527 ; SSE2-LABEL: test36:
1528 ; SSE2:       # %bb.0:
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
1534 ; SSE2-NEXT:    retq
1536 ; SSSE3-LABEL: test36:
1537 ; SSSE3:       # %bb.0:
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
1543 ; SSSE3-NEXT:    retq
1545 ; SSE41-LABEL: test36:
1546 ; SSE41:       # %bb.0:
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
1552 ; SSE41-NEXT:    retq
1554 ; AVX1-LABEL: test36:
1555 ; AVX1:       # %bb.0:
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
1565 ; AVX1-NEXT:    retq
1567 ; AVX2-LABEL: test36:
1568 ; AVX2:       # %bb.0:
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
1572 ; AVX2-NEXT:    retq
1574 ; AVX512-LABEL: test36:
1575 ; AVX512:       # %bb.0:
1576 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1577 ; AVX512-NEXT:    retq
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
1581   ret <32 x i16> %3
1584 define void @addus_v8i8(ptr %p1, ptr %p2) {
1585 ; SSE-LABEL: addus_v8i8:
1586 ; SSE:       # %bb.0:
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)
1591 ; SSE-NEXT:    retq
1593 ; AVX-LABEL: addus_v8i8:
1594 ; AVX:       # %bb.0:
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)
1599 ; AVX-NEXT:    retq
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
1606   ret void
1609 define void @addus_v4i8(ptr %p1, ptr %p2) {
1610 ; SSE-LABEL: addus_v4i8:
1611 ; SSE:       # %bb.0:
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)
1616 ; SSE-NEXT:    retq
1618 ; AVX-LABEL: addus_v4i8:
1619 ; AVX:       # %bb.0:
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)
1624 ; AVX-NEXT:    retq
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
1631   ret void
1634 define void @addus_v2i8(ptr %p1, ptr %p2) {
1635 ; SSE2-LABEL: addus_v2i8:
1636 ; SSE2:       # %bb.0:
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)
1644 ; SSE2-NEXT:    retq
1646 ; SSSE3-LABEL: addus_v2i8:
1647 ; SSSE3:       # %bb.0:
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)
1655 ; SSSE3-NEXT:    retq
1657 ; SSE41-LABEL: addus_v2i8:
1658 ; SSE41:       # %bb.0:
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)
1665 ; SSE41-NEXT:    retq
1667 ; AVX-LABEL: addus_v2i8:
1668 ; AVX:       # %bb.0:
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)
1675 ; AVX-NEXT:    retq
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
1682   ret void
1685 define void @addus_v4i16(ptr %p1, ptr %p2) {
1686 ; SSE-LABEL: addus_v4i16:
1687 ; SSE:       # %bb.0:
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)
1692 ; SSE-NEXT:    retq
1694 ; AVX-LABEL: addus_v4i16:
1695 ; AVX:       # %bb.0:
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)
1700 ; AVX-NEXT:    retq
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
1707   ret void
1710 define void @addus_v2i16(ptr %p1, ptr %p2) {
1711 ; SSE-LABEL: addus_v2i16:
1712 ; SSE:       # %bb.0:
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)
1717 ; SSE-NEXT:    retq
1719 ; AVX-LABEL: addus_v2i16:
1720 ; AVX:       # %bb.0:
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)
1725 ; AVX-NEXT:    retq
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
1732   ret void