[llvm] r179475 - SLPVectorizer: Add support for trees that don't start at binary operators, and add the cost of extracting values from the roots of the tree.

Eric Christopher echristo at gmail.com
Sat Apr 13 22:25:47 PDT 2013


Hi Nadav,

A few comments:

a) comments, you should have some. :)

> --- llvm/trunk/test/Transforms/SLPVectorizer/X86/reduction2.ll (added)
> +++ llvm/trunk/test/Transforms/SLPVectorizer/X86/reduction2.ll Sun Apr 14 00:15:53 2013
> @@ -0,0 +1,37 @@
> +; RUN: opt < %s -basicaa -slp-vectorizer -dce -S -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s
> +
> +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32-S128"
> +target triple = "i386-apple-macosx10.8.0"

Pretty sure you don't need the triple or data layout if you're just
overriding it anyhow.

> +
> +;CHECK: @foo
> +;CHECK: load <2 x double>
> +;CHECK: ret
> +define double @foo(double* nocapture %D) #0 {
> +  br label %1
> +
> +; <label>:1                                       ; preds = %1, %0
> +  %i.02 = phi i32 [ 0, %0 ], [ %10, %1 ]
> +  %sum.01 = phi double [ 0.000000e+00, %0 ], [ %9, %1 ]
> +  %2 = shl nsw i32 %i.02, 1
> +  %3 = getelementptr inbounds double* %D, i32 %2
> +  %4 = load double* %3, align 4, !tbaa !0
> +  %A4 = fmul double %4, %4
> +  %5 = or i32 %2, 1
> +  %6 = getelementptr inbounds double* %D, i32 %5
> +  %7 = load double* %6, align 4, !tbaa !0
> +  %A7 = fmul double %7, %7
> +  %8 = fadd double %A4, %A7
> +  %9 = fadd double %sum.01, %8
> +  %10 = add nsw i32 %i.02, 1
> +  %exitcond = icmp eq i32 %10, 100
> +  br i1 %exitcond, label %11, label %1
> +
> +; <label>:11                                      ; preds = %1
> +  ret double %9
> +}
> +
> +attributes #0 = { nounwind readonly ssp "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
> +

Are all of these attributes needed for the testcase? I'm pretty sure
not, and if you could remove the ones that you don't need and document
the ones that you do?

> +!0 = metadata !{metadata !"double", metadata !1}
> +!1 = metadata !{metadata !"omnipotent char", metadata !2}
> +!2 = metadata !{metadata !"Simple C/C++ TBAA"}
>

Is TBAA needed for this testcase?

Thanks!

-eric



More information about the llvm-commits mailing list