[PATCH] [SLP] Vectorize all-constant entries.
Nadav Rotem
nrotem at apple.com
Fri Jun 19 08:41:37 PDT 2015
LGTM!
> On Jun 18, 2015, at 5:27 PM, Michael Zolotukhin <mzolotukhin at apple.com> wrote:
>
> Hi nadav, aschwaighofer,
>
> Currently SLP gives up when a tree contains a set of constants, and that can be easily fixed.
>
> http://reviews.llvm.org/D10558
>
> Files:
> lib/Transforms/Vectorize/SLPVectorizer.cpp
> test/Transforms/SLPVectorizer/X86/tiny-tree.ll
>
> Index: lib/Transforms/Vectorize/SLPVectorizer.cpp
> ===================================================================
> --- lib/Transforms/Vectorize/SLPVectorizer.cpp
> +++ lib/Transforms/Vectorize/SLPVectorizer.cpp
> @@ -1637,8 +1637,10 @@
> if (VectorizableTree.size() != 2)
> return false;
>
> - // Handle splat stores.
> - if (!VectorizableTree[0].NeedToGather && isSplat(VectorizableTree[1].Scalars))
> + // Handle splat and all-constants stores.
> + if (!VectorizableTree[0].NeedToGather &&
> + (allConstant(VectorizableTree[1].Scalars) ||
> + isSplat(VectorizableTree[1].Scalars)))
> return true;
>
> // Gathering cost would be too much for tiny trees.
> Index: test/Transforms/SLPVectorizer/X86/tiny-tree.ll
> ===================================================================
> --- test/Transforms/SLPVectorizer/X86/tiny-tree.ll
> +++ test/Transforms/SLPVectorizer/X86/tiny-tree.ll
> @@ -153,3 +153,19 @@
> store float %1, float* %6, align 4
> ret void
> }
> +
> +
> +; CHECK-LABEL: store_const
> +; CHECK: store <4 x i32>
> +define void @store_const(i32* %a) {
> +entry:
> + %ptr0 = getelementptr inbounds i32, i32* %a, i64 0
> + store i32 10, i32* %ptr0, align 4
> + %ptr1 = getelementptr inbounds i32, i32* %a, i64 1
> + store i32 30, i32* %ptr1, align 4
> + %ptr2 = getelementptr inbounds i32, i32* %a, i64 2
> + store i32 20, i32* %ptr2, align 4
> + %ptr3 = getelementptr inbounds i32, i32* %a, i64 3
> + store i32 40, i32* %ptr3, align 4
> + ret void
> +}
>
> EMAIL PREFERENCES
> http://reviews.llvm.org/settings/panel/emailpreferences/
> <D10558.27980.patch>
More information about the llvm-commits
mailing list