@@ -649,6 +649,42 @@ entry:
649
649
ret i1 %cmp1
650
650
}
651
651
652
+ define i1 @test_icmp_mod_commuted1 (i64 noundef %x ) {
653
+ ; CHECK-LABEL: @test_icmp_mod_commuted1(
654
+ ; CHECK-NEXT: entry:
655
+ ; CHECK-NEXT: [[REM:%.*]] = srem i64 [[X:%.*]], 86400
656
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[REM]], 0
657
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i64 86400, i64 0
658
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[REM]], [[COND]]
659
+ ; CHECK-NEXT: ret i1 false
660
+ ;
661
+ entry:
662
+ %rem = srem i64 %x , 86400
663
+ %cmp = icmp slt i64 %rem , 0
664
+ %cond = select i1 %cmp , i64 86400 , i64 0
665
+ %add = add nsw i64 %rem , %cond
666
+ %cmp1 = icmp ugt i64 %add , 86399
667
+ ret i1 %cmp1
668
+ }
669
+
670
+ define i1 @test_icmp_mod_commuted2 (i64 noundef %x ) {
671
+ ; CHECK-LABEL: @test_icmp_mod_commuted2(
672
+ ; CHECK-NEXT: entry:
673
+ ; CHECK-NEXT: [[REM:%.*]] = srem i64 [[X:%.*]], 86400
674
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i64 [[REM]], -1
675
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i64 0, i64 86400
676
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[COND]], [[REM]]
677
+ ; CHECK-NEXT: ret i1 false
678
+ ;
679
+ entry:
680
+ %rem = srem i64 %x , 86400
681
+ %cmp = icmp sgt i64 %rem , -1
682
+ %cond = select i1 %cmp , i64 0 , i64 86400
683
+ %add = add nsw i64 %cond , %rem
684
+ %cmp1 = icmp ugt i64 %add , 86399
685
+ ret i1 %cmp1
686
+ }
687
+
652
688
define i1 @test_icmp_mod_undef (i64 %x ) {
653
689
; CHECK-LABEL: @test_icmp_mod_undef(
654
690
; CHECK-NEXT: entry:
@@ -667,3 +703,22 @@ entry:
667
703
%cmp1 = icmp ugt i64 %add , 86399
668
704
ret i1 %cmp1
669
705
}
706
+
707
+ define i1 @test_icmp_mod_wrong_range (i64 noundef %x ) {
708
+ ; CHECK-LABEL: @test_icmp_mod_wrong_range(
709
+ ; CHECK-NEXT: entry:
710
+ ; CHECK-NEXT: [[REM:%.*]] = srem i64 [[X:%.*]], 86400
711
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[REM]], 0
712
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i64 86401, i64 0
713
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[COND]], [[REM]]
714
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp samesign ugt i64 [[ADD]], 86399
715
+ ; CHECK-NEXT: ret i1 [[CMP1]]
716
+ ;
717
+ entry:
718
+ %rem = srem i64 %x , 86400
719
+ %cmp = icmp slt i64 %rem , 0
720
+ %cond = select i1 %cmp , i64 86401 , i64 0
721
+ %add = add nsw i64 %cond , %rem
722
+ %cmp1 = icmp ugt i64 %add , 86399
723
+ ret i1 %cmp1
724
+ }
0 commit comments