LLVM 22.0.0git
VPlanPatternMatch.h File Reference
#include "VPlan.h"

Go to the source code of this file.

Classes

struct  llvm::VPlanPatternMatch::VPMatchFunctor< Val, Pattern >
struct  llvm::VPlanPatternMatch::class_match< Class >
struct  llvm::VPlanPatternMatch::bind_ty< Class >
struct  llvm::VPlanPatternMatch::specificval_ty
 Match a specified VPValue. More...
struct  llvm::VPlanPatternMatch::deferredval_ty
 Stores a reference to the VPValue *, not the VPValue * itself, thus can be used in commutative matchers. More...
struct  llvm::VPlanPatternMatch::int_pred_ty< Pred, BitWidth >
 Match an integer constant or vector of constants if Pred::isValue returns true for the APInt. More...
struct  llvm::VPlanPatternMatch::is_specific_int
 Match a specified integer value or vector of all elements of that value. More...
struct  llvm::VPlanPatternMatch::is_all_ones
struct  llvm::VPlanPatternMatch::is_zero_int
struct  llvm::VPlanPatternMatch::is_one
struct  llvm::VPlanPatternMatch::bind_const_int
struct  llvm::VPlanPatternMatch::match_combine_or< LTy, RTy >
 Matching combinators. More...
struct  llvm::VPlanPatternMatch::match_combine_and< LTy, RTy >
struct  llvm::VPlanPatternMatch::Recipe_match< Ops_t, Opcode, Commutative, RecipeTys >
struct  llvm::VPlanPatternMatch::Cmp_match< Op0_t, Op1_t, Opcodes >
 Cmp_match is a variant of BinaryRecipe_match that also binds the comparison predicate. More...
struct  llvm::VPlanPatternMatch::SpecificCmp_match< Op0_t, Op1_t, Opcodes >
 SpecificCmp_match is a variant of Cmp_match that matches the comparison predicate, instead of binding it. More...
struct  llvm::VPlanPatternMatch::Argument_match< Opnd_t >
 Match a call argument at a given argument index. More...
struct  llvm::VPlanPatternMatch::IntrinsicID_match
 Intrinsic matchers. More...
struct  llvm::VPlanPatternMatch::m_Intrinsic_Ty< T0 >
struct  llvm::VPlanPatternMatch::m_Intrinsic_Ty< T0, T1 >
struct  llvm::VPlanPatternMatch::m_Intrinsic_Ty< T0, T1, T2 >
struct  llvm::VPlanPatternMatch::m_Intrinsic_Ty< T0, T1, T2, T3 >
 Intrinsic matches are combinations of ID matchers, and argument matchers. More...
struct  llvm::VPlanPatternMatch::live_in_vpvalue
struct  llvm::VPlanPatternMatch::OneUse_match< SubPattern_t >

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
namespace  llvm::VPlanPatternMatch

Typedefs

template<unsigned Bitwidth = 0>
using llvm::VPlanPatternMatch::specific_intval = int_pred_ty<is_specific_int, Bitwidth>
template<unsigned Opcode, typename... OpTys>
using llvm::VPlanPatternMatch::AllRecipe_match
template<unsigned Opcode, typename... OpTys>
using llvm::VPlanPatternMatch::AllRecipe_commutative_match
template<unsigned Opcode, typename... OpTys>
using llvm::VPlanPatternMatch::VPInstruction_match
template<typename Op0_t, typename Op1_t>
using llvm::VPlanPatternMatch::GEPLikeRecipe_match
template<typename Op0_t, typename Op1_t, typename Op2_t>
using llvm::VPlanPatternMatch::VPScalarIVSteps_match
template<typename Op0_t, typename Op1_t, typename Op2_t>
using llvm::VPlanPatternMatch::VPDerivedIV_match

Functions

template<typename Val, typename Pattern>
bool llvm::VPlanPatternMatch::match (Val *V, const Pattern &P)
template<typename Pattern>
bool llvm::VPlanPatternMatch::match (VPUser *U, const Pattern &P)
template<typename Val = VPUser, typename Pattern>
VPMatchFunctor< Val, Patternllvm::VPlanPatternMatch::match_fn (const Pattern &P)
 A match functor that can be used as a UnaryPredicate in functional algorithms like all_of.
class_match< VPValuellvm::VPlanPatternMatch::m_VPValue ()
 Match an arbitrary VPValue and ignore it.
specificval_ty llvm::VPlanPatternMatch::m_Specific (const VPValue *VPV)
deferredval_ty llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::m_SpecificInt (uint64_t V)
specific_intval< 1 > llvm::VPlanPatternMatch::m_False ()
specific_intval< 1 > llvm::VPlanPatternMatch::m_True ()
int_pred_ty< is_all_onesllvm::VPlanPatternMatch::m_AllOnes ()
 Match an integer or vector with all bits set.
