[llvm-commits] [llvm] r171429 - in /llvm/trunk: lib/Transforms/Vectorize/LoopVectorize.cpp test/Transforms/LoopVectorize/nofloat.ll

Duncan Sands baldrick at free.fr
Thu Jan 3 00:32:26 PST 2013


Hi Nadav,

On 03/01/13 00:54, Nadav Rotem wrote:
> Author: nadav
> Date: Wed Jan  2 17:54:43 2013
> New Revision: 171429
>
> URL: http://llvm.org/viewvc/llvm-project?rev=171429&view=rev
> Log:
> Avoid vectorization when the function has the "noimplicitflot" attribute.

if the target has dedicated integer vector registers, then by doing
vectorization you are not necessarily introducing floating point
operations.  I.e. this seems target specific to me.

Ciao, Duncan.

>
> Added:
>      llvm/trunk/test/Transforms/LoopVectorize/nofloat.ll
> Modified:
>      llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
>
> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=171429&r1=171428&r2=171429&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Wed Jan  2 17:54:43 2013
> @@ -94,9 +94,17 @@
>       // Check the function attribues to find out if this function should be
>       // optimized for size.
>       Function *F = L->getHeader()->getParent();
> -    Attribute::AttrKind SzAttr= Attribute::OptimizeForSize;
> -    bool OptForSize =
> -      F->getAttributes().hasAttribute(AttributeSet::FunctionIndex, SzAttr);
> +    Attribute::AttrKind SzAttr = Attribute::OptimizeForSize;
> +    Attribute::AttrKind FlAttr = Attribute::NoImplicitFloat;
> +    unsigned FnIndex = AttributeSet::FunctionIndex;
> +    bool OptForSize = F->getAttributes().hasAttribute(FnIndex, SzAttr);
> +    bool NoFloat = F->getAttributes().hasAttribute(FnIndex, FlAttr);
> +
> +    if (NoFloat) {
> +      DEBUG(dbgs() << "LV: Can't vectorize when the NoImplicitFloat"
> +            "attribute is used.\n");
> +      return false;
> +    }
>
>       unsigned VF = CM.selectVectorizationFactor(OptForSize, VectorizationFactor);
>
>
> Added: llvm/trunk/test/Transforms/LoopVectorize/nofloat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/nofloat.ll?rev=171429&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/LoopVectorize/nofloat.ll (added)
> +++ llvm/trunk/test/Transforms/LoopVectorize/nofloat.ll Wed Jan  2 17:54:43 2013
> @@ -0,0 +1,29 @@
> +; RUN: opt < %s  -loop-vectorize -force-vector-width=4 -dce -instcombine -licm -S | FileCheck %s
> +
> +; Make sure that we don't vectorize functions with 'noimplicitfloat' attributes.
> +
> +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"
> +
> + at a = common global [2048 x i32] zeroinitializer, align 16
> +
> +;CHECK: @example12
> +;CHECK-NOT: store <4 x i32>
> +;CHECK: ret void
> +define void @example12() noimplicitfloat { ;           <--------- "noimplicitfloat" attribute here!
> +  br label %1
> +
> +; <label>:1                                       ; preds = %1, %0
> +  %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ]
> +  %2 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64 %indvars.iv
> +  %3 = trunc i64 %indvars.iv to i32
> +  store i32 %3, i32* %2, align 4
> +  %indvars.iv.next = add i64 %indvars.iv, 1
> +  %lftr.wideiv = trunc i64 %indvars.iv.next to i32
> +  %exitcond = icmp eq i32 %lftr.wideiv, 1024
> +  br i1 %exitcond, label %4, label %1
> +
> +; <label>:4                                       ; preds = %1
> +  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