mirror of
https://github.com/circify/circ.git
synced 2026-01-22 12:07:55 -05:00
The ZoKrates front-end now represents ZoK arrays as IR arrays, and ZoK structures as (type-tagged) IR tuples.
During this change, I discovered that IR support for eliminating tuples and arrays was not complete.
Thus the change list is:
The ZoK front-end uses IR arrays and tuples
Improve IR passes for array and tuple elimination
Enforce cargo fmt in CI
Bugfix: handle ZoK accessors in L-values in the correct order
Bugfix: add array evaluation to the IR
This PR does not:
implement an array flattening pass
implement permutation-based memory-checking
Benefits:
The ZoK->R1CS compiler is now ~5.88x faster (as defined by the time it takes to run the tests in master's scripts/zokrates_test.zsh script: this goes from 8.59s to 1.46s)
For benchmarks with multi-dimensional arrays, the ZoK->R1CS compiler can now compile them with reasonable speed. Before it it would time out on even tiny examples.
The ZoK->R1CS compiler will be able to benefit from future memory-checking improvements
IR support for arrays and tuples is complete now, making those parts of the IR more accessible to future front-ends.
alex-ozdemir added 21 commits 11 days ago
31 lines
1.3 KiB
Bash
Executable File
31 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
|
|
set -ex
|
|
|
|
disable -r time
|
|
|
|
cargo build --example circ
|
|
|
|
BIN=./target/debug/examples/circ
|
|
|
|
$BIN --language datalog ./examples/datalog/parse_test/one_rule.pl r1cs --action count || true
|
|
$BIN --language datalog ./examples/datalog/inv.pl r1cs --action count || true
|
|
$BIN --language datalog ./examples/datalog/call.pl r1cs --action count || true
|
|
$BIN --language datalog ./examples/datalog/arr.pl r1cs --action count || true
|
|
# Small R1cs b/c too little recursion.
|
|
size=$(($BIN --language datalog ./examples/datalog/dumb_hash.pl -r 4 r1cs --action count || true) | egrep "Final R1cs size:" | egrep -o "\\b[0-9]+")
|
|
[ "$size" -lt 10 ]
|
|
|
|
# Big R1cs b/c enough recursion
|
|
size=$(($BIN --language datalog ./examples/datalog/dumb_hash.pl -r 5 r1cs --action count || true) | egrep "Final R1cs size:" | egrep -o "\\b[0-9]+")
|
|
[ "$size" -gt 250 ]
|
|
size=$(($BIN --language datalog ./examples/datalog/dumb_hash.pl -r 10 r1cs --action count || true) | egrep "Final R1cs size:" | egrep -o "\\b[0-9]+")
|
|
[ "$size" -gt 250 ]
|
|
size=$(($BIN --language datalog ./examples/datalog/dec.pl -r 2 r1cs --action count || true) | egrep "Final R1cs size:" | egrep -o "\\b[0-9]+")
|
|
[ "$size" -gt 250 ]
|
|
|
|
# Test prim-rec test
|
|
$BIN --language datalog ./examples/datalog/dec.pl --lint-prim-rec smt
|
|
|
|
($BIN --language datalog ./examples/datalog/not_dec.pl --lint-prim-rec smt || true) | egrep 'Not prim'
|