1e4cfa899SFlorian Hahn; RUN: opt < %s -loop-vectorize -debug-only=loop-vectorize -S -disable-output 2>&1 | FileCheck %s
2e4cfa899SFlorian Hahn; REQUIRES: asserts
3e4cfa899SFlorian Hahn
4e4cfa899SFlorian Hahn; Make sure LV legal bails out when there is a non-int, non-ptr phi
5*2f80ea7fSRoman Lebedev; CHECK-LABEL: 'invalid_phi_types'
6e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: Found a non-int non-pointer PHI.
7e4cfa899SFlorian Hahndefine i32 @invalid_phi_types() {
8e4cfa899SFlorian Hahnentry:
9e4cfa899SFlorian Hahn  br label %for.body
10e4cfa899SFlorian Hahn
11e4cfa899SFlorian Hahnfor.body:
12e4cfa899SFlorian Hahn  %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
13e4cfa899SFlorian Hahn  %vec.sum.02 = phi <2 x i32> [ zeroinitializer, %entry ], [ <i32 8, i32 8>, %for.body ]
14e4cfa899SFlorian Hahn  %inc = add nsw i32 %i.02, 1
15e4cfa899SFlorian Hahn  %cmp = icmp slt i32 %inc, 16
16e4cfa899SFlorian Hahn  br i1 %cmp, label %for.body, label %for.end
17e4cfa899SFlorian Hahn
18e4cfa899SFlorian Hahnfor.end:
19e4cfa899SFlorian Hahn  ret i32 0
20e4cfa899SFlorian Hahn}
21e4cfa899SFlorian Hahn
22e4cfa899SFlorian Hahn; D40973
23e4cfa899SFlorian Hahn; Make sure LV legal bails out when the loop doesn't have a legal pre-header.
24*2f80ea7fSRoman Lebedev; CHECK-LABEL: 'inc'
25e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: Loop doesn't have a legal pre-header.
26e4cfa899SFlorian Hahndefine void @inc(i32 %n, i8* %P) {
27e4cfa899SFlorian Hahn  %1 = icmp sgt i32 %n, 0
28e4cfa899SFlorian Hahn  br i1 %1, label %BB1, label %BB2
29e4cfa899SFlorian Hahn
30e4cfa899SFlorian HahnBB1:
31e4cfa899SFlorian Hahn  indirectbr i8* %P, [label %.lr.ph]
32e4cfa899SFlorian Hahn
33e4cfa899SFlorian HahnBB2:
34e4cfa899SFlorian Hahn  br label %.lr.ph
35e4cfa899SFlorian Hahn
36e4cfa899SFlorian Hahn.lr.ph:
37e4cfa899SFlorian Hahn  %indvars.iv = phi i32 [ %indvars.iv.next, %.lr.ph ], [ 0, %BB1 ], [ 0, %BB2 ]
38e4cfa899SFlorian Hahn  %indvars.iv.next = add i32 %indvars.iv, 1
39e4cfa899SFlorian Hahn  %exitcond = icmp eq i32 %indvars.iv.next, %n
40e4cfa899SFlorian Hahn  br i1 %exitcond, label %._crit_edge, label %.lr.ph
41e4cfa899SFlorian Hahn
42e4cfa899SFlorian Hahn._crit_edge:
43e4cfa899SFlorian Hahn  ret void
44e4cfa899SFlorian Hahn}
45