227 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 42; RUN: opt -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-classify-expressions=0 < %s 2>&1 | FileCheck %s3 4define void @test0(i32 %init) {5;6; CHECK-LABEL: 'test0'7; CHECK-NEXT: Determining loop execution counts for: @test08; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.9; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 3210; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 3211;12 entry:13 br label %loop14 15 loop:16 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]17 %iv.shift = lshr i32 %iv, 118 %exit.cond = icmp eq i32 %iv, 019 br i1 %exit.cond, label %leave, label %loop20 21 leave:22 ret void23}24 25define void @test1(i32 %init) {26;27; CHECK-LABEL: 'test1'28; CHECK-NEXT: Determining loop execution counts for: @test129; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.30; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 3231; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 3232;33 entry:34 br label %loop35 36 loop:37 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]38 %iv.shift = shl i32 %iv, 139 %exit.cond = icmp eq i32 %iv, 040 br i1 %exit.cond, label %leave, label %loop41 42 leave:43 ret void44}45 46define void @test2(i32 %init) {47;48; Unpredictable because %iv could "stabilize" to either -1 or 0,49; depending on %init.50; CHECK-LABEL: 'test2'51; CHECK-NEXT: Determining loop execution counts for: @test252; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.53; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.54; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.55;56 entry:57 br label %loop58 59 loop:60 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]61 %iv.shift = ashr i32 %iv, 162 %exit.cond = icmp eq i32 %iv, 063 br i1 %exit.cond, label %leave, label %loop64 65 leave:66 ret void67}68 69define void @test3(ptr %init.ptr) {70;71; CHECK-LABEL: 'test3'72; CHECK-NEXT: Determining loop execution counts for: @test373; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.74; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 3275; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 3276;77 entry:78 %init = load i32, ptr %init.ptr, !range !079 br label %loop80 81 loop:82 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]83 %iv.shift = ashr i32 %iv, 184 %exit.cond = icmp eq i32 %iv, 085 br i1 %exit.cond, label %leave, label %loop86 87 leave:88 ret void89}90 91define void @test4(ptr %init.ptr) {92;93; CHECK-LABEL: 'test4'94; CHECK-NEXT: Determining loop execution counts for: @test495; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.96; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 3297; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 3298;99 entry:100 %init = load i32, ptr %init.ptr, !range !1101 br label %loop102 103 loop:104 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]105 %iv.shift = ashr i32 %iv, 1106 %exit.cond = icmp eq i32 %iv, -1107 br i1 %exit.cond, label %leave, label %loop108 109 leave:110 ret void111}112 113define void @test5(ptr %init.ptr) {114;115; %iv will "stabilize" to -1, so this is an infinite loop116; CHECK-LABEL: 'test5'117; CHECK-NEXT: Determining loop execution counts for: @test5118; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.119; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.120; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.121;122 entry:123 %init = load i32, ptr %init.ptr, !range !1124 br label %loop125 126 loop:127 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]128 %iv.shift = ashr i32 %iv, 1129 %exit.cond = icmp eq i32 %iv, 0130 br i1 %exit.cond, label %leave, label %loop131 132 leave:133 ret void134}135 136define void @test6(i32 %init, i32 %shift.amt) {137;138; Potentially infinite loop, since %shift.amt could be 0139; CHECK-LABEL: 'test6'140; CHECK-NEXT: Determining loop execution counts for: @test6141; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.142; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.143; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.144;145 entry:146 br label %loop147 148 loop:149 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]150 %iv.shift = lshr i32 %iv, %shift.amt151 %exit.cond = icmp eq i32 %iv, 0152 br i1 %exit.cond, label %leave, label %loop153 154 leave:155 ret void156}157 158define void @test7(i32 %init) {159;160; CHECK-LABEL: 'test7'161; CHECK-NEXT: Determining loop execution counts for: @test7162; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.163; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 32164; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 32165;166 entry:167 br label %loop168 169 loop:170 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]171 %iv.shift = lshr i32 %iv, 1172 %exit.cond = icmp eq i32 %iv.shift, 0173 br i1 %exit.cond, label %leave, label %loop174 175 leave:176 ret void177}178 179define void @test8(i32 %init) {180;181; In this test case, %iv.test stabilizes to 127, not -1, so the loop182; is infinite.183; CHECK-LABEL: 'test8'184; CHECK-NEXT: Determining loop execution counts for: @test8185; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.186; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.187; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.188;189 entry:190 br label %loop191 192 loop:193 %iv = phi i32 [ %init, %entry ], [ %iv.shift, %loop ]194 %iv.shift = ashr i32 %iv, 1195 %iv.test = lshr i32 %iv, 1196 %exit.cond = icmp eq i32 %iv.test, -1197 br i1 %exit.cond, label %leave, label %loop198 199 leave:200 ret void201}202 203define void @test9() {204;205; This is an infinite loop, make sure that it recognized as such.206; CHECK-LABEL: 'test9'207; CHECK-NEXT: Determining loop execution counts for: @test9208; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.209; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.210; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.211;212entry:213 br label %loop214 215leave:216 ret void217 218loop:219 %iv = phi i32 [ -20, %entry ], [ %iv.shift, %loop ]220 %iv.shift = ashr i32 %iv, 1221 %exit.cond = icmp sgt i32 %iv, -1222 br i1 %exit.cond, label %leave, label %loop223}224 225!0 = !{i32 0, i32 50000}226!1 = !{i32 -5000, i32 -1}227