LLZK
3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Toggle main menu visibility
Loading...
Searching...
No Matches
llzk-opt.cpp
Go to the documentation of this file.
1
//===-- llzk-opt.cpp - LLZK opt tool ----------------------------*- 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
//===----------------------------------------------------------------------===//
14
//===----------------------------------------------------------------------===//
15
16
#include "r1cs/Dialect/IR/Dialect.h"
17
#include "r1cs/DialectRegistration.h"
18
#include "r1cs/Transforms/TransformationPassPipelines.h"
19
#include "r1cs/Transforms/TransformationPasses.h"
20
#include "smt/Conversions/ConversionPasses.h"
21
#include "
tools/config.h
"
22
#include "zklean/Conversions/Passes.h"
23
#include "zklean/DialectRegistration.h"
24
25
#include "
llzk/Analysis/AnalysisPasses.h
"
26
#include "
llzk/Config/Config.h
"
27
#include "
llzk/Dialect/Array/Transforms/TransformationPasses.h
"
28
#include "
llzk/Dialect/Bool/Transforms/TransformationPasses.h
"
29
#include "
llzk/Dialect/Include/Transforms/InlineIncludesPass.h
"
30
#include "
llzk/Dialect/Include/Util/IncludeHelper.h
"
31
#include "
llzk/Dialect/InitDialects.h
"
32
#include "
llzk/Dialect/POD/Transforms/TransformationPasses.h
"
33
#include "
llzk/Dialect/Polymorphic/Transforms/TransformationPasses.h
"
34
#include "
llzk/Dialect/Struct/Transforms/TransformationPasses.h
"
35
#include "
llzk/Transforms/LLZKTransformationPassPipelines.h
"
36
#include "
llzk/Transforms/LLZKTransformationPasses.h
"
37
#include "
llzk/Transforms/SpecializedMemoryPasses.h
"
38
#include "
llzk/Validators/LLZKValidationPasses.h
"
39
40
#include <mlir/Dialect/Func/Extensions/InlinerExtension.h>
41
#include <mlir/Dialect/Func/IR/FuncOps.h>
42
#include <mlir/Dialect/SCF/IR/SCF.h>
43
#include <mlir/IR/DialectRegistry.h>
44
#include <mlir/Pass/PassManager.h>
45
#include <mlir/Pass/PassRegistry.h>
46
#include <mlir/Tools/mlir-opt/MlirOptMain.h>
47
#include <mlir/Transforms/Passes.h>
48
49
#include <llvm/ADT/StringRef.h>
50
#include <llvm/Support/CommandLine.h>
51
#include <llvm/Support/PrettyStackTrace.h>
52
#include <llvm/Support/Signals.h>
53
54
#if LLZK_WITH_PCL
55
#include "pcl/Conversion/ConversionPasses.h"
56
#include "pcl/Dialect/IR/Dialect.h"
57
#include "pcl/DialectRegistration.h"
58
#include "pcl/Transforms/TransformationPasses.h"
59
#endif
// LLZK_WITH_PCL
60
61
static
llvm::cl::list<std::string> IncludeDirs(
62
"I"
, llvm::cl::desc(
"Directory of include files"
), llvm::cl::value_desc(
"directory"
),
63
llvm::cl::Prefix
64
);
65
66
static
llvm::cl::opt<bool>
67
PrintAllOps(
"print-llzk-ops"
, llvm::cl::desc(
"Print a list of all ops registered in LLZK"
));
68
72
namespace
mlir_hotfix
{
73
74
inline
static
void
registerTransformsPasses() {
75
mlir::registerCSE();
76
mlir::registerCanonicalizer();
77
mlir::registerCompositeFixedPointPass();
78
mlir::registerControlFlowSink();
79
mlir::registerGenerateRuntimeVerification();
80
mlir::registerInliner();
81
mlir::registerLocationSnapshot();
82
mlir::registerLoopInvariantCodeMotion();
83
mlir::registerLoopInvariantSubsetHoisting();
84
mlir::registerMem2Reg();
85
mlir::registerPrintIRPass();
86
mlir::registerPrintOpStats();
87
mlir::registerPass(
llzk::createRemoveDeadValuesWorkaroundPass
);
88
mlir::registerSCCP();
89
mlir::registerSROA();
90
mlir::registerStripDebugInfo();
91
mlir::registerSymbolDCE();
92
mlir::registerSymbolPrivatize();
93
mlir::registerTopologicalSort();
94
mlir::registerViewOpGraph();
95
}
96
97
}
// namespace mlir_hotfix
98
99
int
main
(
int
argc,
char
**argv) {
100
llvm::sys::PrintStackTraceOnErrorSignal(llvm::StringRef());
101
llvm::setBugReportMsg(
102
"PLEASE submit a bug report to "
BUG_REPORT_URL
103
" and include the crash backtrace, relevant LLZK files,"
104
" and associated run script(s).\n"
105
);
106
llvm::cl::AddExtraVersionPrinter([](llvm::raw_ostream &os) {
107
os <<
"\nLLZK ("
LLZK_URL
"):\n LLZK version "
LLZK_VERSION_STRING
"\n"
;
108
});
109
110
// MLIR initialization
111
mlir::DialectRegistry registry;
112
// registers CSE, etc
113
mlir_hotfix::registerTransformsPasses();
114
llzk::registerAllDialects
(registry);
115
r1cs::registerAllDialects(registry);
116
zklean::registerAllDialects(registry);
117
mlir::func::registerInlinerExtension(registry);
118
#if LLZK_WITH_PCL
119
pcl::registerAllDialects(registry);
120
#endif
// LLZK_WITH_PCL
121
122
llzk::registerValidationPasses
();
123
llzk::registerAnalysisPasses
();
124
llzk::registerTransformationPasses
();
125
llzk::component::registerTransformationPasses
();
126
llzk::array::registerTransformationPasses
();
127
llzk::boolean::registerTransformationPasses
();
128
llzk::include::registerTransformationPasses
();
129
llzk::polymorphic::registerTransformationPasses
();
130
llzk::pod::registerTransformationPasses
();
131
r1cs::registerTransformationPasses();
132
zklean::registerConversionPasses();
133
#if LLZK_WITH_PCL
134
pcl::registerPCLConversionPasses();
135
pcl::registerTransformationPasses();
136
#endif
// LLZK_WITH_PCL
137
llzk::smt::registerConversionPasses();
138
139
llzk::registerTransformationPassPipelines
();
140
r1cs::registerTransformationPassPipelines();
141
142
// Register and parse command line options.
143
std::string inputFilename, outputFilename;
144
std::tie(inputFilename, outputFilename) =
145
registerAndParseCLIOptions(argc, argv,
"llzk-opt"
, registry);
146
147
if
(PrintAllOps) {
148
mlir::MLIRContext context;
149
context.appendDialectRegistry(registry);
150
context.loadAllAvailableDialects();
151
llvm::outs() <<
"All ops registered in LLZK IR: {\n"
;
152
for
(
const
auto
&opName : context.getRegisteredOperations()) {
153
llvm::outs().indent(2) << opName.getStringRef() <<
'\n'
;
154
}
155
llvm::outs() <<
"}\n"
;
156
return
EXIT_SUCCESS;
157
}
158
159
// Set the include directories from CL option
160
if
(mlir::failed(
llzk::GlobalSourceMgr::get
().setup(IncludeDirs))) {
161
return
EXIT_FAILURE;
162
}
163
164
// Run 'mlir-opt'
165
auto
result = mlir::MlirOptMain(argc, argv, inputFilename, outputFilename, registry);
166
return
mlir::asMainReturnCode(result);
167
}
AnalysisPasses.h
TransformationPasses.h
TransformationPasses.h
Config.h
LLZK_VERSION_STRING
#define LLZK_VERSION_STRING
Definition
Config.h:12
LLZK_URL
#define LLZK_URL
Definition
Config.h:17
IncludeHelper.h
InlineIncludesPass.h
LLZKTransformationPassPipelines.h
LLZKTransformationPasses.h
LLZKValidationPasses.h
TransformationPasses.h
TransformationPasses.h
SpecializedMemoryPasses.h
Provides SpecializedSROA<AllocOpTy> and SpecializedMem2Reg<AllocOpTy>: pass templates that replicate ...
TransformationPasses.h
llzk::GlobalSourceMgr::get
static GlobalSourceMgr & get()
Definition
IncludeHelper.h:27
config.h
BUG_REPORT_URL
#define BUG_REPORT_URL
Definition
config.h:15
main
int main(int argc, char **argv)
Definition
llzk-opt.cpp:99
InitDialects.h
This file defines llzk::registerAllDialects.
llzk::array::registerTransformationPasses
void registerTransformationPasses()
Definition
TransformationPasses.h:119
llzk::boolean::registerTransformationPasses
void registerTransformationPasses()
Definition
TransformationPasses.h:119
llzk::component::registerTransformationPasses
void registerTransformationPasses()
Definition
TransformationPasses.h:139
llzk::include::registerTransformationPasses
void registerTransformationPasses()
Definition
InlineIncludesPass.h:119
llzk::pod::registerTransformationPasses
void registerTransformationPasses()
Definition
TransformationPasses.h:119
llzk::polymorphic::registerTransformationPasses
void registerTransformationPasses()
Definition
TransformationPasses.h:493
llzk::registerTransformationPassPipelines
void registerTransformationPassPipelines()
Definition
LLZKTransformationPassPipelines.cpp:132
llzk::createRemoveDeadValuesWorkaroundPass
std::unique_ptr< mlir::Pass > createRemoveDeadValuesWorkaroundPass()
Definition
SpecializedMemoryPasses.h:192
llzk::registerValidationPasses
void registerValidationPasses()
Definition
LLZKValidationPasses.h:119
llzk::registerAllDialects
void registerAllDialects(mlir::DialectRegistry ®istry)
Definition
InitDialects.cpp:35
llzk::registerAnalysisPasses
void registerAnalysisPasses()
Definition
AnalysisPasses.h:968
mlir_hotfix
Replace mlir::registerTransformsPasses() to register a custom remove-dead-values pass because MLIR ve...
Definition
llzk-opt.cpp:72
tools
llzk-opt
llzk-opt.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.