50 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes="loop(indvars),loop-vectorize" -S %s | FileCheck %s3 4target triple = "x86_64-unknown-linux-gnu"5 6; After indvars, the backedge taken count for %loop2 becomes 1, but SCEV7; retains the cached original BTC, as the loop is in dead code. Make sure8; LV does not crash when trying to select an interleave count for a loop with zero cost.9define void @pr54413(ptr %ptr.base) {10; CHECK-LABEL: @pr54413(11; CHECK-NEXT: entry:12; CHECK-NEXT: br label [[LOOP1:%.*]]13; CHECK: loop1:14; CHECK-NEXT: br i1 true, label [[LOOP1_LATCH:%.*]], label [[LOOP2_PREHEADER:%.*]]15; CHECK: loop2.preheader:16; CHECK-NEXT: br label [[LOOP2:%.*]]17; CHECK: loop2:18; CHECK-NEXT: [[PTR_NEXT:%.*]] = getelementptr inbounds i64, ptr [[PTR_BASE:%.*]], i64 119; CHECK-NEXT: br i1 true, label [[LOOP2_EXIT:%.*]], label [[LOOP2]]20; CHECK: loop2.exit:21; CHECK-NEXT: [[PTR_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_NEXT]], [[LOOP2]] ]22; CHECK-NEXT: br label [[LOOP1_LATCH]]23; CHECK: loop1.latch:24; CHECK-NEXT: br label [[LOOP1]]25;26entry:27 br label %loop128 29loop1:30 br i1 true, label %loop1.latch, label %loop2.preheader31 32loop2.preheader:33 br label %loop234 35loop2:36 %iv = phi i64 [ 0, %loop2.preheader ], [ %iv.next, %loop2 ]37 %ptr = phi ptr [ %ptr.base, %loop2.preheader ], [ %ptr.next, %loop2 ]38 %iv.next = add nuw nsw i64 %iv, 139 %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 140 %cmp = icmp eq i64 %iv, 102441 br i1 %cmp, label %loop2.exit, label %loop242 43loop2.exit:44 %ptr.next.lcssa = phi ptr [ %ptr.next, %loop2 ]45 br label %loop1.latch46 47loop1.latch:48 br label %loop149}50