|
LLVM
4.0.0
|
Bottom Up SLP Vectorizer. More...
Public Types | |
| typedef SmallVector< Value *, 8 > | ValueList |
| typedef SmallVector < Instruction *, 16 > | InstrList |
| typedef SmallPtrSet< Value *, 16 > | ValueSet |
| typedef SmallVector< StoreInst *, 8 > | StoreList |
Public Member Functions | |
| BoUpSLP (Function *Func, ScalarEvolution *Se, TargetTransformInfo *Tti, TargetLibraryInfo *TLi, AliasAnalysis *Aa, LoopInfo *Li, DominatorTree *Dt, AssumptionCache *AC, DemandedBits *DB, const DataLayout *DL) | |
| Value * | vectorizeTree () |
Vectorize the tree that starts with the elements in VL. More... | |
| int | getSpillCost () |
| int | getTreeCost () |
| void | buildTree (ArrayRef< Value * > Roots, ArrayRef< Value * > UserIgnoreLst=None) |
Construct a vectorizable tree that starts at Roots, ignoring users for the purpose of scheduling and extraction in the UserIgnoreLst. More... | |
| void | deleteTree () |
| Clear the internal data structures that are created by 'buildTree'. More... | |
| void | optimizeGatherSequence () |
| Perform LICM and CSE on the newly generated gather sequences. More... | |
| bool | shouldReorder () const |
| unsigned | getVectorElementSize (Value *V) |
| void | computeMinimumValueSizes () |
| Compute the minimum type sizes required to represent the entries in a vectorizable tree. More... | |
| unsigned | getMaxVecRegSize () const |
| unsigned | getMinVecRegSize () const |
| unsigned | canMapToVector (Type *T, const DataLayout &DL) const |
| Check if ArrayType or StructType is isomorphic to some VectorType. More... | |
| bool | isTreeTinyAndNotFullyVectorizable () |
Friends | |
| raw_ostream & | operator<< (raw_ostream &os, const BoUpSLP::ScheduleData &SD) |
Bottom Up SLP Vectorizer.
Definition at line 301 of file SLPVectorizer.cpp.
| typedef SmallVector<Instruction *, 16> llvm::slpvectorizer::BoUpSLP::InstrList |
Definition at line 304 of file SLPVectorizer.cpp.
| typedef SmallVector<StoreInst *, 8> llvm::slpvectorizer::BoUpSLP::StoreList |
Definition at line 306 of file SLPVectorizer.cpp.
| typedef SmallVector<Value *, 8> llvm::slpvectorizer::BoUpSLP::ValueList |
Definition at line 303 of file SLPVectorizer.cpp.
| typedef SmallPtrSet<Value *, 16> llvm::slpvectorizer::BoUpSLP::ValueSet |
Definition at line 305 of file SLPVectorizer.cpp.
|
inline |
Definition at line 308 of file SLPVectorizer.cpp.
References llvm::CodeMetrics::collectEphemeralValues(), F, MaxVectorRegSizeOption, and MinVectorRegSizeOption.
Construct a vectorizable tree that starts at Roots, ignoring users for the purpose of scheduling and extraction in the UserIgnoreLst.
Definition at line 923 of file SLPVectorizer.cpp.
References allSameType(), assert(), llvm::dbgs(), DEBUG, deleteTree(), llvm::dyn_cast(), InTreeUserNeedToExtract(), llvm::is_contained(), llvm::AArch64CC::LE, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::NVPTX::PTXLdStInstCode::Scalar, and llvm::Value::users().
| unsigned BoUpSLP::canMapToVector | ( | Type * | T, |
| const DataLayout & | DL | ||
| ) | const |
Check if ArrayType or StructType is isomorphic to some VectorType.
Definition at line 1499 of file SLPVectorizer.cpp.
References llvm::dyn_cast(), llvm::VectorType::get(), llvm::DataLayout::getTypeStoreSizeInBits(), isValidElementType(), N, llvm::ARM_MB::ST, and T.
| void BoUpSLP::computeMinimumValueSizes | ( | ) |
Compute the minimum type sizes required to represent the entries in a vectorizable tree.
Definition at line 3451 of file SLPVectorizer.cpp.
References llvm::all_of(), llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::begin(), collectValuesToDemote(), llvm::ComputeNumSignBits(), llvm::ComputeSignBit(), llvm::dyn_cast(), llvm::SmallVectorBase::empty(), llvm::DenseMapBase< SmallDenseMap< KeyT, ValueT, InlineBuckets, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DemandedBits::getDemandedBits(), llvm::DataLayout::getTypeSizeInBits(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::isPowerOf2_64(), llvm::BitmaskEnumDetail::Mask(), llvm::NextPowerOf2(), llvm::SmallVectorImpl< T >::pop_back_val(), and llvm::NVPTX::PTXLdStInstCode::Scalar.
|
inline |
Clear the internal data structures that are created by 'buildTree'.
Definition at line 348 of file SLPVectorizer.cpp.
Referenced by buildTree().
|
inline |
Definition at line 382 of file SLPVectorizer.cpp.
|
inline |
Definition at line 387 of file SLPVectorizer.cpp.
| int BoUpSLP::getSpillCost | ( | ) |
Definition at line 1840 of file SLPVectorizer.cpp.
References llvm::dbgs(), DEBUG, llvm::Value::dump(), llvm::dyn_cast(), llvm::SmallPtrSetImpl< PtrType >::erase(), llvm::VectorType::get(), llvm::TargetTransformInfo::getCostOfKeepingLiveOverCall(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::Instruction::getParent(), llvm::ilist_iterator< OptionsT, IsReverse, IsConst >::getReverse(), llvm::SmallPtrSetImpl< PtrType >::insert(), N, llvm::User::operands(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::BasicBlock::rbegin(), llvm::BasicBlock::rend(), llvm::SmallPtrSetImplBase::size(), and X.
Referenced by getTreeCost().
| int BoUpSLP::getTreeCost | ( | ) |
VL. A negative number means that this is profitable. Definition at line 1902 of file SLPVectorizer.cpp.
References C, llvm::dbgs(), DEBUG, llvm::IntegerType::get(), llvm::VectorType::get(), llvm::Function::getContext(), llvm::TargetTransformInfo::getExtractWithExtendCost(), getSpillCost(), llvm::TargetTransformInfo::getVectorInstrCost(), and llvm::SmallSet< T, N, C >::insert().
V. If V is a store, the size is the width of the stored value. Otherwise, the size is the width of the largest loaded value reaching V. This method is used by the vectorizer to calculate vectorization factors. Definition at line 3321 of file SLPVectorizer.cpp.
References llvm::SmallPtrSetImpl< PtrType >::count(), llvm::SmallVectorBase::empty(), llvm::Value::getType(), llvm::DataLayout::getTypeSizeInBits(), I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::User::operands(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::SPII::Store.
| bool BoUpSLP::isTreeTinyAndNotFullyVectorizable | ( | ) |
Definition at line 1819 of file SLPVectorizer.cpp.
References assert(), llvm::SmallVectorBase::empty(), and MinTreeSize.
| void BoUpSLP::optimizeGatherSequence | ( | ) |
Perform LICM and CSE on the newly generated gather sequences.
Definition at line 2835 of file SLPVectorizer.cpp.
References A, assert(), B, llvm::SmallVectorTemplateCommon< T >::begin(), llvm::BasicBlock::begin(), llvm::LoopBase< N, M >::contains(), llvm::dbgs(), DEBUG, llvm::DominatorTree::dominates(), llvm::dyn_cast(), E, llvm::SmallVectorTemplateCommon< T >::end(), llvm::BasicBlock::end(), llvm::LoopBase< N, M >::getLoopPreheader(), llvm::DominatorTreeBase< N >::getNode(), llvm::User::getOperand(), llvm::Instruction::getParent(), llvm::BasicBlock::getTerminator(), I, llvm::tgtok::In, llvm::is_contained(), llvm::Instruction::isIdenticalTo(), llvm::DominatorTree::isReachableFromEntry(), llvm::Instruction::moveBefore(), N, llvm::DominatorTreeBase< N >::properlyDominates(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::Value::replaceAllUsesWith(), and llvm::SmallVectorImpl< T >::reserve().
|
inline |
Definition at line 366 of file SLPVectorizer.cpp.
| Value * BoUpSLP::vectorizeTree | ( | ) |
Vectorize the tree that starts with the elements in VL.
Returns the vectorized root.
Definition at line 2704 of file SLPVectorizer.cpp.
References assert(), llvm::IRBuilderBase::ClearInsertionPoint(), llvm::IRBuilder< T, Inserter >::CreateExtractElement(), llvm::IRBuilder< T, Inserter >::CreateSExt(), llvm::IRBuilder< T, Inserter >::CreateTrunc(), llvm::IRBuilder< T, Inserter >::CreateZExt(), llvm::dbgs(), DEBUG, llvm::BasicBlock::front(), llvm::IntegerType::get(), llvm::VectorType::get(), llvm::UndefValue::get(), llvm::Function::getContext(), llvm::Function::getEntryBlock(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::IRBuilderBase::getInt32(), llvm::PHINode::getNumIncomingValues(), getParent(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), i, llvm::is_contained(), llvm::Type::isVoidTy(), llvm::AArch64CC::LE, llvm::Value::replaceAllUsesWith(), llvm::User::replaceUsesOfWith(), llvm::NVPTX::PTXLdStInstCode::Scalar, llvm::IRBuilderBase::SetInsertPoint(), llvm::User::setOperand(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::RegState::Undef, llvm::User::User(), and llvm::Value::users().
|
friend |
Definition at line 703 of file SLPVectorizer.cpp.
1.8.6