mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Reland r216439 215441, majnemer has a real fix for PR20771.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216586 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user