Skip to content

Commit c20543f

Browse files
committed
[ValueTracking] Add tests for isKnownNonZero of llvm.vector.reduce.{add,mul}; NFC
1 parent 5d6e68e commit c20543f

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

llvm/test/Transforms/InstSimplify/known-non-zero.ll

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,3 +377,120 @@ define <2 x i1> @insert_nonzero_any_idx_fail(<2 x i8> %xx, i8 %yy, i32 %idx) {
377377
%r = icmp eq <2 x i8> %ins, zeroinitializer
378378
ret <2 x i1> %r
379379
}
380+
381+
define i1 @nonzero_reduce_add(<2 x i8> %xx) {
382+
; CHECK-LABEL: @nonzero_reduce_add(
383+
; CHECK-NEXT: [[X0:%.*]] = and <2 x i8> [[XX:%.*]], <i8 3, i8 3>
384+
; CHECK-NEXT: [[X:%.*]] = add <2 x i8> [[X0]], <i8 1, i8 1>
385+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.add.v2i8(<2 x i8> [[X]])
386+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
387+
; CHECK-NEXT: ret i1 [[R]]
388+
;
389+
%x0 = and <2 x i8> %xx, <i8 3, i8 3>
390+
%x = add <2 x i8> %x0, <i8 1, i8 1>
391+
%v = call i8 @llvm.vector.reduce.add(<2 x i8> %x)
392+
%r = icmp eq i8 %v, 0
393+
ret i1 %r
394+
}
395+
396+
define i1 @nonzero_reduce_add_fail(<2 x i8> %xx) {
397+
; CHECK-LABEL: @nonzero_reduce_add_fail(
398+
; CHECK-NEXT: [[X0:%.*]] = and <2 x i8> [[XX:%.*]], <i8 3, i8 3>
399+
; CHECK-NEXT: [[X:%.*]] = add <2 x i8> [[X0]], <i8 1, i8 0>
400+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.add.v2i8(<2 x i8> [[X]])
401+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
402+
; CHECK-NEXT: ret i1 [[R]]
403+
;
404+
%x0 = and <2 x i8> %xx, <i8 3, i8 3>
405+
%x = add <2 x i8> %x0, <i8 1, i8 0>
406+
%v = call i8 @llvm.vector.reduce.add(<2 x i8> %x)
407+
%r = icmp eq i8 %v, 0
408+
ret i1 %r
409+
}
410+
411+
define i1 @nonzero_reduce_add_fail2(<2 x i8> %xx) {
412+
; CHECK-LABEL: @nonzero_reduce_add_fail2(
413+
; CHECK-NEXT: [[X:%.*]] = add nuw <2 x i8> [[XX:%.*]], <i8 1, i8 1>
414+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.add.v2i8(<2 x i8> [[X]])
415+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
416+
; CHECK-NEXT: ret i1 [[R]]
417+
;
418+
%x = add nuw <2 x i8> %xx, <i8 1, i8 1>
419+
%v = call i8 @llvm.vector.reduce.add(<2 x i8> %x)
420+
%r = icmp eq i8 %v, 0
421+
ret i1 %r
422+
}
423+
424+
define i1 @nonzero_reduce_add_fail3(<18 x i4> %xx) {
425+
; CHECK-LABEL: @nonzero_reduce_add_fail3(
426+
; CHECK-NEXT: [[X0:%.*]] = and <18 x i4> [[XX:%.*]], <i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3>
427+
; CHECK-NEXT: [[X:%.*]] = add <18 x i4> [[X0]], <i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1>
428+
; CHECK-NEXT: [[V:%.*]] = call i4 @llvm.vector.reduce.add.v18i4(<18 x i4> [[X]])
429+
; CHECK-NEXT: [[R:%.*]] = icmp eq i4 [[V]], 0
430+
; CHECK-NEXT: ret i1 [[R]]
431+
;
432+
%x0 = and <18 x i4> %xx, <i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3, i4 3>
433+
%x = add <18 x i4> %x0, <i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1, i4 1>
434+
%v = call i4 @llvm.vector.reduce.add.v18i4(<18 x i4> %x)
435+
%r = icmp eq i4 %v, 0
436+
ret i1 %r
437+
}
438+
439+
define i1 @nonzero_reduce_mul(<2 x i8> %xx) {
440+
; CHECK-LABEL: @nonzero_reduce_mul(
441+
; CHECK-NEXT: [[X0:%.*]] = and <2 x i8> [[XX:%.*]], <i8 3, i8 3>
442+
; CHECK-NEXT: [[X:%.*]] = add <2 x i8> [[X0]], <i8 1, i8 1>
443+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.mul.v2i8(<2 x i8> [[X]])
444+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
445+
; CHECK-NEXT: ret i1 [[R]]
446+
;
447+
%x0 = and <2 x i8> %xx, <i8 3, i8 3>
448+
%x = add <2 x i8> %x0, <i8 1, i8 1>
449+
%v = call i8 @llvm.vector.reduce.mul(<2 x i8> %x)
450+
%r = icmp eq i8 %v, 0
451+
ret i1 %r
452+
}
453+
454+
define i1 @nonzero_reduce_mul2(<3 x i16> %xx) {
455+
; CHECK-LABEL: @nonzero_reduce_mul2(
456+
; CHECK-NEXT: [[X0:%.*]] = and <3 x i16> [[XX:%.*]], <i16 3, i16 3, i16 3>
457+
; CHECK-NEXT: [[X:%.*]] = add <3 x i16> [[X0]], <i16 1, i16 1, i16 1>
458+
; CHECK-NEXT: [[V:%.*]] = call i16 @llvm.vector.reduce.mul.v3i16(<3 x i16> [[X]])
459+
; CHECK-NEXT: [[R:%.*]] = icmp eq i16 [[V]], 0
460+
; CHECK-NEXT: ret i1 [[R]]
461+
;
462+
%x0 = and <3 x i16> %xx, <i16 3, i16 3, i16 3>
463+
%x = add <3 x i16> %x0, <i16 1, i16 1, i16 1>
464+
%v = call i16 @llvm.vector.reduce.mul.v3i16(<3 x i16> %x)
465+
%r = icmp eq i16 %v, 0
466+
ret i1 %r
467+
}
468+
469+
define i1 @nonzero_reduce_mul_fail(<2 x i8> %xx) {
470+
; CHECK-LABEL: @nonzero_reduce_mul_fail(
471+
; CHECK-NEXT: [[X0:%.*]] = and <2 x i8> [[XX:%.*]], <i8 15, i8 15>
472+
; CHECK-NEXT: [[X:%.*]] = add <2 x i8> [[X0]], <i8 1, i8 1>
473+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.mul.v2i8(<2 x i8> [[X]])
474+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
475+
; CHECK-NEXT: ret i1 [[R]]
476+
;
477+
%x0 = and <2 x i8> %xx, <i8 15, i8 15>
478+
%x = add <2 x i8> %x0, <i8 1, i8 1>
479+
%v = call i8 @llvm.vector.reduce.mul(<2 x i8> %x)
480+
%r = icmp eq i8 %v, 0
481+
ret i1 %r
482+
}
483+
484+
define i1 @nonzero_reduce_mul_fail2(<2 x i8> %xx) {
485+
; CHECK-LABEL: @nonzero_reduce_mul_fail2(
486+
; CHECK-NEXT: [[X:%.*]] = add nuw <2 x i8> [[XX:%.*]], <i8 1, i8 1>
487+
; CHECK-NEXT: [[V:%.*]] = call i8 @llvm.vector.reduce.mul.v2i8(<2 x i8> [[X]])
488+
; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[V]], 0
489+
; CHECK-NEXT: ret i1 [[R]]
490+
;
491+
%x = add nuw <2 x i8> %xx, <i8 1, i8 1>
492+
%v = call i8 @llvm.vector.reduce.mul(<2 x i8> %x)
493+
%r = icmp eq i8 %v, 0
494+
ret i1 %r
495+
}
496+

0 commit comments

Comments
 (0)