summaryrefslogtreecommitdiffstats
path: root/llvm/lib
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
commit9611d23d6379eafb9c3fd4d3a878460ff05733d0 (patch)
tree58d518fdf29204da0fb4befeaf1de669101c0185 /llvm/lib
parent40083a432600dac7f87ca3880c012c1fd520a92e (diff)
downloadbcm5719-llvm-9611d23d6379eafb9c3fd4d3a878460ff05733d0.tar.gz
bcm5719-llvm-9611d23d6379eafb9c3fd4d3a878460ff05733d0.zip
SLPVectorizer: Try vectorizing 'splat' stores
Vectorize sequential stores of a broadcasted value. 5% on eon. radar://16124699 llvm-svn: 202067
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 360652f3dce..8e3ec815e82 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/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() {
OpenPOWER on IntegriCloud