LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
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_DEF_ENFORCENOMEMBEROVERWRITEPASS
29
#include "
llzk/Transforms/LLZKTransformationPasses.h.inc
"
30
}
// namespace llzk
31
32
#define DEBUG_TYPE "llzk-enforce-no-overwrites-pass"
33
34
namespace
{
35
36
using namespace
llzk
;
37
38
class
PassImpl :
public
llzk::impl::EnforceNoMemberOverwritePassBase
<PassImpl> {
39
using
Base = EnforceNoMemberOverwritePassBase<PassImpl>;
40
using
Base::Base;
41
42
void
runOnOperation()
override
{
43
getOperation()->walk([
this
](
component::StructDefOp
structDef) {
44
auto
result =
analyzeStruct
(structDef);
45
if
(failed(result)) {
46
signalPassFailure();
47
}
48
const
auto
&[overwrites, written] = *result;
49
50
for
(
auto
member : structDef.
getMemberDefs
()) {
51
if
(!written.contains(member.getSymName())) {
52
signalPassFailure();
53
}
54
}
55
56
if
(!overwrites.empty()) {
57
signalPassFailure();
58
}
59
});
60
}
61
};
62
63
}
// namespace
AnalysisUtil.h
Ops.h
LLZKTransformationPasses.h.inc
LLZKTransformationPasses.h
MemberOverwriteAnalysis.h
Ops.h
llzk::component::StructDefOp
Definition
Ops.h.inc:1148
llzk::component::StructDefOp::getMemberDefs
::std::vector< MemberDefOp > getMemberDefs()
Get all MemberDefOp in this structure.
Definition
Ops.cpp:454
llzk::impl::EnforceNoMemberOverwritePassBase
Definition
LLZKEnforceNoOverwritePass.cpp:141
llzk
Definition
AnalysisPassEnums.cpp:19
llzk::analyzeStruct
llvm::FailureOr< std::pair< llvm::SetVector< Overwrite >, FuzzySet > > analyzeStruct(component::StructDefOp structDef)
Definition
MemberOverwriteAnalysis.cpp:101
lib
Transforms
LLZKEnforceNoOverwritePass.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.