Releases: project-llzk/llzk-lib
Releases · project-llzk/llzk-lib
v2.0.0
v2.0.0 - 2026-04-10
Added
- Interval analysis support for
arith.select,arith.xori,felt.uintdiv,felt.sintdiv, andfelt.bit_or - Interval analysis support for
array.new, including empty-array roots and explicit element initializers - Interval analysis support for
array.writeso laterarray.readoperations can reuse written intervals - Support for
booldialect operators topclboolean ops --llzk-enforce-no-overwritepass to detect possible struct member overwrites and possible uninstantiated struct membersCallOp::unifyTypeSignature()methodpodTypesUnify()andfunctionTypesUnify()functions inTypeHelperpoly.template,poly.param, andpoly.exprops- Folding implementation for
boolandfeltoperations - Functions to query symbol uses within types
- Automatic IR migration from version 1.x.x to 2.0.0
- CAPI:
llzkStruct_StructDefOpGetTemplateParamOpNamesllzkStruct_StructDefOpGetNumTemplateParamOpNamesllzkStruct_StructDefOpGetTemplateExprOpNamesllzkStruct_StructDefOpGetNumTemplateExprOpNamesllzkOperationIsA_Poly_TemplateOpllzkPoly_TemplateOpBuildllzkPoly_TemplateOpGetSymNamellzkPoly_TemplateOpSetSymNamellzkPoly_TemplateOpGetBodyllzkPoly_TemplateOpGetBodyRegionllzkPoly_TemplateOpHasConstParamOpsllzkPoly_TemplateOpNumConstParamOpsllzkPoly_TemplateOpGetConstParamNamesllzkPoly_TemplateOpHasConstParamNamedllzkPoly_TemplateOpHasConstExprOpsllzkPoly_TemplateOpNumConstExprOpsllzkPoly_TemplateOpGetConstExprNamesllzkPoly_TemplateOpHasConstExprNamedllzkOperationIsA_Poly_TemplateExprOpllzkPoly_TemplateExprOpBuildllzkPoly_TemplateExprOpGetSymNamellzkPoly_TemplateExprOpSetSymNamellzkPoly_TemplateExprOpGetInitializerRegionllzkPoly_TemplateExprOpGetTypellzkOperationIsA_Poly_TemplateParamOpllzkPoly_TemplateParamOpBuildllzkPoly_TemplateParamOpGetSymNamellzkPoly_TemplateParamOpSetSymNamellzkPoly_TemplateParamOpGetTypeOptllzkPoly_TemplateParamOpSetTypeOptllzkOperationIsA_Poly_YieldOpllzkPoly_YieldOpBuildllzkPoly_YieldOpGetValllzkPoly_YieldOpSetValllzkFelt_FeltTypeGetFromRefllzkFelt_FeltConstAttrGetInField(use in place of oldllzkFelt_FeltConstAttrGet)llzkFelt_FeltConstAttrGetWithBitsInField(use in place of oldllzkFelt_FeltConstAttrGetWithBits)llzkFelt_FeltConstAttrGetFromStringInField(use in place of oldllzkFelt_FeltConstAttrGetFromString)llzkFelt_FeltConstAttrGetFromPartsInField(use in place of oldllzkFelt_FeltConstAttrGetFromParts)
Changed
- Augment SourceRef API
- Changed field detection logic in IntervalAnalysis
- Clarify
felt.divin documentation and interval analysis - FeltConstAttr now directly stores the FeltType rather than field name as a StringAttr
- FeltConstAttr syntax changed from
felt.const N <FIELD_NAME>tofelt.const N : !felt.type<FIELD_NAME> - Rename
CallOp::getCalleeType()method toCallOp::getTypeSignature()to clarify it's not computed from the callee - Rename
llzk-drop-empty-paramspass tollzk-drop-empty-templatesand adapt it to newpoly.templateop - Replace constant parameters on
struct.defwithpoly.templatepluspoly.paramops - Subcomponent members (i.e.,
struct.members ofstruct.type) can no longer be marked assignal - Update
ModuleBuilderto supportpoly.templateand nested module building - Updated
--llzk-validate-member-writespass to correctly handle control flow - Refactor
llzk::getParentOfType()to return nullable pointer instead of FailureOr and also check for null input - Version number updated to 2.0.0
- CAPI:
llzkStruct_StructDefOpBuildno longer hasMlirAttributeparameter- Replaced
llzkStruct_StructDefOpHasConstParamsAttrwithllzkStruct_StructDefOpHasTemplateSymbolBindings - Renamed
llzkStruct_MemberReadOpBuildWithConstParamDistancetollzkStruct_MemberReadOpBuildWithTemplateSymbolDistance - Changed last parameter of
llzkFelt_FeltConstAttrGetfromMlirIdentifiertoMlirType - Changed last parameter of
llzkFelt_FeltConstAttrGetWithBitsfromMlirIdentifiertoMlirType - Changed last parameter of
llzkFelt_FeltConstAttrGetFromStringfromMlirIdentifiertoMlirType - Changed last parameter of
llzkFelt_FeltConstAttrGetFromPartsfromMlirIdentifiertoMlirType - Rename
llzkFunction_CallOpGetCalleeTypetollzkFunction_CallOpGetTypeSignature
Fixed
- Bugs causing product program alignment to crash on the circom benchmarks
- Don't build PCL unit tests when PCL is disabled
- Fixed nondeterministic output bug in interval analysis
- Fixed translation of
bool.cmp neop to PCL - Handle
llzk.nondetops inllzk-to-pcl - Header files of backends are now installed in the final
includedirectory - Interval analysis lookup bug
- Remove
ConstantLikeandPuretraits fromllzk.nondet - Support
llzk.nondetop in SourceRef, Interval lattices - Treat external
function.callresults as SourceRef roots so accesses through external-call returned values remain trackable in SourceRef-based analyses - Updated
signalattribute documentation - Duplicate symbols sometimes caused assertion failure instead of producing an error diagnostic
- Fix bug that allowed parameterized callee to target a function other than a struct function
- Lower benefit of
GeneralTypeReplacePatternand similar default patterns to 0 to avoid possible ordering bug, specifically onFuncDefOpwith pattern frompopulateFunctionOpInterfaceTypeConversionPattern() - Missing nullptr check in
pod.newtype verifier
Removed
computeReachable()andconstrainReachable()functions from ModuleBuilder- meaningless
add_dependenciesfrom cmake config files - CAPI:
llzkStruct_StructDefOpGetConstParamsllzkStruct_StructDefOpSetConstParamsllzkStruct_StructDefOpHasParamName- use properllzkPoly_TemplateOp*instead
v1.1.5
v1.1.5 - 2026-03-05
Fixed
- ensure versioned doc pages are stored in version-specific folders on gh-pages branch
v1.1.4
v1.1.4 - 2026-03-05
Fixed
- ensure versioned doc pages are stored in version-specific folders on gh-pages branch
v1.1.3
v1.1.3 - 2026-03-05
Changed
- CI:
- support required checks on the repo
- add test result comments to PRs
- remove job timeouts
Fixed
- documentation github pages deployment failed on release commits
v1.1.2
v1.1.2 - 2026-03-04
Fixed
- a couple more issues with setting the version number properly
v1.1.1
v1.1.1 - 2026-03-04
Fixed
- properly update version number
v1.1.0
v1.1.0 - 2026-03-03
Added
- CAPI:
- Added function that generates the PCL lisp representation of a circuit.
Fixed
- Release workflow
v1.0.0
v1.0.0 - 2026-03-02
Added
- LLZK IR:
- core dialects
- common helper classes and functions for working with LLZK IR
- unit tests and lit tests
- documentation pages
- Passes:
- Analysis:
- "
llzk-print-call-graph- Print the call graph" - "
llzk-print-call-graph-sccs- Print Strongly Connected Components in the call graph" - "
llzk-print-constraint-dependency-graphs- Print constraint dependency graph for all LLZK structs" - "
llzk-print-interval-analysis- Print interval analysis results for all LLZK structs" - "
llzk-print-symbol-def-tree- Print symbol definition tree" - "
llzk-print-symbol-use-graph- Print symbol use graph" - "
llzk-print-predecessors- Print the predecessors of all operations"
- "
- Transformation:
- "
llzk-array-to-scalar- Replace arrays with scalar values" - "
llzk-inline-includes- Replace all IncludeOp with contents of the referenced file" - "
llzk-drop-empty-params- Remove empty struct parameter lists" - "
llzk-flatten- Flatten structs (i.e. replace parameterized with instantiated) and unroll loops" - "
llzk-duplicate-read-write-elim- Remove redundant reads and writes" - "
llzk-duplicate-op-elim- Remove redundant arith operations" - "
llzk-unused-declaration-elim- Remove unused member and struct declarations" - "
llzk-poly-lowering-pass- Lowers the degree of all polynomial equations to a specified maximum" - "
llzk-inline-structs- Inline nested structs (i.e., subcomponents)" - "
llzk-compute-constrain-to-product- Replace @compute/@Constrain with @Product function" - "
llzk-fuse-product-loops- Fuse matching witness/constraint loops in a @Product function"
- "
- Conversion:
- "
llzk-to-pcl- Rewrite constraints to be compatible with PCL constraints" - "
llzk-r1cs-lowering- Rewrite constraints to be compatible with R1CS constraints" - "
convert-llzk-to-zklean- Convert LLZK structs and constraints to ZKLean IR" - "
convert-zklean-to-llzk- Convert ZKLean IR back to LLZK structs and constraints" - "
zklean-pretty-print- Pretty-print zkLean dialect IR as Lean code"
- "
- Validation:
- "
llzk-validate-member-writes- Detect multiple and missing writes to the same member of a component"
- "
- Analysis:
- llzk-tblgen tool that generates C API for llzk library and linking unit tests for it
- CAPI for LLZK IR and passes
- Backends:
- r1cs
- zklean
- pcl