LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Functions
llvm::PatternMatch Namespace Reference

Classes

struct  OneUse_match
 
struct  class_match
 
struct  match_combine_or
 Matching combinators. More...
 
struct  match_combine_and
 
struct  match_zero
 
struct  match_neg_zero
 
struct  apint_match
 
struct  constantint_match
 
struct  cst_pred_ty
 
struct  api_pred_ty
 
struct  is_one
 
struct  is_all_ones
 
struct  is_sign_bit
 
struct  is_power2
 
struct  bind_ty
 
struct  specificval_ty
 specificval_ty - Match a specified Value*. More...
 
struct  specific_fpval
 
struct  bind_const_intval_ty
 
struct  BinaryOp_match
 
struct  BinOp2_match
 
struct  Exact_match
 
struct  CmpClass_match
 
struct  SelectClass_match
 
struct  CastClass_match
 
struct  not_match
 
struct  neg_match
 
struct  fneg_match
 
struct  br_match
 
struct  brc_match
 
struct  MaxMin_match
 
struct  smax_pred_ty
 smax_pred_ty - Helper class for identifying signed max predicates. More...
 
struct  smin_pred_ty
 smin_pred_ty - Helper class for identifying signed min predicates. More...
 
struct  umax_pred_ty
 umax_pred_ty - Helper class for identifying unsigned max predicates. More...
 
struct  umin_pred_ty
 umin_pred_ty - Helper class for identifying unsigned min predicates. More...
 
struct  ofmax_pred_ty
 ofmax_pred_ty - Helper class for identifying ordered max predicates. More...
 
struct  ofmin_pred_ty
 ofmin_pred_ty - Helper class for identifying ordered min predicates. More...
 
struct  ufmax_pred_ty
 ufmax_pred_ty - Helper class for identifying unordered max predicates. More...
 
struct  ufmin_pred_ty
 ufmin_pred_ty - Helper class for identifying unordered min predicates. More...
 
struct  Argument_match
 
struct  IntrinsicID_match
 Intrinsic matchers. More...
 
struct  m_Intrinsic_Ty
 
struct  m_Intrinsic_Ty< T0 >
 
struct  m_Intrinsic_Ty< T0, T1 >
 
struct  m_Intrinsic_Ty< T0, T1, T2 >
 
struct  m_Intrinsic_Ty< T0, T1, T2, T3 >
 

Functions

template<typename Val , typename Pattern >
bool match (Val *V, const Pattern &P)
 
template<typename T >
OneUse_match< Tm_OneUse (const T &SubPattern)
 
class_match< Valuem_Value ()
 m_Value() - Match an arbitrary value and ignore it. More...
 
class_match< ConstantIntm_ConstantInt ()
 m_ConstantInt() - Match an arbitrary ConstantInt and ignore it. More...
 
class_match< UndefValuem_Undef ()
 m_Undef() - Match an arbitrary undef constant. More...
 
class_match< Constantm_Constant ()
 
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. More...
 
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. More...
 
match_zero m_Zero ()
 
match_neg_zero m_NegZero ()
 
match_combine_or< match_zero,
match_neg_zero
m_AnyZero ()
 
apint_match m_APInt (const APInt *&Res)
 
cst_pred_ty< is_onem_One ()
 m_One() - Match an integer 1 or a vector with all elements equal to 1. More...
 
api_pred_ty< is_onem_One (const APInt *&V)
 
cst_pred_ty< is_all_onesm_AllOnes ()
 m_AllOnes() - Match an integer or vector with all bits set to true. More...
 
api_pred_ty< is_all_onesm_AllOnes (const APInt *&V)
 
cst_pred_ty< is_sign_bitm_SignBit ()
 m_SignBit() - Match an integer or vector with only the sign bit(s) set. More...
 
api_pred_ty< is_sign_bitm_SignBit (const APInt *&V)
 
cst_pred_ty< is_power2m_Power2 ()
 m_Power2() - Match an integer or vector power of 2. More...
 
api_pred_ty< is_power2m_Power2 (const APInt *&V)
 
bind_ty< Valuem_Value (Value *&V)
 m_Value - Match a value, capturing it if we match. More...
 
bind_ty< ConstantIntm_ConstantInt (ConstantInt *&CI)
 m_ConstantInt - Match a ConstantInt, capturing the value if we match. More...
 
