[llvm] r204884 - [X86][Vectorizer Cost Model] Correct vectorization cost model for v2i64->v2f64

Adam Nemet anemet at apple.com
Thu Mar 27 08:52:21 PDT 2014


On Mar 26, 2014, at 5:52 PM, Quentin Colombet <qcolombet at apple.com> wrote:

> Author: qcolombet
> Date: Wed Mar 26 19:52:16 2014
> New Revision: 204884
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=204884&view=rev
> Log:
> [X86][Vectorizer Cost Model] Correct vectorization cost model for v2i64->v2f64
> and v4i64->v4f64.
> 
> The new costs match what we did for SSE2 and reflect the reality of our codegen.
> 
> <rdar://problem/16381225>
> 
> Added:
>    llvm/trunk/test/Transforms/LoopVectorize/X86/uint64_to_fp64-cost-model.ll
> Modified:
>    llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
> 
> Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=204884&r1=204883&r2=204884&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp Wed Mar 26 19:52:16 2014
> @@ -512,6 +512,8 @@ unsigned X86TTI::getCastInstrCost(unsign
>     { ISD::UINT_TO_FP,  MVT::v4f64, MVT::v4i8,  2 },
>     { ISD::UINT_TO_FP,  MVT::v4f64, MVT::v4i16, 2 },
>     { ISD::UINT_TO_FP,  MVT::v4f64, MVT::v4i32, 6 },
> +    { ISD::UINT_TO_FP,  MVT::v2f64, MVT::v2i64, 2*10 },
> +    { ISD::UINT_TO_FP,  MVT::v4f64, MVT::v4i64, 4*10 },

I think that a comment would be in order here.  If this node is codegen’ed as Expand rather than by the backend then for example why doesn’t the generic cost estimate (BasicTTI) give the right result?

Adam

> 
>     { ISD::FP_TO_SINT,  MVT::v8i8,  MVT::v8f32, 7 },
>     { ISD::FP_TO_SINT,  MVT::v4i8,  MVT::v4f32, 1 },
> 
> Added: llvm/trunk/test/Transforms/LoopVectorize/X86/uint64_to_fp64-cost-model.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/X86/uint64_to_fp64-cost-model.ll?rev=204884&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/LoopVectorize/X86/uint64_to_fp64-cost-model.ll (added)
> +++ llvm/trunk/test/Transforms/LoopVectorize/X86/uint64_to_fp64-cost-model.ll Wed Mar 26 19:52:16 2014
> @@ -0,0 +1,26 @@
> +; RUN: opt < %s  -loop-vectorize -mtriple=x86_64-apple-macosx10.8.0 -mcpu=corei7-avx -S -debug-only=loop-vectorize 2>&1 | FileCheck %s
> +; REQUIRES: asserts
> +
> +target 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"
> +target triple = "x86_64-apple-macosx10.8.0"
> +
> +
> +; CHECK: cost of 20 for VF 2 For instruction:   %conv = uitofp i64 %tmp to double
> +; CHECK: cost of 40 for VF 4 For instruction:   %conv = uitofp i64 %tmp to double
> +define void @uint64_to_double_cost(i64* noalias nocapture %a, double* noalias nocapture readonly %b) nounwind {
> +entry:
> +  br label %for.body
> +for.body:
> +  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
> +  %arrayidx = getelementptr inbounds i64* %a, i64 %indvars.iv
> +  %tmp = load i64* %arrayidx, align 4
> +  %conv = uitofp i64 %tmp to double
> +  %arrayidx2 = getelementptr inbounds double* %b, i64 %indvars.iv
> +  store double %conv, double* %arrayidx2, align 4
> +  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
> +  %exitcond = icmp eq i64 %indvars.iv.next, 256
> +  br i1 %exitcond, label %for.end, label %for.body
> +
> +for.end:
> +  ret void
> +}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list