[llvm-commits] [llvm] r167101 - in /llvm/trunk: lib/Transforms/Vectorize/LoopVectorize.cpp test/Transforms/LoopVectorize/small-loop.ll
Hal Finkel
hfinkel at anl.gov
Tue Oct 30 21:32:43 PDT 2012
----- Original Message -----
> From: "Nadav Rotem" <nrotem at apple.com>
> To: llvm-commits at cs.uiuc.edu
> Sent: Tuesday, October 30, 2012 10:31:07 PM
> Subject: [llvm-commits] [llvm] r167101 - in /llvm/trunk: lib/Transforms/Vectorize/LoopVectorize.cpp
> test/Transforms/LoopVectorize/small-loop.ll
>
> Author: nadav
> Date: Tue Oct 30 22:31:07 2012
> New Revision: 167101
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167101&view=rev
> Log:
> LoopVectorize: Do not vectorize loops with tiny constant trip counts.
>
> Added:
> llvm/trunk/test/Transforms/LoopVectorize/small-loop.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=167101&r1=167100&r2=167101&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Tue Oct 30
> 22:31:07 2012
> @@ -1145,6 +1145,14 @@
> return false;
> }
>
> + // Do not loop-vectorize loops with a tiny trip count.
> + unsigned TC = SE->getSmallConstantTripCount(TheLoop, BB);
> + if (TC > 0 && TC < 16) {
Please but the cutoff into VTTI so that targets can override.
Thanks again,
Hal
> + DEBUG(dbgs() << "LV: Found a loop with a very small trip count.
> " <<
> + "This loop is not worth vectorizing.\n");
> + return false;
> + }
> +
> DEBUG(dbgs() << "LV: We can vectorize this loop!\n");
>
> // Okay! We can vectorize. At this point we don't have any other
> mem analysis
>
> Added: llvm/trunk/test/Transforms/LoopVectorize/small-loop.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/small-loop.ll?rev=167101&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/LoopVectorize/small-loop.ll (added)
> +++ llvm/trunk/test/Transforms/LoopVectorize/small-loop.ll Tue Oct 30
> 22:31:07 2012
> @@ -0,0 +1,33 @@
> +; RUN: opt < %s -loop-vectorize -force-vector-width=4 -dce
> -instcombine -licm -S | FileCheck %s
> +
> +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
> + at b = common global [2048 x i32] zeroinitializer, align 16
> + at c = common global [2048 x i32] zeroinitializer, align 16
> +
> +;CHECK: @example1
> +;CHECK-NOT: load <4 x i32>
> +;CHECK: ret void
> +define void @example1() nounwind uwtable ssp {
> + br label %1
> +
> +; <label>:1 ; preds = %1, %0
> + %indvars.iv = phi i64 [ 0, %0 ], [ %indvars.iv.next, %1 ]
> + %2 = getelementptr inbounds [2048 x i32]* @b, i64 0, i64
> %indvars.iv
> + %3 = load i32* %2, align 4
> + %4 = getelementptr inbounds [2048 x i32]* @c, i64 0, i64
> %indvars.iv
> + %5 = load i32* %4, align 4
> + %6 = add nsw i32 %5, %3
> + %7 = getelementptr inbounds [2048 x i32]* @a, i64 0, i64
> %indvars.iv
> + store i32 %6, i32* %7, 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, 8 ; <----- A really
> small trip count.
> + br i1 %exitcond, label %8, label %1
> +
> +; <label>:8 ; preds = %1
> + ret void
> +}
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list