LLZK 3.0.0
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
InlineStructsPass.cpp File Reference

This file implements the -llzk-inline-structs pass. More...

#include "llzk/Dialect/Struct/Transforms/InlineStructsPass.h"
#include "llzk/Analysis/SymbolUseGraph.h"
#include "llzk/Dialect/Constrain/IR/Ops.h"
#include "llzk/Dialect/Felt/IR/Ops.h"
#include "llzk/Dialect/Function/IR/Ops.h"
#include "llzk/Dialect/Polymorphic/IR/Ops.h"
#include "llzk/Dialect/Struct/IR/Ops.h"
#include "llzk/Dialect/Struct/Transforms/TransformationPasses.h"
#include "llzk/Transforms/LLZKConversionUtils.h"
#include "llzk/Util/Debug.h"
#include "llzk/Util/SymbolHelper.h"
#include "llzk/Util/SymbolLookup.h"
#include <mlir/IR/BuiltinOps.h>
#include <mlir/Transforms/InliningUtils.h>
#include <mlir/Transforms/WalkPatternRewriteDriver.h>
#include <llvm/ADT/DenseMap.h>
#include <llvm/ADT/SmallPtrSet.h>
#include <llvm/ADT/SmallVector.h>
#include <llvm/ADT/StringMap.h>
#include <llvm/ADT/TypeSwitch.h>
#include <llvm/Support/Debug.h>
#include <concepts>
#include <optional>
#include "llzk/Dialect/Struct/Transforms/TransformationPasses.h.inc"
Include dependency graph for InlineStructsPass.cpp:

Go to the source code of this file.

Classes

class  llzk::component::impl::InlineStructsPassBase< DerivedT >

Namespaces

namespace  llzk
namespace  llzk::component
namespace  llzk::component::impl

Concepts

concept  @131302103075115236161030145331006346253030210005::HasContainsOp

Macros

#define GEN_PASS_DEF_INLINESTRUCTSPASS
#define DEBUG_TYPE   "llzk-inline-structs"

Functions

std::unique_ptr<::mlir::Pass > llzk::component::impl::createInlineStructsPass ()
std::unique_ptr<::mlir::Pass > llzk::component::impl::createInlineStructsPass (InlineStructsPassOptions options)
std::unique_ptr<::mlir::Pass > llzk::component::createInlineStructsPass ()
std::unique_ptr<::mlir::Pass > llzk::component::createInlineStructsPass (InlineStructsPassOptions options)
LogicalResult performInlining (SymbolTableCollection &tables, InliningPlan &plan)
 Execute the inlining plan one caller struct at a time, accumulating per-callee member replacement maps and then finalizing each caller after all requested callees have been inlined.

Detailed Description

This file implements the -llzk-inline-structs pass.

This pass should be run after llzk-flatten to ensure structs do not have template parameters (this restriction may be removed in the future).

This pass also assumes that all subcomponents that are created by calling a struct "@compute" function are ultimately written to exactly one member within the current struct.

Definition in file InlineStructsPass.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "llzk-inline-structs"

Definition at line 61 of file InlineStructsPass.cpp.

◆ GEN_PASS_DEF_INLINESTRUCTSPASS

#define GEN_PASS_DEF_INLINESTRUCTSPASS

Definition at line 51 of file InlineStructsPass.cpp.

Function Documentation

◆ performInlining()

LogicalResult performInlining ( SymbolTableCollection & tables,
InliningPlan & plan )

Execute the inlining plan one caller struct at a time, accumulating per-callee member replacement maps and then finalizing each caller after all requested callees have been inlined.

Definition at line 907 of file InlineStructsPass.cpp.