DIBuilder: Delete dead code, NFC
[oota-llvm.git] / include / llvm / IR / PatternMatch.h
index 2efb2948947374248a11dd3dbd4b523ec64bfd1a..530ad824b3732693661ed73ab94c4f6fe30c8a24 100644 (file)
@@ -362,6 +362,29 @@ struct bind_const_intval_ty {
   }
 };
 
+/// Match a specified integer value or vector of all elements of that value.
+struct specific_intval {
+  uint64_t Val;
+  specific_intval(uint64_t V) : Val(V) {}
+
+  template<typename ITy>
+  bool match(ITy *V) {
+    ConstantInt *CI = dyn_cast<ConstantInt>(V);
+    if (!CI && V->getType()->isVectorTy())
+      if (const auto *C = dyn_cast<Constant>(V))
+        CI = dyn_cast_or_null<ConstantInt>(C->getSplatValue());
+
+    if (CI && CI->getBitWidth() <= 64)
+      return CI->getZExtValue() == Val;
+
+    return false;
+  }
+};
+
+/// Match a specific integer value or vector with all elements equal to the
+/// value.
+inline specific_intval m_SpecificInt(uint64_t V) { return specific_intval(V); }
+
 /// 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; }