brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.5 KiB · a1538fd Raw
308 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-max-iterations=0  -scalar-evolution-classify-expressions=0  2>&1 | FileCheck %s3 4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-unknown-linux-gnu"6 7declare void @non_exit_use(i32 %i) #08 9define void @sle_pre_inc(i32 %len) willreturn {10; CHECK-LABEL: 'sle_pre_inc'11; CHECK-NEXT:  Determining loop execution counts for: @sle_pre_inc12; CHECK-NEXT:  Loop %for.body: backedge-taken count is (0 smax (1 + %len))13; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 214748364714; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (0 smax (1 + %len))15; CHECK-NEXT:  Loop %for.body: Trip multiple is 116;17entry:18  br label %for.body19 20for.body:21  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]22  call void @non_exit_use(i32 %iv) nounwind willreturn23  %inc = add i32 %iv, 124  %cmp = icmp sle i32 %iv, %len25  br i1 %cmp, label %for.body, label %for.end26 27for.end:28  ret void29}30 31define void @sle_post_inc(i32 %len) willreturn {32; CHECK-LABEL: 'sle_post_inc'33; CHECK-NEXT:  Determining loop execution counts for: @sle_post_inc34; CHECK-NEXT:  Loop %for.body: backedge-taken count is (-1 + (1 smax (1 + %len)))<nsw>35; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 214748364636; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (-1 + (1 smax (1 + %len)))<nsw>37; CHECK-NEXT:  Loop %for.body: Trip multiple is 138;39entry:40  br label %for.body41 42for.body:43  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]44  call void @non_exit_use(i32 %iv) nounwind willreturn45  %inc = add i32 %iv, 146  %cmp = icmp sle i32 %inc, %len47  br i1 %cmp, label %for.body, label %for.end48 49for.end:50  ret void51}52 53define void @sle_pre_inc_infinite(i32 %len) {54; CHECK-LABEL: 'sle_pre_inc_infinite'55; CHECK-NEXT:  Determining loop execution counts for: @sle_pre_inc_infinite56; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.57; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.58; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.59; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is (0 smax (1 + (sext i32 %len to i64))<nsw>)60; CHECK-NEXT:   Predicates:61; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nssw>62; CHECK-NEXT:  Loop %for.body: Predicated constant max backedge-taken count is i64 214748364863; CHECK-NEXT:   Predicates:64; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nssw>65; CHECK-NEXT:  Loop %for.body: Predicated symbolic max backedge-taken count is (0 smax (1 + (sext i32 %len to i64))<nsw>)66; CHECK-NEXT:   Predicates:67; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nssw>68;69entry:70  br label %for.body71 72for.body:73  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]74  call void @non_exit_use(i32 %iv) nounwind willreturn75  %inc = add i32 %iv, 176  %cmp = icmp sle i32 %iv, %len77  br i1 %cmp, label %for.body, label %for.end78 79for.end:80  ret void81}82 83define void @ule_pre_inc(i32 %len) willreturn {84; CHECK-LABEL: 'ule_pre_inc'85; CHECK-NEXT:  Determining loop execution counts for: @ule_pre_inc86; CHECK-NEXT:  Loop %for.body: backedge-taken count is (1 + %len)87; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 -188; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (1 + %len)89; CHECK-NEXT:  Loop %for.body: Trip multiple is 190;91entry:92  br label %for.body93 94for.body:95  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]96  call void @non_exit_use(i32 %iv) nounwind willreturn97  %inc = add i32 %iv, 198  %cmp = icmp ule i32 %iv, %len99  br i1 %cmp, label %for.body, label %for.end100 101for.end:102  ret void103}104 105define void @ule_post_inc(i32 %len) willreturn {106; CHECK-LABEL: 'ule_post_inc'107; CHECK-NEXT:  Determining loop execution counts for: @ule_post_inc108; CHECK-NEXT:  Loop %for.body: backedge-taken count is (-1 + (1 umax (1 + %len)))109; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 -2110; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (-1 + (1 umax (1 + %len)))111; CHECK-NEXT:  Loop %for.body: Trip multiple is 1112;113entry:114  br label %for.body115 116for.body:117  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]118  call void @non_exit_use(i32 %iv) nounwind willreturn119  %inc = add i32 %iv, 1120  %cmp = icmp ule i32 %inc, %len121  br i1 %cmp, label %for.body, label %for.end122 123for.end:124  ret void125}126 127define void @ule_pre_inc_infinite(i32 %len) {128; CHECK-LABEL: 'ule_pre_inc_infinite'129; CHECK-NEXT:  Determining loop execution counts for: @ule_pre_inc_infinite130; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.131; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.132; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.133; CHECK-NEXT:  Loop %for.body: Predicated backedge-taken count is (1 + (zext i32 %len to i64))<nuw><nsw>134; CHECK-NEXT:   Predicates:135; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nusw>136; CHECK-NEXT:  Loop %for.body: Predicated constant max backedge-taken count is i64 4294967296137; CHECK-NEXT:   Predicates:138; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nusw>139; CHECK-NEXT:  Loop %for.body: Predicated symbolic max backedge-taken count is (1 + (zext i32 %len to i64))<nuw><nsw>140; CHECK-NEXT:   Predicates:141; CHECK-NEXT:      {0,+,1}<%for.body> Added Flags: <nusw>142;143entry:144  br label %for.body145 146for.body:147  %iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]148  call void @non_exit_use(i32 %iv) nounwind willreturn149  %inc = add i32 %iv, 1150  %cmp = icmp ule i32 %iv, %len151  br i1 %cmp, label %for.body, label %for.end152 153for.end:154  ret void155}156 157define void @sge_pre_inc(i32 %end) willreturn {158; CHECK-LABEL: 'sge_pre_inc'159; CHECK-NEXT:  Determining loop execution counts for: @sge_pre_inc160; CHECK-NEXT:  Loop %for.body: backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))161; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 -2147483548162; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))163; CHECK-NEXT:  Loop %for.body: Trip multiple is 1164;165entry:166  br label %for.body167 168for.body:169  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]170  call void @non_exit_use(i32 %iv) nounwind willreturn171  %inc = add i32 %iv, -1172  %cmp = icmp sge i32 %iv, %end173  br i1 %cmp, label %for.body, label %for.end174 175for.end:176  ret void177}178 179define void @sge_post_inc(i32 %end) willreturn {180; CHECK-LABEL: 'sge_post_inc'181; CHECK-NEXT:  Determining loop execution counts for: @sge_post_inc182; CHECK-NEXT:  Loop %for.body: backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))183; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 -2147483548184; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))185; CHECK-NEXT:  Loop %for.body: Trip multiple is 1186;187entry:188  br label %for.body189 190for.body:191  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]192  call void @non_exit_use(i32 %iv) nounwind willreturn193  %inc = add i32 %iv, -1194  %cmp = icmp sge i32 %iv, %end195  br i1 %cmp, label %for.body, label %for.end196 197for.end:198  ret void199}200 201define void @sge_pre_inc_infinite(i32 %end) {202; CHECK-LABEL: 'sge_pre_inc_infinite'203; CHECK-NEXT:  Determining loop execution counts for: @sge_pre_inc_infinite204; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.205; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.206; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.207;208entry:209  br label %for.body210 211for.body:212  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]213  call void @non_exit_use(i32 %iv) nounwind willreturn214  %inc = add i32 %iv, -1215  %cmp = icmp sge i32 %iv, %end216  br i1 %cmp, label %for.body, label %for.end217 218for.end:219  ret void220}221 222define void @use_pre_inc(i32 %end) willreturn {223; CHECK-LABEL: 'use_pre_inc'224; CHECK-NEXT:  Determining loop execution counts for: @use_pre_inc225; CHECK-NEXT:  Loop %for.body: backedge-taken count is (100 + (-1 * (100 umin (-1 + %end)))<nsw>)<nsw>226; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 100227; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 umin (-1 + %end)))<nsw>)<nsw>228; CHECK-NEXT:  Loop %for.body: Trip multiple is 1229;230entry:231  br label %for.body232 233for.body:234  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]235  call void @non_exit_use(i32 %iv) nounwind willreturn236  %inc = add i32 %iv, -1237  %cmp = icmp uge i32 %iv, %end238  br i1 %cmp, label %for.body, label %for.end239 240for.end:241  ret void242}243 244define void @use_post_inc(i32 %end) willreturn {245; CHECK-LABEL: 'use_post_inc'246; CHECK-NEXT:  Determining loop execution counts for: @use_post_inc247; CHECK-NEXT:  Loop %for.body: backedge-taken count is (99 + (-1 * (99 umin (-1 + %end)))<nsw>)<nsw>248; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 99249; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (99 + (-1 * (99 umin (-1 + %end)))<nsw>)<nsw>250; CHECK-NEXT:  Loop %for.body: Trip multiple is 1251;252entry:253  br label %for.body254 255for.body:256  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]257  call void @non_exit_use(i32 %iv) nounwind willreturn258  %inc = add i32 %iv, -1259  %cmp = icmp uge i32 %inc, %end260  br i1 %cmp, label %for.body, label %for.end261 262for.end:263  ret void264}265 266define void @uge_pre_inc_infinite(i32 %end) {267; CHECK-LABEL: 'uge_pre_inc_infinite'268; CHECK-NEXT:  Determining loop execution counts for: @uge_pre_inc_infinite269; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.270; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.271; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.272;273entry:274  br label %for.body275 276for.body:277  %iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]278  call void @non_exit_use(i32 %iv) nounwind willreturn279  %inc = add i32 %iv, -1280  %cmp = icmp uge i32 %iv, %end281  br i1 %cmp, label %for.body, label %for.end282 283for.end:284  ret void285}286 287define void @pr54191(i64 %n) mustprogress {288; CHECK-LABEL: 'pr54191'289; CHECK-NEXT:  Determining loop execution counts for: @pr54191290; CHECK-NEXT:  Loop %loop: backedge-taken count is ((-2 + %n) /u 2)291; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i64 4611686018427387902292; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is ((-2 + %n) /u 2)293; CHECK-NEXT:  Loop %loop: Trip multiple is 1294;295entry:296  %guard = icmp sgt i64 %n, 1297  br i1 %guard, label %loop, label %exit298 299loop:300  %iv = phi i64 [ 2, %entry ], [ %iv.next, %loop ]301  %iv.next = add nuw nsw i64 %iv, 2302  %cmp = icmp sle i64 %iv.next, %n303  br i1 %cmp, label %loop, label %exit304 305exit:306  ret void307}308