brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · b52b4a9 Raw
213 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -S -passes='print<scalar-evolution>' -disable-output < %s 2>&1 | FileCheck %s3 4; Test non-unit strides in multiple-exit loops, and the interaction with5; nowrap flags.6 7define void @test_preinc_ult(i64 %len) {8; CHECK-LABEL: 'test_preinc_ult'9; CHECK-NEXT:  Classifying expressions for: @test_preinc_ult10; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]11; CHECK-NEXT:    --> {0,+,2}<nuw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }12; CHECK-NEXT:    %iv.inc2 = add nuw i64 %iv, 213; CHECK-NEXT:    --> {2,+,2}<nw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }14; CHECK-NEXT:  Determining loop execution counts for: @test_preinc_ult15; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.16; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***17; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***18; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.19; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.20; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***21; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***22;23start:24  br label %loop25 26loop:27  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]28  %cmp1 = icmp ult i64 %iv, %len29  br i1 %cmp1, label %latch, label %exit30 31latch:32  %iv.inc2 = add nuw i64 %iv, 233  %cmp2 = icmp ult i64 %iv.inc2, %len34  br i1 %cmp2, label %loop, label %exit35 36exit:37  ret void38}39 40define void @test_postinc_ult(i64 %len) {41; CHECK-LABEL: 'test_postinc_ult'42; CHECK-NEXT:  Classifying expressions for: @test_postinc_ult43; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]44; CHECK-NEXT:    --> {0,+,2}<nuw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }45; CHECK-NEXT:    %iv.inc = add nuw i64 %iv, 146; CHECK-NEXT:    --> {1,+,2}<nuw><%loop> U: [1,0) S: [1,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }47; CHECK-NEXT:    %iv.inc2 = add nuw i64 %iv, 248; CHECK-NEXT:    --> {2,+,2}<nw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }49; CHECK-NEXT:  Determining loop execution counts for: @test_postinc_ult50; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.51; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***52; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***53; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.54; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.55; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***56; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***57;58start:59  br label %loop60 61loop:62  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]63  %iv.inc = add nuw i64 %iv, 164  %cmp1 = icmp ult i64 %iv.inc, %len65  br i1 %cmp1, label %latch, label %exit66 67latch:68  %iv.inc2 = add nuw i64 %iv, 269  %cmp2 = icmp ult i64 %iv.inc2, %len70  br i1 %cmp2, label %loop, label %exit71 72exit:73  ret void74}75 76define void @test_preinc_slt(i64 %len) {77; CHECK-LABEL: 'test_preinc_slt'78; CHECK-NEXT:  Classifying expressions for: @test_preinc_slt79; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]80; CHECK-NEXT:    --> {0,+,2}<nuw><nsw><%loop> U: [0,-9223372036854775808) S: [0,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }81; CHECK-NEXT:    %iv.inc2 = add nsw i64 %iv, 282; CHECK-NEXT:    --> {2,+,2}<nuw><%loop> U: [2,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }83; CHECK-NEXT:  Determining loop execution counts for: @test_preinc_slt84; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.85; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***86; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***87; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.88; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.89; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***90; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***91;92start:93  br label %loop94 95loop:96  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]97  %cmp1 = icmp slt i64 %iv, %len98  br i1 %cmp1, label %latch, label %exit99 100latch:101  %iv.inc2 = add nsw i64 %iv, 2102  %cmp2 = icmp slt i64 %iv.inc2, %len103  br i1 %cmp2, label %loop, label %exit104 105exit:106  ret void107}108 109define void @test_postinc_slt(i64 %len) {110; CHECK-LABEL: 'test_postinc_slt'111; CHECK-NEXT:  Classifying expressions for: @test_postinc_slt112; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]113; CHECK-NEXT:    --> {0,+,2}<nuw><nsw><%loop> U: [0,-9223372036854775808) S: [0,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }114; CHECK-NEXT:    %iv.inc = add nsw i64 %iv, 1115; CHECK-NEXT:    --> {1,+,2}<nuw><nsw><%loop> U: [1,-9223372036854775808) S: [1,-9223372036854775808) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }116; CHECK-NEXT:    %iv.inc2 = add nsw i64 %iv, 2117; CHECK-NEXT:    --> {2,+,2}<nuw><%loop> U: [2,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }118; CHECK-NEXT:  Determining loop execution counts for: @test_postinc_slt119; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.120; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***121; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***122; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.123; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.124; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***125; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***126;127start:128  br label %loop129 130loop:131  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]132  %iv.inc = add nsw i64 %iv, 1133  %cmp1 = icmp slt i64 %iv.inc, %len134  br i1 %cmp1, label %latch, label %exit135 136latch:137  %iv.inc2 = add nsw i64 %iv, 2138  %cmp2 = icmp slt i64 %iv.inc2, %len139  br i1 %cmp2, label %loop, label %exit140 141exit:142  ret void143}144 145define void @test_preinc_sgt(i64 %lim) {146; CHECK-LABEL: 'test_preinc_sgt'147; CHECK-NEXT:  Classifying expressions for: @test_preinc_sgt148; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]149; CHECK-NEXT:    --> {0,+,-2}<nsw><%loop> U: [0,-1) S: [-9223372036854775808,1) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }150; CHECK-NEXT:    %iv.inc2 = add nsw i64 %iv, -2151; CHECK-NEXT:    --> {-2,+,-2}<nw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }152; CHECK-NEXT:  Determining loop execution counts for: @test_preinc_sgt153; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.154; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***155; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***156; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.157; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.158; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***159; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***160;161start:162  br label %loop163 164loop:165  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]166  %cmp1 = icmp sgt i64 %iv, %lim167  br i1 %cmp1, label %latch, label %exit168 169latch:170  %iv.inc2 = add nsw i64 %iv, -2171  %cmp2 = icmp sgt i64 %iv.inc2, %lim172  br i1 %cmp2, label %loop, label %exit173 174exit:175  ret void176}177 178define void @test_postinc_sgt(i64 %lim) {179; CHECK-LABEL: 'test_postinc_sgt'180; CHECK-NEXT:  Classifying expressions for: @test_postinc_sgt181; CHECK-NEXT:    %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]182; CHECK-NEXT:    --> {0,+,-2}<nsw><%loop> U: [0,-1) S: [-9223372036854775808,1) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }183; CHECK-NEXT:    %iv.inc = add nsw i64 %iv, -1184; CHECK-NEXT:    --> {-1,+,-2}<nsw><%loop> U: [-9223372036854775808,0) S: [-9223372036854775808,0) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }185; CHECK-NEXT:    %iv.inc2 = add nsw i64 %iv, -2186; CHECK-NEXT:    --> {-2,+,-2}<nw><%loop> U: [0,-1) S: [-9223372036854775808,9223372036854775807) Exits: <<Unknown>> LoopDispositions: { %loop: Computable }187; CHECK-NEXT:  Determining loop execution counts for: @test_postinc_sgt188; CHECK-NEXT:  Loop %loop: <multiple exits> Unpredictable backedge-taken count.189; CHECK-NEXT:    exit count for loop: ***COULDNOTCOMPUTE***190; CHECK-NEXT:    exit count for latch: ***COULDNOTCOMPUTE***191; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.192; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.193; CHECK-NEXT:    symbolic max exit count for loop: ***COULDNOTCOMPUTE***194; CHECK-NEXT:    symbolic max exit count for latch: ***COULDNOTCOMPUTE***195;196start:197  br label %loop198 199loop:200  %iv = phi i64 [ 0, %start ], [ %iv.inc2, %latch ]201  %iv.inc = add nsw i64 %iv, -1202  %cmp1 = icmp sgt i64 %iv.inc, %lim203  br i1 %cmp1, label %latch, label %exit204 205latch:206  %iv.inc2 = add nsw i64 %iv, -2207  %cmp2 = icmp sgt i64 %iv.inc2, %lim208  br i1 %cmp2, label %loop, label %exit209 210exit:211  ret void212}213