mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
[PatternMatch] Implemenet m_SignMask using Constant::isMinSignedValue instead of doing splat detection and analyzing the resulting APInt.
llvm-svn: 307433
This commit is contained in:
parent
9f5201ba3f
commit
df1b021333
@ -204,6 +204,17 @@ struct match_all_ones {
|
||||
/// \brief Match an integer or vector with all bits set to true.
|
||||
inline match_all_ones m_AllOnes() { return match_all_ones(); }
|
||||
|
||||
struct match_sign_mask {
|
||||
template <typename ITy> bool match(ITy *V) {
|
||||
if (const auto *C = dyn_cast<Constant>(V))
|
||||
return C->isMinSignedValue();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/// \brief Match an integer or vector with only the sign bit(s) set.
|
||||
inline match_sign_mask m_SignMask() { return match_sign_mask(); }
|
||||
|
||||
struct apint_match {
|
||||
const APInt *&Res;
|
||||
|
||||
@ -287,16 +298,6 @@ template <typename Predicate> struct api_pred_ty : public Predicate {
|
||||
}
|
||||
};
|
||||
|
||||
struct is_sign_mask {
|
||||
bool isValue(const APInt &C) { return C.isSignMask(); }
|
||||
};
|
||||
|
||||
/// \brief Match an integer or vector with only the sign bit(s) set.
|
||||
inline cst_pred_ty<is_sign_mask> m_SignMask() {
|
||||
return cst_pred_ty<is_sign_mask>();
|
||||
}
|
||||
inline api_pred_ty<is_sign_mask> m_SignMask(const APInt *&V) { return V; }
|
||||
|
||||
struct is_power2 {
|
||||
bool isValue(const APInt &C) { return C.isPowerOf2(); }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user