LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
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
16
namespace
llzk::function
{
17
18
mlir::LogicalResult
verifyConstraintGenTraitImpl
(mlir::Operation *op);
19
mlir::LogicalResult
verifyWitnessGenTraitImpl
(mlir::Operation *op);
20
mlir::LogicalResult
verifyNotFieldNativeTraitImpl
(mlir::Operation *op);
21
29
mlir::LogicalResult
30
verifyVerificationTraitImpl
(mlir::Operation *op, llvm::function_ref<mlir::LogicalResult()>);
31
34
template
<
typename
TypeClass>
35
// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
36
class
ConstraintGen
:
public
mlir::OpTrait::TraitBase<TypeClass, ConstraintGen> {
37
public
:
38
inline
static
mlir::LogicalResult
verifyTrait
(mlir::Operation *op) {
39
return
verifyConstraintGenTraitImpl
(op);
40
}
41
};
42
45
template
<
typename
TypeClass>
46
// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
47
class
WitnessGen
:
public
mlir::OpTrait::TraitBase<TypeClass, WitnessGen> {
48
public
:
49
inline
static
mlir::LogicalResult
verifyTrait
(mlir::Operation *op) {
50
return
verifyWitnessGenTraitImpl
(op);
51
}
52
};
53
56
template
<
typename
TypeClass>
57
// NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility)
58
class
NotFieldNative
:
public
mlir::OpTrait::TraitBase<TypeClass, NotFieldNative> {
59
public
:
60
inline
static
mlir::LogicalResult
verifyTrait
(mlir::Operation *op) {
61
return
verifyNotFieldNativeTraitImpl
(op);
62
}
63
};
64
66
template
<
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
79
template
<>
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
llzk::function::ConstraintGen
Marker for ops that are specific to constraint generation.
Definition
OpTraits.h:36
llzk::function::ConstraintGen::verifyTrait
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition
OpTraits.h:38
llzk::function::NotFieldNative
Marker for ops over llzk.felt type operands that are not native to finite field arithmetic.
Definition
OpTraits.h:58
llzk::function::NotFieldNative::verifyTrait
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition
OpTraits.h:60
llzk::function::Verification::Impl
Definition
OpTraits.h:69
llzk::function::Verification::Impl::verifyTrait
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition
OpTraits.h:71
llzk::function::Verification<>::Impl
Definition
OpTraits.h:82
llzk::function::Verification<>::Impl::verifyTrait
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition
OpTraits.h:84
llzk::function::WitnessGen
Marker for ops that are specific to witness generation.
Definition
OpTraits.h:47
llzk::function::WitnessGen::verifyTrait
static mlir::LogicalResult verifyTrait(mlir::Operation *op)
Definition
OpTraits.h:49
llzk::function
Definition
Ops.cpp:50
llzk::function::verifyNotFieldNativeTraitImpl
LogicalResult verifyNotFieldNativeTraitImpl(Operation *op)
Definition
OpTraits.cpp:66
llzk::function::verifyVerificationTraitImpl
LogicalResult verifyVerificationTraitImpl(Operation *op, llvm::function_ref< LogicalResult()> check)
Definition
OpTraits.cpp:73
llzk::function::verifyConstraintGenTraitImpl
LogicalResult verifyConstraintGenTraitImpl(Operation *op)
Definition
OpTraits.cpp:50
llzk::function::verifyWitnessGenTraitImpl
LogicalResult verifyWitnessGenTraitImpl(Operation *op)
Definition
OpTraits.cpp:58
llzk::function::Verification
Marker for ops in the verif dialect that can be inlined inside functions.
Definition
OpTraits.h:66
include
llzk
Dialect
Function
IR
OpTraits.h
Generated by
1.17.0
Copyright 2025 Veridise Inc. under the Apache License v2.0. Copyright 2026 Project LLZK under the Apache License v2.0.