Skip to content

Commit 51f3781

Browse files
author
Zain Jaffal
committed
[ConstraintElimination] Add tests to check for transfering facts from sgt to ugt.
If we have a >s b and we know that b >s 0 then we also can infer that a >u b. Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D148321
1 parent 46ee102 commit 51f3781

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

llvm/test/Transforms/ConstraintElimination/transfer-signed-facts-to-unsigned.ll

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,119 @@ entry:
596596
ret i1 %res.2
597597
}
598598

599+
define i1 @sgt_to_ugt(i8 %a) {
600+
; CHECK-LABEL: @sgt_to_ugt(
601+
; CHECK-NEXT: entry:
602+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], 2
603+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
604+
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], 2
605+
; CHECK-NEXT: ret i1 [[T_1]]
606+
;
607+
entry:
608+
%cmp = icmp sgt i8 %a, 2
609+
call void @llvm.assume(i1 %cmp)
610+
%t.1 = icmp ugt i8 %a, 2
611+
ret i1 %t.1
612+
}
613+
614+
define i1 @sgt_to_ugt_less(i8 %a) {
615+
; CHECK-LABEL: @sgt_to_ugt_less(
616+
; CHECK-NEXT: entry:
617+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], 2
618+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
619+
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], 1
620+
; CHECK-NEXT: ret i1 [[T_1]]
621+
;
622+
entry:
623+
%cmp = icmp sgt i8 %a, 2
624+
call void @llvm.assume(i1 %cmp)
625+
%t.1 = icmp ugt i8 %a, 1
626+
ret i1 %t.1
627+
}
628+
629+
define i1 @sgt_to_ugt_var(i8 %a, i8 %b) {
630+
; CHECK-LABEL: @sgt_to_ugt_var(
631+
; CHECK-NEXT: entry:
632+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
633+
; CHECK-NEXT: [[CMP_2:%.*]] = icmp sgt i8 [[B]], 0
634+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
635+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP_2]])
636+
; CHECK-NEXT: [[T_1:%.*]] = icmp ugt i8 [[A]], [[B]]
637+
; CHECK-NEXT: ret i1 [[T_1]]
638+
;
639+
entry:
640+
%cmp = icmp sgt i8 %a, %b
641+
%cmp.2 = icmp sgt i8 %b, 0
642+
call void @llvm.assume(i1 %cmp)
643+
call void @llvm.assume(i1 %cmp.2)
644+
%t.1 = icmp ugt i8 %a, %b
645+
ret i1 %t.1
646+
}
647+
648+
define i1 @sgt_to_ugt_no_range_info(i8 %a, i8 %b) {
649+
; CHECK-LABEL: @sgt_to_ugt_no_range_info(
650+
; CHECK-NEXT: entry:
651+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
652+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
653+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[A]], [[B]]
654+
; CHECK-NEXT: ret i1 [[C_1]]
655+
;
656+
entry:
657+
%cmp = icmp sgt i8 %a, %b
658+
call void @llvm.assume(i1 %cmp)
659+
%c.1 = icmp ugt i8 %a, %b
660+
ret i1 %c.1
661+
}
662+
663+
define i1 @sgt_to_ugt_neg(i8 %a) {
664+
; CHECK-LABEL: @sgt_to_ugt_neg(
665+
; CHECK-NEXT: entry:
666+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], -1
667+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
668+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[A]], -1
669+
; CHECK-NEXT: ret i1 [[C_1]]
670+
;
671+
entry:
672+
%cmp = icmp sgt i8 %a, -1
673+
call void @llvm.assume(i1 %cmp)
674+
%c.1 = icmp ugt i8 %a, -1
675+
ret i1 %c.1
676+
}
677+
678+
define i1 @sgt_to_ugt_neg2(i8 %a) {
679+
; CHECK-LABEL: @sgt_to_ugt_neg2(
680+
; CHECK-NEXT: entry:
681+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], -2
682+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
683+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[A]], -2
684+
; CHECK-NEXT: ret i1 [[C_1]]
685+
;
686+
entry:
687+
%cmp = icmp sgt i8 %a, -2
688+
call void @llvm.assume(i1 %cmp)
689+
%c.1 = icmp ugt i8 %a, -2
690+
ret i1 %c.1
691+
}
692+
693+
define i1 @sgt_to_ugt_var_neg(i8 %a, i8 %b) {
694+
; CHECK-LABEL: @sgt_to_ugt_var_neg(
695+
; CHECK-NEXT: entry:
696+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
697+
; CHECK-NEXT: [[CMP_2:%.*]] = icmp sgt i8 [[B]], -2
698+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
699+
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP_2]])
700+
; CHECK-NEXT: [[C_1:%.*]] = icmp ugt i8 [[A]], [[B]]
701+
; CHECK-NEXT: ret i1 [[C_1]]
702+
;
703+
entry:
704+
%cmp = icmp sgt i8 %a, %b
705+
%cmp.2 = icmp sgt i8 %b, -2
706+
call void @llvm.assume(i1 %cmp)
707+
call void @llvm.assume(i1 %cmp.2)
708+
%c.1 = icmp ugt i8 %a, %b
709+
ret i1 %c.1
710+
}
711+
599712
define i1 @slt_first_op_known_pos(i8 %idx) {
600713
; CHECK-LABEL: @slt_first_op_known_pos(
601714
; CHECK-NEXT: entry:

0 commit comments

Comments
 (0)