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_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 = Recipe_match< std::tuple< OpTys... >, Opcode, false, VPWidenRecipe, VPReplicateRecipe, VPWidenCastRecipe, VPInstruction, VPWidenSelectRecipe > |
template<unsigned Opcode, typename... OpTys> | |
using | AllRecipe_commutative_match = Recipe_match< std::tuple< OpTys... >, Opcode, true, VPWidenRecipe, VPReplicateRecipe, VPInstruction > |
template<unsigned Opcode, typename... OpTys> | |
using | VPInstruction_match = Recipe_match< std::tuple< OpTys... >, Opcode, false, VPInstruction > |
template<typename Op0_t , typename Op1_t > | |
using | GEPLikeRecipe_match = Recipe_match< std::tuple< Op0_t, Op1_t >, Instruction::GetElementPtr, false, VPWidenRecipe, VPReplicateRecipe, VPWidenGEPRecipe, VPInstruction > |
template<typename Op0_t , typename Op1_t , typename Op2_t > | |
using | VPScalarIVSteps_match = Recipe_match< std::tuple< Op0_t, Op1_t, Op2_t >, 0, false, VPScalarIVStepsRecipe > |
template<typename Op0_t , typename Op1_t , typename Op2_t > | |
using | VPDerivedIV_match = Recipe_match< std::tuple< Op0_t, Op1_t, Op2_t >, 0, false, VPDerivedIVRecipe > |
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. | |
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 = typedef Recipe_match<std::tuple<OpTys...>, Opcode, true, VPWidenRecipe, VPReplicateRecipe, VPInstruction> |
Definition at line 279 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::AllRecipe_match = typedef Recipe_match<std::tuple<OpTys...>, Opcode, false, VPWidenRecipe, VPReplicateRecipe, VPWidenCastRecipe, VPInstruction, VPWidenSelectRecipe> |
Definition at line 273 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::GEPLikeRecipe_match = typedef Recipe_match<std::tuple<Op0_t, Op1_t>, Instruction::GetElementPtr, false, VPWidenRecipe, VPReplicateRecipe, VPWidenGEPRecipe, VPInstruction> |
Definition at line 527 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::specific_intval = typedef int_pred_ty<is_specific_int, Bitwidth> |
Definition at line 124 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::VPDerivedIV_match = typedef Recipe_match<std::tuple<Op0_t, Op1_t, Op2_t>, 0, false, VPDerivedIVRecipe> |
Definition at line 581 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::VPInstruction_match = typedef Recipe_match<std::tuple<OpTys...>, Opcode, false, VPInstruction> |
Definition at line 284 of file VPlanPatternMatch.h.
using llvm::VPlanPatternMatch::VPScalarIVSteps_match = typedef Recipe_match<std::tuple<Op0_t, Op1_t, Op2_t>, 0, false, VPScalarIVStepsRecipe> |
Definition at line 571 of file VPlanPatternMatch.h.
|
inline |
Definition at line 331 of file VPlanPatternMatch.h.
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 612 of file VPlanPatternMatch.h.
|
inline |
Definition at line 375 of file VPlanPatternMatch.h.
|
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 423 of file VPlanPatternMatch.h.
Referenced by isConditionTrueViaVFAndUF().
|
inline |
Definition at line 307 of file VPlanPatternMatch.h.
Referenced by addCanonicalIVRecipes(), llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::handleUncountableEarlyExit(), hasConditionalTerminator(), llvm::VPlanTransforms::removeBranchOnConst(), simplifyBranchConditionForVFAndUF(), and tryToReplaceALMWithWideALM().
|
inline |
Definition at line 337 of file VPlanPatternMatch.h.
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::handleMaxMinNumReductions(), hasConditionalTerminator(), llvm::VPlanTransforms::narrowInterleaveGroups(), and simplifyBranchConditionForVFAndUF().
|
inline |
Definition at line 313 of file VPlanPatternMatch.h.
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 295 of file VPlanPatternMatch.h.
Referenced by cloneForLane(), llvm::VPTransformState::get(), and simplifyRecipe().
|
inline |
Definition at line 388 of file VPlanPatternMatch.h.
|
inline |
Definition at line 382 of file VPlanPatternMatch.h.
|
inline |
Match a binary AND operation.
Definition at line 413 of file VPlanPatternMatch.h.
Referenced by simplifyRecipe().
|
inline |
Definition at line 429 of file VPlanPatternMatch.h.
Referenced by simplifyRecipe().
|
inline |
Definition at line 406 of file VPlanPatternMatch.h.
|
inline |
Definition at line 514 of file VPlanPatternMatch.h.
|
inline |
Definition at line 507 of file VPlanPatternMatch.h.
|
inline |
Combine two pattern matchers matching L && R.
Definition at line 189 of file VPlanPatternMatch.h.
Referenced by m_Intrinsic().
|
inline |
Combine two pattern matchers matching L || R.
Definition at line 183 of file VPlanPatternMatch.h.
Referenced by 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 586 of file VPlanPatternMatch.h.
Referenced by simplifyRecipe().
|
inline |
Definition at line 319 of file VPlanPatternMatch.h.
Referenced by llvm::VPlanTransforms::canonicalizeEVLLoops().
|
inline |
Definition at line 325 of file VPlanPatternMatch.h.
Referenced by optimizeLatchExitInductionUser(), and simplifyRecipe().
|
inline |
Definition at line 130 of file VPlanPatternMatch.h.
Referenced by m_LogicalAnd(), llvm::VPlanTransforms::removeBranchOnConst(), and simplifyBlends().
|
inline |
Definition at line 301 of file VPlanPatternMatch.h.
|
inline |
Definition at line 533 of file VPlanPatternMatch.h.
Referenced by getOptimizableIVOf().
|
inline |
Definition at line 494 of file VPlanPatternMatch.h.
|
inline |
Definition at line 487 of file VPlanPatternMatch.h.
|
inline |
Match intrinsic calls like this: m_Intrinsic<Intrinsic::fabs>(m_VPValue(X), ...)
Definition at line 662 of file VPlanPatternMatch.h.
|
inline |
Definition at line 667 of file VPlanPatternMatch.h.
References m_CombineAnd().
|
inline |
Definition at line 672 of file VPlanPatternMatch.h.
References m_CombineAnd().
|
inline |
Definition at line 679 of file VPlanPatternMatch.h.
References m_CombineAnd().
|
inline |
Definition at line 686 of file VPlanPatternMatch.h.
References m_CombineAnd().
|
inline |
Definition at line 558 of file VPlanPatternMatch.h.
References m_CombineOr(), m_False(), and m_Select().
|
inline |
Definition at line 566 of file VPlanPatternMatch.h.
References m_Select(), and m_True().
|
inline |
Definition at line 399 of file VPlanPatternMatch.h.
|
inline |
Definition at line 549 of file VPlanPatternMatch.h.
References m_AllOnes(), and m_CombineOr().
|
inline |
Definition at line 576 of file VPlanPatternMatch.h.
|
inline |
Definition at line 540 of file VPlanPatternMatch.h.
Referenced by m_LogicalAnd(), and m_LogicalOr().
|
inline |
Definition at line 357 of file VPlanPatternMatch.h.
Referenced by m_ZExtOrSExt().
|
inline |
Definition at line 62 of file VPlanPatternMatch.h.
|
inline |
Definition at line 521 of file VPlanPatternMatch.h.
|
inline |
Definition at line 500 of file VPlanPatternMatch.h.
|
inline |
Definition at line 126 of file VPlanPatternMatch.h.
|
inline |
Definition at line 393 of file VPlanPatternMatch.h.
|
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 347 of file VPlanPatternMatch.h.
|
inline |
Definition at line 342 of file VPlanPatternMatch.h.
|
inline |
Definition at line 289 of file VPlanPatternMatch.h.
|
inline |
Match a VPInstruction, capturing if we match.
Definition at line 197 of file VPlanPatternMatch.h.
Referenced by simplifyRecipe().
|
inline |
Match an arbitrary VPValue and ignore it.
Definition at line 37 of file VPlanPatternMatch.h.
Referenced by addCanonicalIVRecipes(), llvm::VPlanTransforms::canonicalizeEVLLoops(), llvm::VPlanTransforms::convertToConcreteRecipes(), fixReductionScalarResumeWhenVectorizingEpilog(), getOptimizableIVOf(), llvm::VPlanTransforms::handleMaxMinNumReductions(), llvm::VPlanTransforms::handleUncountableEarlyExit(), hasConditionalTerminator(), isConditionTrueViaVFAndUF(), llvm::VPlanTransforms::narrowInterleaveGroups(), optimizeEarlyExitInductionUser(), optimizeLatchExitInductionUser(), optimizeMaskToEVL(), llvm::VPlanTransforms::removeBranchOnConst(), simplifyBlends(), simplifyBranchConditionForVFAndUF(), simplifyRecipe(), transformRecipestoEVLRecipes(), llvm::VPlanTransforms::truncateToMinimalBitwidths(), tryToMatchAndCreateExtendedReduction(), tryToMatchAndCreateMulAccumulateReduction(), and tryToReplaceALMWithWideALM().
Match a VPValue, capturing it if we match.
Definition at line 194 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 154 of file VPlanPatternMatch.h.
|
inline |
Definition at line 352 of file VPlanPatternMatch.h.
Referenced by m_ZExtOrSelf(), and m_ZExtOrSExt().
|
inline |
Definition at line 370 of file VPlanPatternMatch.h.
References m_CombineOr(), and m_ZExt().
|
inline |
Definition at line 364 of file VPlanPatternMatch.h.
References m_CombineOr(), m_SExt(), and m_ZExt().
Referenced by fixReductionScalarResumeWhenVectorizingEpilog().