brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.3 KiB · 88515a3 Raw
390 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-classify-expressions=0 2>&1 | FileCheck %s3 4declare { i16, i1 } @llvm.sadd.with.overflow.i16(i16, i16) nounwind readnone5declare { i16, i1 } @llvm.uadd.with.overflow.i16(i16, i16) nounwind readnone6declare { i16, i1 } @llvm.ssub.with.overflow.i16(i16, i16) nounwind readnone7declare { i16, i1 } @llvm.usub.with.overflow.i16(i16, i16) nounwind readnone8declare { i16, i1 } @llvm.smul.with.overflow.i16(i16, i16) nounwind readnone9declare { i16, i1 } @llvm.umul.with.overflow.i16(i16, i16) nounwind readnone10 11define void @uadd_exhaustive(i1 %arg) {12; CHECK-LABEL: 'uadd_exhaustive'13; CHECK-NEXT:  Determining loop execution counts for: @uadd_exhaustive14; CHECK-NEXT:  Loop %for.body: backedge-taken count is i16 3515; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 3516; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i16 3517; CHECK-NEXT:  Loop %for.body: Trip multiple is 3618;19entry:20  br i1 %arg, label %for.end, label %for.body.preheader21 22for.body.preheader:                               ; preds = %entry23  br label %for.body24 25for.body:                                         ; preds = %for.body.preheader, %for.body26  %indvars.iv = phi i16 [ %math, %for.body ], [ 65500, %for.body.preheader ]27  %0 = call { i16, i1 } @llvm.uadd.with.overflow.i16(i16 %indvars.iv, i16 1)28  %math = extractvalue { i16, i1 } %0, 029  %ov = extractvalue { i16, i1 } %0, 130  br i1 %ov, label %for.end, label %for.body31 32for.end:                                          ; preds = %for.body, %entry33  ret void34}35 36define void @sadd_exhaustive(i1 %arg) {37; CHECK-LABEL: 'sadd_exhaustive'38; CHECK-NEXT:  Determining loop execution counts for: @sadd_exhaustive39; CHECK-NEXT:  Loop %for.body: backedge-taken count is i16 6740; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 6741; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i16 6742; CHECK-NEXT:  Loop %for.body: Trip multiple is 6843;44entry:45  br i1 %arg, label %for.end, label %for.body.preheader46 47for.body.preheader:                               ; preds = %entry48  br label %for.body49 50for.body:                                         ; preds = %for.body.preheader, %for.body51  %indvars.iv = phi i16 [ %math, %for.body ], [ 32700, %for.body.preheader ]52  %0 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %indvars.iv, i16 1)53  %math = extractvalue { i16, i1 } %0, 054  %ov = extractvalue { i16, i1 } %0, 155  br i1 %ov, label %for.end, label %for.body56 57for.end:                                          ; preds = %for.body, %entry58  ret void59}60 61define void @usub_exhaustive(i1 %arg) {62; CHECK-LABEL: 'usub_exhaustive'63; CHECK-NEXT:  Determining loop execution counts for: @usub_exhaustive64; CHECK-NEXT:  Loop %for.body: backedge-taken count is i16 5065; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 5066; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i16 5067; CHECK-NEXT:  Loop %for.body: Trip multiple is 5168;69entry:70  br i1 %arg, label %for.end, label %for.body.preheader71 72for.body.preheader:                               ; preds = %entry73  br label %for.body74 75for.body:                                         ; preds = %for.body.preheader, %for.body76  %indvars.iv = phi i16 [ %math, %for.body ], [ 50, %for.body.preheader ]77  %0 = call { i16, i1 } @llvm.usub.with.overflow.i16(i16 %indvars.iv, i16 1)78  %math = extractvalue { i16, i1 } %0, 079  %ov = extractvalue { i16, i1 } %0, 180  br i1 %ov, label %for.end, label %for.body81 82for.end:                                          ; preds = %for.body, %entry83  ret void84}85 86define void @ssub_exhaustive(i1 %arg) {87; CHECK-LABEL: 'ssub_exhaustive'88; CHECK-NEXT:  Determining loop execution counts for: @ssub_exhaustive89; CHECK-NEXT:  Loop %for.body: backedge-taken count is i16 6890; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 6891; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i16 6892; CHECK-NEXT:  Loop %for.body: Trip multiple is 6993;94entry:95  br i1 %arg, label %for.end, label %for.body.preheader96 97for.body.preheader:                               ; preds = %entry98  br label %for.body99 100for.body:                                         ; preds = %for.body.preheader, %for.body101  %indvars.iv = phi i16 [ %math, %for.body ], [ -32700, %for.body.preheader ]102  %0 = call { i16, i1 } @llvm.ssub.with.overflow.i16(i16 %indvars.iv, i16 1)103  %math = extractvalue { i16, i1 } %0, 0104  %ov = extractvalue { i16, i1 } %0, 1105  br i1 %ov, label %for.end, label %for.body106 107for.end:                                          ; preds = %for.body, %entry108  ret void109}110 111define void @smul_exhaustive(i1 %arg) {112; CHECK-LABEL: 'smul_exhaustive'113; CHECK-NEXT:  Determining loop execution counts for: @smul_exhaustive114; CHECK-NEXT:  Loop %for.body: backedge-taken count is i32 14115; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 14116; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i32 14117; CHECK-NEXT:  Loop %for.body: Trip multiple is 15118;119entry:120  br i1 %arg, label %for.end, label %for.body.preheader121 122for.body.preheader:                               ; preds = %entry123  br label %for.body124 125for.body:                                         ; preds = %for.body.preheader, %for.body126  %indvars.iv = phi i16 [ %math, %for.body ], [ 1, %for.body.preheader ]127  %0 = call { i16, i1 } @llvm.smul.with.overflow.i16(i16 %indvars.iv, i16 2)128  %math = extractvalue { i16, i1 } %0, 0129  %ov = extractvalue { i16, i1 } %0, 1130  br i1 %ov, label %for.end, label %for.body131 132for.end:                                          ; preds = %for.body, %entry133  ret void134}135 136define void @umul_exhaustive(i1 %arg) {137; CHECK-LABEL: 'umul_exhaustive'138; CHECK-NEXT:  Determining loop execution counts for: @umul_exhaustive139; CHECK-NEXT:  Loop %for.body: backedge-taken count is i32 15140; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i32 15141; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is i32 15142; CHECK-NEXT:  Loop %for.body: Trip multiple is 16143;144entry:145  br i1 %arg, label %for.end, label %for.body.preheader146 147for.body.preheader:                               ; preds = %entry148  br label %for.body149 150for.body:                                         ; preds = %for.body.preheader, %for.body151  %indvars.iv = phi i16 [ %math, %for.body ], [ 1, %for.body.preheader ]152  %0 = call { i16, i1 } @llvm.umul.with.overflow.i16(i16 %indvars.iv, i16 2)153  %math = extractvalue { i16, i1 } %0, 0154  %ov = extractvalue { i16, i1 } %0, 1155  br i1 %ov, label %for.end, label %for.body156 157for.end:                                          ; preds = %for.body, %entry158  ret void159}160 161define void @uadd_symbolic_start(i16 %start, i1 %arg) {162; CHECK-LABEL: 'uadd_symbolic_start'163; CHECK-NEXT:  Determining loop execution counts for: @uadd_symbolic_start164; CHECK-NEXT:  Loop %for.body: backedge-taken count is (-1 + (-1 * %start))165; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 -1166; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (-1 + (-1 * %start))167; CHECK-NEXT:  Loop %for.body: Trip multiple is 1168;169entry:170  br i1 %arg, label %for.end, label %for.body.preheader171 172for.body.preheader:                               ; preds = %entry173  br label %for.body174 175for.body:                                         ; preds = %for.body.preheader, %for.body176  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]177  %0 = call { i16, i1 } @llvm.uadd.with.overflow.i16(i16 %indvars.iv, i16 1)178  %math = extractvalue { i16, i1 } %0, 0179  %ov = extractvalue { i16, i1 } %0, 1180  br i1 %ov, label %for.end, label %for.body181 182for.end:                                          ; preds = %for.body, %entry183  ret void184}185 186define void @sadd_symbolic_start(i16 %start, i1 %arg) {187; CHECK-LABEL: 'sadd_symbolic_start'188; CHECK-NEXT:  Determining loop execution counts for: @sadd_symbolic_start189; CHECK-NEXT:  Loop %for.body: backedge-taken count is (32767 + (-1 * %start))190; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 -1191; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (32767 + (-1 * %start))192; CHECK-NEXT:  Loop %for.body: Trip multiple is 1193;194entry:195  br i1 %arg, label %for.end, label %for.body.preheader196 197for.body.preheader:                               ; preds = %entry198  br label %for.body199 200for.body:                                         ; preds = %for.body.preheader, %for.body201  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]202  %0 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %indvars.iv, i16 1)203  %math = extractvalue { i16, i1 } %0, 0204  %ov = extractvalue { i16, i1 } %0, 1205  br i1 %ov, label %for.end, label %for.body206 207for.end:                                          ; preds = %for.body, %entry208  ret void209}210 211define void @sadd_symbolic_start2(i16 %start, i1 %arg) {212; CHECK-LABEL: 'sadd_symbolic_start2'213; CHECK-NEXT:  Determining loop execution counts for: @sadd_symbolic_start2214; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.215; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.216; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.217;218entry:219  br i1 %arg, label %for.end, label %for.body.preheader220 221for.body.preheader:                               ; preds = %entry222  br label %for.body223 224for.body:                                         ; preds = %for.body.preheader, %for.body225  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]226  %0 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %indvars.iv, i16 1)227  %math = extractvalue { i16, i1 } %0, 0228  %ov = extractvalue { i16, i1 } %0, 1229  %not = xor i1 true, %ov230  br i1 %not, label %for.body, label %for.end231 232for.end:                                          ; preds = %for.body, %entry233  ret void234}235 236define void @sadd_symbolic_swapped(i16 %start, i1 %arg) {237; CHECK-LABEL: 'sadd_symbolic_swapped'238; CHECK-NEXT:  Determining loop execution counts for: @sadd_symbolic_swapped239; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.240; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.241; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.242;243entry:244  br i1 %arg, label %for.end, label %for.body.preheader245 246for.body.preheader:                               ; preds = %entry247  br label %for.body248 249for.body:                                         ; preds = %for.body.preheader, %for.body250  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]251  %0 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %indvars.iv, i16 1)252  %math = extractvalue { i16, i1 } %0, 0253  %ov = extractvalue { i16, i1 } %0, 1254  br i1 %ov, label %for.body, label %for.end255 256for.end:                                          ; preds = %for.body, %entry257  ret void258}259 260define void @usub_symbolic_start(i16 %start, i1 %arg) {261; CHECK-LABEL: 'usub_symbolic_start'262; CHECK-NEXT:  Determining loop execution counts for: @usub_symbolic_start263; CHECK-NEXT:  Loop %for.body: backedge-taken count is %start264; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 -1265; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is %start266; CHECK-NEXT:  Loop %for.body: Trip multiple is 1267;268entry:269  br i1 %arg, label %for.end, label %for.body.preheader270 271for.body.preheader:                               ; preds = %entry272  br label %for.body273 274for.body:                                         ; preds = %for.body.preheader, %for.body275  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]276  %0 = call { i16, i1 } @llvm.usub.with.overflow.i16(i16 %indvars.iv, i16 1)277  %math = extractvalue { i16, i1 } %0, 0278  %ov = extractvalue { i16, i1 } %0, 1279  br i1 %ov, label %for.end, label %for.body280 281for.end:                                          ; preds = %for.body, %entry282  ret void283}284 285define void @ssub_symbolic_start(i16 %start, i1 %arg) {286; CHECK-LABEL: 'ssub_symbolic_start'287; CHECK-NEXT:  Determining loop execution counts for: @ssub_symbolic_start288; CHECK-NEXT:  Loop %for.body: backedge-taken count is (-32768 + %start)289; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 -1290; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is (-32768 + %start)291; CHECK-NEXT:  Loop %for.body: Trip multiple is 1292;293entry:294  br i1 %arg, label %for.end, label %for.body.preheader295 296for.body.preheader:                               ; preds = %entry297  br label %for.body298 299for.body:                                         ; preds = %for.body.preheader, %for.body300  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]301  %0 = call { i16, i1 } @llvm.ssub.with.overflow.i16(i16 %indvars.iv, i16 1)302  %math = extractvalue { i16, i1 } %0, 0303  %ov = extractvalue { i16, i1 } %0, 1304  br i1 %ov, label %for.end, label %for.body305 306for.end:                                          ; preds = %for.body, %entry307  ret void308}309 310define void @smul_symbolic_start(i16 %start, i1 %arg) {311; CHECK-LABEL: 'smul_symbolic_start'312; CHECK-NEXT:  Determining loop execution counts for: @smul_symbolic_start313; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.314; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.315; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.316;317entry:318  br i1 %arg, label %for.end, label %for.body.preheader319 320for.body.preheader:                               ; preds = %entry321  br label %for.body322 323for.body:                                         ; preds = %for.body.preheader, %for.body324  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]325  %0 = call { i16, i1 } @llvm.smul.with.overflow.i16(i16 %indvars.iv, i16 2)326  %math = extractvalue { i16, i1 } %0, 0327  %ov = extractvalue { i16, i1 } %0, 1328  br i1 %ov, label %for.end, label %for.body329 330for.end:                                          ; preds = %for.body, %entry331  ret void332}333 334define void @umul_symbolic_start(i16 %start, i1 %arg) {335; CHECK-LABEL: 'umul_symbolic_start'336; CHECK-NEXT:  Determining loop execution counts for: @umul_symbolic_start337; CHECK-NEXT:  Loop %for.body: Unpredictable backedge-taken count.338; CHECK-NEXT:  Loop %for.body: Unpredictable constant max backedge-taken count.339; CHECK-NEXT:  Loop %for.body: Unpredictable symbolic max backedge-taken count.340;341entry:342  br i1 %arg, label %for.end, label %for.body.preheader343 344for.body.preheader:                               ; preds = %entry345  br label %for.body346 347for.body:                                         ; preds = %for.body.preheader, %for.body348  %indvars.iv = phi i16 [ %math, %for.body ], [ %start, %for.body.preheader ]349  %0 = call { i16, i1 } @llvm.umul.with.overflow.i16(i16 %indvars.iv, i16 2)350  %math = extractvalue { i16, i1 } %0, 0351  %ov = extractvalue { i16, i1 } %0, 1352  br i1 %ov, label %for.end, label %for.body353 354for.end:                                          ; preds = %for.body, %entry355  ret void356}357 358define void @sadd_symbolic_non_latch(i16 %start, i1 %arg) {359; CHECK-LABEL: 'sadd_symbolic_non_latch'360; CHECK-NEXT:  Determining loop execution counts for: @sadd_symbolic_non_latch361; CHECK-NEXT:  Loop %for.body: <multiple exits> backedge-taken count is ((230 + (-1 * %start)) umin (32767 + (-1 * %start)))362; CHECK-NEXT:    exit count for for.body: (32767 + (-1 * %start))363; CHECK-NEXT:    exit count for for.latch: (230 + (-1 * %start))364; CHECK-NEXT:  Loop %for.body: constant max backedge-taken count is i16 -1365; CHECK-NEXT:  Loop %for.body: symbolic max backedge-taken count is ((230 + (-1 * %start)) umin (32767 + (-1 * %start)))366; CHECK-NEXT:    symbolic max exit count for for.body: (32767 + (-1 * %start))367; CHECK-NEXT:    symbolic max exit count for for.latch: (230 + (-1 * %start))368; CHECK-NEXT:  Loop %for.body: Trip multiple is 1369;370entry:371  br i1 %arg, label %for.end, label %for.body.preheader372 373for.body.preheader:                               ; preds = %entry374  br label %for.body375 376for.body:                                         ; preds = %for.body.preheader, %for.body377  %indvars.iv = phi i16 [ %math, %for.latch ], [ %start, %for.body.preheader ]378  %0 = call { i16, i1 } @llvm.sadd.with.overflow.i16(i16 %indvars.iv, i16 1)379  %math = extractvalue { i16, i1 } %0, 0380  %ov = extractvalue { i16, i1 } %0, 1381  br i1 %ov, label %for.end, label %for.latch382 383for.latch:384  %cmp = icmp eq i16 %math, 231385  br i1 %cmp, label %for.end, label %for.body386 387for.end:                                          ; preds = %for.body, %entry388  ret void389}390