@@ -596,6 +596,119 @@ entry:
596
596
ret i1 %res.2
597
597
}
598
598
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
+
599
712
define i1 @slt_first_op_known_pos (i8 %idx ) {
600
713
; CHECK-LABEL: @slt_first_op_known_pos(
601
714
; CHECK-NEXT: entry:
0 commit comments