1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-classify-expressions=0 2>&1 2>&1 | FileCheck %s 3 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_and1 10; CHECK-NEXT: Loop %loop: backedge-taken count is %n 11; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 12; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 13; CHECK-NEXT: Loop %loop: Trip multiple is 1 14; 15entry: 16 br label %loop 17 18loop: 19 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 20 %iv.inc = add nsw i32 %iv, 1 21 %becond = icmp ule i32 %iv.inc, %n 22 %and = and i1 %becond, true 23 br i1 %and, label %loop, label %leave 24 25leave: 26 ret void 27} 28 29define void @unsimplified_and2(i32 %n) { 30; CHECK-LABEL: 'unsimplified_and2' 31; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and2 32; CHECK-NEXT: Loop %loop: backedge-taken count is %n 33; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 34; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 35; CHECK-NEXT: Loop %loop: Trip multiple is 1 36; 37entry: 38 br label %loop 39 40loop: 41 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 42 %iv.inc = add nsw i32 %iv, 1 43 %becond = icmp ule i32 %iv.inc, %n 44 %and = and i1 true, %becond 45 br i1 %and, label %loop, label %leave 46 47leave: 48 ret void 49} 50 51define void @unsimplified_and3(i32 %n) { 52; CHECK-LABEL: 'unsimplified_and3' 53; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and3 54; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false 55; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false 56; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false 57; CHECK-NEXT: Loop %loop: Trip multiple is 1 58; 59entry: 60 br label %loop 61 62loop: 63 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 64 %iv.inc = add nsw i32 %iv, 1 65 %becond = icmp ule i32 %iv.inc, %n 66 %and = and i1 false, %becond 67 br i1 %and, label %loop, label %leave 68 69leave: 70 ret void 71} 72 73define void @unsimplified_and4(i32 %n) { 74; CHECK-LABEL: 'unsimplified_and4' 75; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and4 76; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false 77; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false 78; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false 79; CHECK-NEXT: Loop %loop: Trip multiple is 1 80; 81entry: 82 br label %loop 83 84loop: 85 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 86 %iv.inc = add nsw i32 %iv, 1 87 %becond = icmp ule i32 %iv.inc, %n 88 %and = and i1 %becond, false 89 br i1 %and, label %loop, label %leave 90 91leave: 92 ret void 93} 94 95define void @unsimplified_or1(i32 %n) { 96; CHECK-LABEL: 'unsimplified_or1' 97; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or1 98; 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 %loop 104 105loop: 106 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 107 %iv.inc = add nsw i32 %iv, 1 108 %becond = icmp ule i32 %iv.inc, %n 109 %or = or i1 %becond, true 110 br i1 %or, label %loop, label %leave 111 112leave: 113 ret void 114} 115 116define void @unsimplified_or2(i32 %n) { 117; CHECK-LABEL: 'unsimplified_or2' 118; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or2 119; 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 %loop 125 126loop: 127 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 128 %iv.inc = add nsw i32 %iv, 1 129 %becond = icmp ule i32 %iv.inc, %n 130 %or = or i1 true, %becond 131 br i1 %or, label %loop, label %leave 132 133leave: 134 ret void 135} 136 137define void @unsimplified_or3(i32 %n) { 138; CHECK-LABEL: 'unsimplified_or3' 139; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or3 140; CHECK-NEXT: Loop %loop: backedge-taken count is %n 141; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 142; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 143; CHECK-NEXT: Loop %loop: Trip multiple is 1 144; 145entry: 146 br label %loop 147 148loop: 149 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 150 %iv.inc = add nsw i32 %iv, 1 151 %becond = icmp ule i32 %iv.inc, %n 152 %or = or i1 false, %becond 153 br i1 %or, label %loop, label %leave 154 155leave: 156 ret void 157} 158 159define void @unsimplified_or4(i32 %n) { 160; CHECK-LABEL: 'unsimplified_or4' 161; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or4 162; CHECK-NEXT: Loop %loop: backedge-taken count is %n 163; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 164; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 165; CHECK-NEXT: Loop %loop: Trip multiple is 1 166; 167entry: 168 br label %loop 169 170loop: 171 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 172 %iv.inc = add nsw i32 %iv, 1 173 %becond = icmp ule i32 %iv.inc, %n 174 %or = or i1 %becond, false 175 br i1 %or, label %loop, label %leave 176 177leave: 178 ret void 179} 180 181define void @reversed_and1(i32 %n) { 182; CHECK-LABEL: 'reversed_and1' 183; CHECK-NEXT: Determining loop execution counts for: @reversed_and1 184; CHECK-NEXT: Loop %loop: backedge-taken count is %n 185; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 186; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 187; CHECK-NEXT: Loop %loop: Trip multiple is 1 188; 189entry: 190 br label %loop 191 192loop: 193 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 194 %iv.inc = add nsw i32 %iv, 1 195 %becond = icmp ugt i32 %iv.inc, %n 196 %and = and i1 %becond, true 197 br i1 %and, label %leave, label %loop 198 199leave: 200 ret void 201} 202 203define void @reversed_and2(i32 %n) { 204; CHECK-LABEL: 'reversed_and2' 205; CHECK-NEXT: Determining loop execution counts for: @reversed_and2 206; CHECK-NEXT: Loop %loop: backedge-taken count is %n 207; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 208; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 209; CHECK-NEXT: Loop %loop: Trip multiple is 1 210; 211entry: 212 br label %loop 213 214loop: 215 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 216 %iv.inc = add nsw i32 %iv, 1 217 %becond = icmp ugt i32 %iv.inc, %n 218 %and = and i1 true, %becond 219 br i1 %and, label %leave, label %loop 220 221leave: 222 ret void 223} 224 225define void @reversed_and3(i32 %n) { 226; CHECK-LABEL: 'reversed_and3' 227; CHECK-NEXT: Determining loop execution counts for: @reversed_and3 228; 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 %loop 234 235loop: 236 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 237 %iv.inc = add nsw i32 %iv, 1 238 %becond = icmp ugt i32 %iv.inc, %n 239 %and = and i1 false, %becond 240 br i1 %and, label %leave, label %loop 241 242leave: 243 ret void 244} 245 246define void @reversed_and4(i32 %n) { 247; CHECK-LABEL: 'reversed_and4' 248; CHECK-NEXT: Determining loop execution counts for: @reversed_and4 249; 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 %loop 255 256loop: 257 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 258 %iv.inc = add nsw i32 %iv, 1 259 %becond = icmp ugt i32 %iv.inc, %n 260 %and = and i1 %becond, false 261 br i1 %and, label %leave, label %loop 262 263leave: 264 ret void 265} 266 267define void @reversed_or1(i32 %n) { 268; CHECK-LABEL: 'reversed_or1' 269; CHECK-NEXT: Determining loop execution counts for: @reversed_or1 270; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false 271; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false 272; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false 273; CHECK-NEXT: Loop %loop: Trip multiple is 1 274; 275entry: 276 br label %loop 277 278loop: 279 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 280 %iv.inc = add nsw i32 %iv, 1 281 %becond = icmp ugt i32 %iv.inc, %n 282 %or = or i1 %becond, true 283 br i1 %or, label %leave, label %loop 284 285leave: 286 ret void 287} 288 289define void @reversed_or2(i32 %n) { 290; CHECK-LABEL: 'reversed_or2' 291; CHECK-NEXT: Determining loop execution counts for: @reversed_or2 292; CHECK-NEXT: Loop %loop: backedge-taken count is i1 false 293; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i1 false 294; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i1 false 295; CHECK-NEXT: Loop %loop: Trip multiple is 1 296; 297entry: 298 br label %loop 299 300loop: 301 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 302 %iv.inc = add nsw i32 %iv, 1 303 %becond = icmp ugt i32 %iv.inc, %n 304 %or = or i1 true, %becond 305 br i1 %or, label %leave, label %loop 306 307leave: 308 ret void 309} 310 311define void @reversed_or3(i32 %n) { 312; CHECK-LABEL: 'reversed_or3' 313; CHECK-NEXT: Determining loop execution counts for: @reversed_or3 314; CHECK-NEXT: Loop %loop: backedge-taken count is %n 315; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 316; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 317; CHECK-NEXT: Loop %loop: Trip multiple is 1 318; 319entry: 320 br label %loop 321 322loop: 323 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 324 %iv.inc = add nsw i32 %iv, 1 325 %becond = icmp ugt i32 %iv.inc, %n 326 %or = or i1 false, %becond 327 br i1 %or, label %leave, label %loop 328 329leave: 330 ret void 331} 332 333define void @reversed_or4(i32 %n) { 334; CHECK-LABEL: 'reversed_or4' 335; CHECK-NEXT: Determining loop execution counts for: @reversed_or4 336; CHECK-NEXT: Loop %loop: backedge-taken count is %n 337; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1 338; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %n 339; CHECK-NEXT: Loop %loop: Trip multiple is 1 340; 341entry: 342 br label %loop 343 344loop: 345 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ] 346 %iv.inc = add nsw i32 %iv, 1 347 %becond = icmp ugt i32 %iv.inc, %n 348 %or = or i1 %becond, false 349 br i1 %or, label %leave, label %loop 350 351leave: 352 ret void 353} 354