LLZK 3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
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
11
12#include "llzk/CAPI/Builder.h"
13#include "llzk/CAPI/Support.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
23using namespace mlir;
24using namespace llzk::verif;
25
26// Include the generated CAPI
28
29MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Verif, llzk__verif, VerifDialect)
30
31void llzkVerif_attachInterfaces(MlirContext context) {
32 ::llzk::verif::attachInterfaces(*unwrap(context));
33}
34
35//===----------------------------------------------------------------------===//
36// ContractOp
37//===----------------------------------------------------------------------===//
38
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
49 builder,
50 wrap(
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
60 Verif, ContractOp, FromTargetIdentifier, MlirIdentifier sym_name, MlirIdentifier target
61) {
63 builder, wrap(llzk::create<ContractOp>(builder, location, unwrap(sym_name), unwrap(target)))
64 );
65}
66
68 Verif, ContractOp, FromTargetAttr, MlirIdentifier sym_name, MlirAttribute target
69) {
71 builder, wrap(
73 builder, location, unwrap(sym_name), cast<SymbolRefAttr>(unwrap(target))
74 )
75 )
76 );
77}
78
79//===----------------------------------------------------------------------===//
80// IncludeOp
81//===----------------------------------------------------------------------===//
82
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
93 builder, wrap(
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
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
122MlirBlock llzkVerif_InvariantOpGetBody(MlirOperation op) {
123 return wrap(unwrap_cast<InvariantOp>(op).getBody());
124}
MlirOperation mlirOpBuilderInsert(MlirOpBuilder builder, MlirOperation op)
Inserts op at the current insertion point of builder and returns it.
Definition Builder.cpp:167
MlirBlock llzkVerif_InvariantOpGetBody(MlirOperation op)
Returns the body of the invariant operation.
Definition Verif.cpp:122
void llzkVerif_attachInterfaces(MlirContext context)
Attaches the interfaces defined by the verif dialect to upstream IR elements.
Definition Verif.cpp:31
#define LLZK_DEFINE_OP_BUILD_METHOD(dialect, op,...)
Definition Support.h:31
#define LLZK_DEFINE_SUFFIX_OP_BUILD_METHOD(dialect, op, suffix,...)
Definition Support.h:27
void attachInterfaces(mlir::MLIRContext &context)
Attaches the interfaces defined by the verif dialect to upstream IR elements.
mlir::Operation * create(MlirOpBuilder cBuilder, MlirLocation cLocation, Args &&...args)
Creates a new operation using an ODS build method.
Definition Builder.h:41
auto unwrap_cast(auto &from)
Definition Support.h:51
Representation of an mlir::ValueRange
Definition Support.h:47
MlirValue const * values
Pointer to the first value in the range.
Definition Support.h:49
intptr_t size
Number of values in the range.
Definition Support.h:51