354 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 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 7define void @unsimplified_and1(i32 %n) {8; CHECK-LABEL: 'unsimplified_and1'9; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and110; CHECK-NEXT: Loop %loop: backedge-taken count is %n11; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -112; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n13; CHECK-NEXT: Loop %loop: Trip multiple is 114;15entry:16 br label %loop17 18loop:19 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]20 %iv.inc = add nsw i32 %iv, 121 %becond = icmp ule i32 %iv.inc, %n22 %and = select i1 %becond, i1 true, i1 false23 br i1 %and, label %loop, label %leave24 25leave:26 ret void27}28 29define void @unsimplified_and2(i32 %n) {30; CHECK-LABEL: 'unsimplified_and2'31; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and232; CHECK-NEXT: Loop %loop: backedge-taken count is %n33; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -134; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n35; CHECK-NEXT: Loop %loop: Trip multiple is 136;37entry:38 br label %loop39 40loop:41 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]42 %iv.inc = add nsw i32 %iv, 143 %becond = icmp ule i32 %iv.inc, %n44 %and = select i1 true, i1 %becond, i1 false45 br i1 %and, label %loop, label %leave46 47leave:48 ret void49}50 51define void @unsimplified_and3(i32 %n) {52; CHECK-LABEL: 'unsimplified_and3'53; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and354; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false55; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false56; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false57; CHECK-NEXT: Loop %loop: Trip multiple is 158;59entry:60 br label %loop61 62loop:63 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]64 %iv.inc = add nsw i32 %iv, 165 %becond = icmp ule i32 %iv.inc, %n66 %and = select i1 false, i1 %becond, i1 false67 br i1 %and, label %loop, label %leave68 69leave:70 ret void71}72 73define void @unsimplified_and4(i32 %n) {74; CHECK-LABEL: 'unsimplified_and4'75; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and476; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false77; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false78; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false79; CHECK-NEXT: Loop %loop: Trip multiple is 180;81entry:82 br label %loop83 84loop:85 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]86 %iv.inc = add nsw i32 %iv, 187 %becond = icmp ule i32 %iv.inc, %n88 %and = select i1 %becond, i1 false, i1 false89 br i1 %and, label %loop, label %leave90 91leave:92 ret void93}94 95define void @unsimplified_or1(i32 %n) {96; CHECK-LABEL: 'unsimplified_or1'97; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or198; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.99; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.100; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.101;102entry:103 br label %loop104 105loop:106 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]107 %iv.inc = add nsw i32 %iv, 1108 %becond = icmp ule i32 %iv.inc, %n109 %or = select i1 %becond, i1 true, i1 true110 br i1 %or, label %loop, label %leave111 112leave:113 ret void114}115 116define void @unsimplified_or2(i32 %n) {117; CHECK-LABEL: 'unsimplified_or2'118; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or2119; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.120; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.121; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.122;123entry:124 br label %loop125 126loop:127 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]128 %iv.inc = add nsw i32 %iv, 1129 %becond = icmp ule i32 %iv.inc, %n130 %or = select i1 true, i1 true, i1 %becond131 br i1 %or, label %loop, label %leave132 133leave:134 ret void135}136 137define void @unsimplified_or3(i32 %n) {138; CHECK-LABEL: 'unsimplified_or3'139; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or3140; CHECK-NEXT: Loop %loop: backedge-taken count is %n141; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1142; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n143; CHECK-NEXT: Loop %loop: Trip multiple is 1144;145entry:146 br label %loop147 148loop:149 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]150 %iv.inc = add nsw i32 %iv, 1151 %becond = icmp ule i32 %iv.inc, %n152 %or = select i1 false, i1 true, i1 %becond153 br i1 %or, label %loop, label %leave154 155leave:156 ret void157}158 159define void @unsimplified_or4(i32 %n) {160; CHECK-LABEL: 'unsimplified_or4'161; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or4162; CHECK-NEXT: Loop %loop: backedge-taken count is %n163; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1164; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n165; CHECK-NEXT: Loop %loop: Trip multiple is 1166;167entry:168 br label %loop169 170loop:171 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]172 %iv.inc = add nsw i32 %iv, 1173 %becond = icmp ule i32 %iv.inc, %n174 %or = select i1 %becond, i1 true, i1 false175 br i1 %or, label %loop, label %leave176 177leave:178 ret void179}180 181define void @reversed_and1(i32 %n) {182; CHECK-LABEL: 'reversed_and1'183; CHECK-NEXT: Determining loop execution counts for: @reversed_and1184; CHECK-NEXT: Loop %loop: backedge-taken count is %n185; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1186; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n187; CHECK-NEXT: Loop %loop: Trip multiple is 1188;189entry:190 br label %loop191 192loop:193 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]194 %iv.inc = add nsw i32 %iv, 1195 %becond = icmp ugt i32 %iv.inc, %n196 %and = select i1 %becond, i1 true, i1 false197 br i1 %and, label %leave, label %loop198 199leave:200 ret void201}202 203define void @reversed_and2(i32 %n) {204; CHECK-LABEL: 'reversed_and2'205; CHECK-NEXT: Determining loop execution counts for: @reversed_and2206; CHECK-NEXT: Loop %loop: backedge-taken count is %n207; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1208; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n209; CHECK-NEXT: Loop %loop: Trip multiple is 1210;211entry:212 br label %loop213 214loop:215 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]216 %iv.inc = add nsw i32 %iv, 1217 %becond = icmp ugt i32 %iv.inc, %n218 %and = select i1 true, i1 %becond, i1 false219 br i1 %and, label %leave, label %loop220 221leave:222 ret void223}224 225define void @reversed_and3(i32 %n) {226; CHECK-LABEL: 'reversed_and3'227; CHECK-NEXT: Determining loop execution counts for: @reversed_and3228; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.229; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.230; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.231;232entry:233 br label %loop234 235loop:236 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]237 %iv.inc = add nsw i32 %iv, 1238 %becond = icmp ugt i32 %iv.inc, %n239 %and = select i1 false, i1 %becond, i1 false240 br i1 %and, label %leave, label %loop241 242leave:243 ret void244}245 246define void @reversed_and4(i32 %n) {247; CHECK-LABEL: 'reversed_and4'248; CHECK-NEXT: Determining loop execution counts for: @reversed_and4249; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.250; CHECK-NEXT: Loop %loop: Unpredictable constant max backedge-taken count.251; CHECK-NEXT: Loop %loop: Unpredictable symbolic max backedge-taken count.252;253entry:254 br label %loop255 256loop:257 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]258 %iv.inc = add nsw i32 %iv, 1259 %becond = icmp ugt i32 %iv.inc, %n260 %and = select i1 %becond, i1 false, i1 false261 br i1 %and, label %leave, label %loop262 263leave:264 ret void265}266 267define void @reversed_or1(i32 %n) {268; CHECK-LABEL: 'reversed_or1'269; CHECK-NEXT: Determining loop execution counts for: @reversed_or1270; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false271; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false272; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false273; CHECK-NEXT: Loop %loop: Trip multiple is 1274;275entry:276 br label %loop277 278loop:279 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]280 %iv.inc = add nsw i32 %iv, 1281 %becond = icmp ugt i32 %iv.inc, %n282 %or = select i1 %becond, i1 true, i1 true283 br i1 %or, label %leave, label %loop284 285leave:286 ret void287}288 289define void @reversed_or2(i32 %n) {290; CHECK-LABEL: 'reversed_or2'291; CHECK-NEXT: Determining loop execution counts for: @reversed_or2292; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false293; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false294; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false295; CHECK-NEXT: Loop %loop: Trip multiple is 1296;297entry:298 br label %loop299 300loop:301 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]302 %iv.inc = add nsw i32 %iv, 1303 %becond = icmp ugt i32 %iv.inc, %n304 %or = select i1 true, i1 true, i1 %becond305 br i1 %or, label %leave, label %loop306 307leave:308 ret void309}310 311define void @reversed_or3(i32 %n) {312; CHECK-LABEL: 'reversed_or3'313; CHECK-NEXT: Determining loop execution counts for: @reversed_or3314; CHECK-NEXT: Loop %loop: backedge-taken count is %n315; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1316; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n317; CHECK-NEXT: Loop %loop: Trip multiple is 1318;319entry:320 br label %loop321 322loop:323 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]324 %iv.inc = add nsw i32 %iv, 1325 %becond = icmp ugt i32 %iv.inc, %n326 %or = select i1 false, i1 true, i1 %becond327 br i1 %or, label %leave, label %loop328 329leave:330 ret void331}332 333define void @reversed_or4(i32 %n) {334; CHECK-LABEL: 'reversed_or4'335; CHECK-NEXT: Determining loop execution counts for: @reversed_or4336; CHECK-NEXT: Loop %loop: backedge-taken count is %n337; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1338; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n339; CHECK-NEXT: Loop %loop: Trip multiple is 1340;341entry:342 br label %loop343 344loop:345 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]346 %iv.inc = add nsw i32 %iv, 1347 %becond = icmp ugt i32 %iv.inc, %n348 %or = select i1 %becond, i1 true, i1 false349 br i1 %or, label %leave, label %loop350 351leave:352 ret void353}354