int_pred_ty< is_zero_intllvm::VPlanPatternMatch::m_ZeroInt ()
 Match an integer 0 or a vector with all elements equal to 0.
int_pred_ty< is_onellvm::VPlanPatternMatch::m_One ()
 Match an integer 1 or a vector with all elements equal to 1.
bind_const_int llvm::VPlanPatternMatch::m_ConstantInt (uint64_t &C)
 Match a plain integer constant no wider than 64-bits, capturing it if we match.
template<typename LTy, typename RTy>
match_combine_or< LTy, RTy > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::m_CombineAnd (const LTy &L, const RTy &R)
 Combine two pattern matchers matching L && R.
bind_ty< VPValuellvm::VPlanPatternMatch::m_VPValue (VPValue *&V)
 Match a VPValue, capturing it if we match.
bind_ty< VPInstructionllvm::VPlanPatternMatch::m_VPInstruction (VPInstruction *&V)
 Match a VPInstruction, capturing if we match.
template<unsigned Opcode, typename... OpTys>
VPInstruction_match< Opcode, OpTys... > llvm::VPlanPatternMatch::m_VPInstruction (const OpTys &...Ops)
VPInstruction_match< VPInstruction::BuildVectorllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::m_Freeze (const Op0_t &Op0)
template<typename Op0_t>
VPInstruction_match< VPInstruction::BranchOnCond, Op0_tllvm::VPlanPatternMatch::m_BranchOnCond (const Op0_t &Op0)
template<typename Op0_t>
VPInstruction_match< VPInstruction::Broadcast, Op0_tllvm::VPlanPatternMatch::m_Broadcast (const Op0_t &Op0)
template<typename Op0_t>
VPInstruction_match< VPInstruction::ExplicitVectorLength, Op0_tllvm::VPlanPatternMatch::m_EVL (const Op0_t &Op0)
template<typename Op0_t>
VPInstruction_match< VPInstruction::ExtractLastElement, Op0_tllvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::m_BranchOnCount (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t>
VPInstruction_match< VPInstruction::AnyOf, Op0_tllvm::VPlanPatternMatch::m_AnyOf (const Op0_t &Op0)
template<unsigned Opcode, typename Op0_t>
AllRecipe_match< Opcode, Op0_tllvm::VPlanPatternMatch::m_Unary (const Op0_t &Op0)
template<typename Op0_t>
AllRecipe_match< Instruction::Trunc, Op0_tllvm::VPlanPatternMatch::m_Trunc (const Op0_t &Op0)
template<typename Op0_t>
AllRecipe_match< Instruction::ZExt, Op0_tllvm::VPlanPatternMatch::m_ZExt (const Op0_t &Op0)
template<typename Op0_t>
AllRecipe_match< Instruction::SExt, Op0_tllvm::VPlanPatternMatch::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 > > llvm::VPlanPatternMatch::m_ZExtOrSExt (const Op0_t &Op0)
template<typename Op0_t>
match_combine_or< AllRecipe_match< Instruction::ZExt, Op0_t >, Op0_tllvm::VPlanPatternMatch::m_ZExtOrSelf (const Op0_t &Op0)
template<unsigned Opcode, typename Op0_t, typename Op1_t>
AllRecipe_match< Opcode, Op0_t, Op1_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::m_Sub (const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
AllRecipe_match< Instruction::Mul, Op0_t, Op1_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::m_SpecificCmp (CmpPredicate MatchPred, const Op0_t &Op0, const Op1_t &Op1)
template<typename Op0_t, typename Op1_t>
GEPLikeRecipe_match< Op0_t, Op1_tllvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > > llvm::VPlanPatternMatch::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 > > > llvm::VPlanPatternMatch::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_tllvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::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 > llvm::VPlanPatternMatch::m_DerivedIV (const Op0_t &Op0, const Op1_t &Op1, const Op2_t &Op2)
template<unsigned OpI, typename Opnd_t>
Argument_match< Opnd_t > llvm::VPlanPatternMatch::m_Argument (const Opnd_t &Op)
 Match a call argument.
template<Intrinsic::ID IntrID>
IntrinsicID_match llvm::VPlanPatternMatch::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 llvm::VPlanPatternMatch::m_Intrinsic (const T0 &Op0)
template<Intrinsic::ID IntrID, typename T0, typename T1>
m_Intrinsic_Ty< T0, T1 >::Ty llvm::VPlanPatternMatch::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 llvm::VPlanPatternMatch::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 llvm::VPlanPatternMatch::m_Intrinsic (const T0 &Op0, const T1 &Op1, const T2 &Op2, const T3 &Op3)
live_in_vpvalue llvm::VPlanPatternMatch::m_LiveIn ()
template<typename T>
OneUse_match< Tllvm::VPlanPatternMatch::m_OneUse (const T &SubPattern)