LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
LLZKTransformationPassPipelines.h
Go to the documentation of this file.
1
//===-- LLZKTransformationPassPipelines.h -----------------------*- 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
10
#pragma once
11
12
#include "
llzk/Dialect/Polymorphic/Transforms/TransformationPasses.h
"
13
#include "
llzk/Dialect/Struct/Transforms/TransformationPasses.h
"
14
#include "
llzk/Transforms/LLZKTransformationPasses.h
"
15
#include "
llzk/Transforms/Parsers.h
"
16
17
#include <mlir/Pass/PassManager.h>
18
#include <mlir/Pass/PassOptions.h>
19
20
namespace
llzk
{
21
24
struct
StructInliningFlatteningOptions
25
:
public
mlir::PassPipelineOptions<StructInliningFlatteningOptions> {
26
// Implementation note: these options should be kept in sync with the `FlatteningPass` ODS.
27
28
Option<unsigned>
iterationLimit
{
29
*
this
,
"max-iter"
, llvm::cl::desc(
"maximum number of flattening iterations before giving up"
),
30
llvm::cl::init(1000)
31
};
32
33
Option<polymorphic::FlatteningCleanupMode>
cleanupMode
{
34
*
this
,
"cleanup"
,
35
llvm::cl::desc(
36
"cleanup mode for flattening in this pipeline. When left as `unspecified`, these "
37
"pipelines use `main-as-root`. Overriding this is not recommended because the later "
38
"`llzk-inline-structs` pass may crash if parameterized templates survive flattening."
39
),
40
llvm::cl::init(
polymorphic::FlatteningCleanupMode::Unspecified
)
41
};
42
43
polymorphic::FlatteningPassOptions
createPassOptions
()
const
{
44
return
polymorphic::FlatteningPassOptions
{
45
.iterationLimit =
iterationLimit
, .cleanupMode =
cleanupMode
46
};
47
}
48
};
49
51
struct
FullStructInliningConfig
{
52
polymorphic::FlatteningPassOptions
flattening
;
53
bool
arrayToScalar
=
true
;
54
bool
podToScalar
=
true
;
55
component::InlineStructsPassOptions
inlining
;
56
};
57
59
struct
FullStructInliningOptions
:
public
mlir::PassPipelineOptions<FullStructInliningOptions> {
60
61
using
FlatteningOptions
=
NestedPipelineOptions<StructInliningFlatteningOptions>
;
62
63
using
InliningOptions
=
NestedPassOptions
<
64
static_cast<
std::unique_ptr<mlir::Pass> (*)()
>
(&
llzk::component::createInlineStructsPass
)>;
65
66
Option<FlatteningOptions>
flattening
{
67
*
this
,
"flattening"
,
68
llvm::cl::desc(
69
"options for the flattening pass used in this pipeline; this pipeline defaults "
70
"flattening pass cleanup to `main-as-root`"
71
),
72
llvm::cl::init(
FlatteningOptions
{})
73
};
74
Option<bool>
arrayToScalar
{
75
*
this
,
"array-to-scalar"
,
76
llvm::cl::desc(
"whether to run the array-to-scalar pass in this pipeline"
),
77
llvm::cl::init(
true
)
78
};
79
Option<bool>
podToScalar
{
80
*
this
,
"pod-to-scalar"
,
81
llvm::cl::desc(
"whether to run the pod-to-scalar pass in this pipeline"
), llvm::cl::init(
true
)
82
};
83
Option<InliningOptions>
inlining
{
84
*
this
,
"inlining"
, llvm::cl::desc(
"options for the inlining pass used in this pipeline"
),
85
llvm::cl::init(
InliningOptions
{})
86
};
87
};
88
90
struct
FullPolyLoweringConfig
{
91
FullStructInliningConfig
structInlining
;
92
PolyLoweringPassOptions
polyLowering
;
93
};
94
96
struct
FullPolyLoweringOptions
:
public
mlir::PassPipelineOptions<FullPolyLoweringOptions> {
97
98
using
StructInliningOptions
=
NestedPipelineOptions<FullStructInliningOptions>
;
99
100
using
PolyLoweringOptions
=
NestedPassOptions
<
101
static_cast<
std::unique_ptr<mlir::Pass> (*)()
>
(&
llzk::createPolyLoweringPass
)>;
102
103
Option<StructInliningOptions>
structInlining
{
104
*
this
,
"flatten-inline"
,
105
llvm::cl::desc(
106
"options for the struct flattening and inlining pipeline used before polynomial "
107
"lowering; this pipeline defaults flattening cleanup to `main-as-root`"
108
),
109
llvm::cl::init(
StructInliningOptions
{})
110
};
111
Option<PolyLoweringOptions>
polyLowering
{
112
*
this
,
"lowering"
,
113
llvm::cl::desc(
"options for the polynomial lowering pass used in this pipeline"
),
114
llvm::cl::init(
PolyLoweringOptions
{})
115
};
116
};
117
118
void
buildRemoveUnnecessaryOpsPipeline
(mlir::OpPassManager &);
119
120
void
buildRemoveUnnecessaryOpsAndDefsPipeline
(mlir::OpPassManager &);
121
122
void
buildFullPolyLoweringPipeline
(mlir::OpPassManager &,
const
FullPolyLoweringConfig
&);
123
124
void
buildProductProgramPipeline
(mlir::OpPassManager &);
125
126
void
buildFullStructInliningPipeline
(mlir::OpPassManager &,
const
FullStructInliningConfig
&);
127
128
void
buildFullInliningPipeline
(mlir::OpPassManager &,
const
FullStructInliningConfig
&);
129
130
void
registerTransformationPassPipelines
();
131
132
}
// namespace llzk
LLZKTransformationPasses.h
Parsers.h
TransformationPasses.h
TransformationPasses.h
llzk::component::createInlineStructsPass
std::unique_ptr<::mlir::Pass > createInlineStructsPass()
Definition
InlineStructsPass.cpp:107
llzk::polymorphic::FlatteningCleanupMode::Unspecified
@ Unspecified
Definition
TransformationPassEnums.h.inc:14
llzk
Definition
AnalysisPassEnums.cpp:19
llzk::buildRemoveUnnecessaryOpsAndDefsPipeline
void buildRemoveUnnecessaryOpsAndDefsPipeline(mlir::OpPassManager &pm)
Definition
LLZKTransformationPassPipelines.cpp:92
llzk::registerTransformationPassPipelines
void registerTransformationPassPipelines()
Definition
LLZKTransformationPassPipelines.cpp:132
llzk::createPolyLoweringPass
std::unique_ptr<::mlir::Pass > createPolyLoweringPass()
Definition
LLZKPolyLoweringPass.cpp:484
llzk::buildProductProgramPipeline
void buildProductProgramPipeline(OpPassManager &pm)
Definition
LLZKTransformationPassPipelines.cpp:97
llzk::buildFullStructInliningPipeline
void buildFullStructInliningPipeline(OpPassManager &pm, const FullStructInliningConfig &cfg)
Definition
LLZKTransformationPassPipelines.cpp:102
llzk::buildFullPolyLoweringPipeline
void buildFullPolyLoweringPipeline(OpPassManager &pm, const FullPolyLoweringConfig &cfg)
Definition
LLZKTransformationPassPipelines.cpp:119
llzk::buildFullInliningPipeline
void buildFullInliningPipeline(OpPassManager &pm, const FullStructInliningConfig &cfg)
Definition
LLZKTransformationPassPipelines.cpp:109
llzk::buildRemoveUnnecessaryOpsPipeline
void buildRemoveUnnecessaryOpsPipeline(mlir::OpPassManager &pm)
Definition
LLZKTransformationPassPipelines.cpp:87
llzk::FullPolyLoweringConfig
Pure C++ configuration for the full polynomial lowering pipeline.
Definition
LLZKTransformationPassPipelines.h:90
llzk::FullPolyLoweringConfig::polyLowering
PolyLoweringPassOptions polyLowering
Definition
LLZKTransformationPassPipelines.h:92
llzk::FullPolyLoweringConfig::structInlining
FullStructInliningConfig structInlining
Definition
LLZKTransformationPassPipelines.h:91
llzk::FullPolyLoweringOptions
CLI Option configuration for the full polynomial lowering pipeline.
Definition
LLZKTransformationPassPipelines.h:96
llzk::FullPolyLoweringOptions::structInlining
Option< StructInliningOptions > structInlining
Definition
LLZKTransformationPassPipelines.h:103
llzk::FullPolyLoweringOptions::StructInliningOptions
NestedPipelineOptions< FullStructInliningOptions > StructInliningOptions
Definition
LLZKTransformationPassPipelines.h:98
llzk::FullPolyLoweringOptions::polyLowering
Option< PolyLoweringOptions > polyLowering
Definition
LLZKTransformationPassPipelines.h:111
llzk::FullPolyLoweringOptions::PolyLoweringOptions
NestedPassOptions< static_cast< std::unique_ptr< mlir::Pass >(*)()>(&llzk::createPolyLoweringPass)> PolyLoweringOptions
Definition
LLZKTransformationPassPipelines.h:100
llzk::FullStructInliningConfig
Pure C++ configuration for the full struct inlining pipeline.
Definition
LLZKTransformationPassPipelines.h:51
llzk::FullStructInliningConfig::podToScalar
bool podToScalar
Definition
LLZKTransformationPassPipelines.h:54
llzk::FullStructInliningConfig::flattening
polymorphic::FlatteningPassOptions flattening
Definition
LLZKTransformationPassPipelines.h:52
llzk::FullStructInliningConfig::arrayToScalar
bool arrayToScalar
Definition
LLZKTransformationPassPipelines.h:53
llzk::FullStructInliningConfig::inlining
component::InlineStructsPassOptions inlining
Definition
LLZKTransformationPassPipelines.h:55
llzk::FullStructInliningOptions
CLI Option configuration for the full struct inlining pipeline.
Definition
LLZKTransformationPassPipelines.h:59
llzk::FullStructInliningOptions::flattening
Option< FlatteningOptions > flattening
Definition
LLZKTransformationPassPipelines.h:66
llzk::FullStructInliningOptions::FlatteningOptions
NestedPipelineOptions< StructInliningFlatteningOptions > FlatteningOptions
Definition
LLZKTransformationPassPipelines.h:61
llzk::FullStructInliningOptions::arrayToScalar
Option< bool > arrayToScalar
Definition
LLZKTransformationPassPipelines.h:74
llzk::FullStructInliningOptions::InliningOptions
NestedPassOptions< static_cast< std::unique_ptr< mlir::Pass >(*)()>(&llzk::component::createInlineStructsPass)> InliningOptions
Definition
LLZKTransformationPassPipelines.h:63
llzk::FullStructInliningOptions::inlining
Option< InliningOptions > inlining
Definition
LLZKTransformationPassPipelines.h:83
llzk::FullStructInliningOptions::podToScalar
Option< bool > podToScalar
Definition
LLZKTransformationPassPipelines.h:79
llzk::NestedPassOptions
Stores textual options for a constituent pass after validating them against that pass' native MLIR op...
Definition
Parsers.h:65
llzk::NestedPipelineOptions
Stores textual options for a constituent pipeline after validating them against that pipeline's nativ...
Definition
Parsers.h:82
llzk::PolyLoweringPassOptions
Definition
LLZKTransformationPasses.h:391
llzk::StructInliningFlatteningOptions
Typed nested options for the flattening pass when used inside the full struct-inlining and full poly-...
Definition
LLZKTransformationPassPipelines.h:25
llzk::StructInliningFlatteningOptions::createPassOptions
polymorphic::FlatteningPassOptions createPassOptions() const
Definition
LLZKTransformationPassPipelines.h:43
llzk::StructInliningFlatteningOptions::iterationLimit
Option< unsigned > iterationLimit
Definition
LLZKTransformationPassPipelines.h:28
llzk::StructInliningFlatteningOptions::cleanupMode
Option< polymorphic::FlatteningCleanupMode > cleanupMode
Definition
LLZKTransformationPassPipelines.h:33
llzk::component::InlineStructsPassOptions
Definition
TransformationPasses.h:14
llzk::polymorphic::FlatteningPassOptions
Definition
TransformationPasses.h:104
include
llzk
Transforms
LLZKTransformationPassPipelines.h
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.