diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-24 00:09:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-24 00:09:49 +0000 |
commit | abb992d6a3d2dc05d3f3c62a367ea8977a7dd070 (patch) | |
tree | b2498eacd1dbdae0230b2b4037063bca999a4ea9 /include/llvm/Support/PatternMatch.h | |
parent | eb38ebf15c326a5bb45ca9da6329cdf19ad6df95 (diff) |
change the canonical form of "cond ? -1 : 0" to be
"sext cond" instead of a select. This simplifies some instcombine
code, matches the policy for zext (cond ? 1 : 0 -> zext), and allows
us to generate better code for a testcase on ppc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94339 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/PatternMatch.h')
-rw-r--r-- | include/llvm/Support/PatternMatch.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/llvm/Support/PatternMatch.h b/include/llvm/Support/PatternMatch.h index 23daad9239..f02bc347a1 100644 --- a/include/llvm/Support/PatternMatch.h +++ b/include/llvm/Support/PatternMatch.h @@ -423,7 +423,7 @@ m_Select(const Cond &C, const LHS &L, const RHS &R) { } /// m_SelectCst - This matches a select of two constants, e.g.: -/// m_SelectCst(m_Value(V), -1, 0) +/// m_SelectCst<-1, 0>(m_Value(V)) template<int64_t L, int64_t R, typename Cond> inline SelectClass_match<Cond, constantint_ty<L>, constantint_ty<R> > m_SelectCst(const Cond &C) { @@ -466,6 +466,20 @@ inline CastClass_match<OpTy, Instruction::Trunc> m_Trunc(const OpTy &Op) { return CastClass_match<OpTy, Instruction::Trunc>(Op); } + +/// m_SExt +template<typename OpTy> +inline CastClass_match<OpTy, Instruction::SExt> +m_SExt(const OpTy &Op) { + return CastClass_match<OpTy, Instruction::SExt>(Op); +} + +/// m_ZExt +template<typename OpTy> +inline CastClass_match<OpTy, Instruction::ZExt> +m_ZExt(const OpTy &Op) { + return CastClass_match<OpTy, Instruction::ZExt>(Op); +} //===----------------------------------------------------------------------===// |