LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
Ops.cpp
Go to the documentation of this file.
1
//===-- Ops.cpp - Constrain operation implementations -----------*- 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
#include "
llzk/Dialect/Constrain/IR/Ops.h
"
11
12
#include "
llzk/Dialect/Array/IR/Types.h
"
13
#include "
llzk/Dialect/Function/IR/OpTraits.h
"
14
#include "
llzk/Dialect/Function/IR/Ops.h
"
15
#include "
llzk/Util/BuilderHelper.h
"
16
#include "
llzk/Util/ErrorHelper.h
"
17
18
// TableGen'd implementation files
19
#define GET_OP_CLASSES
20
#include "
llzk/Dialect/Constrain/IR/Ops.cpp.inc
"
21
22
using namespace
mlir
;
23
using namespace
llzk::array
;
24
25
namespace
llzk::constrain
{
26
27
//===------------------------------------------------------------------===//
28
// EmitEqualityOp
29
//===------------------------------------------------------------------===//
30
31
LogicalResult
EmitEqualityOp::verifySymbolUses
(SymbolTableCollection &tables) {
32
// Ensure any SymbolRef used in the type are valid
33
return
verifyTypeResolution
(
34
tables, *
this
, ArrayRef<Type> {
getLhs
().getType(),
getRhs
().getType()}
35
);
36
}
37
38
Type EmitEqualityOp::inferRHS(Type lhsType) {
return
lhsType; }
39
40
//===------------------------------------------------------------------===//
41
// EmitContainmentOp
42
//===------------------------------------------------------------------===//
43
44
LogicalResult
EmitContainmentOp::verifySymbolUses
(SymbolTableCollection &tables) {
45
// Ensure any SymbolRef used in the type are valid
46
return
verifyTypeResolution
(
47
tables, *
this
, ArrayRef<Type> {
getLhs
().getType(),
getRhs
().getType()}
48
);
49
}
50
51
LogicalResult
EmitContainmentOp::verify
() {
52
auto
arrType = llvm::cast<ArrayType>(
getLhs
().getType());
// per the ODS definition
53
OwningEmitErrorFn
errFn =
getEmitOpErrFn
(
this
);
54
55
if
(failed(
verifySubArrayOrElementType
(errFn, arrType,
getRhs
().getType()))) {
56
// error already reported
57
return
failure();
58
}
59
// The types are known to unify at this point; we can now check that the
60
// array element type is a valid emit equal type.
61
Type elemTy = arrType.getElementType();
62
if
(!
isValidEmitEqType
(elemTy)) {
63
return
errFn().append(
64
"element type must be any LLZK type, excluding struct and string types, but got "
, elemTy
65
);
66
}
67
return
success();
68
}
69
70
}
// namespace llzk::constrain
Types.h
BuilderHelper.h
Ops.cpp.inc
Ops.h
ErrorHelper.h
Ops.h
OpTraits.h
llzk::constrain::EmitContainmentOp::verify
::llvm::LogicalResult verify()
Definition
Ops.cpp:51
llzk::constrain::EmitContainmentOp::verifySymbolUses
::llvm::LogicalResult verifySymbolUses(::mlir::SymbolTableCollection &symbolTable)
Definition
Ops.cpp:44
llzk::constrain::EmitContainmentOp::getRhs
::mlir::TypedValue<::mlir::Type > getRhs()
Definition
Ops.h.inc:130
llzk::constrain::EmitContainmentOp::getLhs
::mlir::TypedValue<::llzk::array::ArrayType > getLhs()
Definition
Ops.h.inc:126
llzk::constrain::EmitEqualityOp::getLhs
::mlir::TypedValue<::mlir::Type > getLhs()
Definition
Ops.h.inc:272
llzk::constrain::EmitEqualityOp::verifySymbolUses
::llvm::LogicalResult verifySymbolUses(::mlir::SymbolTableCollection &symbolTable)
Definition
Ops.cpp:31
llzk::constrain::EmitEqualityOp::getRhs
::mlir::TypedValue<::mlir::Type > getRhs()
Definition
Ops.h.inc:276
llzk::array
Definition
Ops.cpp:43
llzk::constrain
Definition
Ops.cpp:25
llzk::verifySubArrayOrElementType
LogicalResult verifySubArrayOrElementType(EmitErrorFn emitError, ArrayType arrayType, Type subArrayOrElemType)
Definition
TypeHelper.cpp:1119
llzk::isValidEmitEqType
bool isValidEmitEqType(Type type)
Definition
TypeHelper.cpp:524
llzk::verifyTypeResolution
LogicalResult verifyTypeResolution(SymbolTableCollection &tables, Operation *origin, Type ty)
Definition
SymbolHelper.cpp:484
llzk::getEmitOpErrFn
OwningEmitErrorFn getEmitOpErrFn(mlir::Operation *op)
Definition
ErrorHelper.h:151
llzk::OwningEmitErrorFn
std::function< InFlightDiagnosticWrapper()> OwningEmitErrorFn
This type is required in cases like the functions below to take ownership of the lambda so it is not ...
Definition
ErrorHelper.h:149
mlir
Definition
ValueModel.h:30
lib
Dialect
Constrain
IR
Ops.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.