Conversation
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: da6281c | Previous: 585175e | Ratio |
|---|---|---|---|
test_report_AztecProtocol_aztec-packages_noir-projects_noir-protocol-circuits_crates_blob |
229 s |
180 s |
1.27 |
test_report_zkpassport_noir-ecdsa_ |
2 s |
1 s |
2 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
|
There seems to be a bug in the handling of
The following is a rundown of the b0(v0: u1): // flatten: args_stack = []
jmpif v0 then: b1, else: b2 // hndl_trm: push(args_stack = [], args = []) -> [[]]
b1(): // inln_blk: pop (args_stack = [[]]) -> ([], Some([]))
jmp b3(Field 3) // hndl_trm: push(args_stack = [], args = [3]) -> [[3]]
b2(): // inln_blk: pop (args_stack = [[3]]) -> ([], Some([3]))
jmp b3(Field 4) // hndl_trm: push(args_stack = [], args = [4]) -> [[4]]
// brch_end: pop (args_stack = [[4]]) -> ([], Some([4]))
// brch_end: pop (args_stack = []) -> ([], None))
// brch_end: push(args_stack = [v0*3+!v0*4]) -> [[v0*3+!v0*4]]
b3(v1: Field): // inln_blk: pop (args_stack = [[v0*3+!v0*4]]) -> ([], Some([[v0*3+!v0*4]]))
return v1So the else block consumes the arguments pushed by the then branch and treats it as its own, which is surely not correct. However, it doesn't have parameters, so this is not causing any issues, and in the end it actually looks up the arguments of the then terminator, to do the merge, at which point those values are already in the inserter. The else handler pops two items from the arguments stack, which doesn't seem correct either, but because it always pushes one argument, the exit block will always see something. I simplified this by replacing the |
76d5366 to
75f24f6
Compare
Changes to circuit sizes
🧾 Summary (10% most significant diffs)
Full diff report 👇
|
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Compilation Time'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 3b97880 | Previous: 585175e | Ratio |
|---|---|---|---|
private-kernel-reset |
9.914 s |
7.716 s |
1.28 |
This comment was automatically generated by workflow using github-action-benchmark.
CC: @TomAFrench
|
On thing I forgot to touch on in the end was that |
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: remove duplicated frontend tests (noir-lang/noir#9706) chore: remove playwright workaround (noir-lang/noir#9704) fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700) chore: show which type is invalid as program input (noir-lang/noir#9701) chore: bump deps (noir-lang/noir#9698) chore: bump external pinned commits (noir-lang/noir#9693) chore(licm): Break things up further in LICM (noir-lang/noir#9683) chore(docs): spinning out bb docs (noir-lang/noir#9402) fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685) chore: add extra bitshifts tests (noir-lang/noir#9680) feat: Propagate purities using SCCs (noir-lang/noir#9672) chore: break `NodeInterner` into chunks (noir-lang/noir#9674) fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673) feat: hoist safe casts from loops (noir-lang/noir#9645) chore: fix clippy warnings (noir-lang/noir#9675) chore(ssa): Refactor flattening (noir-lang/noir#9663) chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668) chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670) fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664) chore: add tests for bounded_vec (noir-lang/noir#9576) chore: redact debug info and file maps from snapshots (noir-lang/noir#9666) chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665) feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659) END_COMMIT_OVERRIDE Co-authored-by: Tom French <15848336+TomAFrench@users.noreply.github.com>
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: remove duplicated frontend tests (noir-lang/noir#9706) chore: remove playwright workaround (noir-lang/noir#9704) fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700) chore: show which type is invalid as program input (noir-lang/noir#9701) chore: bump deps (noir-lang/noir#9698) chore: bump external pinned commits (noir-lang/noir#9693) chore(licm): Break things up further in LICM (noir-lang/noir#9683) chore(docs): spinning out bb docs (noir-lang/noir#9402) fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685) chore: add extra bitshifts tests (noir-lang/noir#9680) feat: Propagate purities using SCCs (noir-lang/noir#9672) chore: break `NodeInterner` into chunks (noir-lang/noir#9674) fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673) feat: hoist safe casts from loops (noir-lang/noir#9645) chore: fix clippy warnings (noir-lang/noir#9675) chore(ssa): Refactor flattening (noir-lang/noir#9663) chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668) chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670) fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664) chore: add tests for bounded_vec (noir-lang/noir#9576) chore: redact debug info and file maps from snapshots (noir-lang/noir#9666) chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665) feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659) END_COMMIT_OVERRIDE
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: remove duplicated frontend tests (noir-lang/noir#9706) chore: remove playwright workaround (noir-lang/noir#9704) fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700) chore: show which type is invalid as program input (noir-lang/noir#9701) chore: bump deps (noir-lang/noir#9698) chore: bump external pinned commits (noir-lang/noir#9693) chore(licm): Break things up further in LICM (noir-lang/noir#9683) chore(docs): spinning out bb docs (noir-lang/noir#9402) fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685) chore: add extra bitshifts tests (noir-lang/noir#9680) feat: Propagate purities using SCCs (noir-lang/noir#9672) chore: break `NodeInterner` into chunks (noir-lang/noir#9674) fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673) feat: hoist safe casts from loops (noir-lang/noir#9645) chore: fix clippy warnings (noir-lang/noir#9675) chore(ssa): Refactor flattening (noir-lang/noir#9663) chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668) chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670) fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664) chore: add tests for bounded_vec (noir-lang/noir#9576) chore: redact debug info and file maps from snapshots (noir-lang/noir#9666) chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665) feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659) END_COMMIT_OVERRIDE
Automated pull of nightly from the [noir](https://github.com/noir-lang/noir) programming language, a dependency of Aztec. BEGIN_COMMIT_OVERRIDE chore: remove duplicated frontend tests (noir-lang/noir#9706) chore: remove playwright workaround (noir-lang/noir#9704) fix(licm): Use `Loop::header` in `Loop::is_fully_executed` (noir-lang/noir#9700) chore: show which type is invalid as program input (noir-lang/noir#9701) chore: bump deps (noir-lang/noir#9698) chore: bump external pinned commits (noir-lang/noir#9693) chore(licm): Break things up further in LICM (noir-lang/noir#9683) chore(docs): spinning out bb docs (noir-lang/noir#9402) fix(ssa)!: Signed shift overflow checks rhs < bit_size (noir-lang/noir#9685) chore: add extra bitshifts tests (noir-lang/noir#9680) feat: Propagate purities using SCCs (noir-lang/noir#9672) chore: break `NodeInterner` into chunks (noir-lang/noir#9674) fix(formatter): don't revert indentation increase after popping it (noir-lang/noir#9673) feat: hoist safe casts from loops (noir-lang/noir#9645) chore: fix clippy warnings (noir-lang/noir#9675) chore(ssa): Refactor flattening (noir-lang/noir#9663) chore(ssa): Greenlight `brillig_entry_points` and switch to centralized CallGraph (noir-lang/noir#9668) chore: add two mem2reg regression tests where references are returned (noir-lang/noir#9670) fix(mem2reg): reuse existing expression and add missing alias (noir-lang/noir#9664) chore: add tests for bounded_vec (noir-lang/noir#9576) chore: redact debug info and file maps from snapshots (noir-lang/noir#9666) chore: pull out interpreter binary evaluation logic into pure functions (noir-lang/noir#9665) feat: brillig functions can be pure if they are not entry points (noir-lang/noir#9659) END_COMMIT_OVERRIDE
Description
Problem*
Trying to improve clarity for the audit.
Summary*
WorkListwhich maintains a separate stack and set of blocks, to avoid O(n) inclusion checks for deeply nested branching.arguments_stack: Vec<_>withnext_arguments: Option<_>to get rid of a bug that did not manifest itself in practice, but didn't make any sense either (see below).handle_instruction_side_effectsto make it easier to see what it does with calls/intrinsics/blackbox functions.handle_*_side_effectsexhaustive so we don't miss handling any new instruction/intrinsic.ConstrainNotEquala pre-condition.local_allocationsfrom thethen_branchto theelse_branchand then back to the previous context so that we don't pass out theelse_branchallocations, but rather restore what was before. The effect is that some loading of previous reference values can be saved, where we are storing to references allocated on a branch before a nested branch made it forget its history. Added test to demonstrate.Additional Context
Documentation*
Check one:
PR Checklist*
cargo fmton default settings.