brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.2 KiB · 1964fca Raw
160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s3 4define void @loop_guard_improves_exact_backedge_taken_count_1(i32 %conv) {5; CHECK-LABEL: 'loop_guard_improves_exact_backedge_taken_count_1'6; CHECK-NEXT:  Classifying expressions for: @loop_guard_improves_exact_backedge_taken_count_17; CHECK-NEXT:    %and = and i32 %conv, 18; CHECK-NEXT:    --> (zext i1 (trunc i32 %conv to i1) to i32) U: [0,2) S: [0,2)9; CHECK-NEXT:    %conv8 = zext i32 %and to i6410; CHECK-NEXT:    --> (zext i1 (trunc i32 %conv to i1) to i64) U: [0,2) S: [0,2)11; CHECK-NEXT:    %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]12; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%loop> U: [0,1) S: [0,1) Exits: 0 LoopDispositions: { %loop: Computable }13; CHECK-NEXT:    %iv.next = add i64 %iv, 114; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%loop> U: [1,2) S: [1,2) Exits: 1 LoopDispositions: { %loop: Computable }15; CHECK-NEXT:  Determining loop execution counts for: @loop_guard_improves_exact_backedge_taken_count_116; CHECK-NEXT:  Loop %loop: backedge-taken count is i64 017; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 018; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i64 019; CHECK-NEXT:  Loop %loop: Trip multiple is 120;21entry:22  %and = and i32 %conv, 123  %conv8 = zext i32 %and to i6424  %c = icmp ugt i32 %and, 025  br i1 %c, label %exit, label %loop26 27loop:28  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]29  call void @clobber()30  %iv.next = add i64 %iv, 131  %exitcond = icmp eq i64 %iv, %conv832  br i1 %exitcond, label %exit, label %loop33 34exit:35  ret void36}37 38define void @loop_guard_improves_exact_backedge_taken_count_2(i32 %conv) {39; CHECK-LABEL: 'loop_guard_improves_exact_backedge_taken_count_2'40; CHECK-NEXT:  Classifying expressions for: @loop_guard_improves_exact_backedge_taken_count_241; CHECK-NEXT:    %and = and i32 %conv, 142; CHECK-NEXT:    --> (zext i1 (trunc i32 %conv to i1) to i32) U: [0,2) S: [0,2)43; CHECK-NEXT:    %conv8 = zext i32 %and to i6444; CHECK-NEXT:    --> (zext i1 (trunc i32 %conv to i1) to i64) U: [0,2) S: [0,2)45; CHECK-NEXT:    %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]46; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%loop> U: [0,2) S: [0,2) Exits: (zext i1 (trunc i32 %conv to i1) to i64) LoopDispositions: { %loop: Computable }47; CHECK-NEXT:    %iv.next = add i64 %iv, 148; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%loop> U: [1,3) S: [1,3) Exits: (1 + (zext i1 (trunc i32 %conv to i1) to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }49; CHECK-NEXT:  Determining loop execution counts for: @loop_guard_improves_exact_backedge_taken_count_250; CHECK-NEXT:  Loop %loop: backedge-taken count is (zext i1 (trunc i32 %conv to i1) to i64)51; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 152; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (zext i1 (trunc i32 %conv to i1) to i64)53; CHECK-NEXT:  Loop %loop: Trip multiple is 254;55entry:56  %and = and i32 %conv, 157  %conv8 = zext i32 %and to i6458  %c = icmp eq i32 %and, 159  br i1 %c, label %loop, label %exit60 61loop:62  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]63  call void @clobber()64  %iv.next = add i64 %iv, 165  %exitcond = icmp eq i64 %iv, %conv866  br i1 %exitcond, label %exit, label %loop67 68exit:69  ret void70}71 72declare void @use(i32)73 74define void @rewrite_preserve_add_nsw(i32 %a) {75; CHECK-LABEL: 'rewrite_preserve_add_nsw'76; CHECK-NEXT:  Classifying expressions for: @rewrite_preserve_add_nsw77; CHECK-NEXT:    %add = add nsw i32 %a, 478; CHECK-NEXT:    --> (4 + %a)<nsw> U: [-2147483644,-2147483648) S: [-2147483644,-2147483648)79; CHECK-NEXT:    %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]80; CHECK-NEXT:    --> {0,+,1}<nuw><%loop> U: [0,-2147483648) S: [0,-2147483648) Exits: (4 + %a)<nsw> LoopDispositions: { %loop: Computable }81; CHECK-NEXT:    %iv.next = add i32 %iv, 182; CHECK-NEXT:    --> {1,+,1}<nuw><%loop> U: [1,-2147483647) S: [1,-2147483647) Exits: (5 + %a) LoopDispositions: { %loop: Computable }83; CHECK-NEXT:  Determining loop execution counts for: @rewrite_preserve_add_nsw84; CHECK-NEXT:  Loop %loop: backedge-taken count is (4 + %a)<nsw>85; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 214748364786; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is (4 + %a)<nsw>87; CHECK-NEXT:  Loop %loop: Trip multiple is 188;89entry:90  %add = add nsw i32 %a, 491  call void @use(i32 noundef %add)92  %pre = icmp sgt i32 %a, -493  br i1 %pre, label %loop, label %exit94 95loop:96  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]97  call void @clobber()98  %iv.next = add i32 %iv, 199  %ec = icmp slt i32 %iv, %add100  br i1 %ec, label %loop, label %exit101 102exit:103  ret void104}105 106declare void @clobber()107 108 109declare void @clobber.i32(i32)110 111define void @test_guards_across_loops(i32 %N) {112; CHECK-LABEL: 'test_guards_across_loops'113; CHECK-NEXT:  Classifying expressions for: @test_guards_across_loops114; CHECK-NEXT:    %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop.1 ]115; CHECK-NEXT:    --> {0,+,1}<%loop.1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.1: Computable }116; CHECK-NEXT:    %iv.1.next = add i32 %iv.1, 1117; CHECK-NEXT:    --> {1,+,1}<%loop.1> U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop.1: Computable }118; CHECK-NEXT:    %iv.2 = phi i32 [ 0, %loop.1 ], [ %iv.2.next, %loop.2 ]119; CHECK-NEXT:    --> {0,+,1}<nuw><%loop.2> U: full-set S: full-set Exits: (1 + %N) LoopDispositions: { %loop.2: Computable }120; CHECK-NEXT:    %iv.2.next = add i32 %iv.2, 1121; CHECK-NEXT:    --> {1,+,1}<nw><%loop.2> U: full-set S: full-set Exits: (2 + %N) LoopDispositions: { %loop.2: Computable }122; CHECK-NEXT:  Determining loop execution counts for: @test_guards_across_loops123; CHECK-NEXT:  Loop %loop.2: backedge-taken count is (1 + (zext i32 %N to i64))<nuw><nsw>124; CHECK-NEXT:  Loop %loop.2: constant max backedge-taken count is i64 4294967296125; CHECK-NEXT:  Loop %loop.2: symbolic max backedge-taken count is (1 + (zext i32 %N to i64))<nuw><nsw>126; CHECK-NEXT:  Loop %loop.2: Trip multiple is 1127; CHECK-NEXT:  Loop %loop.1: Unpredictable backedge-taken count.128; CHECK-NEXT:  Loop %loop.1: Unpredictable constant max backedge-taken count.129; CHECK-NEXT:  Loop %loop.1: Unpredictable symbolic max backedge-taken count.130; CHECK-NEXT:  Loop %loop.1: Predicated backedge-taken count is (1 + (zext i32 %N to i64))<nuw><nsw>131; CHECK-NEXT:   Predicates:132; CHECK-NEXT:      {0,+,1}<%loop.1> Added Flags: <nusw>133; CHECK-NEXT:  Loop %loop.1: Predicated constant max backedge-taken count is i64 4294967296134; CHECK-NEXT:   Predicates:135; CHECK-NEXT:      {0,+,1}<%loop.1> Added Flags: <nusw>136; CHECK-NEXT:  Loop %loop.1: Predicated symbolic max backedge-taken count is (1 + (zext i32 %N to i64))<nuw><nsw>137; CHECK-NEXT:   Predicates:138; CHECK-NEXT:      {0,+,1}<%loop.1> Added Flags: <nusw>139;140entry:141  br label %loop.1142 143loop.1:144  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop.1 ]145  call void @clobber.i32(i32 %iv.1)146  %ec.1 = icmp ugt i32 %iv.1, %N147  %iv.1.next = add i32 %iv.1, 1148  br i1 %ec.1, label %loop.2, label %loop.1149 150loop.2:151  %iv.2 = phi i32  [ 0, %loop.1 ], [ %iv.2.next, %loop.2 ]152  call void @clobber.i32(i32 %iv.2)153  %ec.2 = icmp ugt i32 %iv.2, %N154  %iv.2.next = add i32 %iv.2, 1155  br i1 %ec.2, label %exit, label %loop.2156 157exit:158  ret void159}160