LLZK 2.1.1
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
DynamicAPIntHelper.h
Go to the documentation of this file.
1//===-- DynamicAPIntHelper.h ------------------------------------*- C++ -*-===//
2//
3// Part of the LLZK Project, under the Apache License v2.0.
4// See LICENSE.txt for license information.
5// Copyright 2025 Veridise Inc.
6// SPDX-License-Identifier: Apache-2.0
7//
8//===----------------------------------------------------------------------===//
17//===----------------------------------------------------------------------===//
18
19#pragma once
20
21#include "llzk/Util/Compare.h"
22
23#include <llvm/ADT/APInt.h>
24#include <llvm/ADT/APSInt.h>
25#include <llvm/ADT/DynamicAPInt.h>
26#include <llvm/ADT/SlowDynamicAPInt.h>
27#include <llvm/ADT/StringRef.h>
28
29#include <climits>
30#include <cstddef>
31#include <cstdint>
32
33namespace llzk {
34
35llvm::DynamicAPInt operator&(const llvm::DynamicAPInt &lhs, const llvm::DynamicAPInt &rhs);
36llvm::DynamicAPInt operator|(const llvm::DynamicAPInt &lhs, const llvm::DynamicAPInt &rhs);
37llvm::DynamicAPInt operator^(const llvm::DynamicAPInt &lhs, const llvm::DynamicAPInt &rhs);
38llvm::DynamicAPInt operator<<(const llvm::DynamicAPInt &lhs, const llvm::DynamicAPInt &rhs);
39llvm::DynamicAPInt operator>>(const llvm::DynamicAPInt &lhs, const llvm::DynamicAPInt &rhs);
40
41llvm::DynamicAPInt toDynamicAPInt(llvm::StringRef str);
42
43llvm::DynamicAPInt toDynamicAPInt(const llvm::APSInt &i);
44
45inline llvm::DynamicAPInt toDynamicAPInt(const llvm::APInt &i) {
46 return toDynamicAPInt(llvm::APSInt(i));
47}
48
49inline llvm::DynamicAPInt toDynamicAPInt(size_t i) {
50 return toDynamicAPInt(llvm::APInt(sizeof(size_t) * CHAR_BIT, llzk::checkedCast<uint64_t>(i)));
51}
52
53llvm::APSInt toAPSInt(const llvm::DynamicAPInt &i);
54
58llvm::APInt toAPInt(const llvm::DynamicAPInt &i, unsigned bitWidth);
59
61llvm::APInt toExactWidthAPInt(const llvm::DynamicAPInt &i, unsigned bitWidth);
62
63llvm::DynamicAPInt modExp(
64 const llvm::DynamicAPInt &base, const llvm::DynamicAPInt &exp, const llvm::DynamicAPInt &mod
65);
66
67llvm::DynamicAPInt modInversePrime(const llvm::DynamicAPInt &f, const llvm::DynamicAPInt &p);
68
69} // namespace llzk
ExpressionValue mod(const llvm::SMTSolverRef &solver, const ExpressionValue &lhs, const ExpressionValue &rhs)
Interval operator|(const Interval &lhs, const Interval &rhs)
Interval operator^(const Interval &lhs, const Interval &rhs)
DynamicAPInt toDynamicAPInt(StringRef str)
Interval operator<<(const Interval &lhs, const Interval &rhs)
constexpr T checkedCast(U u) noexcept
Definition Compare.h:81
APInt toAPInt(const DynamicAPInt &val, unsigned bitWidth)
APInt toExactWidthAPInt(const DynamicAPInt &val, unsigned bitWidth)
Interval operator>>(const Interval &lhs, const Interval &rhs)
Interval operator&(const Interval &lhs, const Interval &rhs)
DynamicAPInt modInversePrime(const DynamicAPInt &f, const DynamicAPInt &p)
APSInt toAPSInt(const DynamicAPInt &i)
DynamicAPInt modExp(const DynamicAPInt &base, const DynamicAPInt &exp, const DynamicAPInt &mod)