@@ -649,6 +649,42 @@ entry:
649649 ret i1 %cmp1
650650}
651651
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+
652688define i1 @test_icmp_mod_undef (i64 %x ) {
653689; CHECK-LABEL: @test_icmp_mod_undef(
654690; CHECK-NEXT: entry:
@@ -667,3 +703,22 @@ entry:
667703 %cmp1 = icmp ugt i64 %add , 86399
668704 ret i1 %cmp1
669705}
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