diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-26 19:50:39 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-26 19:50:39 +0000 |
commit | 3443493cc71c46cf71c90e478403017063a035f0 (patch) | |
tree | 0130d862417d655a857ad99a0c3b7bb445ec9f41 /include | |
parent | f7da8821b4c491b1c2ce7ac2374e46d8abdba518 (diff) | |
download | external_llvm-3443493cc71c46cf71c90e478403017063a035f0.zip external_llvm-3443493cc71c46cf71c90e478403017063a035f0.tar.gz external_llvm-3443493cc71c46cf71c90e478403017063a035f0.tar.bz2 |
add an m_ConstantInt matching predicate that binds to a uint64_t, and add an m_OneUse()
predicate that matches if the subexpr has a single use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130235 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/PatternMatch.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/llvm/Support/PatternMatch.h b/include/llvm/Support/PatternMatch.h index 948ae51..172480e 100644 --- a/include/llvm/Support/PatternMatch.h +++ b/include/llvm/Support/PatternMatch.h @@ -40,6 +40,23 @@ bool match(Val *V, const Pattern &P) { return const_cast<Pattern&>(P).match(V); } + +template<typename SubPattern_t> +struct OneUse_match { + SubPattern_t SubPattern; + + OneUse_match(const SubPattern_t &SP) : SubPattern(SP) {} + + template<typename OpTy> + bool match(OpTy *V) { + return V->hasOneUse() && SubPattern.match(V); + } +}; + +template<typename T> +inline OneUse_match<T> m_OneUse(const T &SubPattern) { return SubPattern; } + + template<typename Class> struct class_match { template<typename ITy> @@ -227,7 +244,25 @@ struct specificval_ty { /// m_Specific - Match if we have a specific specified value. inline specificval_ty m_Specific(const Value *V) { return V; } +struct bind_const_intval_ty { + uint64_t &VR; + bind_const_intval_ty(uint64_t &V) : VR(V) {} + + template<typename ITy> + bool match(ITy *V) { + if (ConstantInt *CV = dyn_cast<ConstantInt>(V)) + if (CV->getBitWidth() <= 64) { + VR = CV->getZExtValue(); + return true; + } + return false; + } +}; +/// m_ConstantInt - Match a ConstantInt and bind to its value. This does not +/// match ConstantInts wider than 64-bits. +inline bind_const_intval_ty m_ConstantInt(uint64_t &V) { return V; } + //===----------------------------------------------------------------------===// // Matchers for specific binary operators. // |