brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · e13a897 Raw
152 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt < %s -disable-output -scalar-evolution-use-expensive-range-sharpening -passes='print<scalar-evolution>' 2>&1 | FileCheck %s3 4define i32 @test_01(i32 %start, ptr %p, ptr %q) {5; CHECK-LABEL: 'test_01'6; CHECK-NEXT:  Classifying expressions for: @test_017; CHECK-NEXT:    %0 = zext i32 %start to i648; CHECK-NEXT:    --> (zext i32 %start to i64) U: [0,4294967296) S: [0,4294967296)9; CHECK-NEXT:    %indvars.iv = phi i64 [ %indvars.iv.next, %backedge ], [ %0, %entry ]10; CHECK-NEXT:    --> {(zext i32 %start to i64),+,-1}<nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }11; CHECK-NEXT:    %iv = phi i32 [ %start, %entry ], [ %iv.next, %backedge ]12; CHECK-NEXT:    --> {%start,+,-1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }13; CHECK-NEXT:    %iv.next = add i32 %iv, -114; CHECK-NEXT:    --> {(-1 + %start),+,-1}<%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }15; CHECK-NEXT:    %index = zext i32 %iv.next to i6416; CHECK-NEXT:    --> (zext i32 {(-1 + %start),+,-1}<%loop> to i64) U: [0,4294967296) S: [0,4294967296) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }17; CHECK-NEXT:    %store.addr = getelementptr i32, ptr %p, i64 %index18; CHECK-NEXT:    --> ((4 * (zext i32 {(-1 + %start),+,-1}<%loop> to i64))<nuw><nsw> + %p) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }19; CHECK-NEXT:    %load.addr = getelementptr i32, ptr %q, i64 %index20; CHECK-NEXT:    --> ((4 * (zext i32 {(-1 + %start),+,-1}<%loop> to i64))<nuw><nsw> + %q) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }21; CHECK-NEXT:    %stop = load i32, ptr %load.addr, align 422; CHECK-NEXT:    --> %stop U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }23; CHECK-NEXT:    %indvars.iv.next = add nsw i64 %indvars.iv, -124; CHECK-NEXT:    --> {(-1 + (zext i32 %start to i64))<nsw>,+,-1}<nsw><%loop> U: [-4294967296,4294967295) S: [-1,4294967295) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }25; CHECK-NEXT:  Determining loop execution counts for: @test_0126; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.27; CHECK-NEXT:    exit count for loop: (zext i32 %start to i64)28; CHECK-NEXT:    exit count for backedge: ***COULDNOTCOMPUTE***29; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 429496729530; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (zext i32 %start to i64)31; CHECK-NEXT:    symbolic max exit count for loop: (zext i32 %start to i64)32; CHECK-NEXT:    symbolic max exit count for backedge: ***COULDNOTCOMPUTE***33;34entry:35  %0 = zext i32 %start to i6436  br label %loop37 38loop:                                             ; preds = %backedge, %entry39  %indvars.iv = phi i64 [ %indvars.iv.next, %backedge ], [ %0, %entry ]40  %iv = phi i32 [ %start, %entry ], [ %iv.next, %backedge ]41  %cond = icmp eq i64 %indvars.iv, 042  br i1 %cond, label %exit, label %backedge43 44backedge:                                         ; preds = %loop45  %iv.next = add i32 %iv, -146  %index = zext i32 %iv.next to i6447  %store.addr = getelementptr i32, ptr %p, i64 %index48  store i32 1, ptr %store.addr, align 449  %load.addr = getelementptr i32, ptr %q, i64 %index50  %stop = load i32, ptr %load.addr, align 451  %loop.cond = icmp eq i32 %stop, 052  %indvars.iv.next = add nsw i64 %indvars.iv, -153  br i1 %loop.cond, label %loop, label %failure54 55exit:                                             ; preds = %loop56  ret i32 057 58failure:                                          ; preds = %backedge59  unreachable60}61 62; Check that we do not mess up with wrapping ranges.63define i32 @test_02(i32 %start, ptr %p, ptr %q) {64; CHECK-LABEL: 'test_02'65; CHECK-NEXT:  Classifying expressions for: @test_0266; CHECK-NEXT:    %zext = zext i32 %start to i6467; CHECK-NEXT:    --> (zext i32 %start to i64) U: [0,4294967296) S: [0,4294967296)68; CHECK-NEXT:    %shl = shl i64 %zext, 3169; CHECK-NEXT:    --> (2147483648 * (zext i32 %start to i64))<nuw><nsw> U: [0,9223372034707292161) S: [0,9223372034707292161)70; CHECK-NEXT:    %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ %shl, %entry ]71; CHECK-NEXT:    --> {(2147483648 * (zext i32 %start to i64))<nuw><nsw>,+,-1}<nsw><%loop> U: [-9223372036854775808,9223372034707292161) S: [-9223372036854775808,9223372034707292161) Exits: -9223372036854775806 LoopDispositions: { %loop: Computable }72; CHECK-NEXT:    %indvars.iv.next = add nsw i64 %indvars.iv, -173; CHECK-NEXT:    --> {(-1 + (2147483648 * (zext i32 %start to i64))<nuw><nsw>)<nsw>,+,-1}<nw><%loop> U: full-set S: full-set Exits: -9223372036854775807 LoopDispositions: { %loop: Computable }74; CHECK-NEXT:  Determining loop execution counts for: @test_0275; CHECK-NEXT:  Loop %loop: backedge-taken count is (9223372036854775806 + (2147483648 * (zext i32 %start to i64))<nuw><nsw>)<nuw>76; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 -214748365077; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (9223372036854775806 + (2147483648 * (zext i32 %start to i64))<nuw><nsw>)<nuw>78; CHECK-NEXT:  Loop %loop: Trip multiple is 179;80entry:81  %zext = zext i32 %start to i6482  %shl = shl i64 %zext, 3183  br label %loop84 85loop:                                             ; preds = %backedge, %entry86  %indvars.iv = phi i64 [ %indvars.iv.next, %loop ], [ %shl, %entry ]87  %cond = icmp eq i64 %indvars.iv, -922337203685477580688  %indvars.iv.next = add nsw i64 %indvars.iv, -189  br i1 %cond, label %exit, label %loop90 91exit:                                             ; preds = %loop92  ret i32 093}94 95define void @pointer_iv_nowrap(ptr %startptr, ptr %endptr) local_unnamed_addr {96; CHECK-LABEL: 'pointer_iv_nowrap'97; CHECK-NEXT:  Classifying expressions for: @pointer_iv_nowrap98; CHECK-NEXT:    %init = getelementptr inbounds i8, ptr %startptr, i64 200099; CHECK-NEXT:    --> (2000 + %startptr) U: full-set S: full-set100; CHECK-NEXT:    %iv = phi ptr [ %init, %entry ], [ %iv.next, %loop ]101; CHECK-NEXT:    --> {(2000 + %startptr),+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }102; CHECK-NEXT:    %iv.next = getelementptr inbounds i8, ptr %iv, i64 1103; CHECK-NEXT:    --> {(2001 + %startptr),+,1}<nuw><%loop> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Computable }104; CHECK-NEXT:  Determining loop execution counts for: @pointer_iv_nowrap105; CHECK-NEXT:  Loop %loop: Unpredictable backedge-taken count.106; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.107; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.108;109entry:110  %init = getelementptr inbounds i8, ptr %startptr, i64 2000111  br label %loop112 113loop:114  %iv = phi ptr [ %init, %entry ], [ %iv.next, %loop ]115  %iv.next = getelementptr inbounds i8, ptr %iv, i64 1116  %ec = icmp ugt ptr %iv.next, %endptr117  br i1 %ec, label %end, label %loop118 119end:120  ret void121}122 123define void @pointer_iv_nowrap_guard(ptr %startptr, ptr %endptr) local_unnamed_addr {124; CHECK-LABEL: 'pointer_iv_nowrap_guard'125; CHECK-NEXT:  Classifying expressions for: @pointer_iv_nowrap_guard126; CHECK-NEXT:    %init = getelementptr inbounds i32, ptr %startptr, i64 2000127; CHECK-NEXT:    --> (8000 + %startptr)<nuw> U: [8000,0) S: [8000,0)128; CHECK-NEXT:    %iv = phi ptr [ %init, %entry ], [ %iv.next, %loop ]129; CHECK-NEXT:    --> {(8000 + %startptr)<nuw>,+,4}<nuw><%loop> U: [8000,0) S: [8000,0) Exits: (8000 + (4 * ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4))<nuw> + %startptr) LoopDispositions: { %loop: Computable }130; CHECK-NEXT:    %iv.next = getelementptr inbounds i32, ptr %iv, i64 1131; CHECK-NEXT:    --> {(8004 + %startptr),+,4}<nuw><%loop> U: full-set S: full-set Exits: (8004 + (4 * ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4))<nuw> + %startptr) LoopDispositions: { %loop: Computable }132; CHECK-NEXT:  Determining loop execution counts for: @pointer_iv_nowrap_guard133; CHECK-NEXT:  Loop %loop: backedge-taken count is ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4)134; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4611686018427387903135; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-8001 + (-1 * (ptrtoint ptr %startptr to i64)) + ((8004 + (ptrtoint ptr %startptr to i64)) umax (ptrtoint ptr %endptr to i64))) /u 4)136; CHECK-NEXT:  Loop %loop: Trip multiple is 1137;138entry:139  %init = getelementptr inbounds i32, ptr %startptr, i64 2000140  %cmp2 = icmp ult ptr %init, %endptr141  br i1 %cmp2, label %loop, label %end142 143loop:144  %iv = phi ptr [ %init, %entry ], [ %iv.next, %loop ]145  %iv.next = getelementptr inbounds i32, ptr %iv, i64 1146  %ec = icmp uge ptr %iv.next, %endptr147  br i1 %ec, label %end, label %loop148 149end:150  ret void151}152