LLZK 3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
OpTraits.h
Go to the documentation of this file.
1//===-- OpTraits.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//===----------------------------------------------------------------------===//
9
10#pragma once
11
12#include <mlir/IR/OpDefinition.h>
13#include <mlir/IR/Operation.h>
14#include <mlir/Support/LogicalResult.h>
15
16namespace llzk::function {
17
18mlir::LogicalResult verifyConstraintGenTraitImpl(mlir::Operation *op);
19mlir::LogicalResult verifyWitnessGenTraitImpl(mlir::Operation *op);
20mlir::LogicalResult verifyNotFieldNativeTraitImpl(mlir::Operation *op);
21
29mlir::LogicalResult
30verifyVerificationTraitImpl(mlir::Operation *op, llvm::function_ref<mlir::LogicalResult()>);
31
34template <typename TypeClass>
35// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
36class ConstraintGen : public mlir::OpTrait::TraitBase<TypeClass, ConstraintGen> {
37public:
38 inline static mlir::LogicalResult verifyTrait(mlir::Operation *op) {
40 }
41};
42
45template <typename TypeClass>
46// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
47class WitnessGen : public mlir::OpTrait::TraitBase<TypeClass, WitnessGen> {
48public:
49 inline static mlir::LogicalResult verifyTrait(mlir::Operation *op) {
51 }
52};
53
56template <typename TypeClass>
57// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
58class NotFieldNative : public mlir::OpTrait::TraitBase<TypeClass, NotFieldNative> {
59public:
60 inline static mlir::LogicalResult verifyTrait(mlir::Operation *op) {
62 }
63};
64
66template <template <typename T> class... Extra> struct Verification {
67 template <typename TypeClass>
68 // NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
69 class Impl : public mlir::OpTrait::TraitBase<TypeClass, Impl> {
70 public:
71 inline static mlir::LogicalResult verifyTrait(mlir::Operation *op) {
72 return verifyVerificationTraitImpl(op, [op]() {
73 return mlir::success((mlir::succeeded(Extra<TypeClass>::verifyTrait(op)) && ...));
74 });
75 }
76 };
77};
78
79template <> struct Verification<> {
80 template <typename TypeClass>
81 // NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
82 class Impl : public mlir::OpTrait::TraitBase<TypeClass, Impl> {
83 public:
84 inline static mlir::LogicalResult verifyTrait(mlir::Operation *op) {
85 return verifyVerificationTraitImpl(op, nullptr);
86 }
87 };
88};
89
90} // namespace llzk::function
Marker for ops that are specific to constraint generation.
Definition OpTraits.h:36
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition OpTraits.h:38
Marker for ops over llzk.felt type operands that are not native to finite field arithmetic.
Definition OpTraits.h:58
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition OpTraits.h:60
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition OpTraits.h:71
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition OpTraits.h:84
Marker for ops that are specific to witness generation.
Definition OpTraits.h:47
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition OpTraits.h:49
LogicalResult verifyNotFieldNativeTraitImpl(Operation *op)
Definition OpTraits.cpp:66
LogicalResult verifyVerificationTraitImpl(Operation *op, llvm::function_ref< LogicalResult()> check)
Definition OpTraits.cpp:73
LogicalResult verifyConstraintGenTraitImpl(Operation *op)
Definition OpTraits.cpp:50
LogicalResult verifyWitnessGenTraitImpl(Operation *op)
Definition OpTraits.cpp:58
Marker for ops in the verif dialect that can be inlined inside functions.
Definition OpTraits.h:66