summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
diff options
context:
space:
mode:
authorYi Jiang <yjiang@apple.com>2013-11-22 01:57:02 +0000
committerYi Jiang <yjiang@apple.com>2013-11-22 01:57:02 +0000
commit79a2b0a6d16734ffa74496b2231bd417350999c2 (patch)
tree3fc92ca972a6bdf35176b920d54c40b7976c7941 /llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
parentae215951a924210c7cbcf2b81967ec4e16bedc21 (diff)
downloadbcm5719-llvm-79a2b0a6d16734ffa74496b2231bd417350999c2.tar.gz
bcm5719-llvm-79a2b0a6d16734ffa74496b2231bd417350999c2.zip
SLP Vectorizer: Extract cost will only be added once even if the scalar has multiple external uses.
llvm-svn: 195406
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp')
-rw-r--r--llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 2b498a88f52..91ccac7c2e6 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -1082,9 +1082,13 @@ int BoUpSLP::getTreeCost() {
Cost += C;
}
+ SmallSet<Value *, 16> ExtractCostCalculated;
int ExtractCost = 0;
for (UserList::iterator I = ExternalUses.begin(), E = ExternalUses.end();
I != E; ++I) {
+ // We only add extract cost once for the same scalar.
+ if (!ExtractCostCalculated.insert(I->Scalar))
+ continue;
VectorType *VecTy = VectorType::get(I->Scalar->getType(), BundleWidth);
ExtractCost += TTI->getVectorInstrCost(Instruction::ExtractElement, VecTy,
OpenPOWER on IntegriCloud