Skip to content

Commit 0d8c53a

Browse files
committed
[InstCombine] Add pre-commit tests. NFC.
1 parent 7e53171 commit 0d8c53a

File tree

1 file changed

+138
-0
lines changed

1 file changed

+138
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-select.ll

+138
Original file line numberDiff line numberDiff line change
@@ -628,3 +628,141 @@ define i1 @icmp_slt_select(i1 %cond, i32 %a, i32 %b) {
628628
%res = icmp slt i32 %lhs, %rhs
629629
ret i1 %res
630630
}
631+
632+
define i1 @discr_eq(i8 %a, i8 %b) {
633+
; CHECK-LABEL: @discr_eq(
634+
; CHECK-NEXT: entry:
635+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[A:%.*]], -2
636+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
637+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[CMP1]], i8 [[ADD1]], i8 1
638+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[B:%.*]], -2
639+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[B]], 1
640+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[CMP2]], i8 [[ADD2]], i8 1
641+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[SEL1]], [[SEL2]]
642+
; CHECK-NEXT: ret i1 [[RES]]
643+
;
644+
entry:
645+
%add1 = add i8 %a, -2
646+
%cmp1 = icmp ugt i8 %a, 1
647+
%sel1 = select i1 %cmp1, i8 %add1, i8 1
648+
%add2 = add i8 %b, -2
649+
%cmp2 = icmp ugt i8 %b, 1
650+
%sel2 = select i1 %cmp2, i8 %add2, i8 1
651+
%res = icmp eq i8 %sel1, %sel2
652+
ret i1 %res
653+
}
654+
655+
define i1 @discr_ne(i8 %a, i8 %b) {
656+
; CHECK-LABEL: @discr_ne(
657+
; CHECK-NEXT: entry:
658+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[A:%.*]], -2
659+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
660+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[CMP1]], i8 [[ADD1]], i8 1
661+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[B:%.*]], -2
662+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[B]], 1
663+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[CMP2]], i8 [[ADD2]], i8 1
664+
; CHECK-NEXT: [[RES:%.*]] = icmp ne i8 [[SEL1]], [[SEL2]]
665+
; CHECK-NEXT: ret i1 [[RES]]
666+
;
667+
entry:
668+
%add1 = add i8 %a, -2
669+
%cmp1 = icmp ugt i8 %a, 1
670+
%sel1 = select i1 %cmp1, i8 %add1, i8 1
671+
%add2 = add i8 %b, -2
672+
%cmp2 = icmp ugt i8 %b, 1
673+
%sel2 = select i1 %cmp2, i8 %add2, i8 1
674+
%res = icmp ne i8 %sel1, %sel2
675+
ret i1 %res
676+
}
677+
678+
define i1 @discr_xor_eq(i8 %a, i8 %b) {
679+
; CHECK-LABEL: @discr_xor_eq(
680+
; CHECK-NEXT: entry:
681+
; CHECK-NEXT: [[XOR1:%.*]] = xor i8 [[A:%.*]], -3
682+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
683+
; CHECK-NEXT: [[TMP0:%.*]] = select i1 [[CMP1]], i8 [[XOR1]], i8 1
684+
; CHECK-NEXT: [[XOR2:%.*]] = xor i8 [[B:%.*]], -3
685+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[B]], 1
686+
; CHECK-NEXT: [[TMP1:%.*]] = select i1 [[CMP2]], i8 [[XOR2]], i8 1
687+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[TMP0]], [[TMP1]]
688+
; CHECK-NEXT: ret i1 [[RES]]
689+
;
690+
entry:
691+
%xor1 = xor i8 %a, -3
692+
%cmp1 = icmp ugt i8 %a, 1
693+
%sel1 = select i1 %cmp1, i8 %xor1, i8 1
694+
%xor2 = xor i8 %b, -3
695+
%cmp2 = icmp ugt i8 %b, 1
696+
%sel2 = select i1 %cmp2, i8 %xor2, i8 1
697+
%res = icmp eq i8 %sel1, %sel2
698+
ret i1 %res
699+
}
700+
701+
define i1 @discr_eq_simple(i8 %a, i8 %b) {
702+
; CHECK-LABEL: @discr_eq_simple(
703+
; CHECK-NEXT: entry:
704+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[A:%.*]], -2
705+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
706+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[CMP1]], i8 [[ADD1]], i8 1
707+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[B:%.*]], -2
708+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[SEL1]], [[ADD2]]
709+
; CHECK-NEXT: ret i1 [[RES]]
710+
;
711+
entry:
712+
%add1 = add i8 %a, -2
713+
%cmp1 = icmp ugt i8 %a, 1
714+
%sel1 = select i1 %cmp1, i8 %add1, i8 1
715+
%add2 = add i8 %b, -2
716+
%res = icmp eq i8 %sel1, %add2
717+
ret i1 %res
718+
}
719+
720+
; Negative tests
721+
722+
define i1 @discr_eq_multi_use(i8 %a, i8 %b) {
723+
; CHECK-LABEL: @discr_eq_multi_use(
724+
; CHECK-NEXT: entry:
725+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[A:%.*]], -2
726+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
727+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[CMP1]], i8 [[ADD1]], i8 1
728+
; CHECK-NEXT: call void @use(i8 [[SEL1]])
729+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[B:%.*]], -2
730+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[B]], 1
731+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[CMP2]], i8 [[ADD2]], i8 1
732+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[SEL1]], [[SEL2]]
733+
; CHECK-NEXT: ret i1 [[RES]]
734+
;
735+
entry:
736+
%add1 = add i8 %a, -2
737+
%cmp1 = icmp ugt i8 %a, 1
738+
%sel1 = select i1 %cmp1, i8 %add1, i8 1
739+
call void @use(i8 %sel1)
740+
%add2 = add i8 %b, -2
741+
%cmp2 = icmp ugt i8 %b, 1
742+
%sel2 = select i1 %cmp2, i8 %add2, i8 1
743+
%res = icmp eq i8 %sel1, %sel2
744+
ret i1 %res
745+
}
746+
747+
define i1 @discr_eq_failed_to_simplify(i8 %a, i8 %b) {
748+
; CHECK-LABEL: @discr_eq_failed_to_simplify(
749+
; CHECK-NEXT: entry:
750+
; CHECK-NEXT: [[ADD1:%.*]] = add i8 [[A:%.*]], -3
751+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i8 [[A]], 1
752+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[CMP1]], i8 [[ADD1]], i8 1
753+
; CHECK-NEXT: [[ADD2:%.*]] = add i8 [[B:%.*]], -2
754+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i8 [[B]], 1
755+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[CMP2]], i8 [[ADD2]], i8 1
756+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[SEL1]], [[SEL2]]
757+
; CHECK-NEXT: ret i1 [[RES]]
758+
;
759+
entry:
760+
%add1 = add i8 %a, -3
761+
%cmp1 = icmp ugt i8 %a, 1
762+
%sel1 = select i1 %cmp1, i8 %add1, i8 1
763+
%add2 = add i8 %b, -2
764+
%cmp2 = icmp ugt i8 %b, 1
765+
%sel2 = select i1 %cmp2, i8 %add2, i8 1
766+
%res = icmp eq i8 %sel1, %sel2
767+
ret i1 %res
768+
}

0 commit comments

Comments
 (0)