Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / X86 / pr54413-select-interleave-count-loop-with-cost-zero.ll
blobecab2e6bf4aec599bf729c9cca3031af979a206e
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes="loop(indvars),loop-vectorize" -S %s | FileCheck %s
4 target triple = "x86_64-unknown-linux-gnu"
6 ; After indvars, the backedge taken count for %loop2 becomes 1, but SCEV
7 ; retains the cached original BTC, as the loop is in dead code. Make sure
8 ; LV does not crash when trying to select an interleave count for a loop with zero cost.
9 define 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 1
19 ; 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]]
26 entry:
27   br label %loop1
29 loop1:
30   br i1 true, label %loop1.latch, label %loop2.preheader
32 loop2.preheader:
33   br label %loop2
35 loop2:
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, 1
39   %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1
40   %cmp = icmp eq i64 %iv, 1024
41   br i1 %cmp, label %loop2.exit, label %loop2
43 loop2.exit:
44   %ptr.next.lcssa = phi ptr [ %ptr.next, %loop2 ]
45   br label %loop1.latch
47 loop1.latch:
48   br label %loop1