1*e4cfa899SFlorian Hahn; RUN: opt < %s -loop-vectorize -debug-only=loop-vectorize -S -disable-output 2>&1 | FileCheck %s 2*e4cfa899SFlorian Hahn; REQUIRES: asserts 3*e4cfa899SFlorian Hahn 4*e4cfa899SFlorian Hahn; Make sure LV legal bails out when the exiting block != loop latch. 5*e4cfa899SFlorian Hahn; CHECK-LABEL: "latch_is_not_exiting" 6*e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: The exiting block is not the loop latch. 7*e4cfa899SFlorian Hahndefine i32 @latch_is_not_exiting() { 8*e4cfa899SFlorian Hahnentry: 9*e4cfa899SFlorian Hahn br label %for.body 10*e4cfa899SFlorian Hahn 11*e4cfa899SFlorian Hahnfor.body: 12*e4cfa899SFlorian Hahn %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ], [%inc, %for.second] 13*e4cfa899SFlorian Hahn %inc = add nsw i32 %i.02, 1 14*e4cfa899SFlorian Hahn %cmp = icmp slt i32 %inc, 16 15*e4cfa899SFlorian Hahn br i1 %cmp, label %for.body, label %for.second 16*e4cfa899SFlorian Hahn 17*e4cfa899SFlorian Hahnfor.second: 18*e4cfa899SFlorian Hahn %cmps = icmp sgt i32 %inc, 16 19*e4cfa899SFlorian Hahn br i1 %cmps, label %for.body, label %for.end 20*e4cfa899SFlorian Hahn 21*e4cfa899SFlorian Hahnfor.end: 22*e4cfa899SFlorian Hahn ret i32 0 23*e4cfa899SFlorian Hahn} 24*e4cfa899SFlorian Hahn 25*e4cfa899SFlorian Hahn; Make sure LV legal bails out when there is no exiting block 26*e4cfa899SFlorian Hahn; CHECK-LABEL: "no_exiting_block" 27*e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: The loop must have an exiting block. 28*e4cfa899SFlorian Hahndefine i32 @no_exiting_block() { 29*e4cfa899SFlorian Hahnentry: 30*e4cfa899SFlorian Hahn br label %for.body 31*e4cfa899SFlorian Hahn 32*e4cfa899SFlorian Hahnfor.body: 33*e4cfa899SFlorian Hahn %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ], [%inc, %for.second] 34*e4cfa899SFlorian Hahn %inc = add nsw i32 %i.02, 1 35*e4cfa899SFlorian Hahn %cmp = icmp slt i32 %inc, 16 36*e4cfa899SFlorian Hahn br i1 %cmp, label %for.body, label %for.second 37*e4cfa899SFlorian Hahn 38*e4cfa899SFlorian Hahnfor.second: 39*e4cfa899SFlorian Hahn br label %for.body 40*e4cfa899SFlorian Hahn} 41*e4cfa899SFlorian Hahn 42*e4cfa899SFlorian Hahn; Make sure LV legal bails out when there is a non-int, non-ptr phi 43*e4cfa899SFlorian Hahn; CHECK-LABEL: "invalid_phi_types" 44*e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: Found a non-int non-pointer PHI. 45*e4cfa899SFlorian Hahndefine i32 @invalid_phi_types() { 46*e4cfa899SFlorian Hahnentry: 47*e4cfa899SFlorian Hahn br label %for.body 48*e4cfa899SFlorian Hahn 49*e4cfa899SFlorian Hahnfor.body: 50*e4cfa899SFlorian Hahn %i.02 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 51*e4cfa899SFlorian Hahn %vec.sum.02 = phi <2 x i32> [ zeroinitializer, %entry ], [ <i32 8, i32 8>, %for.body ] 52*e4cfa899SFlorian Hahn %inc = add nsw i32 %i.02, 1 53*e4cfa899SFlorian Hahn %cmp = icmp slt i32 %inc, 16 54*e4cfa899SFlorian Hahn br i1 %cmp, label %for.body, label %for.end 55*e4cfa899SFlorian Hahn 56*e4cfa899SFlorian Hahnfor.end: 57*e4cfa899SFlorian Hahn ret i32 0 58*e4cfa899SFlorian Hahn} 59*e4cfa899SFlorian Hahn 60*e4cfa899SFlorian Hahn; D40973 61*e4cfa899SFlorian Hahn; Make sure LV legal bails out when the loop doesn't have a legal pre-header. 62*e4cfa899SFlorian Hahn; CHECK-LABEL: "inc" 63*e4cfa899SFlorian Hahn; CHECK: LV: Not vectorizing: Loop doesn't have a legal pre-header. 64*e4cfa899SFlorian Hahndefine void @inc(i32 %n, i8* %P) { 65*e4cfa899SFlorian Hahn %1 = icmp sgt i32 %n, 0 66*e4cfa899SFlorian Hahn br i1 %1, label %BB1, label %BB2 67*e4cfa899SFlorian Hahn 68*e4cfa899SFlorian HahnBB1: 69*e4cfa899SFlorian Hahn indirectbr i8* %P, [label %.lr.ph] 70*e4cfa899SFlorian Hahn 71*e4cfa899SFlorian HahnBB2: 72*e4cfa899SFlorian Hahn br label %.lr.ph 73*e4cfa899SFlorian Hahn 74*e4cfa899SFlorian Hahn.lr.ph: 75*e4cfa899SFlorian Hahn %indvars.iv = phi i32 [ %indvars.iv.next, %.lr.ph ], [ 0, %BB1 ], [ 0, %BB2 ] 76*e4cfa899SFlorian Hahn %indvars.iv.next = add i32 %indvars.iv, 1 77*e4cfa899SFlorian Hahn %exitcond = icmp eq i32 %indvars.iv.next, %n 78*e4cfa899SFlorian Hahn br i1 %exitcond, label %._crit_edge, label %.lr.ph 79*e4cfa899SFlorian Hahn 80*e4cfa899SFlorian Hahn._crit_edge: 81*e4cfa899SFlorian Hahn ret void 82*e4cfa899SFlorian Hahn} 83