[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / X86 / eq-or-eq-range-of-2.ll
blob527995bc2139eca2c5d4c9ce81f893234fcaf62d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=AVX512
3 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
4 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
5 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE41
6 ; RUN: llc < %s -mtriple=x86_64-- -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2
8 declare void @use.v4.i32(<4 x i32>)
10 define <4 x i32> @eq_or_eq_ult_2(<4 x i32> %x) {
11 ; AVX512-LABEL: eq_or_eq_ult_2:
12 ; AVX512:       # %bb.0:
13 ; AVX512-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %xmm0
14 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
15 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
16 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
17 ; AVX512-NEXT:    retq
19 ; AVX1-LABEL: eq_or_eq_ult_2:
20 ; AVX1:       # %bb.0:
21 ; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
22 ; AVX1-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23 ; AVX1-NEXT:    vpor %xmm1, %xmm0, %xmm0
24 ; AVX1-NEXT:    retq
26 ; AVX2-LABEL: eq_or_eq_ult_2:
27 ; AVX2:       # %bb.0:
28 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
29 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm1
30 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm2 = [5,5,5,5]
31 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
32 ; AVX2-NEXT:    vpor %xmm1, %xmm0, %xmm0
33 ; AVX2-NEXT:    retq
35 ; SSE41-LABEL: eq_or_eq_ult_2:
36 ; SSE41:       # %bb.0:
37 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [6,6,6,6]
38 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
39 ; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
40 ; SSE41-NEXT:    por %xmm1, %xmm0
41 ; SSE41-NEXT:    retq
43 ; SSE2-LABEL: eq_or_eq_ult_2:
44 ; SSE2:       # %bb.0:
45 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [6,6,6,6]
46 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
47 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
48 ; SSE2-NEXT:    por %xmm1, %xmm0
49 ; SSE2-NEXT:    retq
50   %x_adj = add <4 x i32> %x, <i32 -5, i32 -5, i32 -5, i32 -5>
51   %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2>
52   %r = sext <4 x i1> %cmp to <4 x i32>
53   ret <4 x i32> %r
56 define <4 x i32> @eq_or_eq_ult_2_only_transform_sse2(<4 x i32> %x) {
57 ; AVX512-LABEL: eq_or_eq_ult_2_only_transform_sse2:
58 ; AVX512:       # %bb.0:
59 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
60 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
61 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
62 ; AVX512-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1} {z}
63 ; AVX512-NEXT:    retq
65 ; AVX1-LABEL: eq_or_eq_ult_2_only_transform_sse2:
66 ; AVX1:       # %bb.0:
67 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
68 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
69 ; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
70 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
71 ; AVX1-NEXT:    retq
73 ; AVX2-LABEL: eq_or_eq_ult_2_only_transform_sse2:
74 ; AVX2:       # %bb.0:
75 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
76 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
77 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]
78 ; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1
79 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
80 ; AVX2-NEXT:    retq
82 ; SSE41-LABEL: eq_or_eq_ult_2_only_transform_sse2:
83 ; SSE41:       # %bb.0:
84 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
85 ; SSE41-NEXT:    paddd %xmm1, %xmm0
86 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [1,1,1,1]
87 ; SSE41-NEXT:    pminud %xmm0, %xmm1
88 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
89 ; SSE41-NEXT:    retq
91 ; SSE2-LABEL: eq_or_eq_ult_2_only_transform_sse2:
92 ; SSE2:       # %bb.0:
93 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [2,2,2,2]
94 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
95 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
96 ; SSE2-NEXT:    por %xmm1, %xmm0
97 ; SSE2-NEXT:    retq
98   %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
99   %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2>
100   %r = sext <4 x i1> %cmp to <4 x i32>
101   ret <4 x i32> %r
104 define <4 x i32> @eq_or_eq_ult_2_fail_multiuse(<4 x i32> %x) {
105 ; AVX512-LABEL: eq_or_eq_ult_2_fail_multiuse:
106 ; AVX512:       # %bb.0:
107 ; AVX512-NEXT:    subq $24, %rsp
108 ; AVX512-NEXT:    .cfi_def_cfa_offset 32
109 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
110 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
111 ; AVX512-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill
112 ; AVX512-NEXT:    callq use.v4.i32@PLT
113 ; AVX512-NEXT:    vmovdqa (%rsp), %xmm0 # 16-byte Reload
114 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
115 ; AVX512-NEXT:    vmovdqa32 {{.*#+}} xmm0 {%k1} {z} = [4294967295,4294967295,4294967295,4294967295]
116 ; AVX512-NEXT:    addq $24, %rsp
117 ; AVX512-NEXT:    .cfi_def_cfa_offset 8
118 ; AVX512-NEXT:    retq
120 ; AVX1-LABEL: eq_or_eq_ult_2_fail_multiuse:
121 ; AVX1:       # %bb.0:
122 ; AVX1-NEXT:    subq $24, %rsp
123 ; AVX1-NEXT:    .cfi_def_cfa_offset 32
124 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
125 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
126 ; AVX1-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill
127 ; AVX1-NEXT:    callq use.v4.i32@PLT
128 ; AVX1-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload
129 ; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm0
130 ; AVX1-NEXT:    vpcmpeqd %xmm0, %xmm1, %xmm0
131 ; AVX1-NEXT:    addq $24, %rsp
132 ; AVX1-NEXT:    .cfi_def_cfa_offset 8
133 ; AVX1-NEXT:    retq
135 ; AVX2-LABEL: eq_or_eq_ult_2_fail_multiuse:
136 ; AVX2:       # %bb.0:
137 ; AVX2-NEXT:    subq $24, %rsp
138 ; AVX2-NEXT:    .cfi_def_cfa_offset 32
139 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
140 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
141 ; AVX2-NEXT:    vmovdqa %xmm0, (%rsp) # 16-byte Spill
142 ; AVX2-NEXT:    callq use.v4.i32@PLT
143 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm0 = [1,1,1,1]
144 ; AVX2-NEXT:    vmovdqa (%rsp), %xmm1 # 16-byte Reload
145 ; AVX2-NEXT:    vpminud %xmm0, %xmm1, %xmm0
146 ; AVX2-NEXT:    vpcmpeqd %xmm0, %xmm1, %xmm0
147 ; AVX2-NEXT:    addq $24, %rsp
148 ; AVX2-NEXT:    .cfi_def_cfa_offset 8
149 ; AVX2-NEXT:    retq
151 ; SSE41-LABEL: eq_or_eq_ult_2_fail_multiuse:
152 ; SSE41:       # %bb.0:
153 ; SSE41-NEXT:    subq $24, %rsp
154 ; SSE41-NEXT:    .cfi_def_cfa_offset 32
155 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
156 ; SSE41-NEXT:    paddd %xmm1, %xmm0
157 ; SSE41-NEXT:    movdqa %xmm0, (%rsp) # 16-byte Spill
158 ; SSE41-NEXT:    callq use.v4.i32@PLT
159 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm0 = [1,1,1,1]
160 ; SSE41-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
161 ; SSE41-NEXT:    pminud %xmm1, %xmm0
162 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
163 ; SSE41-NEXT:    addq $24, %rsp
164 ; SSE41-NEXT:    .cfi_def_cfa_offset 8
165 ; SSE41-NEXT:    retq
167 ; SSE2-LABEL: eq_or_eq_ult_2_fail_multiuse:
168 ; SSE2:       # %bb.0:
169 ; SSE2-NEXT:    subq $24, %rsp
170 ; SSE2-NEXT:    .cfi_def_cfa_offset 32
171 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
172 ; SSE2-NEXT:    paddd %xmm0, %xmm1
173 ; SSE2-NEXT:    movdqa %xmm1, (%rsp) # 16-byte Spill
174 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
175 ; SSE2-NEXT:    callq use.v4.i32@PLT
176 ; SSE2-NEXT:    movdqa (%rsp), %xmm1 # 16-byte Reload
177 ; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
178 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483650,2147483650,2147483650,2147483650]
179 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
180 ; SSE2-NEXT:    addq $24, %rsp
181 ; SSE2-NEXT:    .cfi_def_cfa_offset 8
182 ; SSE2-NEXT:    retq
183   %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
184   call void @use.v4.i32(<4 x i32> %x_adj)
185   %cmp = icmp ult <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2>
186   %r = sext <4 x i1> %cmp to <4 x i32>
187   ret <4 x i32> %r
190 define <4 x i32> @eq_or_eq_ult_3_fail(<4 x i32> %x) {
191 ; AVX512-LABEL: eq_or_eq_ult_3_fail:
192 ; AVX512:       # %bb.0:
193 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
194 ; AVX512-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
195 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
196 ; AVX512-NEXT:    vmovdqa32 %xmm1, %xmm0 {%k1} {z}
197 ; AVX512-NEXT:    retq
199 ; AVX1-LABEL: eq_or_eq_ult_3_fail:
200 ; AVX1:       # %bb.0:
201 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
202 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
203 ; AVX1-NEXT:    vpminud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
204 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
205 ; AVX1-NEXT:    retq
207 ; AVX2-LABEL: eq_or_eq_ult_3_fail:
208 ; AVX2:       # %bb.0:
209 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
210 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
211 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
212 ; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1
213 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
214 ; AVX2-NEXT:    retq
216 ; SSE41-LABEL: eq_or_eq_ult_3_fail:
217 ; SSE41:       # %bb.0:
218 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
219 ; SSE41-NEXT:    paddd %xmm1, %xmm0
220 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [2,2,2,2]
221 ; SSE41-NEXT:    pminud %xmm0, %xmm1
222 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
223 ; SSE41-NEXT:    retq
225 ; SSE2-LABEL: eq_or_eq_ult_3_fail:
226 ; SSE2:       # %bb.0:
227 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
228 ; SSE2-NEXT:    paddd %xmm0, %xmm1
229 ; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
230 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651]
231 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
232 ; SSE2-NEXT:    retq
233   %x_adj = add <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
234   %cmp = icmp ult <4 x i32> %x_adj, <i32 3, i32 3, i32 3, i32 3>
235   %r = sext <4 x i1> %cmp to <4 x i32>
236   ret <4 x i32> %r
239 define <4 x i32> @eq_or_eq_ugt_m3(<4 x i32> %x) {
240 ; AVX512-LABEL: eq_or_eq_ugt_m3:
241 ; AVX512:       # %bb.0:
242 ; AVX512-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
243 ; AVX512-NEXT:    vpcmpnleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
244 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
245 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
246 ; AVX512-NEXT:    retq
248 ; AVX-LABEL: eq_or_eq_ugt_m3:
249 ; AVX:       # %bb.0:
250 ; AVX-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
251 ; AVX-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
252 ; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm0
253 ; AVX-NEXT:    retq
255 ; SSE41-LABEL: eq_or_eq_ugt_m3:
256 ; SSE41:       # %bb.0:
257 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [9,12,9,9]
258 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
259 ; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
260 ; SSE41-NEXT:    por %xmm1, %xmm0
261 ; SSE41-NEXT:    retq
263 ; SSE2-LABEL: eq_or_eq_ugt_m3:
264 ; SSE2:       # %bb.0:
265 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [9,12,9,9]
266 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
267 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
268 ; SSE2-NEXT:    por %xmm1, %xmm0
269 ; SSE2-NEXT:    retq
270   %x_adj = add <4 x i32> %x, <i32 -11, i32 -14, i32 -11, i32 -11>
271   %cmp = icmp ugt <4 x i32> %x_adj, <i32 -3, i32 -3, i32 -3, i32 -3>
272   %r = sext <4 x i1> %cmp to <4 x i32>
273   ret <4 x i32> %r
276 define <4 x i32> @eq_or_eq_ule_1(<4 x i32> %x) {
277 ; AVX512-LABEL: eq_or_eq_ule_1:
278 ; AVX512:       # %bb.0:
279 ; AVX512-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
280 ; AVX512-NEXT:    vpcmpleud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
281 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
282 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
283 ; AVX512-NEXT:    retq
285 ; AVX-LABEL: eq_or_eq_ule_1:
286 ; AVX:       # %bb.0:
287 ; AVX-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
288 ; AVX-NEXT:    vpcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
289 ; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm0
290 ; AVX-NEXT:    retq
292 ; SSE41-LABEL: eq_or_eq_ule_1:
293 ; SSE41:       # %bb.0:
294 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [0,4294967295,4294967294,4294967293]
295 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
296 ; SSE41-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
297 ; SSE41-NEXT:    por %xmm1, %xmm0
298 ; SSE41-NEXT:    retq
300 ; SSE2-LABEL: eq_or_eq_ule_1:
301 ; SSE2:       # %bb.0:
302 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [0,4294967295,4294967294,4294967293]
303 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
304 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
305 ; SSE2-NEXT:    por %xmm1, %xmm0
306 ; SSE2-NEXT:    retq
307   %x_adj = add <4 x i32> %x, <i32 1, i32 2, i32 3, i32 4>
308   %cmp = icmp ule <4 x i32> %x_adj, <i32 1, i32 1, i32 1, i32 1>
309   %r = sext <4 x i1> %cmp to <4 x i32>
310   ret <4 x i32> %r
313 define <2 x i64> @eq_or_eq_uge_m2_i64(<2 x i64> %x) {
314 ; AVX512-LABEL: eq_or_eq_uge_m2_i64:
315 ; AVX512:       # %bb.0:
316 ; AVX512-NEXT:    vpaddq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
317 ; AVX512-NEXT:    vpcmpnltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k1
318 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
319 ; AVX512-NEXT:    vmovdqa64 %xmm0, %xmm0 {%k1} {z}
320 ; AVX512-NEXT:    retq
322 ; AVX-LABEL: eq_or_eq_uge_m2_i64:
323 ; AVX:       # %bb.0:
324 ; AVX-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
325 ; AVX-NEXT:    vpcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
326 ; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm0
327 ; AVX-NEXT:    retq
329 ; SSE41-LABEL: eq_or_eq_uge_m2_i64:
330 ; SSE41:       # %bb.0:
331 ; SSE41-NEXT:    pmovsxbq {{.*#+}} xmm1 = [18446744073709551613,18446744073709551612]
332 ; SSE41-NEXT:    pcmpeqq %xmm0, %xmm1
333 ; SSE41-NEXT:    pcmpeqq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
334 ; SSE41-NEXT:    por %xmm1, %xmm0
335 ; SSE41-NEXT:    retq
337 ; SSE2-LABEL: eq_or_eq_uge_m2_i64:
338 ; SSE2:       # %bb.0:
339 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [18446744073709551613,18446744073709551612]
340 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
341 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]
342 ; SSE2-NEXT:    pand %xmm1, %xmm2
343 ; SSE2-NEXT:    pcmpeqd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
344 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
345 ; SSE2-NEXT:    pand %xmm1, %xmm0
346 ; SSE2-NEXT:    por %xmm2, %xmm0
347 ; SSE2-NEXT:    retq
348   %x_adj = add <2 x i64> %x, <i64 1, i64 2>
349   %cmp = icmp uge <2 x i64> %x_adj, <i64 -2, i64 -2>
350   %r = sext <2 x i1> %cmp to <2 x i64>
351   ret <2 x i64> %r
355 define <2 x i64> @eq_or_eq_uge_m2_i64_m1(<2 x i64> %x) {
356 ; AVX512-LABEL: eq_or_eq_uge_m2_i64_m1:
357 ; AVX512:       # %bb.0:
358 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
359 ; AVX512-NEXT:    vpaddq %xmm1, %xmm0, %xmm0
360 ; AVX512-NEXT:    vpcmpnltuq {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to2}, %xmm0, %k1
361 ; AVX512-NEXT:    vmovdqa64 %xmm1, %xmm0 {%k1} {z}
362 ; AVX512-NEXT:    retq
364 ; AVX-LABEL: eq_or_eq_uge_m2_i64_m1:
365 ; AVX:       # %bb.0:
366 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
367 ; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm1
368 ; AVX-NEXT:    vpxor %xmm2, %xmm2, %xmm2
369 ; AVX-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
370 ; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm0
371 ; AVX-NEXT:    retq
373 ; SSE41-LABEL: eq_or_eq_uge_m2_i64_m1:
374 ; SSE41:       # %bb.0:
375 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
376 ; SSE41-NEXT:    pcmpeqq %xmm0, %xmm1
377 ; SSE41-NEXT:    pxor %xmm2, %xmm2
378 ; SSE41-NEXT:    pcmpeqq %xmm2, %xmm0
379 ; SSE41-NEXT:    por %xmm1, %xmm0
380 ; SSE41-NEXT:    retq
382 ; SSE2-LABEL: eq_or_eq_uge_m2_i64_m1:
383 ; SSE2:       # %bb.0:
384 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
385 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
386 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]
387 ; SSE2-NEXT:    pand %xmm1, %xmm2
388 ; SSE2-NEXT:    pxor %xmm1, %xmm1
389 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
390 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
391 ; SSE2-NEXT:    pand %xmm1, %xmm0
392 ; SSE2-NEXT:    por %xmm2, %xmm0
393 ; SSE2-NEXT:    retq
394   %x_adj = add <2 x i64> %x, <i64 -1, i64 -1>
395   %cmp = icmp uge <2 x i64> %x_adj, <i64 -2, i64 -2>
396   %r = sext <2 x i1> %cmp to <2 x i64>
397   ret <2 x i64> %r
400 define <4 x i32> @eq_or_eq_uge_2_fail_(<4 x i32> %x) {
401 ; AVX512-LABEL: eq_or_eq_uge_2_fail_:
402 ; AVX512:       # %bb.0:
403 ; AVX512-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
404 ; AVX512-NEXT:    vpcmpnltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to4}, %xmm0, %k1
405 ; AVX512-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
406 ; AVX512-NEXT:    vmovdqa32 %xmm0, %xmm0 {%k1} {z}
407 ; AVX512-NEXT:    retq
409 ; AVX1-LABEL: eq_or_eq_uge_2_fail_:
410 ; AVX1:       # %bb.0:
411 ; AVX1-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
412 ; AVX1-NEXT:    vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
413 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
414 ; AVX1-NEXT:    retq
416 ; AVX2-LABEL: eq_or_eq_uge_2_fail_:
417 ; AVX2:       # %bb.0:
418 ; AVX2-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
419 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
420 ; AVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
421 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
422 ; AVX2-NEXT:    retq
424 ; SSE41-LABEL: eq_or_eq_uge_2_fail_:
425 ; SSE41:       # %bb.0:
426 ; SSE41-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
427 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm1 = [2,2,2,2]
428 ; SSE41-NEXT:    pmaxud %xmm0, %xmm1
429 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
430 ; SSE41-NEXT:    retq
432 ; SSE2-LABEL: eq_or_eq_uge_2_fail_:
433 ; SSE2:       # %bb.0:
434 ; SSE2-NEXT:    paddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
435 ; SSE2-NEXT:    pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
436 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [2147483650,2147483650,2147483650,2147483650]
437 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
438 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
439 ; SSE2-NEXT:    pxor %xmm1, %xmm0
440 ; SSE2-NEXT:    retq
441   %x_adj = add <4 x i32> %x, <i32 1, i32 2, i32 3, i32 4>
442   %cmp = icmp uge <4 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2>
443   %r = sext <4 x i1> %cmp to <4 x i32>
444   ret <4 x i32> %r
448 define <8 x i32> @eq_or_eq_ult_2_256(<8 x i32> %x) {
449 ; AVX512-LABEL: eq_or_eq_ult_2_256:
450 ; AVX512:       # %bb.0:
451 ; AVX512-NEXT:    vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %ymm0
452 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
453 ; AVX512-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
454 ; AVX512-NEXT:    vmovdqa32 %ymm0, %ymm0 {%k1} {z}
455 ; AVX512-NEXT:    retq
457 ; AVX1-LABEL: eq_or_eq_ult_2_256:
458 ; AVX1:       # %bb.0:
459 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [4294967291,4294967291,4294967291,4294967291]
460 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2
461 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
462 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
463 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [1,1,1,1]
464 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm3
465 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
466 ; AVX1-NEXT:    vpminud %xmm1, %xmm2, %xmm1
467 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
468 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
469 ; AVX1-NEXT:    retq
471 ; AVX2-LABEL: eq_or_eq_ult_2_256:
472 ; AVX2:       # %bb.0:
473 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [6,6,6,6,6,6,6,6]
474 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm1
475 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm2 = [5,5,5,5,5,5,5,5]
476 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm0, %ymm0
477 ; AVX2-NEXT:    vpor %ymm1, %ymm0, %ymm0
478 ; AVX2-NEXT:    retq
480 ; SSE41-LABEL: eq_or_eq_ult_2_256:
481 ; SSE41:       # %bb.0:
482 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm2 = [6,6,6,6]
483 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
484 ; SSE41-NEXT:    pcmpeqd %xmm2, %xmm3
485 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm4 = [5,5,5,5]
486 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
487 ; SSE41-NEXT:    por %xmm3, %xmm0
488 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm2
489 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm1
490 ; SSE41-NEXT:    por %xmm2, %xmm1
491 ; SSE41-NEXT:    retq
493 ; SSE2-LABEL: eq_or_eq_ult_2_256:
494 ; SSE2:       # %bb.0:
495 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [6,6,6,6]
496 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
497 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
498 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [5,5,5,5]
499 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
500 ; SSE2-NEXT:    por %xmm3, %xmm0
501 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
502 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm1
503 ; SSE2-NEXT:    por %xmm2, %xmm1
504 ; SSE2-NEXT:    retq
505   %x_adj = add <8 x i32> %x, <i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5, i32 -5>
506   %cmp = icmp ult <8 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
507   %r = sext <8 x i1> %cmp to <8 x i32>
508   ret <8 x i32> %r
512 define <8 x i32> @eq_or_eq_ult_2_256_m1(<8 x i32> %x) {
513 ; AVX512-LABEL: eq_or_eq_ult_2_256_m1:
514 ; AVX512:       # %bb.0:
515 ; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
516 ; AVX512-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
517 ; AVX512-NEXT:    vpcmpltud {{\.?LCPI[0-9]+_[0-9]+}}(%rip){1to8}, %ymm0, %k1
518 ; AVX512-NEXT:    vmovdqa32 %ymm1, %ymm0 {%k1} {z}
519 ; AVX512-NEXT:    retq
521 ; AVX1-LABEL: eq_or_eq_ult_2_256_m1:
522 ; AVX1:       # %bb.0:
523 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
524 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2
525 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
526 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm0
527 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [1,1,1,1]
528 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm3
529 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
530 ; AVX1-NEXT:    vpminud %xmm1, %xmm2, %xmm1
531 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm2, %xmm1
532 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
533 ; AVX1-NEXT:    retq
535 ; AVX2-LABEL: eq_or_eq_ult_2_256_m1:
536 ; AVX2:       # %bb.0:
537 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
538 ; AVX2-NEXT:    vpaddd %ymm1, %ymm0, %ymm0
539 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [1,1,1,1,1,1,1,1]
540 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm1
541 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm0, %ymm0
542 ; AVX2-NEXT:    retq
544 ; SSE41-LABEL: eq_or_eq_ult_2_256_m1:
545 ; SSE41:       # %bb.0:
546 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm2 = [2,2,2,2]
547 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
548 ; SSE41-NEXT:    pcmpeqd %xmm2, %xmm3
549 ; SSE41-NEXT:    pmovsxbd {{.*#+}} xmm4 = [1,1,1,1]
550 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
551 ; SSE41-NEXT:    por %xmm3, %xmm0
552 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm2
553 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm1
554 ; SSE41-NEXT:    por %xmm2, %xmm1
555 ; SSE41-NEXT:    retq
557 ; SSE2-LABEL: eq_or_eq_ult_2_256_m1:
558 ; SSE2:       # %bb.0:
559 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2]
560 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
561 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm3
562 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1,1,1]
563 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
564 ; SSE2-NEXT:    por %xmm3, %xmm0
565 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm2
566 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm1
567 ; SSE2-NEXT:    por %xmm2, %xmm1
568 ; SSE2-NEXT:    retq
569   %x_adj = add <8 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
570   %cmp = icmp ult <8 x i32> %x_adj, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
571   %r = sext <8 x i1> %cmp to <8 x i32>
572   ret <8 x i32> %r
576 define <32 x i8> @eq_or_eq_ult_2_256_i8_m1(<32 x i8> %x) {
577 ; AVX512-LABEL: eq_or_eq_ult_2_256_i8_m1:
578 ; AVX512:       # %bb.0:
579 ; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
580 ; AVX512-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
581 ; AVX512-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
582 ; AVX512-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
583 ; AVX512-NEXT:    retq
585 ; AVX1-LABEL: eq_or_eq_ult_2_256_i8_m1:
586 ; AVX1:       # %bb.0:
587 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
588 ; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm2
589 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
590 ; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
591 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
592 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm3
593 ; AVX1-NEXT:    vpcmpeqb %xmm3, %xmm0, %xmm0
594 ; AVX1-NEXT:    vpminub %xmm1, %xmm2, %xmm1
595 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm2, %xmm1
596 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
597 ; AVX1-NEXT:    retq
599 ; AVX2-LABEL: eq_or_eq_ult_2_256_i8_m1:
600 ; AVX2:       # %bb.0:
601 ; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
602 ; AVX2-NEXT:    vpaddb %ymm1, %ymm0, %ymm0
603 ; AVX2-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
604 ; AVX2-NEXT:    vpcmpeqb %ymm1, %ymm0, %ymm0
605 ; AVX2-NEXT:    retq
607 ; SSE41-LABEL: eq_or_eq_ult_2_256_i8_m1:
608 ; SSE41:       # %bb.0:
609 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
610 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
611 ; SSE41-NEXT:    pcmpeqb %xmm2, %xmm3
612 ; SSE41-NEXT:    movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
613 ; SSE41-NEXT:    pcmpeqb %xmm4, %xmm0
614 ; SSE41-NEXT:    por %xmm3, %xmm0
615 ; SSE41-NEXT:    pcmpeqb %xmm1, %xmm2
616 ; SSE41-NEXT:    pcmpeqb %xmm4, %xmm1
617 ; SSE41-NEXT:    por %xmm2, %xmm1
618 ; SSE41-NEXT:    retq
620 ; SSE2-LABEL: eq_or_eq_ult_2_256_i8_m1:
621 ; SSE2:       # %bb.0:
622 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
623 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
624 ; SSE2-NEXT:    pcmpeqb %xmm2, %xmm3
625 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
626 ; SSE2-NEXT:    pcmpeqb %xmm4, %xmm0
627 ; SSE2-NEXT:    por %xmm3, %xmm0
628 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm2
629 ; SSE2-NEXT:    pcmpeqb %xmm4, %xmm1
630 ; SSE2-NEXT:    por %xmm2, %xmm1
631 ; SSE2-NEXT:    retq
632   %x_adj = 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>
633   %cmp = icmp ult <32 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
634   %r = sext <32 x i1> %cmp to <32 x i8>
635   ret <32 x i8> %r
639 define <16 x i8> @eq_or_eq_ult_2_128_i8_m1(<16 x i8> %x) {
640 ; AVX512-LABEL: eq_or_eq_ult_2_128_i8_m1:
641 ; AVX512:       # %bb.0:
642 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
643 ; AVX512-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
644 ; AVX512-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
645 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
646 ; AVX512-NEXT:    retq
648 ; AVX-LABEL: eq_or_eq_ult_2_128_i8_m1:
649 ; AVX:       # %bb.0:
650 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
651 ; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
652 ; AVX-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
653 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
654 ; AVX-NEXT:    retq
656 ; SSE41-LABEL: eq_or_eq_ult_2_128_i8_m1:
657 ; SSE41:       # %bb.0:
658 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
659 ; SSE41-NEXT:    paddb %xmm1, %xmm0
660 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
661 ; SSE41-NEXT:    pminub %xmm0, %xmm1
662 ; SSE41-NEXT:    pcmpeqb %xmm1, %xmm0
663 ; SSE41-NEXT:    retq
665 ; SSE2-LABEL: eq_or_eq_ult_2_128_i8_m1:
666 ; SSE2:       # %bb.0:
667 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
668 ; SSE2-NEXT:    paddb %xmm1, %xmm0
669 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
670 ; SSE2-NEXT:    pminub %xmm0, %xmm1
671 ; SSE2-NEXT:    pcmpeqb %xmm1, %xmm0
672 ; SSE2-NEXT:    retq
673   %x_adj = 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>
674   %cmp = icmp ult <16 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
675   %r = sext <16 x i1> %cmp to <16 x i8>
676   ret <16 x i8> %r
680 define <16 x i8> @eq_or_eq_ult_2_128_i8(<16 x i8> %x) {
681 ; AVX512-LABEL: eq_or_eq_ult_2_128_i8:
682 ; AVX512:       # %bb.0:
683 ; AVX512-NEXT:    vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
684 ; AVX512-NEXT:    vpminub {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
685 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
686 ; AVX512-NEXT:    retq
688 ; AVX-LABEL: eq_or_eq_ult_2_128_i8:
689 ; AVX:       # %bb.0:
690 ; AVX-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
691 ; AVX-NEXT:    vpcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
692 ; AVX-NEXT:    vpor %xmm1, %xmm0, %xmm0
693 ; AVX-NEXT:    retq
695 ; SSE41-LABEL: eq_or_eq_ult_2_128_i8:
696 ; SSE41:       # %bb.0:
697 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232]
698 ; SSE41-NEXT:    pcmpeqb %xmm0, %xmm1
699 ; SSE41-NEXT:    pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
700 ; SSE41-NEXT:    por %xmm1, %xmm0
701 ; SSE41-NEXT:    retq
703 ; SSE2-LABEL: eq_or_eq_ult_2_128_i8:
704 ; SSE2:       # %bb.0:
705 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232]
706 ; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
707 ; SSE2-NEXT:    pcmpeqb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
708 ; SSE2-NEXT:    por %xmm1, %xmm0
709 ; SSE2-NEXT:    retq
710   %x_adj = add <16 x i8> %x, <i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25, i8 25>
711   %cmp = icmp ult <16 x i8> %x_adj, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
712   %r = sext <16 x i1> %cmp to <16 x i8>
713   ret <16 x i8> %r