[AArch64,ELF] Restrict MOVZ/MOVK to non-PIC large code model (#70178)
[llvm-project.git] / llvm / test / CodeGen / X86 / paddus.ll
blob3a73ca1de11a113da29fd49a4fbff7b62842f593
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 ; SSE-LABEL: test28:
997 ; SSE:       # %bb.0:
998 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
999 ; SSE-NEXT:    paddusw %xmm2, %xmm0
1000 ; SSE-NEXT:    paddusw %xmm2, %xmm1
1001 ; SSE-NEXT:    retq
1003 ; AVX1-LABEL: test28:
1004 ; AVX1:       # %bb.0:
1005 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1006 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [65534,65534,65534,65534,65534,65534,65534,65534]
1007 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
1008 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
1009 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1010 ; AVX1-NEXT:    retq
1012 ; AVX2-LABEL: test28:
1013 ; AVX2:       # %bb.0:
1014 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1015 ; AVX2-NEXT:    retq
1017 ; AVX512-LABEL: test28:
1018 ; AVX512:       # %bb.0:
1019 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1020 ; AVX512-NEXT:    retq
1021   %1 = add <16 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
1022   %2 = icmp ugt <16 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1023   %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1024   ret <16 x i16> %3
1027 define <16 x i16> @test29(<16 x i16> %x) {
1028 ; SSE2-LABEL: test29:
1029 ; SSE2:       # %bb.0:
1030 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1031 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1032 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1033 ; SSE2-NEXT:    pxor %xmm1, %xmm3
1034 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1035 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm2
1036 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1037 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm1
1038 ; SSE2-NEXT:    por %xmm4, %xmm1
1039 ; SSE2-NEXT:    por %xmm3, %xmm2
1040 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1041 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1042 ; SSE2-NEXT:    retq
1044 ; SSSE3-LABEL: test29:
1045 ; SSSE3:       # %bb.0:
1046 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [32768,32768,32768,32768,32768,32768,32768,32768]
1047 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
1048 ; SSSE3-NEXT:    pxor %xmm3, %xmm4
1049 ; SSSE3-NEXT:    pxor %xmm1, %xmm3
1050 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1051 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm2
1052 ; SSSE3-NEXT:    movdqa %xmm4, %xmm1
1053 ; SSSE3-NEXT:    pcmpgtw %xmm0, %xmm1
1054 ; SSSE3-NEXT:    por %xmm4, %xmm1
1055 ; SSSE3-NEXT:    por %xmm3, %xmm2
1056 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1057 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1058 ; SSSE3-NEXT:    retq
1060 ; SSE41-LABEL: test29:
1061 ; SSE41:       # %bb.0:
1062 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1063 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
1064 ; SSE41-NEXT:    pxor %xmm2, %xmm3
1065 ; SSE41-NEXT:    pxor %xmm1, %xmm2
1066 ; SSE41-NEXT:    pmaxuw %xmm2, %xmm1
1067 ; SSE41-NEXT:    pcmpeqw %xmm2, %xmm1
1068 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm4
1069 ; SSE41-NEXT:    pxor %xmm4, %xmm1
1070 ; SSE41-NEXT:    pmaxuw %xmm3, %xmm0
1071 ; SSE41-NEXT:    pcmpeqw %xmm3, %xmm0
1072 ; SSE41-NEXT:    pxor %xmm4, %xmm0
1073 ; SSE41-NEXT:    por %xmm3, %xmm0
1074 ; SSE41-NEXT:    por %xmm2, %xmm1
1075 ; SSE41-NEXT:    retq
1077 ; AVX1-LABEL: test29:
1078 ; AVX1:       # %bb.0:
1079 ; AVX1-NEXT:    vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1080 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1081 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1082 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1083 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm3, %xmm2
1084 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1085 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1086 ; AVX1-NEXT:    vpmaxuw %xmm0, %xmm1, %xmm0
1087 ; AVX1-NEXT:    vpcmpeqw %xmm0, %xmm1, %xmm0
1088 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
1089 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1090 ; AVX1-NEXT:    vorps %ymm1, %ymm0, %ymm0
1091 ; AVX1-NEXT:    retq
1093 ; AVX2-LABEL: test29:
1094 ; AVX2:       # %bb.0:
1095 ; AVX2-NEXT:    vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
1096 ; AVX2-NEXT:    vpmaxuw %ymm0, %ymm1, %ymm0
1097 ; AVX2-NEXT:    vpcmpeqw %ymm0, %ymm1, %ymm0
1098 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2
1099 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
1100 ; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
1101 ; AVX2-NEXT:    retq
1103 ; AVX512-LABEL: test29:
1104 ; AVX512:       # %bb.0:
1105 ; AVX512-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm1
1106 ; AVX512-NEXT:    vpcmpltuw %ymm0, %ymm1, %k1
1107 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
1108 ; AVX512-NEXT:    vmovdqu16 %ymm0, %ymm1 {%k1}
1109 ; AVX512-NEXT:    vmovdqa %ymm1, %ymm0
1110 ; AVX512-NEXT:    retq
1111   %1 = xor <16 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1112   %2 = icmp ult <16 x i16> %1, %x
1113   %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1114   ret <16 x i16> %3
1117 define <16 x i16> @test30(<16 x i16> %x) {
1118 ; SSE-LABEL: test30:
1119 ; SSE:       # %bb.0:
1120 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1121 ; SSE-NEXT:    paddusw %xmm2, %xmm0
1122 ; SSE-NEXT:    paddusw %xmm2, %xmm1
1123 ; SSE-NEXT:    retq
1125 ; AVX1-LABEL: test30:
1126 ; AVX1:       # %bb.0:
1127 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1128 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2]
1129 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm1, %xmm1
1130 ; AVX1-NEXT:    vpaddusw %xmm2, %xmm0, %xmm0
1131 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1132 ; AVX1-NEXT:    retq
1134 ; AVX2-LABEL: test30:
1135 ; AVX2:       # %bb.0:
1136 ; AVX2-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1137 ; AVX2-NEXT:    retq
1139 ; AVX512-LABEL: test30:
1140 ; AVX512:       # %bb.0:
1141 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1142 ; AVX512-NEXT:    retq
1143   %1 = add <16 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1144   %2 = icmp ugt <16 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
1145   %3 = select <16 x i1> %2, <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <16 x i16> %1
1146   ret <16 x i16> %3
1149 define <32 x i16> @test31(<32 x i16> %x) {
1150 ; SSE-LABEL: test31:
1151 ; SSE:       # %bb.0:
1152 ; SSE-NEXT:    pcmpeqd %xmm4, %xmm4
1153 ; SSE-NEXT:    movdqa %xmm3, %xmm5
1154 ; SSE-NEXT:    psubw %xmm4, %xmm5
1155 ; SSE-NEXT:    movdqa %xmm2, %xmm6
1156 ; SSE-NEXT:    psubw %xmm4, %xmm6
1157 ; SSE-NEXT:    movdqa %xmm1, %xmm7
1158 ; SSE-NEXT:    psubw %xmm4, %xmm7
1159 ; SSE-NEXT:    movdqa %xmm0, %xmm8
1160 ; SSE-NEXT:    psubw %xmm4, %xmm8
1161 ; SSE-NEXT:    pcmpeqw %xmm4, %xmm3
1162 ; SSE-NEXT:    por %xmm5, %xmm3
1163 ; SSE-NEXT:    pcmpeqw %xmm4, %xmm2
1164 ; SSE-NEXT:    por %xmm6, %xmm2
1165 ; SSE-NEXT:    pcmpeqw %xmm4, %xmm1
1166 ; SSE-NEXT:    por %xmm7, %xmm1
1167 ; SSE-NEXT:    pcmpeqw %xmm4, %xmm0
1168 ; SSE-NEXT:    por %xmm8, %xmm0
1169 ; SSE-NEXT:    retq
1171 ; AVX1-LABEL: test31:
1172 ; AVX1:       # %bb.0:
1173 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1174 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1175 ; AVX1-NEXT:    vpsubw %xmm3, %xmm2, %xmm4
1176 ; AVX1-NEXT:    vpsubw %xmm3, %xmm1, %xmm5
1177 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
1178 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
1179 ; AVX1-NEXT:    vpsubw %xmm3, %xmm5, %xmm6
1180 ; AVX1-NEXT:    vpsubw %xmm3, %xmm0, %xmm7
1181 ; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm7, %ymm6
1182 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm2, %xmm2
1183 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm1
1184 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1185 ; AVX1-NEXT:    vorps %ymm4, %ymm1, %ymm1
1186 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm5, %xmm2
1187 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm0, %xmm0
1188 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1189 ; AVX1-NEXT:    vorps %ymm6, %ymm0, %ymm0
1190 ; AVX1-NEXT:    retq
1192 ; AVX2-LABEL: test31:
1193 ; AVX2:       # %bb.0:
1194 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm2, %ymm2
1195 ; AVX2-NEXT:    vpsubw %ymm2, %ymm1, %ymm3
1196 ; AVX2-NEXT:    vpsubw %ymm2, %ymm0, %ymm4
1197 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm1, %ymm1
1198 ; AVX2-NEXT:    vpor %ymm3, %ymm1, %ymm1
1199 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
1200 ; AVX2-NEXT:    vpor %ymm4, %ymm0, %ymm0
1201 ; AVX2-NEXT:    retq
1203 ; AVX512-LABEL: test31:
1204 ; AVX512:       # %bb.0:
1205 ; AVX512-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1
1206 ; AVX512-NEXT:    vpcmpneqw %zmm1, %zmm0, %k1
1207 ; AVX512-NEXT:    vpsubw %zmm1, %zmm0, %zmm1 {%k1}
1208 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
1209 ; AVX512-NEXT:    retq
1210   %1 = add <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1211   %2 = icmp eq <32 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
1212   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1213   ret <32 x i16> %3
1216 define <32 x i16> @test32(<32 x i16> %x) {
1217 ; SSE-LABEL: test32:
1218 ; SSE:       # %bb.0:
1219 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [32767,32767,32767,32767,32767,32767,32767,32767]
1220 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1221 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1222 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1223 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1224 ; SSE-NEXT:    retq
1226 ; AVX1-LABEL: test32:
1227 ; AVX1:       # %bb.0:
1228 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1229 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [32767,32767,32767,32767,32767,32767,32767,32767]
1230 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1231 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1232 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1233 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1234 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1235 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1236 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1237 ; AVX1-NEXT:    retq
1239 ; AVX2-LABEL: test32:
1240 ; AVX2:       # %bb.0:
1241 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767]
1242 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1243 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1244 ; AVX2-NEXT:    retq
1246 ; AVX512-LABEL: test32:
1247 ; AVX512:       # %bb.0:
1248 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1249 ; AVX512-NEXT:    retq
1250   %1 = add <32 x i16> %x, <i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767, i16 32767>
1251   %2 = icmp ugt <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1252   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1253   ret <32 x i16> %3
1256 define <32 x i16> @test33(<32 x i16> %x) {
1257 ; SSE-LABEL: test33:
1258 ; SSE:       # %bb.0:
1259 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [32769,32769,32769,32769,32769,32769,32769,32769]
1260 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1261 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1262 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1263 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1264 ; SSE-NEXT:    retq
1266 ; AVX1-LABEL: test33:
1267 ; AVX1:       # %bb.0:
1268 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1269 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [32769,32769,32769,32769,32769,32769,32769,32769]
1270 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1271 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1272 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1273 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1274 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1275 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1276 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1277 ; AVX1-NEXT:    retq
1279 ; AVX2-LABEL: test33:
1280 ; AVX2:       # %bb.0:
1281 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769,32769]
1282 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1283 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1284 ; AVX2-NEXT:    retq
1286 ; AVX512-LABEL: test33:
1287 ; AVX512:       # %bb.0:
1288 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1289 ; AVX512-NEXT:    retq
1290   %1 = add <32 x i16> %x, <i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767, i16 -32767>
1291   %2 = icmp ugt <32 x i16> %x, <i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766, i16 32766>
1292   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1293   ret <32 x i16> %3
1296 define <32 x i16> @test34(<32 x i16> %x) {
1297 ; SSE-LABEL: test34:
1298 ; SSE:       # %bb.0:
1299 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [65534,65534,65534,65534,65534,65534,65534,65534]
1300 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1301 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1302 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1303 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1304 ; SSE-NEXT:    retq
1306 ; AVX1-LABEL: test34:
1307 ; AVX1:       # %bb.0:
1308 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1309 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [65534,65534,65534,65534,65534,65534,65534,65534]
1310 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1311 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1312 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1313 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1314 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1315 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1316 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1317 ; AVX1-NEXT:    retq
1319 ; AVX2-LABEL: test34:
1320 ; AVX2:       # %bb.0:
1321 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534,65534]
1322 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1323 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1324 ; AVX2-NEXT:    retq
1326 ; AVX512-LABEL: test34:
1327 ; AVX512:       # %bb.0:
1328 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1329 ; AVX512-NEXT:    retq
1330   %1 = add <32 x i16> %x, <i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2, i16 -2>
1331   %2 = icmp ugt <32 x i16> %x, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1332   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1333   ret <32 x i16> %3
1336 define <32 x i16> @test35(<32 x i16> %x) {
1337 ; SSE2-LABEL: test35:
1338 ; SSE2:       # %bb.0:
1339 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1340 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
1341 ; SSE2-NEXT:    pxor %xmm5, %xmm6
1342 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
1343 ; SSE2-NEXT:    pxor %xmm5, %xmm7
1344 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
1345 ; SSE2-NEXT:    pxor %xmm5, %xmm8
1346 ; SSE2-NEXT:    pxor %xmm3, %xmm5
1347 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
1348 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm4
1349 ; SSE2-NEXT:    movdqa %xmm8, %xmm3
1350 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm3
1351 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
1352 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm2
1353 ; SSE2-NEXT:    movdqa %xmm6, %xmm1
1354 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm1
1355 ; SSE2-NEXT:    por %xmm6, %xmm1
1356 ; SSE2-NEXT:    por %xmm7, %xmm2
1357 ; SSE2-NEXT:    por %xmm8, %xmm3
1358 ; SSE2-NEXT:    por %xmm5, %xmm4
1359 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
1360 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1361 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1362 ; SSE2-NEXT:    movdqa %xmm4, %xmm3
1363 ; SSE2-NEXT:    retq
1365 ; SSSE3-LABEL: test35:
1366 ; SSSE3:       # %bb.0:
1367 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1368 ; SSSE3-NEXT:    movdqa %xmm0, %xmm6
1369 ; SSSE3-NEXT:    pxor %xmm5, %xmm6
1370 ; SSSE3-NEXT:    movdqa %xmm1, %xmm7
1371 ; SSSE3-NEXT:    pxor %xmm5, %xmm7
1372 ; SSSE3-NEXT:    movdqa %xmm2, %xmm8
1373 ; SSSE3-NEXT:    pxor %xmm5, %xmm8
1374 ; SSSE3-NEXT:    pxor %xmm3, %xmm5
1375 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
1376 ; SSSE3-NEXT:    pcmpgtw %xmm3, %xmm4
1377 ; SSSE3-NEXT:    movdqa %xmm8, %xmm3
1378 ; SSSE3-NEXT:    pcmpgtw %xmm2, %xmm3
1379 ; SSSE3-NEXT:    movdqa %xmm7, %xmm2
1380 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm2
1381 ; SSSE3-NEXT:    movdqa %xmm6, %xmm1
1382 ; SSSE3-NEXT:    pcmpgtw %xmm0, %xmm1
1383 ; SSSE3-NEXT:    por %xmm6, %xmm1
1384 ; SSSE3-NEXT:    por %xmm7, %xmm2
1385 ; SSSE3-NEXT:    por %xmm8, %xmm3
1386 ; SSSE3-NEXT:    por %xmm5, %xmm4
1387 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1388 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
1389 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
1390 ; SSSE3-NEXT:    movdqa %xmm4, %xmm3
1391 ; SSSE3-NEXT:    retq
1393 ; SSE41-LABEL: test35:
1394 ; SSE41:       # %bb.0:
1395 ; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1396 ; SSE41-NEXT:    movdqa %xmm0, %xmm5
1397 ; SSE41-NEXT:    pxor %xmm4, %xmm5
1398 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
1399 ; SSE41-NEXT:    pxor %xmm4, %xmm6
1400 ; SSE41-NEXT:    movdqa %xmm2, %xmm7
1401 ; SSE41-NEXT:    pxor %xmm4, %xmm7
1402 ; SSE41-NEXT:    pxor %xmm3, %xmm4
1403 ; SSE41-NEXT:    pmaxuw %xmm4, %xmm3
1404 ; SSE41-NEXT:    pcmpeqw %xmm4, %xmm3
1405 ; SSE41-NEXT:    pcmpeqd %xmm8, %xmm8
1406 ; SSE41-NEXT:    pxor %xmm8, %xmm3
1407 ; SSE41-NEXT:    pmaxuw %xmm7, %xmm2
1408 ; SSE41-NEXT:    pcmpeqw %xmm7, %xmm2
1409 ; SSE41-NEXT:    pxor %xmm8, %xmm2
1410 ; SSE41-NEXT:    pmaxuw %xmm6, %xmm1
1411 ; SSE41-NEXT:    pcmpeqw %xmm6, %xmm1
1412 ; SSE41-NEXT:    pxor %xmm8, %xmm1
1413 ; SSE41-NEXT:    pmaxuw %xmm5, %xmm0
1414 ; SSE41-NEXT:    pcmpeqw %xmm5, %xmm0
1415 ; SSE41-NEXT:    pxor %xmm8, %xmm0
1416 ; SSE41-NEXT:    por %xmm5, %xmm0
1417 ; SSE41-NEXT:    por %xmm6, %xmm1
1418 ; SSE41-NEXT:    por %xmm7, %xmm2
1419 ; SSE41-NEXT:    por %xmm4, %xmm3
1420 ; SSE41-NEXT:    retq
1422 ; AVX1-LABEL: test35:
1423 ; AVX1:       # %bb.0:
1424 ; AVX1-NEXT:    vbroadcastss {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1425 ; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm3
1426 ; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm2
1427 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
1428 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
1429 ; AVX1-NEXT:    vpmaxuw %xmm5, %xmm4, %xmm5
1430 ; AVX1-NEXT:    vpcmpeqw %xmm5, %xmm4, %xmm4
1431 ; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
1432 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1433 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm2, %xmm1
1434 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm2, %xmm1
1435 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm1
1436 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
1437 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
1438 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
1439 ; AVX1-NEXT:    vpmaxuw %xmm6, %xmm4, %xmm6
1440 ; AVX1-NEXT:    vpcmpeqw %xmm6, %xmm4, %xmm4
1441 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
1442 ; AVX1-NEXT:    vpmaxuw %xmm0, %xmm3, %xmm0
1443 ; AVX1-NEXT:    vpcmpeqw %xmm0, %xmm3, %xmm0
1444 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm0
1445 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
1446 ; AVX1-NEXT:    vorps %ymm3, %ymm0, %ymm0
1447 ; AVX1-NEXT:    vorps %ymm2, %ymm1, %ymm1
1448 ; AVX1-NEXT:    retq
1450 ; AVX2-LABEL: test35:
1451 ; AVX2:       # %bb.0:
1452 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768]
1453 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
1454 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
1455 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm2, %ymm1
1456 ; AVX2-NEXT:    vpcmpeqw %ymm1, %ymm2, %ymm1
1457 ; AVX2-NEXT:    vpcmpeqd %ymm4, %ymm4, %ymm4
1458 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm1
1459 ; AVX2-NEXT:    vpmaxuw %ymm0, %ymm3, %ymm0
1460 ; AVX2-NEXT:    vpcmpeqw %ymm0, %ymm3, %ymm0
1461 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm0
1462 ; AVX2-NEXT:    vpor %ymm3, %ymm0, %ymm0
1463 ; AVX2-NEXT:    vpor %ymm2, %ymm1, %ymm1
1464 ; AVX2-NEXT:    retq
1466 ; AVX512-LABEL: test35:
1467 ; AVX512:       # %bb.0:
1468 ; AVX512-NEXT:    vpxord {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to16}, %zmm0, %zmm1
1469 ; AVX512-NEXT:    vpcmpltuw %zmm0, %zmm1, %k1
1470 ; AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1471 ; AVX512-NEXT:    vmovdqu16 %zmm0, %zmm1 {%k1}
1472 ; AVX512-NEXT:    vmovdqa64 %zmm1, %zmm0
1473 ; AVX512-NEXT:    retq
1474   %1 = xor <32 x i16> %x, <i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768, i16 -32768>
1475   %2 = icmp ult <32 x i16> %1, %x
1476   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1477   ret <32 x i16> %3
1480 define <32 x i16> @test36(<32 x i16> %x) {
1481 ; SSE-LABEL: test36:
1482 ; SSE:       # %bb.0:
1483 ; SSE-NEXT:    movdqa {{.*#+}} xmm4 = [2,2,2,2,2,2,2,2]
1484 ; SSE-NEXT:    paddusw %xmm4, %xmm0
1485 ; SSE-NEXT:    paddusw %xmm4, %xmm1
1486 ; SSE-NEXT:    paddusw %xmm4, %xmm2
1487 ; SSE-NEXT:    paddusw %xmm4, %xmm3
1488 ; SSE-NEXT:    retq
1490 ; AVX1-LABEL: test36:
1491 ; AVX1:       # %bb.0:
1492 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1493 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm3 = [2,2,2,2,2,2,2,2]
1494 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1495 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm0, %xmm0
1496 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1497 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1498 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm2, %xmm2
1499 ; AVX1-NEXT:    vpaddusw %xmm3, %xmm1, %xmm1
1500 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
1501 ; AVX1-NEXT:    retq
1503 ; AVX2-LABEL: test36:
1504 ; AVX2:       # %bb.0:
1505 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
1506 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm0, %ymm0
1507 ; AVX2-NEXT:    vpaddusw %ymm2, %ymm1, %ymm1
1508 ; AVX2-NEXT:    retq
1510 ; AVX512-LABEL: test36:
1511 ; AVX512:       # %bb.0:
1512 ; AVX512-NEXT:    vpaddusw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %zmm0, %zmm0
1513 ; AVX512-NEXT:    retq
1514   %1 = add <32 x i16> %x, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1515   %2 = icmp ugt <32 x i16> %x, <i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3, i16 -3>
1516   %3 = select <32 x i1> %2, <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>, <32 x i16> %1
1517   ret <32 x i16> %3
1520 define void @addus_v8i8(ptr %p1, ptr %p2) {
1521 ; SSE-LABEL: addus_v8i8:
1522 ; SSE:       # %bb.0:
1523 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
1524 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1525 ; SSE-NEXT:    paddusb %xmm0, %xmm1
1526 ; SSE-NEXT:    movq %xmm1, (%rdi)
1527 ; SSE-NEXT:    retq
1529 ; AVX-LABEL: addus_v8i8:
1530 ; AVX:       # %bb.0:
1531 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1532 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1533 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1534 ; AVX-NEXT:    vmovq %xmm0, (%rdi)
1535 ; AVX-NEXT:    retq
1536   %ld1 = load <8 x i8>, ptr %p1, align 8
1537   %ld2 = load <8 x i8>, ptr %p2, align 8
1538   %1 = add <8 x i8> %ld2, %ld1
1539   %2 = icmp ugt <8 x i8> %ld1, %1
1540   %sh3 = select <8 x i1> %2, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>, <8 x i8> %1
1541   store <8 x i8> %sh3, ptr %p1, align 8
1542   ret void
1545 define void @addus_v4i8(ptr %p1, ptr %p2) {
1546 ; SSE-LABEL: addus_v4i8:
1547 ; SSE:       # %bb.0:
1548 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1549 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1550 ; SSE-NEXT:    paddusb %xmm0, %xmm1
1551 ; SSE-NEXT:    movd %xmm1, (%rdi)
1552 ; SSE-NEXT:    retq
1554 ; AVX-LABEL: addus_v4i8:
1555 ; AVX:       # %bb.0:
1556 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1557 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1558 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1559 ; AVX-NEXT:    vmovd %xmm0, (%rdi)
1560 ; AVX-NEXT:    retq
1561   %ld1 = load <4 x i8>, ptr %p1, align 4
1562   %ld2 = load <4 x i8>, ptr %p2, align 4
1563   %1 = add <4 x i8> %ld2, %ld1
1564   %2 = icmp ugt <4 x i8> %ld1, %1
1565   %sh3 = select <4 x i1> %2, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8> %1
1566   store <4 x i8> %sh3, ptr %p1, align 4
1567   ret void
1570 define void @addus_v2i8(ptr %p1, ptr %p2) {
1571 ; SSE2-LABEL: addus_v2i8:
1572 ; SSE2:       # %bb.0:
1573 ; SSE2-NEXT:    movzwl (%rdi), %eax
1574 ; SSE2-NEXT:    movd %eax, %xmm0
1575 ; SSE2-NEXT:    movzwl (%rsi), %eax
1576 ; SSE2-NEXT:    movd %eax, %xmm1
1577 ; SSE2-NEXT:    paddusb %xmm0, %xmm1
1578 ; SSE2-NEXT:    movd %xmm1, %eax
1579 ; SSE2-NEXT:    movw %ax, (%rdi)
1580 ; SSE2-NEXT:    retq
1582 ; SSSE3-LABEL: addus_v2i8:
1583 ; SSSE3:       # %bb.0:
1584 ; SSSE3-NEXT:    movzwl (%rdi), %eax
1585 ; SSSE3-NEXT:    movd %eax, %xmm0
1586 ; SSSE3-NEXT:    movzwl (%rsi), %eax
1587 ; SSSE3-NEXT:    movd %eax, %xmm1
1588 ; SSSE3-NEXT:    paddusb %xmm0, %xmm1
1589 ; SSSE3-NEXT:    movd %xmm1, %eax
1590 ; SSSE3-NEXT:    movw %ax, (%rdi)
1591 ; SSSE3-NEXT:    retq
1593 ; SSE41-LABEL: addus_v2i8:
1594 ; SSE41:       # %bb.0:
1595 ; SSE41-NEXT:    movzwl (%rdi), %eax
1596 ; SSE41-NEXT:    movd %eax, %xmm0
1597 ; SSE41-NEXT:    movzwl (%rsi), %eax
1598 ; SSE41-NEXT:    movd %eax, %xmm1
1599 ; SSE41-NEXT:    paddusb %xmm0, %xmm1
1600 ; SSE41-NEXT:    pextrw $0, %xmm1, (%rdi)
1601 ; SSE41-NEXT:    retq
1603 ; AVX-LABEL: addus_v2i8:
1604 ; AVX:       # %bb.0:
1605 ; AVX-NEXT:    movzwl (%rdi), %eax
1606 ; AVX-NEXT:    vmovd %eax, %xmm0
1607 ; AVX-NEXT:    movzwl (%rsi), %eax
1608 ; AVX-NEXT:    vmovd %eax, %xmm1
1609 ; AVX-NEXT:    vpaddusb %xmm0, %xmm1, %xmm0
1610 ; AVX-NEXT:    vpextrw $0, %xmm0, (%rdi)
1611 ; AVX-NEXT:    retq
1612   %ld1 = load <2 x i8>, ptr %p1, align 2
1613   %ld2 = load <2 x i8>, ptr %p2, align 2
1614   %1 = add <2 x i8> %ld2, %ld1
1615   %2 = icmp ugt <2 x i8> %ld1, %1
1616   %sh3 = select <2 x i1> %2, <2 x i8> <i8 -1, i8 -1>, <2 x i8> %1
1617   store <2 x i8> %sh3, ptr %p1, align 2
1618   ret void
1621 define void @addus_v4i16(ptr %p1, ptr %p2) {
1622 ; SSE-LABEL: addus_v4i16:
1623 ; SSE:       # %bb.0:
1624 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
1625 ; SSE-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
1626 ; SSE-NEXT:    paddusw %xmm0, %xmm1
1627 ; SSE-NEXT:    movq %xmm1, (%rdi)
1628 ; SSE-NEXT:    retq
1630 ; AVX-LABEL: addus_v4i16:
1631 ; AVX:       # %bb.0:
1632 ; AVX-NEXT:    vmovq {{.*#+}} xmm0 = mem[0],zero
1633 ; AVX-NEXT:    vmovq {{.*#+}} xmm1 = mem[0],zero
1634 ; AVX-NEXT:    vpaddusw %xmm0, %xmm1, %xmm0
1635 ; AVX-NEXT:    vmovq %xmm0, (%rdi)
1636 ; AVX-NEXT:    retq
1637   %ld1 = load <4 x i16>, ptr %p1, align 4
1638   %ld2 = load <4 x i16>, ptr %p2, align 4
1639   %1 = add <4 x i16> %ld2, %ld1
1640   %2 = icmp ugt <4 x i16> %ld1, %1
1641   %sh3 = select <4 x i1> %2, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>, <4 x i16> %1
1642   store <4 x i16> %sh3, ptr %p1, align 4
1643   ret void
1646 define void @addus_v2i16(ptr %p1, ptr %p2) {
1647 ; SSE-LABEL: addus_v2i16:
1648 ; SSE:       # %bb.0:
1649 ; SSE-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1650 ; SSE-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1651 ; SSE-NEXT:    paddusw %xmm0, %xmm1
1652 ; SSE-NEXT:    movd %xmm1, (%rdi)
1653 ; SSE-NEXT:    retq
1655 ; AVX-LABEL: addus_v2i16:
1656 ; AVX:       # %bb.0:
1657 ; AVX-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1658 ; AVX-NEXT:    vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1659 ; AVX-NEXT:    vpaddusw %xmm0, %xmm1, %xmm0
1660 ; AVX-NEXT:    vmovd %xmm0, (%rdi)
1661 ; AVX-NEXT:    retq
1662   %ld1 = load <2 x i16>, ptr %p1, align 2
1663   %ld2 = load <2 x i16>, ptr %p2, align 2
1664   %1 = add <2 x i16> %ld2, %ld1
1665   %2 = icmp ugt <2 x i16> %ld1, %1
1666   %sh3 = select <2 x i1> %2, <2 x i16> <i16 -1, i16 -1>, <2 x i16> %1
1667   store <2 x i16> %sh3, ptr %p1, align 2
1668   ret void