LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
Verif.cpp
Go to the documentation of this file.
1
//===-- Verif.cpp - Verif dialect C API implementation --------*- C++ -*-===//
2
//
3
// Part of the LLZK Project, under the Apache License v2.0.
4
// See LICENSE.txt for license information.
5
// Copyright 2026 Project LLZK
6
// SPDX-License-Identifier: Apache-2.0
7
//
8
//===----------------------------------------------------------------------===//
9
10
#include "
llzk-c/Dialect/Verif.h
"
11
12
#include "
llzk/CAPI/Builder.h
"
13
#include "
llzk/CAPI/Support.h
"
14
#include "
llzk/Dialect/Verif/IR/Dialect.h
"
15
#include "
llzk/Dialect/Verif/IR/Ops.h
"
16
17
#include <mlir-c/BuiltinAttributes.h>
18
19
#include <mlir/CAPI/Registration.h>
20
#include <mlir/CAPI/Wrap.h>
21
#include <mlir/IR/BuiltinAttributes.h>
22
23
using namespace
mlir
;
24
using namespace
llzk::verif
;
25
26
// Include the generated CAPI
27
#include "
llzk/Dialect/Verif/IR/Ops.capi.cpp.inc
"
28
29
MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Verif, llzk__verif,
VerifDialect
)
30
31
void
llzkVerif_attachInterfaces
(MlirContext context) {
32
::llzk::verif::attachInterfaces
(*unwrap(context));
33
}
34
35
//===----------------------------------------------------------------------===//
36
// ContractOp
37
//===----------------------------------------------------------------------===//
38
39
LLZK_DEFINE_OP_BUILD_METHOD
(
40
Verif,
ContractOp
, MlirIdentifier sym_name, MlirAttribute target, MlirAttribute function_type,
41
MlirAttribute arg_attrs
42
) {
43
ArrayAttr argAttrs;
44
if
(!mlirAttributeIsNull(arg_attrs)) {
45
argAttrs =
cast<ArrayAttr>
(unwrap(arg_attrs));
46
}
47
48
return
mlirOpBuilderInsert
(
49
builder,
50
wrap(
51
llzk::create<ContractOp>
(
52
builder, location, unwrap(sym_name),
cast<SymbolRefAttr>
(unwrap(target)),
53
cast<FunctionType>
(
cast<TypeAttr>
(unwrap(function_type)).getValue()), argAttrs
54
)
55
)
56
);
57
}
58
59
LLZK_DEFINE_SUFFIX_OP_BUILD_METHOD
(
60
Verif,
ContractOp
, FromTargetIdentifier, MlirIdentifier sym_name, MlirIdentifier target
61
) {
62
return
mlirOpBuilderInsert
(
63
builder, wrap(
llzk::create<ContractOp>
(builder, location, unwrap(sym_name), unwrap(target)))
64
);
65
}
66
67
LLZK_DEFINE_SUFFIX_OP_BUILD_METHOD
(
68
Verif,
ContractOp
, FromTargetAttr, MlirIdentifier sym_name, MlirAttribute target
69
) {
70
return
mlirOpBuilderInsert
(
71
builder, wrap(
72
llzk::create<ContractOp>
(
73
builder, location, unwrap(sym_name),
cast<SymbolRefAttr>
(unwrap(target))
74
)
75
)
76
);
77
}
78
79
//===----------------------------------------------------------------------===//
80
// IncludeOp
81
//===----------------------------------------------------------------------===//
82
83
LLZK_DEFINE_OP_BUILD_METHOD
(
84
Verif,
IncludeOp
, MlirAttribute callee,
MlirValueRange
argOperands, MlirAttribute templateParams
85
) {
86
SmallVector<Value> argOperandsSto;
87
ArrayAttr paramsAttr;
88
if
(!mlirAttributeIsNull(templateParams)) {
89
paramsAttr =
cast<ArrayAttr>
(unwrap(templateParams));
90
}
91
92
return
mlirOpBuilderInsert
(
93
builder, wrap(
94
llzk::create<IncludeOp>
(
95
builder, location,
cast<SymbolRefAttr>
(unwrap(callee)),
96
unwrapList(argOperands.
size
, argOperands.
values
, argOperandsSto),
97
paramsAttr ? paramsAttr.getValue() : ArrayRef<Attribute> {}
98
)
99
)
100
);
101
}
102
103
//===----------------------------------------------------------------------===//
104
// InvariantOp
105
//===----------------------------------------------------------------------===//
106
107
LLZK_DEFINE_OP_BUILD_METHOD
(
108
Verif,
InvariantOp
, MlirStringRef loopName, intptr_t numArgs, MlirType
const
*types,
109
MlirLocation
const
*locs
110
) {
111
SmallVector<Type> typesSto;
112
SmallVector<Location> locsSto;
113
auto
typesRef = unwrapList(numArgs, types, typesSto);
114
auto
locsRef = unwrapList(numArgs, locs, locsSto);
115
116
return
mlirOpBuilderInsert
(
117
builder,
118
wrap(
llzk::create<InvariantOp>
(builder, location, unwrap(loopName), typesRef, locsRef))
119
);
120
}
121
122
MlirBlock
llzkVerif_InvariantOpGetBody
(MlirOperation op) {
123
return
wrap(
unwrap_cast<InvariantOp>
(op).getBody());
124
}
mlirOpBuilderInsert
MlirOperation mlirOpBuilderInsert(MlirOpBuilder builder, MlirOperation op)
Inserts op at the current insertion point of builder and returns it.
Definition
Builder.cpp:167
Dialect.h
Ops.capi.cpp.inc
Ops.h
llzkVerif_InvariantOpGetBody
MlirBlock llzkVerif_InvariantOpGetBody(MlirOperation op)
Returns the body of the invariant operation.
Definition
Verif.cpp:122
llzkVerif_attachInterfaces
void llzkVerif_attachInterfaces(MlirContext context)
Attaches the interfaces defined by the verif dialect to upstream IR elements.
Definition
Verif.cpp:31
Verif.h
llzk::verif::ContractOp
Definition
Ops.h.inc:514
llzk::verif::IncludeOp
Definition
Ops.h.inc:1337
llzk::verif::InvariantOp
Definition
Ops.h.inc:1827
llzk::verif::VerifDialect
Definition
Dialect.h.inc:13
Builder.h
Support.h
LLZK_DEFINE_OP_BUILD_METHOD
#define LLZK_DEFINE_OP_BUILD_METHOD(dialect, op,...)
Definition
Support.h:31
LLZK_DEFINE_SUFFIX_OP_BUILD_METHOD
#define LLZK_DEFINE_SUFFIX_OP_BUILD_METHOD(dialect, op, suffix,...)
Definition
Support.h:27
llzk::cast
Definition
Ops.cpp:56
llzk::verif
Definition
Ops.cpp:312
llzk::verif::attachInterfaces
void attachInterfaces(mlir::MLIRContext &context)
Attaches the interfaces defined by the verif dialect to upstream IR elements.
llzk::create
mlir::Operation * create(MlirOpBuilder cBuilder, MlirLocation cLocation, Args &&...args)
Creates a new operation using an ODS build method.
Definition
Builder.h:41
mlir
Definition
ValueModel.h:30
mlir::unwrap_cast
auto unwrap_cast(auto &from)
Definition
Support.h:51
MlirValueRange
Representation of an mlir::ValueRange.
Definition
Support.h:47
MlirValueRange::values
MlirValue const * values
Pointer to the first value in the range.
Definition
Support.h:49
MlirValueRange::size
intptr_t size
Number of values in the range.
Definition
Support.h:51
lib
CAPI
Dialect
Verif.cpp
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.