1ecb4171dSFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 27e626d7aSSimon Pilgrim; RUN: opt -passes="loop(indvars),loop-vectorize" -S %s | FileCheck %s 3ecb4171dSFlorian Hahn 4ecb4171dSFlorian Hahntarget triple = "x86_64-unknown-linux-gnu" 5ecb4171dSFlorian Hahn 6ecb4171dSFlorian Hahn; After indvars, the backedge taken count for %loop2 becomes 1, but SCEV 7ecb4171dSFlorian Hahn; retains the cached original BTC, as the loop is in dead code. Make sure 8ecb4171dSFlorian Hahn; LV does not crash when trying to select an interleave count for a loop with zero cost. 9*7d757725SNikita Popovdefine void @pr54413(ptr %ptr.base) { 10ecb4171dSFlorian Hahn; CHECK-LABEL: @pr54413( 11ecb4171dSFlorian Hahn; CHECK-NEXT: entry: 12ecb4171dSFlorian Hahn; CHECK-NEXT: br label [[LOOP1:%.*]] 13ecb4171dSFlorian Hahn; CHECK: loop1: 14ecb4171dSFlorian Hahn; CHECK-NEXT: br i1 true, label [[LOOP1_LATCH:%.*]], label [[LOOP2_PREHEADER:%.*]] 15ecb4171dSFlorian Hahn; CHECK: loop2.preheader: 16ecb4171dSFlorian Hahn; CHECK-NEXT: br label [[LOOP2:%.*]] 17ecb4171dSFlorian Hahn; CHECK: loop2: 18*7d757725SNikita Popov; CHECK-NEXT: [[PTR_NEXT:%.*]] = getelementptr inbounds i64, ptr [[PTR_BASE:%.*]], i64 1 19ecb4171dSFlorian Hahn; CHECK-NEXT: br i1 true, label [[LOOP2_EXIT:%.*]], label [[LOOP2]] 20ecb4171dSFlorian Hahn; CHECK: loop2.exit: 21*7d757725SNikita Popov; CHECK-NEXT: [[PTR_NEXT_LCSSA:%.*]] = phi ptr [ [[PTR_NEXT]], [[LOOP2]] ] 22ecb4171dSFlorian Hahn; CHECK-NEXT: br label [[LOOP1_LATCH]] 23ecb4171dSFlorian Hahn; CHECK: loop1.latch: 24ecb4171dSFlorian Hahn; CHECK-NEXT: br label [[LOOP1]] 25ecb4171dSFlorian Hahn; 26ecb4171dSFlorian Hahnentry: 27ecb4171dSFlorian Hahn br label %loop1 28ecb4171dSFlorian Hahn 29ecb4171dSFlorian Hahnloop1: 30ecb4171dSFlorian Hahn br i1 true, label %loop1.latch, label %loop2.preheader 31ecb4171dSFlorian Hahn 32ecb4171dSFlorian Hahnloop2.preheader: 33ecb4171dSFlorian Hahn br label %loop2 34ecb4171dSFlorian Hahn 35ecb4171dSFlorian Hahnloop2: 36ecb4171dSFlorian Hahn %iv = phi i64 [ 0, %loop2.preheader ], [ %iv.next, %loop2 ] 37*7d757725SNikita Popov %ptr = phi ptr [ %ptr.base, %loop2.preheader ], [ %ptr.next, %loop2 ] 38ecb4171dSFlorian Hahn %iv.next = add nuw nsw i64 %iv, 1 39*7d757725SNikita Popov %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1 40ecb4171dSFlorian Hahn %cmp = icmp eq i64 %iv, 1024 41ecb4171dSFlorian Hahn br i1 %cmp, label %loop2.exit, label %loop2 42ecb4171dSFlorian Hahn 43ecb4171dSFlorian Hahnloop2.exit: 44*7d757725SNikita Popov %ptr.next.lcssa = phi ptr [ %ptr.next, %loop2 ] 45ecb4171dSFlorian Hahn br label %loop1.latch 46ecb4171dSFlorian Hahn 47ecb4171dSFlorian Hahnloop1.latch: 48ecb4171dSFlorian Hahn br label %loop1 49ecb4171dSFlorian Hahn} 50