@@ -630,3 +630,41 @@ define i64 @test_shl_nsw_at_use(i64 noundef %x) {
630
630
%res = select i1 %cmp , i64 %shr , i64 0
631
631
ret i64 %res
632
632
}
633
+
634
+ define i1 @test_icmp_mod (i64 noundef %x ) {
635
+ ; CHECK-LABEL: @test_icmp_mod(
636
+ ; CHECK-NEXT: entry:
637
+ ; CHECK-NEXT: [[REM:%.*]] = srem i64 [[X:%.*]], 86400
638
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[REM]], 0
639
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i64 86400, i64 0
640
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[COND]], [[REM]]
641
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[ADD]], 86399
642
+ ; CHECK-NEXT: ret i1 [[CMP1]]
643
+ ;
644
+ entry:
645
+ %rem = srem i64 %x , 86400
646
+ %cmp = icmp slt i64 %rem , 0
647
+ %cond = select i1 %cmp , i64 86400 , i64 0
648
+ %add = add nsw i64 %cond , %rem
649
+ %cmp1 = icmp ugt i64 %add , 86399
650
+ ret i1 %cmp1
651
+ }
652
+
653
+ define i1 @test_icmp_mod_undef (i64 %x ) {
654
+ ; CHECK-LABEL: @test_icmp_mod_undef(
655
+ ; CHECK-NEXT: entry:
656
+ ; CHECK-NEXT: [[REM:%.*]] = srem i64 [[X:%.*]], 86400
657
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i64 [[REM]], 0
658
+ ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i64 86400, i64 0
659
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i64 [[COND]], [[REM]]
660
+ ; CHECK-NEXT: [[CMP1:%.*]] = icmp ugt i64 [[ADD]], 86399
661
+ ; CHECK-NEXT: ret i1 [[CMP1]]
662
+ ;
663
+ entry:
664
+ %rem = srem i64 %x , 86400
665
+ %cmp = icmp slt i64 %rem , 0
666
+ %cond = select i1 %cmp , i64 86400 , i64 0
667
+ %add = add nsw i64 %cond , %rem
668
+ %cmp1 = icmp ugt i64 %add , 86399
669
+ ret i1 %cmp1
670
+ }
0 commit comments