xref: /llvm-project/llvm/test/Transforms/LoopVectorize/uncountable-single-exit-loops.ll (revision c836b8956d393f98e0d4e136799a33f1bd06e5f5)
1ea14bdb0SFlorian Hahn; REQUIRES: asserts
2*c836b895SDavid Sherwood; RUN: opt -p loop-vectorize -debug-only=loop-vectorize --disable-output -S %s 2>&1 | FileCheck %s
3ea14bdb0SFlorian Hahn
4ea14bdb0SFlorian Hahn
5ea14bdb0SFlorian Hahn; CHECK-LABEL: LV: Checking a loop in 'latch_exit_cannot_compute_btc_due_to_step'
6ea14bdb0SFlorian Hahn; CHECK: 	   LV: Did not find one integer induction var.
7b0697dc1SFlorian Hahn; CHECK-NEXT:  LV: Not vectorizing: Cannot vectorize uncountable loop.
8ea14bdb0SFlorian Hahn; CHECK-NEXT:  LV: Interleaving disabled by the pass manager
9ea14bdb0SFlorian Hahn; CHECK-NEXT:  LV: Not vectorizing: Cannot prove legality.
10ea14bdb0SFlorian Hahn
11ea14bdb0SFlorian Hahn; CHECK-LABEL: LV: Checking a loop in 'header_exit_cannot_compute_btc_due_to_step'
12ea14bdb0SFlorian Hahn; CHECK:       LV: Found an induction variable.
13ea14bdb0SFlorian Hahn; CHECK-NEXT:  LV: Did not find one integer induction var.
14b0697dc1SFlorian Hahn; CHECK-NEXT:  LV: Not vectorizing: Cannot vectorize uncountable loop.
15ea14bdb0SFlorian Hahn; CHECK-NEXT:  LV: Interleaving disabled by the pass manager
16ea14bdb0SFlorian Hahn; CHECK-NEXT:  LV: Not vectorizing: Cannot prove legality.
17ea14bdb0SFlorian Hahn
18ea14bdb0SFlorian Hahn; CHECK-NOT: vector.body
19ea14bdb0SFlorian Hahndefine void @latch_exit_cannot_compute_btc_due_to_step(ptr %dst, i64 %step) {
20ea14bdb0SFlorian Hahnentry:
21ea14bdb0SFlorian Hahn  br label %loop
22ea14bdb0SFlorian Hahn
23ea14bdb0SFlorian Hahnloop:                                   ; preds = %loop, %for.cond.us
24ea14bdb0SFlorian Hahn  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
25ea14bdb0SFlorian Hahn  %iv.next = add i64 %iv, %step
26ea14bdb0SFlorian Hahn  %gep = getelementptr i8, ptr %dst, i64 %iv
27ea14bdb0SFlorian Hahn  store i8 0, ptr %gep, align 1
28ea14bdb0SFlorian Hahn  %ec = icmp eq i64 %iv.next, 1000
29ea14bdb0SFlorian Hahn  br i1 %ec, label %loop, label %exit
30ea14bdb0SFlorian Hahn
31ea14bdb0SFlorian Hahnexit:
32ea14bdb0SFlorian Hahn  ret void
33ea14bdb0SFlorian Hahn}
34ea14bdb0SFlorian Hahn
35ea14bdb0SFlorian Hahndefine void @header_exit_cannot_compute_btc_due_to_step(ptr %dst, i64 %step) {
36ea14bdb0SFlorian Hahnentry:
37ea14bdb0SFlorian Hahn  br label %loop.header
38ea14bdb0SFlorian Hahn
39ea14bdb0SFlorian Hahnloop.header:
40ea14bdb0SFlorian Hahn  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop.latch ]
41ea14bdb0SFlorian Hahn  %iv.next = add i64 %iv, %step
42ea14bdb0SFlorian Hahn  %ec = icmp eq i64 %iv.next, 1000
43ea14bdb0SFlorian Hahn  br i1 %ec, label %loop.latch, label %exit
44ea14bdb0SFlorian Hahn
45ea14bdb0SFlorian Hahnloop.latch:
46ea14bdb0SFlorian Hahn  %gep = getelementptr i8, ptr %dst, i64 %iv
47ea14bdb0SFlorian Hahn  store i8 0, ptr %gep, align 1
48ea14bdb0SFlorian Hahn  br label %loop.header
49ea14bdb0SFlorian Hahn
50ea14bdb0SFlorian Hahnexit:
51ea14bdb0SFlorian Hahn  ret void
52ea14bdb0SFlorian Hahn}
53