22#include <llvm/ADT/APInt.h>
23#include <llvm/ADT/APSInt.h>
24#include <llvm/ADT/ArrayRef.h>
25#include <llvm/ADT/DynamicAPInt.h>
26#include <llvm/ADT/Hashing.h>
27#include <llvm/ADT/StringRef.h>
28#include <llvm/ADT/Twine.h>
29#include <llvm/Support/Error.h>
46llvm::Expected<llvm::APInt>
47checkedToAPInt(
const llvm::DynamicAPInt &value,
unsigned bitWidth,
bool isSigned);
57llvm::Expected<size_t>
checkedToSize(
const llvm::DynamicAPInt &value,
const llvm::Twine &context);
60llvm::DynamicAPInt
operator&(
const llvm::DynamicAPInt &lhs,
const llvm::DynamicAPInt &rhs);
61llvm::DynamicAPInt
operator|(
const llvm::DynamicAPInt &lhs,
const llvm::DynamicAPInt &rhs);
62llvm::DynamicAPInt
operator^(
const llvm::DynamicAPInt &lhs,
const llvm::DynamicAPInt &rhs);
66llvm::DynamicAPInt
operator<<(
const llvm::DynamicAPInt &lhs,
const llvm::DynamicAPInt &rhs);
69llvm::DynamicAPInt
operator<<(
const llvm::DynamicAPInt &lhs, int64_t rhs);
73llvm::DynamicAPInt
operator>>(
const llvm::DynamicAPInt &lhs,
const llvm::DynamicAPInt &rhs);
77llvm::DynamicAPInt
operator>>(
const llvm::DynamicAPInt &lhs, int64_t rhs);
81template <std::
unsigned_
integral T>
82llvm::DynamicAPInt
operator>>(
const llvm::DynamicAPInt &lhs, T rhs) {
83 if (rhs >
static_cast<uint64_t
>(std::numeric_limits<int64_t>::max())) {
84 return llvm::DynamicAPInt(lhs < 0 ? -1 : 0);
86 return lhs >>
static_cast<int64_t
>(rhs);
114 const llvm::DynamicAPInt &base,
const llvm::DynamicAPInt &exp,
const llvm::DynamicAPInt &
mod
117llvm::DynamicAPInt
modInversePrime(
const llvm::DynamicAPInt &f,
const llvm::DynamicAPInt &p);
ExpressionValue mod(const llvm::SMTSolverRef &solver, const ExpressionValue &lhs, const ExpressionValue &rhs)
Expected< size_t > checkedToSize(const DynamicAPInt &value, const Twine &context)
Interval operator|(const Interval &lhs, const Interval &rhs)
hash_code hashDynamicAPInt(const DynamicAPInt &value)
Interval operator^(const Interval &lhs, const Interval &rhs)
DynamicAPInt toDynamicAPInt(StringRef str)
Expected< DynamicAPInt > parseDynamicAPInt(StringRef str)
Interval operator<<(const Interval &lhs, const Interval &rhs)
constexpr T checkedCast(U u) noexcept
Expected< uint64_t > checkedToUInt64(const DynamicAPInt &value)
Interval operator>>(const Interval &lhs, const Interval &rhs)
Interval operator&(const Interval &lhs, const Interval &rhs)
Expected< int64_t > checkedToInt64(const DynamicAPInt &value)
DynamicAPInt toSignedDynamicAPInt(ArrayRef< uint64_t > parts)
DynamicAPInt modInversePrime(const DynamicAPInt &f, const DynamicAPInt &p)
APSInt toAPSInt(const DynamicAPInt &i)
Expected< APInt > checkedToAPInt(const DynamicAPInt &value, unsigned bitWidth, bool isSigned)
DynamicAPInt modExp(const DynamicAPInt &base, const DynamicAPInt &exp, const DynamicAPInt &mod)