diff options
author | Yi Jiang <yjiang@apple.com> | 2013-11-22 01:57:02 +0000 |
---|---|---|
committer | Yi Jiang <yjiang@apple.com> | 2013-11-22 01:57:02 +0000 |
commit | 79a2b0a6d16734ffa74496b2231bd417350999c2 (patch) | |
tree | 3fc92ca972a6bdf35176b920d54c40b7976c7941 /llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | |
parent | ae215951a924210c7cbcf2b81967ec4e16bedc21 (diff) | |
download | bcm5719-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.cpp | 4 |
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, |