LLVM 22.0.0git
|
Classes | |
struct | Argument_match |
Match a call argument at a given argument index. More... | |
struct | bind_ty |
struct | class_match |
struct | Cmp_match |
Cmp_match is a variant of BinaryRecipe_match that also binds the comparison predicate. More... | |
struct | deferredval_ty |
Stores a reference to the VPValue *, not the VPValue * itself, thus can be used in commutative matchers. More... | |
struct | int_pred_ty |
Match an integer constant or vector of constants if Pred::isValue returns true for the APInt. More... | |
struct | IntrinsicID_match |
Intrinsic matchers. More... | |
struct | is_all_ones |
struct | is_one |
struct | is_specific_int |
Match a specified integer value or vector of all elements of that value. More... | |
struct | is_zero_int |
struct | m_Intrinsic_Ty |
Intrinsic matches are combinations of ID matchers, and argument matchers. More... | |
struct | m_Intrinsic_Ty< T0 > |
struct | m_Intrinsic_Ty< T0, T1 > |
struct | m_Intrinsic_Ty< T0, T1, T2 > |
struct | match_combine_and |
struct | match_combine_or |
Matching combinators. More... | |
struct | Recipe_match |
struct | SpecificCmp_match |
SpecificCmp_match is a variant of Cmp_match that matches the comparison predicate, instead of binding it. More... | |
struct | specificval_ty |
Match a specified VPValue. More... |
Typedefs | |
template<unsigned Bitwidth = 0> | |
using | specific_intval = int_pred_ty<is_specific_int, Bitwidth> |
template<unsigned Opcode, typename... OpTys> | |
using | AllRecipe_match |
template<unsigned Opcode, typename... OpTys> | |
using | AllRecipe_commutative_match |
template<unsigned Opcode, typename... OpTys> | |
using | VPInstruction_match |
template<typename Op0_t, typename Op1_t> | |
using | GEPLikeRecipe_match |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
using | VPScalarIVSteps_match |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
using | VPDerivedIV_match |
Functions | |
template<typename Val, typename Pattern> | |
bool | match (Val *V, const Pattern &P) |
template<typename Pattern> | |
bool | match (VPUser *U, const Pattern &P) |
class_match< VPValue > | m_VPValue () |
Match an arbitrary VPValue and ignore it. | |
specificval_ty | m_Specific (const VPValue *VPV) |
deferredval_ty | m_Deferred (VPValue *const &V) |
Like m_Specific(), but works if the specific value to match is determined as part of the same match() expression. | |
specific_intval< 0 > | m_SpecificInt (uint64_t V) |
specific_intval< 1 > | m_False () |
specific_intval< 1 > | m_True () |
int_pred_ty< is_all_ones > | m_AllOnes () |
Match an integer or vector with all bits set. | |
int_pred_ty< is_zero_int > | m_ZeroInt () |
Match an integer 0 or a vector with all elements equal to 0. | |
int_pred_ty< is_one > | m_One () |
Match an integer 1 or a vector with all elements equal to 1. | |
template<typename LTy, typename RTy> | |
match_combine_or< LTy, RTy > | m_CombineOr (const LTy &L, const RTy &R) |
Combine two pattern matchers matching L || R. | |
template<typename LTy, typename RTy> | |
match_combine_and< LTy, RTy > | m_CombineAnd (const LTy &L, const RTy &R) |
Combine two pattern matchers matching L && R. | |
bind_ty< VPValue > | m_VPValue (VPValue *&V) |
Match a VPValue, capturing it if we match. | |
bind_ty< VPInstruction > | m_VPInstruction (VPInstruction *&V) |
Match a VPInstruction, capturing if we match. | |
template<unsigned Opcode, typename... OpTys> | |
VPInstruction_match< Opcode, OpTys... > | m_VPInstruction (const OpTys &...Ops) |
VPInstruction_match< VPInstruction::BuildVector > | m_BuildVector () |
BuildVector is matches only its opcode, w/o matching its operands as the number of operands is not fixed. | |
template<typename Op0_t> | |
VPInstruction_match< Instruction::Freeze, Op0_t > | m_Freeze (const Op0_t &Op0) |
template<typename Op0_t> | |
VPInstruction_match< VPInstruction::BranchOnCond, Op0_t > | m_BranchOnCond (const Op0_t &Op0) |
template<typename Op0_t> | |
VPInstruction_match< VPInstruction::Broadcast, Op0_t > | m_Broadcast (const Op0_t &Op0) |
template<typename Op0_t> | |
VPInstruction_match< VPInstruction::ExplicitVectorLength, Op0_t > | m_EVL (const Op0_t &Op0) |
template<typename Op0_t> | |
VPInstruction_match< VPInstruction::ExtractLastElement, Op0_t > | m_ExtractLastElement (const Op0_t &Op0) |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
VPInstruction_match< VPInstruction::ActiveLaneMask, Op0_t, Op1_t, Op2_t > | m_ActiveLaneMask (const Op0_t &Op0, const Op1_t &Op1, const Op2_t &Op2) |
template<typename Op0_t, typename Op1_t> | |
VPInstruction_match< VPInstruction::BranchOnCount, Op0_t, Op1_t > | m_BranchOnCount (const Op0_t &Op0, const Op1_t &Op1) |
template<unsigned Opcode, typename Op0_t> | |
AllRecipe_match< Opcode, Op0_t > | m_Unary (const Op0_t &Op0) |
template<typename Op0_t> | |
AllRecipe_match< Instruction::Trunc, Op0_t > | m_Trunc (const Op0_t &Op0) |
template<typename Op0_t> | |
AllRecipe_match< Instruction::ZExt, Op0_t > | m_ZExt (const Op0_t &Op0) |
template<typename Op0_t> | |
AllRecipe_match< Instruction::SExt, Op0_t > | m_SExt (const Op0_t &Op0) |
template<typename Op0_t> | |
match_combine_or< AllRecipe_match< Instruction::ZExt, Op0_t >, AllRecipe_match< Instruction::SExt, Op0_t > > | m_ZExtOrSExt (const Op0_t &Op0) |
template<typename Op0_t> | |
match_combine_or< AllRecipe_match< Instruction::ZExt, Op0_t >, Op0_t > | m_ZExtOrSelf (const Op0_t &Op0) |
template<unsigned Opcode, typename Op0_t, typename Op1_t> | |
AllRecipe_match< Opcode, Op0_t, Op1_t > | m_Binary (const Op0_t &Op0, const Op1_t &Op1) |
template<unsigned Opcode, typename Op0_t, typename Op1_t> | |
AllRecipe_commutative_match< Opcode, Op0_t, Op1_t > | m_c_Binary (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_commutative_match< Instruction::Add, Op0_t, Op1_t > | m_c_Add (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_match< Instruction::Sub, Op0_t, Op1_t > | m_Sub (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_match< Instruction::Mul, Op0_t, Op1_t > | m_Mul (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_commutative_match< Instruction::Mul, Op0_t, Op1_t > | m_c_Mul (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_commutative_match< Instruction::And, Op0_t, Op1_t > | m_c_BinaryAnd (const Op0_t &Op0, const Op1_t &Op1) |
Match a binary AND operation. | |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_match< Instruction::Or, Op0_t, Op1_t > | m_BinaryOr (const Op0_t &Op0, const Op1_t &Op1) |
Match a binary OR operation. | |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_commutative_match< Instruction::Or, Op0_t, Op1_t > | m_c_BinaryOr (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
Cmp_match< Op0_t, Op1_t, Instruction::ICmp > | m_ICmp (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
Cmp_match< Op0_t, Op1_t, Instruction::ICmp > | m_ICmp (CmpPredicate &Pred, const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
SpecificCmp_match< Op0_t, Op1_t, Instruction::ICmp > | m_SpecificICmp (CmpPredicate MatchPred, const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
Cmp_match< Op0_t, Op1_t, Instruction::ICmp, Instruction::FCmp > | m_Cmp (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
Cmp_match< Op0_t, Op1_t, Instruction::ICmp, Instruction::FCmp > | m_Cmp (CmpPredicate &Pred, const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
SpecificCmp_match< Op0_t, Op1_t, Instruction::ICmp, Instruction::FCmp > | m_SpecificCmp (CmpPredicate MatchPred, const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
GEPLikeRecipe_match< Op0_t, Op1_t > | m_GetElementPtr (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
AllRecipe_match< Instruction::Select, Op0_t, Op1_t, Op2_t > | m_Select (const Op0_t &Op0, const Op1_t &Op1, const Op2_t &Op2) |
template<typename Op0_t> | |
match_combine_or< VPInstruction_match< VPInstruction::Not, Op0_t >, AllRecipe_commutative_match< Instruction::Xor, int_pred_ty< is_all_ones >, Op0_t > > | m_Not (const Op0_t &Op0) |
template<typename Op0_t, typename Op1_t> | |
match_combine_or< VPInstruction_match< VPInstruction::LogicalAnd, Op0_t, Op1_t >, AllRecipe_match< Instruction::Select, Op0_t, Op1_t, specific_intval< 1 > > > | m_LogicalAnd (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t> | |
AllRecipe_match< Instruction::Select, Op0_t, specific_intval< 1 >, Op1_t > | m_LogicalOr (const Op0_t &Op0, const Op1_t &Op1) |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
VPScalarIVSteps_match< Op0_t, Op1_t, Op2_t > | m_ScalarIVSteps (const Op0_t &Op0, const Op1_t &Op1, const Op2_t &Op2) |
template<typename Op0_t, typename Op1_t, typename Op2_t> | |
VPDerivedIV_match< Op0_t, Op1_t, Op2_t > | m_DerivedIV (const Op0_t &Op0, const Op1_t &Op1, const Op2_t &Op2) |
template<unsigned OpI, typename Opnd_t> | |
Argument_match< Opnd_t > | m_Argument (const Opnd_t &Op) |
Match a call argument. | |
template<Intrinsic::ID IntrID> | |
IntrinsicID_match | m_Intrinsic () |
Match intrinsic calls like this: m_Intrinsic<Intrinsic::fabs>(m_VPValue(X), ...) | |
template<Intrinsic::ID IntrID, typename T0> | |
m_Intrinsic_Ty< T0 >::Ty | m_Intrinsic (const T0 &Op0) |
template<Intrinsic::ID IntrID, typename T0, typename T1> | |
m_Intrinsic_Ty< T0, T1 >::Ty | m_Intrinsic (const T0 &Op0, const T1 &Op1) |
template<Intrinsic::ID IntrID, typename T0, typename T1, typename T2> | |
m_Intrinsic_Ty< T0, T1, T2 >::Ty | m_Intrinsic (const T0 &Op0, const T1 &Op1, const T2 &Op2) |
template<Intrinsic::ID IntrID, typename T0, typename T1, typename T2, typename T3> | |
m_Intrinsic_Ty< T0, T1, T2, T3 >::Ty | m_Intrinsic (const T0 &Op0, const T1 &Op1, const T2 &Op2, const T3 &Op3) |
using llvm::VPlanPatternMatch::AllRecipe_commutative_match |
Definition at line 286 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::AllRecipe_match |
Definition at line 280 of file VPlanPatternMatch.h.
Definition at line 534 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::specific_intval = int_pred_ty<is_specific_int, Bitwidth> |
Definition at line 124 of file VPlanPatternMatch.h.
Definition at line 597 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::VPInstruction_match |
Definition at line 291 of file VPlanPatternMatch.h.
Definition at line 587 of file VPlanPatternMatch.h.
|
inline |
Definition at line 338 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by simplifyBranchConditionForVFAndUF(), and tryToReplaceALMWithWideALM().
|
inline |
Match an integer or vector with all bits set.
For vectors, this includes constants with undefined elements.
Definition at line 144 of file VPlanPatternMatch.h.
Referenced by m_Not().
|
inline |
Match a call argument.
Definition at line 628 of file VPlanPatternMatch.h.
Referenced by m_Intrinsic(), m_Intrinsic(), m_Intrinsic(), and m_Intrinsic().
|
inline |
Definition at line 382 of file VPlanPatternMatch.h.
Referenced by getOptimizableIVOf(), m_BinaryOr(), m_Mul(), m_Sub(), and llvm::VPlanPatternMatch::Cmp_match< Op0_t, Op1_t, Opcodes >::match().
|
inline |
Match a binary OR operation.
Note that while conceptually the operands can be matched commutatively, Commutative
defaults to false in line with the IR-based pattern matching infrastructure. Use m_c_BinaryOr for a commutative version of the matcher.
Definition at line 430 of file VPlanPatternMatch.h.
References m_Binary().
Referenced by llvm::VPlanTransforms::dropPoisonGeneratingRecipes(), and isConditionTrueViaVFAndUF().
|
inline |
Definition at line 314 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by addCanonicalIVRecipes(), llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::handleUncountableEarlyExit(), hasConditionalTerminator(), llvm::VPlanTransforms::removeBranchOnConst(), simplifyBranchConditionForVFAndUF(), and tryToReplaceALMWithWideALM().
|
inline |
Definition at line 344 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::handleMaxMinNumReductions(), hasConditionalTerminator(), llvm::VPlanTransforms::narrowInterleaveGroups(), and simplifyBranchConditionForVFAndUF().
|
inline |
Definition at line 320 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by optimizeVectorInductionWidthForTCAndVFUF(), and simplifyRecipe().
|
inline |
BuildVector is matches only its opcode, w/o matching its operands as the number of operands is not fixed.
Definition at line 302 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by cloneForLane(), llvm::VPTransformState::get(), and simplifyRecipe().
|
inline |
Definition at line 395 of file VPlanPatternMatch.h.
References m_c_Binary().
|
inline |
Definition at line 389 of file VPlanPatternMatch.h.
Referenced by getOptimizableIVOf(), m_c_Add(), m_c_BinaryAnd(), m_c_BinaryOr(), m_c_Mul(), and m_Not().
|
inline |
Match a binary AND operation.
Definition at line 420 of file VPlanPatternMatch.h.
References m_c_Binary().
Referenced by simplifyRecipe().
|
inline |
Definition at line 436 of file VPlanPatternMatch.h.
References m_c_Binary().
Referenced by simplifyRecipe().
|
inline |
Definition at line 413 of file VPlanPatternMatch.h.
References m_c_Binary().
|
inline |
Definition at line 521 of file VPlanPatternMatch.h.
|
inline |
Definition at line 514 of file VPlanPatternMatch.h.
|
inline |
Combine two pattern matchers matching L && R.
Definition at line 197 of file VPlanPatternMatch.h.
Referenced by m_Intrinsic(), m_Intrinsic(), m_Intrinsic(), and m_Intrinsic().
|
inline |
Combine two pattern matchers matching L || R.
Definition at line 191 of file VPlanPatternMatch.h.
Referenced by m_GetElementPtr(), m_LogicalAnd(), m_Not(), m_ZExtOrSelf(), and m_ZExtOrSExt().
|
inline |
Like m_Specific(), but works if the specific value to match is determined as part of the same match() expression.
For example: m_Mul(m_VPValue(X), m_Specific(X)) is incorrect, because m_Specific() will bind X before the pattern match starts. m_Mul(m_VPValue(X), m_Deferred(X)) is correct, and will check against whichever value m_VPValue(X) populated.
Definition at line 80 of file VPlanPatternMatch.h.
|
inline |
Definition at line 602 of file VPlanPatternMatch.h.
Referenced by simplifyRecipe().
|
inline |
Definition at line 326 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops().
|
inline |
Definition at line 332 of file VPlanPatternMatch.h.
References m_VPInstruction().
Referenced by addExitUsersForFirstOrderRecurrences(), optimizeLatchExitInductionUser(), and simplifyRecipe().
|
inline |
Definition at line 130 of file VPlanPatternMatch.h.
Referenced by m_LogicalAnd(), llvm::VPlanTransforms::removeBranchOnConst(), simplifyBlends(), and simplifyRecipe().
|
inline |
Definition at line 308 of file VPlanPatternMatch.h.
References m_VPInstruction().
|
inline |
Definition at line 542 of file VPlanPatternMatch.h.
References m_CombineOr().
Referenced by getOptimizableIVOf().
|
inline |
Definition at line 501 of file VPlanPatternMatch.h.
|
inline |
Definition at line 494 of file VPlanPatternMatch.h.
|
inline |
Match intrinsic calls like this: m_Intrinsic<Intrinsic::fabs>(m_VPValue(X), ...)
Definition at line 678 of file VPlanPatternMatch.h.
Referenced by m_Intrinsic(), m_Intrinsic(), m_Intrinsic(), and m_Intrinsic().
|
inline |
Definition at line 683 of file VPlanPatternMatch.h.
References m_Argument(), m_CombineAnd(), and m_Intrinsic().
|
inline |
Definition at line 688 of file VPlanPatternMatch.h.
References m_Argument(), m_CombineAnd(), m_Intrinsic(), and T1.
|
inline |
Definition at line 695 of file VPlanPatternMatch.h.
References m_Argument(), m_CombineAnd(), m_Intrinsic(), and T1.
|
inline |
Definition at line 702 of file VPlanPatternMatch.h.
References m_Argument(), m_CombineAnd(), m_Intrinsic(), and T1.
|
inline |
Definition at line 574 of file VPlanPatternMatch.h.
References m_CombineOr(), m_False(), m_Select(), and m_VPInstruction().
|
inline |
Definition at line 582 of file VPlanPatternMatch.h.
References m_Select(), and m_True().
|
inline |
Definition at line 406 of file VPlanPatternMatch.h.
References m_Binary().
|
inline |
Definition at line 565 of file VPlanPatternMatch.h.
References m_AllOnes(), m_c_Binary(), m_CombineOr(), and m_VPInstruction().
|
inline |
Match an integer 1 or a vector with all elements equal to 1.
For vectors, this includes constants with undefined elements.
Definition at line 164 of file VPlanPatternMatch.h.
|
inline |
Definition at line 592 of file VPlanPatternMatch.h.
|
inline |
Definition at line 556 of file VPlanPatternMatch.h.
Referenced by m_LogicalAnd(), and m_LogicalOr().
|
inline |
Definition at line 364 of file VPlanPatternMatch.h.
References m_Unary().
Referenced by m_ZExtOrSExt().
|
inline |
Definition at line 62 of file VPlanPatternMatch.h.
|
inline |
Definition at line 528 of file VPlanPatternMatch.h.
|
inline |
Definition at line 507 of file VPlanPatternMatch.h.
|
inline |
Definition at line 126 of file VPlanPatternMatch.h.
|
inline |
Definition at line 400 of file VPlanPatternMatch.h.
References m_Binary().
|
inline |
Definition at line 134 of file VPlanPatternMatch.h.
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops(), m_LogicalOr(), llvm::VPlanTransforms::removeBranchOnConst(), and simplifyRecipe().
|
inline |
Definition at line 354 of file VPlanPatternMatch.h.
References m_Unary().
|
inline |
Definition at line 349 of file VPlanPatternMatch.h.
|
inline |
Definition at line 296 of file VPlanPatternMatch.h.
References AbstractManglingParser< Derived, Alloc >::Ops.
|
inline |
Match a VPInstruction, capturing if we match.
Definition at line 205 of file VPlanPatternMatch.h.
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::convertToConcreteRecipes(), m_ActiveLaneMask(), m_BranchOnCond(), m_BranchOnCount(), m_Broadcast(), m_BuildVector(), m_EVL(), m_ExtractLastElement(), m_Freeze(), m_LogicalAnd(), m_Not(), optimizeEarlyExitInductionUser(), simplifyRecipe(), and transformRecipestoEVLRecipes().
|
inline |
Match an arbitrary VPValue and ignore it.
Definition at line 37 of file VPlanPatternMatch.h.
Referenced by addCanonicalIVRecipes(), llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPPartialReductionRecipe::computeCost(), llvm::VPWidenSelectRecipe::computeCost(), llvm::VPlanTransforms::convertToConcreteRecipes(), llvm::VPlanTransforms::dropPoisonGeneratingRecipes(), fixReductionScalarResumeWhenVectorizingEpilog(), getOptimizableIVOf(), llvm::VPlanTransforms::handleMaxMinNumReductions(), llvm::VPlanTransforms::handleUncountableEarlyExit(), hasConditionalTerminator(), isConditionTrueViaVFAndUF(), llvm::VPlanTransforms::narrowInterleaveGroups(), optimizeEarlyExitInductionUser(), optimizeLatchExitInductionUser(), optimizeMaskToEVL(), llvm::VPlanTransforms::removeBranchOnConst(), removeCommonBlendMask(), simplifyBlends(), simplifyBranchConditionForVFAndUF(), simplifyRecipe(), transformRecipestoEVLRecipes(), llvm::VPlanTransforms::truncateToMinimalBitwidths(), tryToMatchAndCreateExtendedReduction(), tryToMatchAndCreateMulAccumulateReduction(), and tryToReplaceALMWithWideALM().
Match a VPValue, capturing it if we match.
Definition at line 202 of file VPlanPatternMatch.h.
|
inline |
Match an integer 0 or a vector with all elements equal to 0.
For vectors, this includes constants with undefined elements.
Definition at line 158 of file VPlanPatternMatch.h.
|
inline |
Definition at line 359 of file VPlanPatternMatch.h.
References m_Unary().
Referenced by m_ZExtOrSelf(), and m_ZExtOrSExt().
|
inline |
Definition at line 377 of file VPlanPatternMatch.h.
References m_CombineOr(), and m_ZExt().
|
inline |
Definition at line 371 of file VPlanPatternMatch.h.
References m_CombineOr(), m_SExt(), and m_ZExt().
Referenced by fixReductionScalarResumeWhenVectorizingEpilog().
Definition at line 27 of file VPlanPatternMatch.h.
References llvm::dyn_cast(), match(), and P.