1cee313d2SEric Christopher; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S | FileCheck %s 2cee313d2SEric Christopher 3cee313d2SEric Christophertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 4cee313d2SEric Christopher;CHECK-LABEL: @foo( 5cee313d2SEric Christopher;CHECK: fadd fast <4 x float> 6cee313d2SEric Christopher;CHECK: ret 7cee313d2SEric Christopherdefine float @foo(float* nocapture %A, i32* nocapture %n) nounwind uwtable readonly ssp { 8cee313d2SEric Christopherentry: 9cee313d2SEric Christopher br label %for.body 10cee313d2SEric Christopher 11cee313d2SEric Christopherfor.body: ; preds = %for.body, %entry 12cee313d2SEric Christopher %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 13cee313d2SEric Christopher %sum.04 = phi float [ 0.000000e+00, %entry ], [ %add, %for.body ] 14cee313d2SEric Christopher %arrayidx = getelementptr inbounds float, float* %A, i64 %indvars.iv 15cee313d2SEric Christopher %0 = load float, float* %arrayidx, align 4 16cee313d2SEric Christopher %add = fadd fast float %sum.04, %0 17cee313d2SEric Christopher %indvars.iv.next = add i64 %indvars.iv, 1 18cee313d2SEric Christopher %lftr.wideiv = trunc i64 %indvars.iv.next to i32 19cee313d2SEric Christopher %exitcond = icmp eq i32 %lftr.wideiv, 200 20cee313d2SEric Christopher br i1 %exitcond, label %for.end, label %for.body 21cee313d2SEric Christopher 22cee313d2SEric Christopherfor.end: ; preds = %for.body 23cee313d2SEric Christopher ret float %add 24cee313d2SEric Christopher} 25cee313d2SEric Christopher 26cee313d2SEric Christopher;CHECK-LABEL: @foosub( 27cee313d2SEric Christopher;CHECK: fsub fast <4 x float> 28cee313d2SEric Christopher;CHECK: ret 29cee313d2SEric Christopherdefine float @foosub(float* nocapture %A, i32* nocapture %n) nounwind uwtable readonly ssp { 30cee313d2SEric Christopherentry: 31cee313d2SEric Christopher br label %for.body 32cee313d2SEric Christopher 33cee313d2SEric Christopherfor.body: ; preds = %for.body, %entry 34cee313d2SEric Christopher %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 35cee313d2SEric Christopher %sum.04 = phi float [ 0.000000e+00, %entry ], [ %sub, %for.body ] 36cee313d2SEric Christopher %arrayidx = getelementptr inbounds float, float* %A, i64 %indvars.iv 37cee313d2SEric Christopher %0 = load float, float* %arrayidx, align 4 38cee313d2SEric Christopher %sub = fsub fast float %sum.04, %0 39cee313d2SEric Christopher %indvars.iv.next = add i64 %indvars.iv, 1 40cee313d2SEric Christopher %lftr.wideiv = trunc i64 %indvars.iv.next to i32 41cee313d2SEric Christopher %exitcond = icmp eq i32 %lftr.wideiv, 200 42cee313d2SEric Christopher br i1 %exitcond, label %for.end, label %for.body 43cee313d2SEric Christopher 44cee313d2SEric Christopherfor.end: ; preds = %for.body 45cee313d2SEric Christopher ret float %sub 46cee313d2SEric Christopher} 47*4bc88a0eSYichao Yu 48*4bc88a0eSYichao Yu;CHECK-LABEL: @foodiv( 49*4bc88a0eSYichao Yu;CHECK: fdiv fast <4 x float> 50*4bc88a0eSYichao Yu;CHECK: ret 51*4bc88a0eSYichao Yudefine float @foodiv(float* nocapture %A, i32* nocapture %n) nounwind uwtable readonly ssp { 52*4bc88a0eSYichao Yuentry: 53*4bc88a0eSYichao Yu br label %for.body 54*4bc88a0eSYichao Yu 55*4bc88a0eSYichao Yufor.body: ; preds = %for.body, %entry 56*4bc88a0eSYichao Yu %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 57*4bc88a0eSYichao Yu %sum.04 = phi float [ 1.000000e+00, %entry ], [ %sub, %for.body ] 58*4bc88a0eSYichao Yu %arrayidx = getelementptr inbounds float, float* %A, i64 %indvars.iv 59*4bc88a0eSYichao Yu %0 = load float, float* %arrayidx, align 4 60*4bc88a0eSYichao Yu %sub = fdiv fast float %sum.04, %0 61*4bc88a0eSYichao Yu %indvars.iv.next = add i64 %indvars.iv, 1 62*4bc88a0eSYichao Yu %lftr.wideiv = trunc i64 %indvars.iv.next to i32 63*4bc88a0eSYichao Yu %exitcond = icmp eq i32 %lftr.wideiv, 200 64*4bc88a0eSYichao Yu br i1 %exitcond, label %for.end, label %for.body 65*4bc88a0eSYichao Yu 66*4bc88a0eSYichao Yufor.end: ; preds = %for.body 67*4bc88a0eSYichao Yu ret float %sub 68*4bc88a0eSYichao Yu} 69*4bc88a0eSYichao Yu 70*4bc88a0eSYichao Yu;CHECK-LABEL: @foonodiv( 71*4bc88a0eSYichao Yu;CHECK-NOT: fdiv fast <4 x float> 72*4bc88a0eSYichao Yu;CHECK: ret 73*4bc88a0eSYichao Yudefine float @foonodiv(float* nocapture %A, i32* nocapture %n) nounwind uwtable readonly ssp { 74*4bc88a0eSYichao Yuentry: 75*4bc88a0eSYichao Yu br label %for.body 76*4bc88a0eSYichao Yu 77*4bc88a0eSYichao Yufor.body: ; preds = %for.body, %entry 78*4bc88a0eSYichao Yu %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ] 79*4bc88a0eSYichao Yu %sum.04 = phi float [ 1.000000e+00, %entry ], [ %sub, %for.body ] 80*4bc88a0eSYichao Yu %arrayidx = getelementptr inbounds float, float* %A, i64 %indvars.iv 81*4bc88a0eSYichao Yu %0 = load float, float* %arrayidx, align 4 82*4bc88a0eSYichao Yu %sub = fdiv fast float %0, %sum.04 83*4bc88a0eSYichao Yu %indvars.iv.next = add i64 %indvars.iv, 1 84*4bc88a0eSYichao Yu %lftr.wideiv = trunc i64 %indvars.iv.next to i32 85*4bc88a0eSYichao Yu %exitcond = icmp eq i32 %lftr.wideiv, 200 86*4bc88a0eSYichao Yu br i1 %exitcond, label %for.end, label %for.body 87*4bc88a0eSYichao Yu 88*4bc88a0eSYichao Yufor.end: ; preds = %for.body 89*4bc88a0eSYichao Yu ret float %sub 90*4bc88a0eSYichao Yu} 91