170 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -passes='print<scalar-evolution>' -disable-output 2>&1 | FileCheck %s3 4declare void @use(i64)5 6define void @test_step2_div4(i64 %n) {7; CHECK-LABEL: 'test_step2_div4'8; CHECK-NEXT: Classifying expressions for: @test_step2_div49; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]10; CHECK-NEXT: --> {0,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }11; CHECK-NEXT: %div.0 = udiv i64 %iv, 412; CHECK-NEXT: --> ({0,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }13; CHECK-NEXT: %iv.1 = add i64 %iv, 114; CHECK-NEXT: --> {1,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }15; CHECK-NEXT: %div.1 = udiv i64 %iv.1, 416; CHECK-NEXT: --> ({1,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }17; CHECK-NEXT: %iv.2 = add i64 %iv, 218; CHECK-NEXT: --> {2,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }19; CHECK-NEXT: %div.2 = udiv i64 %iv.2, 420; CHECK-NEXT: --> ({2,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }21; CHECK-NEXT: %iv.neg.1 = add i64 %iv, -122; CHECK-NEXT: --> {-1,+,2}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }23; CHECK-NEXT: %div.neg.1 = udiv i64 %iv.neg.1, 424; CHECK-NEXT: --> ({-1,+,2}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }25; CHECK-NEXT: %iv.next = add i64 %iv, 226; CHECK-NEXT: --> {2,+,2}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }27; CHECK-NEXT: Determining loop execution counts for: @test_step2_div428; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.29; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.30; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.31;32entry:33 br label %loop34 35loop:36 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]37 %div.0 = udiv i64 %iv, 438 call void @use(i64 %div.0)39 %iv.1 = add i64 %iv, 140 %div.1 = udiv i64 %iv.1, 441 call void @use(i64 %div.1)42 %iv.2 = add i64 %iv, 243 %div.2 = udiv i64 %iv.2, 444 call void @use(i64 %div.2)45 %iv.neg.1 = add i64 %iv, -146 %div.neg.1 = udiv i64 %iv.neg.1, 447 call void @use(i64 %div.neg.1)48 %iv.next = add i64 %iv, 249 %cond = icmp slt i64 %iv, %n50 br i1 %cond, label %loop, label %exit51 52exit:53 ret void54}55 56define void @test_step3_div6(i64 %n) {57; CHECK-LABEL: 'test_step3_div6'58; CHECK-NEXT: Classifying expressions for: @test_step3_div659; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]60; CHECK-NEXT: --> {0,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }61; CHECK-NEXT: %div.0 = udiv i64 %iv, 662; CHECK-NEXT: --> ({0,+,3}<%loop> /u 6) U: [0,3074457345618258603) S: [0,3074457345618258603) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }63; CHECK-NEXT: %iv.1 = add i64 %iv, 164; CHECK-NEXT: --> {1,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }65; CHECK-NEXT: %div.1 = udiv i64 %iv.1, 666; CHECK-NEXT: --> ({1,+,3}<%loop> /u 6) U: [0,3074457345618258603) S: [0,3074457345618258603) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }67; CHECK-NEXT: %iv.2 = add i64 %iv, 268; CHECK-NEXT: --> {2,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }69; CHECK-NEXT: %div.2 = udiv i64 %iv.2, 670; CHECK-NEXT: --> ({2,+,3}<%loop> /u 6) U: [0,3074457345618258603) S: [0,3074457345618258603) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }71; CHECK-NEXT: %iv.neg.1 = add i64 %iv, -172; CHECK-NEXT: --> {-1,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }73; CHECK-NEXT: %div.neg.1 = udiv i64 %iv.neg.1, 674; CHECK-NEXT: --> ({-1,+,3}<%loop> /u 6) U: [0,3074457345618258603) S: [0,3074457345618258603) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }75; CHECK-NEXT: %iv.next = add i64 %iv, 376; CHECK-NEXT: --> {3,+,3}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }77; CHECK-NEXT: Determining loop execution counts for: @test_step3_div678; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.79; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.80; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.81;82entry:83 br label %loop84 85loop:86 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]87 %div.0 = udiv i64 %iv, 688 call void @use(i64 %div.0)89 %iv.1 = add i64 %iv, 190 %div.1 = udiv i64 %iv.1, 691 call void @use(i64 %div.1)92 %iv.2 = add i64 %iv, 293 %div.2 = udiv i64 %iv.2, 694 call void @use(i64 %div.2)95 %iv.neg.1 = add i64 %iv, -196 %div.neg.1 = udiv i64 %iv.neg.1, 697 call void @use(i64 %div.neg.1)98 %iv.next = add i64 %iv, 399 %cond = icmp slt i64 %iv, %n100 br i1 %cond, label %loop, label %exit101 102exit:103 ret void104}105 106 107define void @test_step4_div4(i64 %n) {108; CHECK-LABEL: 'test_step4_div4'109; CHECK-NEXT: Classifying expressions for: @test_step4_div4110; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]111; CHECK-NEXT: --> {0,+,4}<%loop> U: [0,-3) S: [-9223372036854775808,9223372036854775805) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }112; CHECK-NEXT: %div.0 = udiv i64 %iv, 4113; CHECK-NEXT: --> ({0,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }114; CHECK-NEXT: %iv.1 = add i64 %iv, 1115; CHECK-NEXT: --> {1,+,4}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }116; CHECK-NEXT: %div.1 = udiv i64 %iv.1, 4117; CHECK-NEXT: --> ({1,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }118; CHECK-NEXT: %iv.2 = add i64 %iv, 2119; CHECK-NEXT: --> {2,+,4}<%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }120; CHECK-NEXT: %div.2 = udiv i64 %iv.2, 4121; CHECK-NEXT: --> ({2,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }122; CHECK-NEXT: %iv.3 = add i64 %iv, 3123; CHECK-NEXT: --> {3,+,4}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }124; CHECK-NEXT: %div.3 = udiv i64 %iv.3, 4125; CHECK-NEXT: --> ({3,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }126; CHECK-NEXT: %iv.4 = add i64 %iv, 4127; CHECK-NEXT: --> {4,+,4}<%loop> U: [0,-3) S: [-9223372036854775808,9223372036854775805) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }128; CHECK-NEXT: %div.4 = udiv i64 %iv.4, 4129; CHECK-NEXT: --> ({4,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }130; CHECK-NEXT: %iv.5 = add i64 %iv, 5131; CHECK-NEXT: --> {5,+,4}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }132; CHECK-NEXT: %div.5 = udiv i64 %iv.5, 4133; CHECK-NEXT: --> ({5,+,4}<%loop> /u 4) U: [0,4611686018427387904) S: [0,4611686018427387904) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }134; CHECK-NEXT: %iv.next = add i64 %iv, 4135; CHECK-NEXT: --> {4,+,4}<%loop> U: [0,-3) S: [-9223372036854775808,9223372036854775805) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }136; CHECK-NEXT: Determining loop execution counts for: @test_step4_div4137; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.138; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.139; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.140;141entry:142 br label %loop143 144loop:145 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]146 %div.0 = udiv i64 %iv, 4147 call void @use(i64 %div.0)148 %iv.1 = add i64 %iv, 1149 %div.1 = udiv i64 %iv.1, 4150 call void @use(i64 %div.1)151 %iv.2 = add i64 %iv, 2152 %div.2 = udiv i64 %iv.2, 4153 call void @use(i64 %div.2)154 %iv.3 = add i64 %iv, 3155 %div.3 = udiv i64 %iv.3, 4156 call void @use(i64 %div.3)157 %iv.4 = add i64 %iv, 4158 %div.4 = udiv i64 %iv.4, 4159 call void @use(i64 %div.4)160 %iv.5 = add i64 %iv, 5161 %div.5 = udiv i64 %iv.5, 4162 call void @use(i64 %div.5)163 %iv.next = add i64 %iv, 4164 %cond = icmp slt i64 %iv, %n165 br i1 %cond, label %loop, label %exit166 167exit:168 ret void169}170