bind_ty< Constantm_Constant (Constant *&C)
 m_Constant - Match a Constant, capturing the value if we match. More...
 
bind_ty< ConstantFPm_ConstantFP (ConstantFP *&C)
 m_ConstantFP - Match a ConstantFP, capturing the value if we match. More...
 
specificval_ty m_Specific (const Value *V)
 m_Specific - Match if we have a specific specified value. More...
 
specific_fpval m_SpecificFP (double V)
 
specific_fpval m_FPOne ()
 Match a float 1.0 or vector with all elements equal to 1.0. More...
 
bind_const_intval_ty m_ConstantInt (uint64_t &V)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Add > 
m_Add (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::FAdd > 
m_FAdd (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Sub > 
m_Sub (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::FSub > 
m_FSub (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Mul > 
m_Mul (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::FMul > 
m_FMul (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::UDiv > 
m_UDiv (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::SDiv > 
m_SDiv (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::FDiv > 
m_FDiv (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::URem > 
m_URem (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::SRem > 
m_SRem (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::FRem > 
m_FRem (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::And > 
m_And (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Or > 
m_Or (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Xor > 
m_Xor (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::Shl > 
m_Shl (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::LShr > 
m_LShr (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinaryOp_match< LHS, RHS,
Instruction::AShr > 
m_AShr (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
BinOp2_match< LHS, RHS,
Instruction::LShr,
Instruction::AShr > 
m_Shr (const LHS &L, const RHS &R)
 m_Shr - Matches LShr or AShr. More...
 
template<typename LHS , typename RHS >
BinOp2_match< LHS, RHS,
Instruction::LShr,
Instruction::Shl > 
m_LogicalShift (const LHS &L, const RHS &R)
 m_LogicalShift - Matches LShr or Shl. More...
 
template<typename LHS , typename RHS >
BinOp2_match< LHS, RHS,
Instruction::SDiv,
Instruction::UDiv > 
m_IDiv (const LHS &L, const RHS &R)
 m_IDiv - Matches UDiv and SDiv. More...
 
template<typename T >
Exact_match< Tm_Exact (const T &SubPattern)
 
template<typename LHS , typename RHS >
CmpClass_match< LHS, RHS,
ICmpInst, ICmpInst::Predicate
m_ICmp (ICmpInst::Predicate &Pred, const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
CmpClass_match< LHS, RHS,
FCmpInst, FCmpInst::Predicate
m_FCmp (FCmpInst::Predicate &Pred, const LHS &L, const RHS &R)
 
template<typename Cond , typename LHS , typename RHS >
SelectClass_match< Cond, LHS, RHS > m_Select (const Cond &C, const LHS &L, const RHS &R)
 
template<int64_t L, int64_t R, typename Cond >
SelectClass_match< Cond,
constantint_match< L >
, constantint_match< R > > 
m_SelectCst (const Cond &C)
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::BitCast > 
m_BitCast (const OpTy &Op)
 m_BitCast More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::PtrToInt > 
m_PtrToInt (const OpTy &Op)
 m_PtrToInt More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::Trunc > 
m_Trunc (const OpTy &Op)
 m_Trunc More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::SExt > 
m_SExt (const OpTy &Op)
 m_SExt More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::ZExt > 
m_ZExt (const OpTy &Op)
 m_ZExt More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::UIToFP > 
m_UIToFP (const OpTy &Op)
 m_UIToFP More...
 
template<typename OpTy >
CastClass_match< OpTy,
Instruction::SIToFP > 
m_SIToFP (const OpTy &Op)
 m_SIToFP More...
 
template<typename LHS >
not_match< LHS > m_Not (const LHS &L)
 
template<typename LHS >
neg_match< LHS > m_Neg (const LHS &L)
 m_Neg - Match an integer negate. More...
 
template<typename LHS >
fneg_match< LHS > m_FNeg (const LHS &L)
 m_FNeg - Match a floating point negate. More...
 
br_match m_UnconditionalBr (BasicBlock *&Succ)
 
template<typename Cond_t >
brc_match< Cond_t > m_Br (const Cond_t &C, BasicBlock *&T, BasicBlock *&F)
 
template<typename LHS , typename RHS >
MaxMin_match< ICmpInst, LHS,
RHS, smax_pred_ty
m_SMax (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
MaxMin_match< ICmpInst, LHS,
RHS, smin_pred_ty
m_SMin (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
MaxMin_match< ICmpInst, LHS,
RHS, umax_pred_ty
m_UMax (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
MaxMin_match< ICmpInst, LHS,
RHS, umin_pred_ty
m_UMin (const LHS &L, const RHS &R)
 
template<typename LHS , typename RHS >
MaxMin_match< FCmpInst, LHS,
RHS, ofmax_pred_ty
m_OrdFMax (const LHS &L, const RHS &R)
 Match an 'ordered' floating point maximum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'maximum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ogt/ge, L, R), L, R) semantics matched by this predicate. More...
 
template<typename LHS , typename RHS >
MaxMin_match< FCmpInst, LHS,
RHS, ofmin_pred_ty
m_OrdFMin (const LHS &L, const RHS &R)
 Match an 'ordered' floating point minimum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'minimum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(olt/le, L, R), L, R) semantics matched by this predicate. More...
 
template<typename LHS , typename RHS >
MaxMin_match< FCmpInst, LHS,
RHS, ufmax_pred_ty
m_UnordFMax (const LHS &L, const RHS &R)
 Match an 'unordered' floating point maximum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'maximum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ugt/ge, L, R), L, R) semantics matched by this predicate. More...
 
template<typename LHS , typename RHS >
MaxMin_match< FCmpInst, LHS,
RHS, ufmin_pred_ty
m_UnordFMin (const LHS &L, const RHS &R)
 Match an 'unordered' floating point minimum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'minimum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ult/le, L, R), L, R) semantics matched by this predicate. More...
 
template<unsigned OpI, typename Opnd_t >
Argument_match< Opnd_t > m_Argument (const Opnd_t &Op)
 Match an argument. More...
 
template<Intrinsic::ID IntrID>
IntrinsicID_match m_Intrinsic ()
 
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)
 
template<typename Opnd0 >
m_Intrinsic_Ty< Opnd0 >::Ty m_BSwap (const Opnd0 &Op0)
 

Function Documentation

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Add> llvm::PatternMatch::m_Add ( const LHS &  L,
const RHS &  R 
)
inline
cst_pred_ty<is_all_ones> llvm::PatternMatch::m_AllOnes ( )
inline

m_AllOnes() - Match an integer or vector with all bits set to true.

Definition at line 265 of file PatternMatch.h.

Referenced by SimplifyAndInst(), SimplifyAShrInst(), SimplifyOrInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitMul(), and llvm::InstCombiner::visitSub().

api_pred_ty<is_all_ones> llvm::PatternMatch::m_AllOnes ( const APInt *&  V)
inline

Definition at line 266 of file PatternMatch.h.

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::And> llvm::PatternMatch::m_And ( const LHS &  L,
const RHS &  R 
)
inline
match_combine_or<match_zero, match_neg_zero> llvm::PatternMatch::m_AnyZero ( )
inline

m_AnyZero() - Match an arbitrary zero/null constant. This includes zero_initializer for vectors and ConstantPointerNull for pointers. For floating point constants, this will match negative zero and positive zero

Definition at line 157 of file PatternMatch.h.

References m_CombineOr(), m_NegZero(), and m_Zero().

Referenced by SimplifyFAddInst(), SimplifyFMulInst(), SimplifyFSubInst(), and llvm::InstCombiner::visitFAdd().

apint_match llvm::PatternMatch::m_APInt ( const APInt *&  Res)
inline

m_APInt - Match a ConstantInt or splatted ConstantVector, binding the specified pointer to the contained APInt.

Definition at line 183 of file PatternMatch.h.

Referenced by llvm::ComputeNumSignBits(), getLogBase2Vector(), and llvm::InstCombiner::visitMul().

template<unsigned OpI, typename Opnd_t >
Argument_match<Opnd_t> llvm::PatternMatch::m_Argument ( const Opnd_t &  Op)
inline

Match an argument.

Definition at line 1037 of file PatternMatch.h.

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::AShr> llvm::PatternMatch::m_AShr ( const LHS &  L,
const RHS &  R 
)
inline
template<typename OpTy >
CastClass_match<OpTy, Instruction::BitCast> llvm::PatternMatch::m_BitCast ( const OpTy &  Op)
inline

m_BitCast

Definition at line 664 of file PatternMatch.h.

Referenced by OptimizeIntToFloatBitCast().

template<typename Cond_t >
brc_match<Cond_t> llvm::PatternMatch::m_Br ( const Cond_t &  C,
BasicBlock *&  T,
BasicBlock *&  F 
)
inline

Definition at line 837 of file PatternMatch.h.

References llvm::CallingConv::C, F(), and T.

Referenced by tryToMoveFreeBeforeNullTest(), and llvm::InstCombiner::visitBranchInst().

template<typename Opnd0 >
m_Intrinsic_Ty<Opnd0>::Ty llvm::PatternMatch::m_BSwap ( const Opnd0 &  Op0)
inline

Definition at line 1114 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitCallInst().

template<typename LTy , typename RTy >
match_combine_and<LTy, RTy> llvm::PatternMatch::m_CombineAnd ( const LTy &  L,
const RTy &  R 
)
inline

Combine two pattern matchers matching L && R.

Definition at line 122 of file PatternMatch.h.

Referenced by m_Intrinsic().

template<typename LTy , typename RTy >
match_combine_or<LTy, RTy> llvm::PatternMatch::m_CombineOr ( const LTy &  L,
const RTy &  R 
)
inline

Combine two pattern matchers matching L || R.

Definition at line 116 of file PatternMatch.h.

Referenced by m_AnyZero().

class_match<Constant> llvm::PatternMatch::m_Constant ( )
inline
bind_ty<Constant> llvm::PatternMatch::m_Constant ( Constant *&  C)
inline

m_Constant - Match a Constant, capturing the value if we match.

Definition at line 306 of file PatternMatch.h.

References llvm::CallingConv::C.

bind_ty<ConstantFP> llvm::PatternMatch::m_ConstantFP ( ConstantFP *&  C)
inline

m_ConstantFP - Match a ConstantFP, capturing the value if we match.

Definition at line 309 of file PatternMatch.h.

References llvm::CallingConv::C.

Referenced by llvm::InstCombiner::visitFDiv().

constantint_match< Val > llvm::PatternMatch::m_ConstantInt ( )
inline
bind_ty<ConstantInt> llvm::PatternMatch::m_ConstantInt ( ConstantInt *&  CI)
inline

m_ConstantInt - Match a ConstantInt, capturing the value if we match.

Definition at line 303 of file PatternMatch.h.

bind_const_intval_ty llvm::PatternMatch::m_ConstantInt ( uint64_t &  V)
inline

m_ConstantInt - Match a ConstantInt and bind to its value. This does not match ConstantInts wider than 64-bits.

Definition at line 367 of file PatternMatch.h.

template<typename T >
Exact_match<T> llvm::PatternMatch::m_Exact ( const T SubPattern)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::FAdd> llvm::PatternMatch::m_FAdd ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 401 of file PatternMatch.h.

template<typename LHS , typename RHS >
CmpClass_match<LHS, RHS, FCmpInst, FCmpInst::Predicate> llvm::PatternMatch::m_FCmp ( FCmpInst::Predicate &  Pred,
const LHS &  L,
const RHS &  R 
)
inline

Definition at line 599 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitBranchInst().

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::FDiv> llvm::PatternMatch::m_FDiv ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 443 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitFDiv().

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::FMul> llvm::PatternMatch::m_FMul ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 425 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitFDiv(), and llvm::InstCombiner::visitFMul().

template<typename LHS >
fneg_match<LHS> llvm::PatternMatch::m_FNeg ( const LHS &  L)
inline

m_FNeg - Match a floating point negate.

Definition at line 790 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitFCmpInst().

specific_fpval llvm::PatternMatch::m_FPOne ( )
inline

Match a float 1.0 or vector with all elements equal to 1.0.

Definition at line 348 of file PatternMatch.h.

References m_SpecificFP().

Referenced by SimplifyFMulInst(), and llvm::InstCombiner::visitFMul().

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::FRem> llvm::PatternMatch::m_FRem ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 461 of file PatternMatch.h.

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::FSub> llvm::PatternMatch::m_FSub ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
CmpClass_match<LHS, RHS, ICmpInst, ICmpInst::Predicate> llvm::PatternMatch::m_ICmp ( ICmpInst::Predicate &  Pred,
const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
BinOp2_match<LHS, RHS, Instruction::SDiv, Instruction::UDiv> llvm::PatternMatch::m_IDiv ( const LHS &  L,
const RHS &  R 
)
inline

m_IDiv - Matches UDiv and SDiv.

Definition at line 542 of file PatternMatch.h.

Referenced by llvm::isKnownNonZero(), and SimplifyMulInst().

template<Intrinsic::ID IntrID>
IntrinsicID_match llvm::PatternMatch::m_Intrinsic ( )
inline

Match intrinsic calls like this: m_Intrinsic<Intrinsic::fabs>(m_Value(X))

Definition at line 1085 of file PatternMatch.h.

template<Intrinsic::ID IntrID, typename T0 >
m_Intrinsic_Ty<T0>::Ty llvm::PatternMatch::m_Intrinsic ( const T0 &  Op0)
inline

Definition at line 1089 of file PatternMatch.h.

References m_CombineAnd().

template<Intrinsic::ID IntrID, typename T0 , typename T1 >
m_Intrinsic_Ty<T0, T1>::Ty llvm::PatternMatch::m_Intrinsic ( const T0 &  Op0,
const T1 Op1 
)
inline

Definition at line 1095 of file PatternMatch.h.

References m_CombineAnd().

template<Intrinsic::ID IntrID, typename T0 , typename T1 , typename T2 >
m_Intrinsic_Ty<T0, T1, T2>::Ty llvm::PatternMatch::m_Intrinsic ( const T0 &  Op0,
const T1 Op1,
const T2 &  Op2 
)
inline

Definition at line 1101 of file PatternMatch.h.

References m_CombineAnd().

template<Intrinsic::ID IntrID, typename T0 , typename T1 , typename T2 , typename T3 >
m_Intrinsic_Ty<T0, T1, T2, T3>::Ty llvm::PatternMatch::m_Intrinsic ( const T0 &  Op0,
const T1 Op1,
const T2 &  Op2,
const T3 &  Op3 
)
inline

Definition at line 1107 of file PatternMatch.h.

References m_CombineAnd().

template<typename LHS , typename RHS >
BinOp2_match<LHS, RHS, Instruction::LShr, Instruction::Shl> llvm::PatternMatch::m_LogicalShift ( const LHS &  L,
const RHS &  R 
)
inline

m_LogicalShift - Matches LShr or Shl.

Definition at line 535 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitOr().

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::LShr> llvm::PatternMatch::m_LShr ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Mul> llvm::PatternMatch::m_Mul ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS >
neg_match<LHS> llvm::PatternMatch::m_Neg ( const LHS &  L)
inline
match_neg_zero llvm::PatternMatch::m_NegZero ( )
inline

m_NegZero() - Match an arbitrary zero/null constant. This includes zero_initializer for vectors and ConstantPointerNull for pointers. For floating point constants, this will match negative zero but not positive zero

Definition at line 152 of file PatternMatch.h.

Referenced by m_AnyZero(), SimplifyFAddInst(), and SimplifyFSubInst().

template<typename LHS >
not_match<LHS> llvm::PatternMatch::m_Not ( const LHS &  L)
inline
cst_pred_ty<is_one> llvm::PatternMatch::m_One ( )
inline
api_pred_ty<is_one> llvm::PatternMatch::m_One ( const APInt *&  V)
inline

Definition at line 258 of file PatternMatch.h.

template<typename T >
OneUse_match<T> llvm::PatternMatch::m_OneUse ( const T SubPattern)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Or> llvm::PatternMatch::m_Or ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
MaxMin_match<FCmpInst, LHS, RHS, ofmax_pred_ty> llvm::PatternMatch::m_OrdFMax ( const LHS &  L,
const RHS &  R 
)
inline

Match an 'ordered' floating point maximum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'maximum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ogt/ge, L, R), L, R) semantics matched by this predicate.

max(L, R) iff L and R are not NaN m_OrdFMax(L, R) = R iff L or R are NaN

Definition at line 973 of file PatternMatch.h.

template<typename LHS , typename RHS >
MaxMin_match<FCmpInst, LHS, RHS, ofmin_pred_ty> llvm::PatternMatch::m_OrdFMin ( const LHS &  L,
const RHS &  R 
)
inline

Match an 'ordered' floating point minimum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'minimum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(olt/le, L, R), L, R) semantics matched by this predicate.

max(L, R) iff L and R are not NaN m_OrdFMin(L, R) = R iff L or R are NaN

Definition at line 988 of file PatternMatch.h.

cst_pred_ty<is_power2> llvm::PatternMatch::m_Power2 ( )
inline
api_pred_ty<is_power2> llvm::PatternMatch::m_Power2 ( const APInt *&  V)
inline

Definition at line 282 of file PatternMatch.h.

template<typename OpTy >
CastClass_match<OpTy, Instruction::PtrToInt> llvm::PatternMatch::m_PtrToInt ( const OpTy &  Op)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::SDiv> llvm::PatternMatch::m_SDiv ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 437 of file PatternMatch.h.

Referenced by SimplifyICmpInst(), and llvm::InstCombiner::visitSub().

template<typename Cond , typename LHS , typename RHS >
SelectClass_match<Cond, LHS, RHS> llvm::PatternMatch::m_Select ( const Cond &  C,
const LHS &  L,
const RHS &  R 
)
inline
template<int64_t L, int64_t R, typename Cond >
SelectClass_match<Cond, constantint_match<L>, constantint_match<R> > llvm::PatternMatch::m_SelectCst ( const Cond &  C)
inline

m_SelectCst - This matches a select of two constants, e.g.: m_SelectCst<-1, 0>(m_Value(V))

Definition at line 638 of file PatternMatch.h.

References m_Select().

template<typename OpTy >
CastClass_match<OpTy, Instruction::SExt> llvm::PatternMatch::m_SExt ( const OpTy &  Op)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Shl> llvm::PatternMatch::m_Shl ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
BinOp2_match<LHS, RHS, Instruction::LShr, Instruction::AShr> llvm::PatternMatch::m_Shr ( const LHS &  L,
const RHS &  R 
)
inline

m_Shr - Matches LShr or AShr.

Definition at line 528 of file PatternMatch.h.

Referenced by llvm::InstCombiner::FoldShiftByConstant(), llvm::isKnownNonZero(), llvm::isKnownToBeAPowerOfTwo(), and SimplifyShlInst().

cst_pred_ty<is_sign_bit> llvm::PatternMatch::m_SignBit ( )
inline

m_SignBit() - Match an integer or vector with only the sign bit(s) set.

Definition at line 273 of file PatternMatch.h.

Referenced by llvm::isKnownToBeAPowerOfTwo().

api_pred_ty<is_sign_bit> llvm::PatternMatch::m_SignBit ( const APInt *&  V)
inline

Definition at line 274 of file PatternMatch.h.

template<typename OpTy >
CastClass_match<OpTy, Instruction::SIToFP> llvm::PatternMatch::m_SIToFP ( const OpTy &  Op)
inline

m_SIToFP

Definition at line 706 of file PatternMatch.h.

template<typename LHS , typename RHS >
MaxMin_match<ICmpInst, LHS, RHS, smax_pred_ty> llvm::PatternMatch::m_SMax ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 940 of file PatternMatch.h.

Referenced by SimplifyICmpInst().

template<typename LHS , typename RHS >
MaxMin_match<ICmpInst, LHS, RHS, smin_pred_ty> llvm::PatternMatch::m_SMin ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 946 of file PatternMatch.h.

Referenced by SimplifyICmpInst().

specificval_ty llvm::PatternMatch::m_Specific ( const Value *  V)
inline
specific_fpval llvm::PatternMatch::m_SpecificFP ( double  V)
inline

Match a specific floating point value or vector with all elements equal to the value.

Definition at line 345 of file PatternMatch.h.

Referenced by m_FPOne().

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::SRem> llvm::PatternMatch::m_SRem ( const LHS &  L,
const RHS &  R 
)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Sub> llvm::PatternMatch::m_Sub ( const LHS &  L,
const RHS &  R 
)
inline
template<typename OpTy >
CastClass_match<OpTy, Instruction::Trunc> llvm::PatternMatch::m_Trunc ( const OpTy &  Op)
inline
template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::UDiv> llvm::PatternMatch::m_UDiv ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 431 of file PatternMatch.h.

Referenced by llvm::isKnownToBeAPowerOfTwo(), and SimplifyICmpInst().

template<typename OpTy >
CastClass_match<OpTy, Instruction::UIToFP> llvm::PatternMatch::m_UIToFP ( const OpTy &  Op)
inline

m_UIToFP

Definition at line 699 of file PatternMatch.h.

Referenced by llvm::InstCombiner::visitFMul().

template<typename LHS , typename RHS >
MaxMin_match<ICmpInst, LHS, RHS, umax_pred_ty> llvm::PatternMatch::m_UMax ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 952 of file PatternMatch.h.

Referenced by SimplifyICmpInst().

template<typename LHS , typename RHS >
MaxMin_match<ICmpInst, LHS, RHS, umin_pred_ty> llvm::PatternMatch::m_UMin ( const LHS &  L,
const RHS &  R 
)
inline

Definition at line 958 of file PatternMatch.h.

Referenced by SimplifyICmpInst().

br_match llvm::PatternMatch::m_UnconditionalBr ( BasicBlock *&  Succ)
inline

Definition at line 814 of file PatternMatch.h.

Referenced by tryToMoveFreeBeforeNullTest().

class_match<UndefValue> llvm::PatternMatch::m_Undef ( )
inline
template<typename LHS , typename RHS >
MaxMin_match<FCmpInst, LHS, RHS, ufmax_pred_ty> llvm::PatternMatch::m_UnordFMax ( const LHS &  L,
const RHS &  R 
)
inline

Match an 'unordered' floating point maximum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'maximum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ugt/ge, L, R), L, R) semantics matched by this predicate.

max(L, R) iff L and R are not NaN m_UnordFMin(L, R) = L iff L or R are NaN

Definition at line 1003 of file PatternMatch.h.

template<typename LHS , typename RHS >
MaxMin_match<FCmpInst, LHS, RHS, ufmin_pred_ty> llvm::PatternMatch::m_UnordFMin ( const LHS &  L,
const RHS &  R 
)
inline

Match an 'unordered' floating point minimum function. Floating point has one special value 'NaN'. Therefore, there is no total order. However, if we can ignore the 'NaN' value (for example, because of a 'no-nans-float-math' flag) a combination of a fcmp and select has 'minimum' semantics. In the presence of 'NaN' we have to preserve the original select(fcmp(ult/le, L, R), L, R) semantics matched by this predicate.

max(L, R) iff L and R are not NaN m_UnordFMin(L, R) = L iff L or R are NaN

Definition at line 1018 of file PatternMatch.h.

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::URem> llvm::PatternMatch::m_URem ( const LHS &  L,
const RHS &  R 
)
inline
class_match<Value> llvm::PatternMatch::m_Value ( )
inline

m_Value() - Match an arbitrary value and ignore it.

Definition at line 70 of file PatternMatch.h.

Referenced by CanEvaluateShifted(), llvm::InstCombiner::commonIDivTransforms(), llvm::InstCombiner::commonShiftTransforms(), FindScalarElement(), llvm::InstCombiner::FoldAndOfICmps(), foldLogOpOfMaskedICmpsHelper(), llvm::InstCombiner::FoldOrWithConstants(), foldSelectICmpAnd(), foldSelectICmpAndOr(), llvm::InstCombiner::FoldShiftByConstant(), GatherConstantCompares(), llvm::isKnownNonZero(), llvm::isKnownToBeAPowerOfTwo(), MatchSelectFromAndOr(), OptimizeIntToFloatBitCast(), SimplifyAddInst(), SimplifyAndInst(), SimplifyAShrInst(), SimplifyDiv(), SimplifyFSubInst(), SimplifyICmpInst(), SimplifyLShrInst(), SimplifyMulInst(), SimplifyOrInst(), SimplifyShlInst(), SimplifySubInst(), simplifyValueKnownNonZero(), llvm::InstCombiner::visitAdd(), llvm::InstCombiner::visitAnd(), llvm::InstCombiner::visitAShr(), llvm::InstCombiner::visitBranchInst(), llvm::InstCombiner::visitCallInst(), llvm::InstCombiner::visitFAdd(), llvm::InstCombiner::visitFCmpInst(), llvm::InstCombiner::visitFDiv(), llvm::InstCombiner::visitFMul(), llvm::InstCombiner::visitGetElementPtrInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), llvm::InstCombiner::visitMul(), llvm::InstCombiner::visitOr(), llvm::InstCombiner::visitSDiv(), llvm::InstCombiner::visitSExt(), llvm::InstCombiner::visitShl(), llvm::InstCombiner::visitSub(), llvm::InstCombiner::visitTrunc(), llvm::InstCombiner::visitUDiv(), visitUDivOperand(), llvm::InstCombiner::visitXor(), and llvm::InstCombiner::visitZExt().

bind_ty<Value> llvm::PatternMatch::m_Value ( Value *&  V)
inline

m_Value - Match a value, capturing it if we match.

Definition at line 300 of file PatternMatch.h.

template<typename LHS , typename RHS >
BinaryOp_match<LHS, RHS, Instruction::Xor> llvm::PatternMatch::m_Xor ( const LHS &  L,
const RHS &  R 
)
inline
match_zero llvm::PatternMatch::m_Zero ( )
inline
template<typename OpTy >
CastClass_match<OpTy, Instruction::ZExt> llvm::PatternMatch::m_ZExt ( const OpTy &  Op)
inline
template<typename Val , typename Pattern >
bool llvm::PatternMatch::match ( Val *  V,
const Pattern &  P 
)

Definition at line 42 of file PatternMatch.h.

References P.

Referenced by CanEvaluateShifted(), llvm::InstCombiner::commonIDivTransforms(), llvm::InstCombiner::commonShiftTransforms(), llvm::ComputeNumSignBits(), FindScalarElement(), llvm::InstCombiner::FoldAndOfICmps(), foldLogOpOfMaskedICmpsHelper(), llvm::InstCombiner::FoldOrOfICmps(), llvm::InstCombiner::FoldOrWithConstants(), foldSelectICmpAnd(), foldSelectICmpAndOr(), llvm::InstCombiner::FoldShiftByConstant(), GatherConstantCompares(), getEdgeValueLocal(), getGEPInductionOperand(), getLogBase2Vector(), llvm::isKnownNonZero(), llvm::isKnownToBeAPowerOfTwo(), llvm::PatternMatch::MaxMin_match< CmpInst_t, LHS_t, RHS_t, Pred_t >::match(), MatchSelectFromAndOr(), OptimizeIntToFloatBitCast(), SimplifyAddInst(), SimplifyAndInst(), SimplifyAShrInst(), SimplifyDiv(), SimplifyFAddInst(), SimplifyFDivInst(), SimplifyFMulInst(), SimplifyFRemInst(), SimplifyFSubInst(), SimplifyICmpInst(), SimplifyInsertValueInst(), SimplifyLShrInst(), SimplifyMulInst(), SimplifyOrInst(), SimplifyRem(), SimplifyShift(), SimplifyShlInst(), SimplifySubInst(), simplifyValueKnownNonZero(), SimplifyXorInst(), ThreadCmpOverSelect(), tryToMoveFreeBeforeNullTest(), llvm::InstCombiner::visitAdd(), llvm::InstCombiner::visitAnd(), llvm::InstCombiner::visitAShr(), llvm::InstCombiner::visitBranchInst(), llvm::InstCombiner::visitCallInst(), llvm::InstCombiner::visitFAdd(), llvm::InstCombiner::visitFCmpInst(), llvm::InstCombiner::visitFDiv(), llvm::InstCombiner::visitFMul(), llvm::InstCombiner::visitGetElementPtrInst(), llvm::InstCombiner::visitICmpInst(), llvm::InstCombiner::visitICmpInstWithInstAndIntCst(), llvm::InstCombiner::visitMul(), llvm::InstCombiner::visitOr(), llvm::InstCombiner::visitSDiv(), llvm::InstCombiner::visitSelectInst(), llvm::InstCombiner::visitSelectInstWithICmp(), llvm::InstCombiner::visitSExt(), llvm::InstCombiner::visitShl(), llvm::InstCombiner::visitSub(), llvm::InstCombiner::visitTrunc(), llvm::InstCombiner::visitUDiv(), visitUDivOperand(), llvm::InstCombiner::visitURem(), llvm::InstCombiner::visitXor(), and llvm::InstCombiner::visitZExt().