LLZK 0.1.0
Veridise's ZK Language IR
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
17#include "llzk/Config/Config.h"
25#include "r1cs/Dialect/IR/Dialect.h"
26#include "r1cs/InitAllDialects.h"
27
28#include <mlir/IR/DialectRegistry.h>
29#include <mlir/Pass/PassManager.h>
30#include <mlir/Pass/PassRegistry.h>
31#include <mlir/Tools/mlir-opt/MlirOptMain.h>
32
33#include <llvm/ADT/StringRef.h>
34#include <llvm/Support/CommandLine.h>
35#include <llvm/Support/PrettyStackTrace.h>
36#include <llvm/Support/Signals.h>
37
38#include "tools/config.h"
39
40#if LLZK_WITH_PCL
41#include <pcl/Dialect/IR/Dialect.h>
42#include <pcl/InitAllDialects.h>
43#include <pcl/Transforms/PCLTransformationPasses.h>
44#endif // LLZK_WITH_PCL
45
46static llvm::cl::list<std::string> IncludeDirs(
47 "I", llvm::cl::desc("Directory of include files"), llvm::cl::value_desc("directory"),
48 llvm::cl::Prefix
49);
50
51static llvm::cl::opt<bool>
52 PrintAllOps("print-llzk-ops", llvm::cl::desc("Print a list of all ops registered in LLZK"));
53
54int main(int argc, char **argv) {
55 llvm::sys::PrintStackTraceOnErrorSignal(llvm::StringRef());
56 llvm::setBugReportMsg(
57 "PLEASE submit a bug report to " BUG_REPORT_URL
58 " and include the crash backtrace, relevant LLZK files,"
59 " and associated run script(s).\n"
60 );
61 llvm::cl::AddExtraVersionPrinter([](llvm::raw_ostream &os) {
62 os << "\nLLZK (" LLZK_URL "):\n LLZK version " LLZK_VERSION_STRING "\n";
63 });
64
65 // MLIR initialization
66 mlir::DialectRegistry registry;
68 r1cs::registerAllDialects(registry);
69#if LLZK_WITH_PCL
70 pcl::registerAllDialects(registry);
71#endif // LLZK_WITH_PCL
72
80
81#if LLZK_WITH_PCL
82 pcl::registerTransformationPasses();
83#endif // LLZK_WITH_PCL
84
85 // Register and parse command line options.
86 std::string inputFilename, outputFilename;
87 std::tie(inputFilename, outputFilename) =
88 registerAndParseCLIOptions(argc, argv, "llzk-opt", registry);
89
90 if (PrintAllOps) {
91 mlir::MLIRContext context;
92 context.appendDialectRegistry(registry);
93 context.loadAllAvailableDialects();
94 llvm::outs() << "All ops registered in LLZK IR: {\n";
95 for (const auto &opName : context.getRegisteredOperations()) {
96 llvm::outs().indent(2) << opName.getStringRef() << '\n';
97 }
98 llvm::outs() << "}\n";
99 return EXIT_SUCCESS;
100 }
101
102 // Set the include directories from CL option
103 if (mlir::failed(llzk::GlobalSourceMgr::get().setup(IncludeDirs))) {
104 return EXIT_FAILURE;
105 }
106
107 // Run 'mlir-opt'
108 auto result = mlir::MlirOptMain(argc, argv, inputFilename, outputFilename, registry);
109 return mlir::asMainReturnCode(result);
110}
#define LLZK_VERSION_STRING
Definition Config.h:12
#define LLZK_URL
Definition Config.h:17
static GlobalSourceMgr & get()
#define BUG_REPORT_URL
Definition config.h:14
int main(int argc, char **argv)
Definition llzk-opt.cpp:54
This file defines llzk::registerAllDialects.
void registerTransformationPasses()
void registerTransformationPasses()
void registerTransformationPassPipelines()
void registerValidationPasses()
void registerAllDialects(mlir::DialectRegistry &registry)
void registerAnalysisPasses()