LLVM: llvm::SCEVPatternMatch Namespace Reference (original) (raw)

Classes
struct bind_cst_ty
struct bind_ty
struct class_match
struct cst_pred_ty
struct is_all_ones
struct is_one
struct is_specific_cst
struct is_specific_signed_cst
struct is_undef_or_poison
struct is_zero
struct SCEVAffineAddRec_match
Match an affine SCEVAddRecExpr. More...
struct SCEVBinaryExpr_match
Match a binary SCEV. More...
struct SCEVUnaryExpr_match
Match a unary SCEV. More...
struct SCEVURem_match
Match unsigned remainder pattern. More...
struct specificloop_ty
Match a specified const Loop*. More...
struct specificscev_ty
Match a specified const SCEV *. More...
Functions
template<typename Pattern>
bool match (const SCEV *S, const Pattern &P)
cst_pred_ty< is_zero > m_scev_Zero ()
Match an integer 0.
cst_pred_ty< is_one > m_scev_One ()
Match an integer 1.
cst_pred_ty< is_all_ones > m_scev_AllOnes ()
Match an integer with all bits set.
class_match< const SCEV > m_SCEV ()
class_match< const SCEVConstant > m_SCEVConstant ()
class_match< const SCEVVScale > m_SCEVVScale ()
bind_ty< const SCEV > m_SCEV (const SCEV *&V)
Match a SCEV, capturing it if we match.
bind_ty< const SCEVConstant > m_SCEVConstant (const SCEVConstant *&V)
bind_ty< const SCEVUnknown > m_SCEVUnknown (const SCEVUnknown *&V)
bind_ty< const SCEVAddExpr > m_scev_Add (const SCEVAddExpr *&V)
bind_ty< const SCEVMulExpr > m_scev_Mul (const SCEVMulExpr *&V)
specificscev_ty m_scev_Specific (const SCEV *S)
Match if we have a specific specified SCEV.
cst_pred_ty< is_specific_cst > m_scev_SpecificInt (uint64_t V)
Match an SCEV constant with a plain unsigned integer.
cst_pred_ty< is_specific_signed_cst > m_scev_SpecificSInt (int64_t V)
Match an SCEV constant with a plain signed integer (sign-extended value will be matched)
bind_cst_ty m_scev_APInt (const APInt *&C)
Match an SCEV constant and bind it to an APInt.
template<typename SCEVTy, typename Op0_t>
SCEVUnaryExpr_match< SCEVTy, Op0_t > m_scev_Unary (const Op0_t &Op0)
template<typename Op0_t>
SCEVUnaryExpr_match< SCEVSignExtendExpr, Op0_t > m_scev_SExt (const Op0_t &Op0)
template<typename Op0_t>
SCEVUnaryExpr_match< SCEVZeroExtendExpr, Op0_t > m_scev_ZExt (const Op0_t &Op0)
template<typename Op0_t>
SCEVUnaryExpr_match< SCEVPtrToIntExpr, Op0_t > m_scev_PtrToInt (const Op0_t &Op0)
template<typename Op0_t>
SCEVUnaryExpr_match< SCEVTruncateExpr, Op0_t > m_scev_Trunc (const Op0_t &Op0)
template<typename SCEVTy, typename Op0_t, typename Op1_t, SCEV::NoWrapFlags WrapFlags = SCEV::FlagAnyWrap, bool Commutable = false>
SCEVBinaryExpr_match< SCEVTy, Op0_t, Op1_t, WrapFlags, Commutable > m_scev_Binary (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVAddExpr, Op0_t, Op1_t > m_scev_Add (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVMulExpr, Op0_t, Op1_t > m_scev_Mul (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVMulExpr, Op0_t, Op1_t, SCEV::FlagAnyWrap, true > m_scev_c_Mul (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVMulExpr, Op0_t, Op1_t, SCEV::FlagNUW, true > m_scev_c_NUWMul (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVUDivExpr, Op0_t, Op1_t > m_scev_UDiv (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVSMaxExpr, Op0_t, Op1_t > m_scev_SMax (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVBinaryExpr_match< SCEVMinMaxExpr, Op0_t, Op1_t > m_scev_MinMax (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
SCEVURem_match< Op0_t, Op1_t > m_scev_URem (Op0_t LHS, Op1_t RHS, ScalarEvolution &SE)
Match the mathematical pattern A - (A / B) * B, where A and B can be arbitrary expressions.
class_match< const Loop > m_Loop ()
specificloop_ty m_SpecificLoop (const Loop *L)
bind_ty< const Loop > m_Loop (const Loop *&L)
template<typename Op0_t, typename Op1_t>
SCEVAffineAddRec_match< Op0_t, Op1_t, class_match< const Loop > > m_scev_AffineAddRec (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t, typename Loop_t>
SCEVAffineAddRec_match< Op0_t, Op1_t, Loop_t > m_scev_AffineAddRec (const Op0_t &Op0, const Op1_t &Op1, const Loop_t &L)
is_undef_or_poison m_scev_UndefOrPoison ()
Match an SCEVUnknown wrapping undef or poison.

m_Loop() [1/2]

m_Loop() [2/2]

m_SCEV() [1/2]

Definition at line 63 of file ScalarEvolutionPatternMatch.h.

Referenced by llvm::canPeelLastIteration(), collectDivisibilityInformation(), CollectSubexprs(), llvm::ScalarEvolution::computeConstantDifference(), DoInitialMatch(), llvm::ScalarEvolution::getAddExpr(), llvm::ScalarEvolution::getMulExpr(), getStrideFromPointer(), llvm::ScalarEvolution::getUDivExpr(), llvm::ScalarEvolution::getZeroExtendExprImpl(), isBigEndianBitShift(), isDivisibilityGuard(), llvm::RecurrenceDescriptor::isFindIVPattern(), isHighCostExpansion(), llvm::InductionDescriptor::isInductionPHI(), isKnownPredicateExtendIdiom(), IsKnownPredicateViaAddRecStart(), isLoopCounter(), llvm::SCEVPatternMatch::SCEVURem_match< Op0_t, Op1_t >::match(), MatchBinarySub(), MatchNotExpr(), mayUsePostIncMode(), llvm::LoopVectorizationPlanner::selectEpilogueVectorizationFactor(), llvm::LoopVectorizationCostModel::setVectorizedCallDecision(), and llvm::ScalarEvolution::SimplifyICmpOperands().

m_SCEV() [2/2]

m_scev_Add() [1/2]

template<typename Op0_t, typename Op1_t>

m_scev_Add() [2/2]

m_scev_AffineAddRec() [1/2]

template<typename Op0_t, typename Op1_t>

m_scev_AffineAddRec() [2/2]

template<typename Op0_t, typename Op1_t, typename Loop_t>

m_scev_AllOnes()

m_scev_APInt()

m_scev_Binary()

template<typename SCEVTy, typename Op0_t, typename Op1_t, SCEV::NoWrapFlags WrapFlags = SCEV::FlagAnyWrap, bool Commutable = false>

m_scev_c_Mul()

template<typename Op0_t, typename Op1_t>

m_scev_c_NUWMul()

template<typename Op0_t, typename Op1_t>

m_scev_MinMax()

template<typename Op0_t, typename Op1_t>

m_scev_Mul() [1/2]

template<typename Op0_t, typename Op1_t>

m_scev_Mul() [2/2]

Definition at line 98 of file ScalarEvolutionPatternMatch.h.

Referenced by canFoldIVIncExpr(), CollectSubexprs(), llvm::ScalarEvolution::computeConstantDifference(), ExtractImmediate(), llvm::ScalarEvolution::getAddExpr(), getSmallConstantTripCount(), llvm::ScalarEvolution::getZeroExtendExprImpl(), isBigEndianBitShift(), isHighCostExpansion(), llvm::SCEVPatternMatch::SCEVURem_match< Op0_t, Op1_t >::match(), MatchBinarySub(), and MatchNotExpr().

m_scev_One()

m_scev_PtrToInt()

m_scev_SExt()

m_scev_SMax()

template<typename Op0_t, typename Op1_t>

m_scev_Specific()

m_scev_SpecificInt()

m_scev_SpecificSInt()

m_scev_Trunc()

m_scev_UDiv()

template<typename Op0_t, typename Op1_t>

m_scev_Unary()

template<typename SCEVTy, typename Op0_t>

m_scev_UndefOrPoison()

m_scev_URem()

template<typename Op0_t, typename Op1_t>

m_scev_Zero()

m_scev_ZExt()

m_SCEVConstant() [1/2]

m_SCEVConstant() [2/2]

m_SCEVUnknown()

m_SCEVVScale()

m_SpecificLoop()

match()

Definition at line 21 of file ScalarEvolutionPatternMatch.h.

References P.

Referenced by canFoldIVIncExpr(), llvm::canPeelLastIteration(), CollectSubexprs(), countToEliminateCompares(), DoInitialMatch(), emitTransformedIndex(), ExtractImmediate(), llvm::LoopVectorizationCostModel::getInstructionCost(), llvm::LoopVectorizationCostModel::getReductionPatternCost(), getSmallConstantTripCount(), isHighCostExpansion(), isLoopCounter(), isSignificantBitCheckWellFormed(), llvm::SCEVPatternMatch::is_undef_or_poison::match(), llvm::SCEVPatternMatch::SCEVURem_match< Op0_t, Op1_t >::match(), RecurrenceInfo::matchConditionalRecurrence(), mayUsePostIncMode(), optimizeLoopExitWithUnknownExitCount(), planContainsAdditionalSimplifications(), llvm::LoopVectorizationPlanner::selectEpilogueVectorizationFactor(), and llvm::LoopVectorizationCostModel::setVectorizedCallDecision().