LLZK 2.1.1
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
31//===----------------------------------------------------------------------===//
32// ContractOp
33//===----------------------------------------------------------------------===//
34
36 Verif, ContractOp, MlirIdentifier sym_name, MlirAttribute target, MlirAttribute function_type,
37 MlirAttribute arg_attrs
38) {
39 ArrayAttr argAttrs;
40 if (!mlirAttributeIsNull(arg_attrs)) {
41 argAttrs = cast<ArrayAttr>(unwrap(arg_attrs));
42 }
43
45 builder,
46 wrap(
48 builder, location, unwrap(sym_name), cast<SymbolRefAttr>(unwrap(target)),
49 cast<FunctionType>(cast<TypeAttr>(unwrap(function_type)).getValue()), argAttrs
50 )
51 )
52 );
53}
54
56 Verif, ContractOp, FromTargetIdentifier, MlirIdentifier sym_name, MlirIdentifier target
57) {
59 builder, wrap(llzk::create<ContractOp>(builder, location, unwrap(sym_name), unwrap(target)))
60 );
61}
62
64 Verif, ContractOp, FromTargetAttr, MlirIdentifier sym_name, MlirAttribute target
65) {
67 builder, wrap(
69 builder, location, unwrap(sym_name), cast<SymbolRefAttr>(unwrap(target))
70 )
71 )
72 );
73}
74
75//===----------------------------------------------------------------------===//
76// IncludeOp
77//===----------------------------------------------------------------------===//
78
80 Verif, IncludeOp, MlirAttribute callee, MlirValueRange argOperands, MlirAttribute templateParams
81) {
82 SmallVector<Value> argOperandsSto;
83 ArrayAttr paramsAttr;
84 if (!mlirAttributeIsNull(templateParams)) {
85 paramsAttr = cast<ArrayAttr>(unwrap(templateParams));
86 }
87
89 builder, wrap(
91 builder, location, cast<SymbolRefAttr>(unwrap(callee)),
92 unwrapList(argOperands.size, argOperands.values, argOperandsSto),
93 paramsAttr ? paramsAttr.getValue() : ArrayRef<Attribute> {}
94 )
95 )
96 );
97}
MlirOperation mlirOpBuilderInsert(MlirOpBuilder builder, MlirOperation op)
Inserts op at the current insertion point of builder and returns it.
Definition Builder.cpp:167
#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
mlir::Operation * create(MlirOpBuilder cBuilder, MlirLocation cLocation, Args &&...args)
Creates a new operation using an ODS build method.
Definition Builder.h:41
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