LLVM API Documentation
Go to the source code of this file.
Defines | |
#define | DEBUG_TYPE "instcombine" |
Typedefs | |
typedef std::pair< Value *, Value * > | ShuffleOps |
Functions | |
static bool | CheapToScalarize (Value *V, bool isConstant) |
static Value * | FindScalarElement (Value *V, unsigned EltNo) |
static bool | CollectSingleShuffleElements (Value *V, Value *LHS, Value *RHS, SmallVectorImpl< Constant * > &Mask) |
static ShuffleOps | CollectShuffleElements (Value *V, SmallVectorImpl< Constant * > &Mask, Value *PermittedRHS) |
static bool | CanEvaluateShuffled (Value *V, ArrayRef< int > Mask, unsigned Depth=5) |
static Value * | BuildNew (Instruction *I, ArrayRef< Value * > NewOps) |
static void | RecognizeIdentityMask (const SmallVectorImpl< int > &Mask, bool &isLHSID, bool &isRHSID) |
#define DEBUG_TYPE "instcombine" |
Definition at line 20 of file InstCombineVectorOps.cpp.
typedef std::pair<Value *, Value *> ShuffleOps |
We are building a shuffle to create V, which is a sequence of insertelement, extractelement pairs. If PermittedRHS is set, then we must either use it or not rely on the second vector source. Return a std::pair containing the left and right vectors of the proposed shuffle (or 0), and set the Mask parameter as required.
Note: we intentionally don't try to fold earlier shuffles since they have often been chosen carefully to be efficiently implementable on the target.
Definition at line 412 of file InstCombineVectorOps.cpp.
static Value* BuildNew | ( | Instruction * | I, |
ArrayRef< Value * > | NewOps | ||
) | [static] |
Rebuild a new instruction just like 'I' but with the new operands given. In the event of type mismatch, the type of the operands is correct.
Definition at line 668 of file InstCombineVectorOps.cpp.
References llvm::APIntOps::And(), llvm::BinaryOperator::Create(), llvm::CastInst::Create(), llvm::GetElementPtrInst::Create(), llvm::FCmp, llvm::FPExt, llvm::FPToSI, llvm::VectorType::get(), llvm::Instruction::getOpcode(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::BinaryOperator::hasNoSignedWrap(), llvm::BinaryOperator::hasNoUnsignedWrap(), I, llvm::BinaryOperator::isExact(), llvm_unreachable, llvm::LShr, llvm::APIntOps::Or(), llvm::GetElementPtrInst::setIsInBounds(), llvm::SExt, llvm::SIToFP, llvm::ArrayRef< T >::size(), llvm::ArrayRef< T >::slice(), llvm::Trunc, and llvm::APIntOps::Xor().
Return true if we can evaluate the specified expression tree if the vector elements were shuffled in a different order.
Definition at line 592 of file InstCombineVectorOps.cpp.
References llvm::APIntOps::And(), llvm::dyn_cast(), llvm::FCmp, llvm::FPExt, llvm::FPToSI, llvm::ConstantInt::getLimitedValue(), llvm::User::getNumOperands(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Value::hasOneUse(), I, llvm::InsertElement, llvm::LShr, llvm::APIntOps::Or(), llvm::SExt, llvm::SIToFP, llvm::ArrayRef< T >::size(), llvm::Trunc, and llvm::APIntOps::Xor().
Referenced by llvm::InstCombiner::visitShuffleVectorInst().
static bool CheapToScalarize | ( | Value * | V, |
bool | isConstant | ||
) | [static] |
CheapToScalarize - Return true if the value is cheaper to scalarize than it is to leave as a vector operation. isConstant indicates whether we're extracting one known element. If false we're extracting a variable index.
Definition at line 25 of file InstCombineVectorOps.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Value::hasOneUse(), I, llvm::InsertElement, and llvm::SPII::Load.
Referenced by llvm::InstCombiner::visitExtractElementInst().
static ShuffleOps CollectShuffleElements | ( | Value * | V, |
SmallVectorImpl< Constant * > & | Mask, | ||
Value * | PermittedRHS | ||
) | [static] |
Definition at line 414 of file InstCombineVectorOps.cpp.
References llvm::SmallVectorImpl< T >::assign(), CollectSingleShuffleElements(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::Value::getContext(), llvm::Type::getInt32Ty(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Type::isVectorTy(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by llvm::InstCombiner::visitInsertElementInst().
static bool CollectSingleShuffleElements | ( | Value * | V, |
Value * | LHS, | ||
Value * | RHS, | ||
SmallVectorImpl< Constant * > & | Mask | ||
) | [static] |
CollectSingleShuffleElements - If V is a shuffle of values that ONLY returns elements from either LHS or RHS, return the shuffle mask and true. Otherwise, return false.
Definition at line 329 of file InstCombineVectorOps.cpp.
References llvm::SmallVectorImpl< T >::assign(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::Value::getContext(), llvm::Type::getInt32Ty(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().
Referenced by CollectShuffleElements().
static Value* FindScalarElement | ( | Value * | V, |
unsigned | EltNo | ||
) | [static] |
FindScalarElement - Given a vector and an element number, see if the scalar value is already around as a register, for example if it were inserted then extracted from the vector.
Definition at line 65 of file InstCombineVectorOps.cpp.
References llvm::CallingConv::C, llvm::UndefValue::get(), llvm::Constant::getAggregateElement(), llvm::VectorType::getNumElements(), llvm::Value::getType(), llvm::Type::getVectorNumElements(), llvm::Constant::isNullValue(), llvm::Type::isVectorTy(), llvm::PatternMatch::m_Add(), llvm::PatternMatch::m_Constant(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by llvm::InstCombiner::visitExtractElementInst().
static void RecognizeIdentityMask | ( | const SmallVectorImpl< int > & | Mask, |
bool & | isLHSID, | ||
bool & | isRHSID | ||
) | [static] |
Definition at line 842 of file InstCombineVectorOps.cpp.
References llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::InstCombiner::visitShuffleVectorInst().