summaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorArnold Schwaighofer <aschwaighofer@apple.com>2014-02-24 19:52:29 +0000
committerArnold Schwaighofer <aschwaighofer@apple.com>2014-02-24 19:52:29 +0000
commit68085c7bef7546da3eea848093c89f82aa3c2594 (patch)
treecc21a1cf3f53f2f8105c1f58f5882c26f7bcd5e1 /lib/Transforms
parentb55c398992cf39855ab0cedcef3eb7439abe524e (diff)
downloadllvm-68085c7bef7546da3eea848093c89f82aa3c2594.tar.gz
llvm-68085c7bef7546da3eea848093c89f82aa3c2594.tar.bz2
llvm-68085c7bef7546da3eea848093c89f82aa3c2594.tar.xz
SLPVectorizer: Try vectorizing 'splat' stores
Vectorize sequential stores of a broadcasted value. 5% on eon. radar://16124699 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202067 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/Vectorize/SLPVectorizer.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Transforms/Vectorize/SLPVectorizer.cpp b/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 360652f3dc..8e3ec815e8 100644
--- a/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -1101,11 +1101,15 @@ bool BoUpSLP::isFullyVectorizableTinyTree() {
if (VectorizableTree.size() != 2)
return false;
+ // Handle splat stores.
+ if (!VectorizableTree[0].NeedToGather && isSplat(VectorizableTree[1].Scalars))
+ return true;
+
// Gathering cost would be too much for tiny trees.
- if (VectorizableTree[0].NeedToGather || VectorizableTree[1].NeedToGather)
- return false;
+ if (VectorizableTree[0].NeedToGather || VectorizableTree[1].NeedToGather)
+ return false;
- return true;
+ return true;
}
int BoUpSLP::getTreeCost() {