LLVM API Documentation

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< 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.
class_match< ConstantIntm_ConstantInt ()
 m_ConstantInt() - Match an arbitrary ConstantInt and ignore it.
class_match< UndefValuem_Undef ()
 m_Undef() - Match an arbitrary undef constant.
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.
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.
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.
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.
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.
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.
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.
bind_ty< ConstantIntm_ConstantInt (ConstantInt *&CI)
 m_ConstantInt - Match a ConstantInt, capturing the value if we match.
bind_ty< Constantm_Constant (Constant *&C)
 m_Constant - Match a Constant, capturing the value if we match.
bind_ty< ConstantFPm_ConstantFP (ConstantFP *&C)
 m_ConstantFP - Match a ConstantFP, capturing the value if we match.
specificval_ty m_Specific (const Value *V)
 m_Specific - Match if we have a specific specified value.
specific_fpval m_SpecificFP (double V)
specific_fpval m_FPOne ()
 Match a float 1.0 or vector with all elements equal to 1.0.
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.
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.
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.
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
template<typename OpTy >
CastClass_match< OpTy,
Instruction::PtrToInt > 
m_PtrToInt (const OpTy &Op)
 m_PtrToInt
template<typename OpTy >
CastClass_match< OpTy,
Instruction::Trunc > 
m_Trunc (const OpTy &Op)
 m_Trunc
template<typename OpTy >
CastClass_match< OpTy,
Instruction::SExt > 
m_SExt (const OpTy &Op)
 m_SExt
template<typename OpTy >
CastClass_match< OpTy,
Instruction::ZExt > 
m_ZExt (const OpTy &Op)
 m_ZExt
template<typename OpTy >
CastClass_match< OpTy,
Instruction::UIToFP > 
m_UIToFp (const OpTy &Op)
 m_UIToFP
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.
template<typename LHS >
fneg_match< LHS > m_FNeg (const LHS &L)
 m_FNeg - Match a floating point negate.
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.
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.
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.
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.
template<unsigned OpI, typename Opnd_t >
Argument_match< Opnd_t > m_Argument (const Opnd_t &Op)
 Match an argument.
template<unsigned IntrID>
IntrinsicID_match m_Intrinsic ()
template<unsigned IntrID, typename T0 >
m_Intrinsic_Ty< T0 >::Ty m_Intrinsic (const T0 &Op0)
template<unsigned IntrID, typename T0 , typename T1 >
m_Intrinsic_Ty< T0, T1 >::Ty m_Intrinsic (const T0 &Op0, const T1 &Op1)
template<unsigned 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<unsigned 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().

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 1030 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 830 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 1107 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 783 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<unsigned IntrID>
IntrinsicID_match llvm::PatternMatch::m_Intrinsic ( ) [inline]

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

Definition at line 1078 of file PatternMatch.h.

template<unsigned IntrID, typename T0 >
m_Intrinsic_Ty<T0>::Ty llvm::PatternMatch::m_Intrinsic ( const T0 &  Op0) [inline]

Definition at line 1082 of file PatternMatch.h.

References m_CombineAnd().

template<unsigned 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 1088 of file PatternMatch.h.

References m_CombineAnd().

template<unsigned 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 1094 of file PatternMatch.h.

References m_CombineAnd().

template<unsigned 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 1100 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]

m_Neg - Match an integer negate.

Definition at line 757 of file PatternMatch.h.

Referenced by llvm::isKnownToBeAPowerOfTwo(), SimplifyAndInst(), and llvm::InstCombiner::visitSub().

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 966 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 981 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 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 933 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 939 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 945 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 951 of file PatternMatch.h.

Referenced by SimplifyICmpInst().

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

Definition at line 807 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 996 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 1011 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(), 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::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(), 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.

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(), getEdgeValueLocal(), 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::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(), llvm::InstCombiner::visitXor(), and llvm::InstCombiner::visitZExt().