brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 150e4c9 Raw
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