@@ -177,3 +177,135 @@ define i1 @smax_non_zero(i8 %xx, i8 %y) {
177
177
%r = icmp eq i8 %v , 0
178
178
ret i1 %r
179
179
}
180
+
181
+ define <4 x i1 > @shuf_nonzero_both (<4 x i8 > %xx , <4 x i8 > %yy ) {
182
+ ; CHECK-LABEL: @shuf_nonzero_both(
183
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
184
+ ; CHECK-NEXT: [[Y:%.*]] = add nuw <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 1>
185
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
186
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
187
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
188
+ ;
189
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 1 >
190
+ %y = add nuw <4 x i8 > %yy , <i8 1 , i8 1 , i8 1 , i8 1 >
191
+
192
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > %y , <4 x i32 > <i32 0 , i32 4 , i32 7 , i32 2 >
193
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
194
+ ret <4 x i1 > %r
195
+ }
196
+
197
+ define <4 x i1 > @shuf_nonzero_both_fail (<4 x i8 > %xx , <4 x i8 > %yy ) {
198
+ ; CHECK-LABEL: @shuf_nonzero_both_fail(
199
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
200
+ ; CHECK-NEXT: [[Y:%.*]] = add nuw <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 0>
201
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
202
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
203
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
204
+ ;
205
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 1 >
206
+ %y = add nuw <4 x i8 > %yy , <i8 1 , i8 1 , i8 1 , i8 0 >
207
+
208
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > %y , <4 x i32 > <i32 0 , i32 4 , i32 7 , i32 2 >
209
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
210
+ ret <4 x i1 > %r
211
+ }
212
+
213
+ define <4 x i1 > @shuf_nonzero_both_fail2 (<4 x i8 > %xx , <4 x i8 > %yy ) {
214
+ ; CHECK-LABEL: @shuf_nonzero_both_fail2(
215
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
216
+ ; CHECK-NEXT: [[Y:%.*]] = add <4 x i8> [[YY:%.*]], <i8 1, i8 1, i8 1, i8 1>
217
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> [[Y]], <4 x i32> <i32 0, i32 4, i32 7, i32 2>
218
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
219
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
220
+ ;
221
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 1 >
222
+ %y = add <4 x i8 > %yy , <i8 1 , i8 1 , i8 1 , i8 1 >
223
+
224
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > %y , <4 x i32 > <i32 0 , i32 4 , i32 7 , i32 2 >
225
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
226
+ ret <4 x i1 > %r
227
+ }
228
+
229
+ define <4 x i1 > @shuf_nonzero_lhs (<4 x i8 > %xx ) {
230
+ ; CHECK-LABEL: @shuf_nonzero_lhs(
231
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
232
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 2, i32 0, i32 1>
233
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
234
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
235
+ ;
236
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 1 >
237
+
238
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > poison, <4 x i32 > <i32 2 , i32 2 , i32 0 , i32 1 >
239
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
240
+ ret <4 x i1 > %r
241
+ }
242
+
243
+ define <4 x i1 > @shuf_nonzero_lhs2 (<4 x i8 > %xx ) {
244
+ ; CHECK-LABEL: @shuf_nonzero_lhs2(
245
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 0>
246
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 1, i32 1>
247
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
248
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
249
+ ;
250
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 0 >
251
+
252
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > poison, <4 x i32 > <i32 2 , i32 0 , i32 1 , i32 1 >
253
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
254
+ ret <4 x i1 > %r
255
+ }
256
+
257
+ define <4 x i1 > @shuf_nonzero_lhs2_fail (<4 x i8 > %xx ) {
258
+ ; CHECK-LABEL: @shuf_nonzero_lhs2_fail(
259
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 0>
260
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> [[X]], <4 x i8> poison, <4 x i32> <i32 2, i32 0, i32 3, i32 1>
261
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
262
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
263
+ ;
264
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 0 >
265
+
266
+ %shuf = shufflevector <4 x i8 > %x , <4 x i8 > poison, <4 x i32 > <i32 2 , i32 0 , i32 3 , i32 1 >
267
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
268
+ ret <4 x i1 > %r
269
+ }
270
+
271
+ define <4 x i1 > @shuf_nonzero_rhs (<4 x i8 > %xx ) {
272
+ ; CHECK-LABEL: @shuf_nonzero_rhs(
273
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 1, i8 1, i8 1, i8 1>
274
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 5, i32 4>
275
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
276
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
277
+ ;
278
+ %x = add nuw <4 x i8 > %xx , <i8 1 , i8 1 , i8 1 , i8 1 >
279
+
280
+ %shuf = shufflevector <4 x i8 > poison, <4 x i8 > %x , <4 x i32 > <i32 6 , i32 7 , i32 5 , i32 4 >
281
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
282
+ ret <4 x i1 > %r
283
+ }
284
+
285
+ define <4 x i1 > @shuf_nonzero_rhs2 (<4 x i8 > %xx ) {
286
+ ; CHECK-LABEL: @shuf_nonzero_rhs2(
287
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 1, i8 1>
288
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 7, i32 6>
289
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
290
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
291
+ ;
292
+ %x = add nuw <4 x i8 > %xx , <i8 0 , i8 0 , i8 1 , i8 1 >
293
+
294
+ %shuf = shufflevector <4 x i8 > poison, <4 x i8 > %x , <4 x i32 > <i32 6 , i32 7 , i32 7 , i32 6 >
295
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
296
+ ret <4 x i1 > %r
297
+ }
298
+
299
+ define <4 x i1 > @shuf_nonzero_rhs2_fail (<4 x i8 > %xx ) {
300
+ ; CHECK-LABEL: @shuf_nonzero_rhs2_fail(
301
+ ; CHECK-NEXT: [[X:%.*]] = add nuw <4 x i8> [[XX:%.*]], <i8 0, i8 0, i8 1, i8 1>
302
+ ; CHECK-NEXT: [[SHUF:%.*]] = shufflevector <4 x i8> poison, <4 x i8> [[X]], <4 x i32> <i32 6, i32 7, i32 5, i32 6>
303
+ ; CHECK-NEXT: [[R:%.*]] = icmp eq <4 x i8> [[SHUF]], zeroinitializer
304
+ ; CHECK-NEXT: ret <4 x i1> [[R]]
305
+ ;
306
+ %x = add nuw <4 x i8 > %xx , <i8 0 , i8 0 , i8 1 , i8 1 >
307
+
308
+ %shuf = shufflevector <4 x i8 > poison, <4 x i8 > %x , <4 x i32 > <i32 6 , i32 7 , i32 5 , i32 6 >
309
+ %r = icmp eq <4 x i8 > %shuf , zeroinitializer
310
+ ret <4 x i1 > %r
311
+ }
0 commit comments