brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 5b0a7fa Raw
89 lines · plain
1; RUN: opt -passes=loop-vectorize -mtriple=thumbv7s-apple-ios6.0.0 -S -enable-interleaved-mem-accesses=false < %s | FileCheck %s2 3target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"4 5@kernel = global [512 x float] zeroinitializer, align 46@kernel2 = global [512 x float] zeroinitializer, align 47@kernel3 = global [512 x float] zeroinitializer, align 48@kernel4 = global [512 x float] zeroinitializer, align 49@src_data = global [1536 x float] zeroinitializer, align 410@r_ = global i8 0, align 411@g_ = global i8 0, align 412@b_ = global i8 0, align 413 14; We don't want to vectorize most loops containing gathers because they are15; expensive. This function represents a point where vectorization starts to16; become beneficial.17; Make sure we are conservative and don't vectorize it.18; CHECK-NOT: <2 x float>19; CHECK-NOT: <4 x float>20 21define void @_Z4testmm(i32 %size, i32 %offset) {22entry:23  %cmp53 = icmp eq i32 %size, 024  br i1 %cmp53, label %for.end, label %for.body.lr.ph25 26for.body.lr.ph:27  br label %for.body28 29for.body:30  %r.057 = phi float [ 0.000000e+00, %for.body.lr.ph ], [ %add10, %for.body ]31  %g.056 = phi float [ 0.000000e+00, %for.body.lr.ph ], [ %add20, %for.body ]32  %v.055 = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]33  %b.054 = phi float [ 0.000000e+00, %for.body.lr.ph ], [ %add30, %for.body ]34  %add = add i32 %v.055, %offset35  %mul = mul i32 %add, 336  %arrayidx = getelementptr inbounds [1536 x float], ptr @src_data, i32 0, i32 %mul37  %0 = load float, ptr %arrayidx, align 438  %arrayidx2 = getelementptr inbounds [512 x float], ptr @kernel, i32 0, i32 %v.05539  %1 = load float, ptr %arrayidx2, align 440  %mul3 = fmul fast float %0, %141  %arrayidx4 = getelementptr inbounds [512 x float], ptr @kernel2, i32 0, i32 %v.05542  %2 = load float, ptr %arrayidx4, align 443  %mul5 = fmul fast float %mul3, %244  %arrayidx6 = getelementptr inbounds [512 x float], ptr @kernel3, i32 0, i32 %v.05545  %3 = load float, ptr %arrayidx6, align 446  %mul7 = fmul fast float %mul5, %347  %arrayidx8 = getelementptr inbounds [512 x float], ptr @kernel4, i32 0, i32 %v.05548  %4 = load float, ptr %arrayidx8, align 449  %mul9 = fmul fast float %mul7, %450  %add10 = fadd fast float %r.057, %mul951  %arrayidx.sum = add i32 %mul, 152  %arrayidx11 = getelementptr inbounds [1536 x float], ptr @src_data, i32 0, i32 %arrayidx.sum53  %5 = load float, ptr %arrayidx11, align 454  %mul13 = fmul fast float %1, %555  %mul15 = fmul fast float %2, %mul1356  %mul17 = fmul fast float %3, %mul1557  %mul19 = fmul fast float %4, %mul1758  %add20 = fadd fast float %g.056, %mul1959  %arrayidx.sum52 = add i32 %mul, 260  %arrayidx21 = getelementptr inbounds [1536 x float], ptr @src_data, i32 0, i32 %arrayidx.sum5261  %6 = load float, ptr %arrayidx21, align 462  %mul23 = fmul fast float %1, %663  %mul25 = fmul fast float %2, %mul2364  %mul27 = fmul fast float %3, %mul2565  %mul29 = fmul fast float %4, %mul2766  %add30 = fadd fast float %b.054, %mul2967  %inc = add i32 %v.055, 168  %exitcond = icmp ne i32 %inc, %size69  br i1 %exitcond, label %for.body, label %for.cond.for.end_crit_edge70 71for.cond.for.end_crit_edge:72  %add30.lcssa = phi float [ %add30, %for.body ]73  %add20.lcssa = phi float [ %add20, %for.body ]74  %add10.lcssa = phi float [ %add10, %for.body ]75  %phitmp = fptoui float %add10.lcssa to i876  %phitmp60 = fptoui float %add20.lcssa to i877  %phitmp61 = fptoui float %add30.lcssa to i878  br label %for.end79 80for.end:81  %r.0.lcssa = phi i8 [ %phitmp, %for.cond.for.end_crit_edge ], [ 0, %entry ]82  %g.0.lcssa = phi i8 [ %phitmp60, %for.cond.for.end_crit_edge ], [ 0, %entry ]83  %b.0.lcssa = phi i8 [ %phitmp61, %for.cond.for.end_crit_edge ], [ 0, %entry ]84  store i8 %r.0.lcssa, ptr @r_, align 485  store i8 %g.0.lcssa, ptr @g_, align 486  store i8 %b.0.lcssa, ptr @b_, align 487  ret void88}89