LLZK
2.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
LLZKEnforceNoOverwritePass.cpp
Go to the documentation of this file.
1
//===-- LLZKEnforceNoOverwritePass.cpp --------------------------*- 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
//===----------------------------------------------------------------------===//
13
//===----------------------------------------------------------------------===//
14
15
#include "
llzk/Analysis/AnalysisUtil.h
"
16
#include "
llzk/Analysis/MemberOverwriteAnalysis.h
"
17
#include "
llzk/Dialect/Function/IR/Ops.h
"
18
#include "
llzk/Dialect/Struct/IR/Ops.h
"
19
#include "
llzk/Transforms/LLZKTransformationPasses.h
"
20
21
#include <mlir/Analysis/DataFlowFramework.h>
22
23
#include <llvm/Support/Debug.h>
24
25
#include <memory>
26
27
namespace
llzk
{
28
#define GEN_PASS_DECL_ENFORCENOMEMBEROVERWRITEPASS
29
#define GEN_PASS_DEF_ENFORCENOMEMBEROVERWRITEPASS
30
#include "
llzk/Transforms/LLZKTransformationPasses.h.inc
"
31
}
// namespace llzk
32
33
#define DEBUG_TYPE "llzk-enforce-no-overwrites-pass"
34
35
using
std::make_unique;
36
37
using namespace
mlir
;
38
39
namespace
llzk
{
40
41
using namespace
function;
42
using namespace
component;
43
44
class
EnforceNoMemberOverwritePass
45
:
public
llzk::impl::EnforceNoMemberOverwritePassBase
<EnforceNoMemberOverwritePass> {
46
47
void
runOnOperation()
override
{
48
getOperation()->walk([
this
](
StructDefOp
structDef) {
49
auto
result =
analyzeStruct
(structDef);
50
if
(failed(result)) {
51
signalPassFailure();
52
}
53
const
auto
&[overwrites, written] = *result;
54
55
for
(
auto
member : structDef.
getMemberDefs
()) {
56
if
(!written.contains(member.getSymName())) {
57
signalPassFailure();
58
}
59
}
60
61
if
(!overwrites.empty()) {
62
signalPassFailure();
63
}
64
});
65
}
66
};
67
68
std::unique_ptr<mlir::Pass>
createNoOverwritesPass
() {
69
return
make_unique<EnforceNoMemberOverwritePass>();
70
}
71
}
// namespace llzk
AnalysisUtil.h
Ops.h
LLZKTransformationPasses.h.inc
LLZKTransformationPasses.h
MemberOverwriteAnalysis.h
Ops.h
llzk::EnforceNoMemberOverwritePass
Definition
LLZKEnforceNoOverwritePass.cpp:45
llzk::component::StructDefOp
Definition
Ops.h.inc:1143
llzk::component::StructDefOp::getMemberDefs
::std::vector< MemberDefOp > getMemberDefs()
Get all MemberDefOp in this structure.
Definition
Ops.cpp:456
llzk::impl::EnforceNoMemberOverwritePassBase
Definition
LLZKEnforceNoOverwritePass.cpp:108
llzk
Definition
AnalysisPassEnums.cpp:19
llzk::analyzeStruct
llvm::FailureOr< std::pair< llvm::SetVector< Overwrite >, FuzzySet > > analyzeStruct(component::StructDefOp structDef)
Definition
MemberOverwriteAnalysis.cpp:101
llzk::createNoOverwritesPass
std::unique_ptr< mlir::Pass > createNoOverwritesPass()
Definition
LLZKEnforceNoOverwritePass.cpp:68
mlir
Definition
AnalysisPassEnums.h.inc:39
lib
Transforms
LLZKEnforceNoOverwritePass.cpp
Generated by
1.14.0
Copyright 2025 Veridise Inc. under the Apache License v2.0. Copyright 2026 Project LLZK under the Apache License v2.0.